Merge "Simplify DatabaseBase::tableName()"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 22 Jan 2013 23:51:37 +0000 (23:51 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 22 Jan 2013 23:51:37 +0000 (23:51 +0000)
935 files changed:
.gitignore
.jshintignore
.jshintrc
CREDITS
HISTORY
RELEASE-NOTES-1.20 [deleted file]
RELEASE-NOTES-1.21
UPGRADE
bin/ulimit4.sh [deleted file]
bin/ulimit5.sh [new file with mode: 0644]
docs/hooks.txt
img_auth.php
includes/Action.php
includes/AjaxResponse.php
includes/ArrayUtils.php [new file with mode: 0644]
includes/Article.php
includes/AutoLoader.php
includes/BacklinkCache.php [deleted file]
includes/Block.php
includes/Category.php
includes/CategoryPage.php
includes/CategoryViewer.php
includes/Categoryfinder.php
includes/ChangesList.php
includes/ConfEditor.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/ExternalStore.php [deleted file]
includes/ExternalStoreDB.php [deleted file]
includes/ExternalStoreHttp.php [deleted file]
includes/Fallback.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/Linker.php
includes/LinksUpdate.php
includes/LocalisationCache.php [deleted file]
includes/MagicWord.php
includes/Message.php
includes/MessageBlobStore.php
includes/Metadata.php
includes/Namespace.php
includes/OutputHandler.php
includes/OutputPage.php
includes/Preferences.php
includes/ProtectionForm.php
includes/QueryPage.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/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/Status.php
includes/StringUtils.php
includes/Timestamp.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/ViewCountUpdate.php
includes/WatchedItem.php
includes/WebRequest.php
includes/Wiki.php
includes/WikiPage.php
includes/Xml.php
includes/ZhConversion.php
includes/actions/DeleteAction.php
includes/actions/EditAction.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/ProtectAction.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/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/BacklinkCache.php [new file with mode: 0644]
includes/cache/HTMLCacheUpdate.php
includes/cache/LocalisationCache.php [new file with mode: 0644]
includes/cache/MessageCache.php
includes/cache/ProcessCacheLRU.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 [new file with mode: 0644]
includes/db/Database.php
includes/db/DatabaseMysql.php
includes/db/DatabaseOracle.php
includes/db/IORMTable.php
includes/db/LoadBalancer.php
includes/db/ORMRow.php
includes/db/ORMTable.php
includes/diff/DairikiDiff.php
includes/diff/DifferenceEngine.php
includes/externalstore/ExternalStore.php [new file with mode: 0644]
includes/externalstore/ExternalStoreDB.php [new file with mode: 0644]
includes/externalstore/ExternalStoreHttp.php [new file with mode: 0644]
includes/filebackend/FSFile.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/FileOpBatch.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filebackend/lockmanager/LSLockManager.php
includes/filebackend/lockmanager/LockManager.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filebackend/lockmanager/ScopedLock.php [new file with mode: 0644]
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/UnregisteredLocalFile.php
includes/installer/DatabaseUpdater.php
includes/installer/Ibm_db2Installer.php
includes/installer/Installer.i18n.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/SqliteUpdater.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 [new file with mode: 0644]
includes/job/jobs/EnotifNotifyJob.php
includes/job/jobs/HTMLCacheUpdateJob.php
includes/job/jobs/NullJob.php
includes/job/jobs/RefreshLinksJob.php
includes/json/FormatJson.php
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/LogPager.php
includes/media/DjVu.php
includes/media/DjVuImage.php
includes/media/MediaHandler.php
includes/media/MediaTransformOutput.php
includes/media/SVG.php
includes/mime.types
includes/mobile/DeviceDetection.php [deleted file]
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/MultiWriteBagOStuff.php
includes/objectcache/ObjectCache.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php
includes/objectcache/XCacheBagOStuff.php
includes/parser/CoreParserFunctions.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/Parser_LinkHooks.php
includes/parser/Preprocessor.php
includes/parser/Tidy.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimpleText.php
includes/profiler/ProfilerSimpleTrace.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/search/SearchEngine.php
includes/search/SearchUpdate.php
includes/site/MediaWikiSite.php
includes/site/SiteArray.php
includes/site/SiteObject.php
includes/site/Sites.php
includes/site/SitesTable.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialListusers.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialUncategorizedcategories.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/tidy.conf
includes/upload/AssembleUploadChunks.php [new file with mode: 0644]
includes/upload/PublishStashedFile.php [new file with mode: 0644]
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadFromStash.php
includes/upload/UploadFromUrl.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/Names.php
languages/classes/LanguageGan.php
languages/classes/LanguageHe.php
languages/classes/LanguageIu.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/classes/LanguageShi.php
languages/classes/LanguageSr.php
languages/classes/LanguageZh.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 [new file with mode: 0644]
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/MessagesBqi.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCh.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCps.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCsb.php
languages/messages/MessagesCu.php
languages/messages/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_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGlk.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/MessagesKsh.php
languages/messages/MessagesKu_arab.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/MessagesNan.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/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]
languages/utils/CLDRPluralRuleEvaluator.php
maintenance/Maintenance.php
maintenance/archives/patch-job_attempts.sql [new file with mode: 0644]
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-uploadstash-us_props.sql [new file with mode: 0644]
maintenance/archives/patch-user_former_groups.sql
maintenance/backupTextPass.inc
maintenance/benchmarks/bench_wfBaseConvert.php [new file with mode: 0644]
maintenance/checkAutoLoader.php [deleted file]
maintenance/cleanupPreferences.php [changed mode: 0755->0644]
maintenance/cleanupUploadStash.php
maintenance/convertUserOptions.php
maintenance/copyFileBackend.php
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/fixDoubleRedirects.php
maintenance/fixSlaveDesync.php
maintenance/fuzz-tester.php
maintenance/importImages.inc
maintenance/importImages.php
maintenance/language/StatOutputs.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/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/populateFilearchiveSha1.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/postgres/archives/patch-ipb_address_unique.sql [deleted file]
maintenance/purgeList.php
maintenance/rebuildLocalisationCache.php
maintenance/rebuildtextindex.php
maintenance/refreshFileHeaders.php [new file with mode: 0644]
maintenance/refreshLinks.php
maintenance/removeUnusedAccounts.php
maintenance/renderDump.php
maintenance/runJobs.php
maintenance/showJobs.php
maintenance/sqlite/archives/patch-profiling.sql [new file with mode: 0644]
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/moveToExternal.php
maintenance/tables.sql
maintenance/update.php
maintenance/updateSpecialPages.php
maintenance/upgrade1_5.php [deleted file]
profileinfo.php
resources/Resources.php
resources/jquery/jquery.arrowSteps.js
resources/jquery/jquery.badge.css
resources/jquery/jquery.badge.js
resources/jquery/jquery.byteLimit.js
resources/jquery/jquery.checkboxShiftClick.js
resources/jquery/jquery.client.js
resources/jquery/jquery.collapsibleTabs.js
resources/jquery/jquery.colorUtil.js
resources/jquery/jquery.expandableField.js
resources/jquery/jquery.hidpi.js
resources/jquery/jquery.highlightText.js
resources/jquery/jquery.js
resources/jquery/jquery.json.js
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.mw-jump.js
resources/jquery/jquery.mwExtension.js
resources/jquery/jquery.qunit.completenessTest.js
resources/jquery/jquery.suggestions.js
resources/jquery/jquery.tablesorter.js
resources/jquery/jquery.textSelection.js
resources/mediawiki.action/mediawiki.action.edit.js
resources/mediawiki.action/mediawiki.action.edit.preview.js
resources/mediawiki.action/mediawiki.action.history.diff.css
resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js
resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki.language/languages/bs.js
resources/mediawiki.language/languages/dsb.js
resources/mediawiki.language/languages/fi.js
resources/mediawiki.language/languages/ga.js
resources/mediawiki.language/languages/he.js
resources/mediawiki.language/languages/hsb.js
resources/mediawiki.language/languages/hu.js
resources/mediawiki.language/languages/hy.js
resources/mediawiki.language/languages/la.js
resources/mediawiki.language/languages/os.js
resources/mediawiki.language/languages/ru.js
resources/mediawiki.language/languages/sl.js
resources/mediawiki.language/languages/uk.js
resources/mediawiki.language/mediawiki.cldr.js
resources/mediawiki.language/mediawiki.language.init.js
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki.page/mediawiki.page.patrol.ajax.js [new file with mode: 0644]
resources/mediawiki.page/mediawiki.page.ready.js
resources/mediawiki.page/mediawiki.page.watch.ajax.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.javaScriptTest.js
resources/mediawiki.special/mediawiki.special.js
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/mediawiki.Title.js
resources/mediawiki/mediawiki.Uri.js
resources/mediawiki/mediawiki.feedback.js
resources/mediawiki/mediawiki.hidpi.js
resources/mediawiki/mediawiki.htmlform.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.jqueryMsg.peg
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.notification.js
resources/mediawiki/mediawiki.util.js
resources/startup.js
skins/Chick.php
skins/CologneBlue.php
skins/Modern.php
skins/MonoBook.php
skins/Nostalgia.php
skins/Standard.php
skins/Vector.php
skins/cologneblue/screen.css
skins/common/commonPrint.css
skins/common/shared.css
skins/modern/main.css
skins/monobook/main.css
skins/simple/main.css
skins/vector/screen.css
skins/vector/vector.js
tests/TestsAutoLoader.php
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parserTests.php
tests/phpunit/AutoLoaderTest.php [new file with mode: 0644]
tests/phpunit/Makefile
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/StructureTest.php
tests/phpunit/includes/ArticleTest.php
tests/phpunit/includes/DiffHistoryBlobTest.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfBaseConvertTest.php [new file with mode: 0644]
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/LanguageConverterTest.php
tests/phpunit/includes/LinkerTest.php [new file with mode: 0644]
tests/phpunit/includes/LinksUpdateTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/OutputPageTest.php [new file with mode: 0644]
tests/phpunit/includes/PreferencesTest.php
tests/phpunit/includes/RecentChangeTest.php
tests/phpunit/includes/RequestContextTest.php [new file with mode: 0644]
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/SampleTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/StringUtilsTest.php [new file with mode: 0644]
tests/phpunit/includes/TemplateCategoriesTest.php
tests/phpunit/includes/TimeAdjustTest.php
tests/phpunit/includes/TimestampTest.php
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/XmlSelectTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/api/ApiAccountCreationTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiEditPageTest.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 [new file with mode: 0644]
tests/phpunit/includes/api/ApiQueryTest.php
tests/phpunit/includes/api/ApiTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/api/PrefixUniquenessTest.php
tests/phpunit/includes/api/format/ApiFormatPhpTest.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/content/JavaScriptContentTest.php [new file with mode: 0644]
tests/phpunit/includes/content/JavascriptContentTest.php [deleted file]
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/content/WikitextContentTest.php
tests/phpunit/includes/db/DatabaseSQLTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/ORMRowTest.php
tests/phpunit/includes/db/ORMTableTest.php [new file with mode: 0644]
tests/phpunit/includes/db/TestORMRowTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/libs/GenericArrayObjectTest.php
tests/phpunit/includes/logging/LogFormatterTest.php [new file with mode: 0755]
tests/phpunit/includes/logging/LogTests.i18n.php [new file with mode: 0755]
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/mobile/DeviceDetectionTest.php [deleted file]
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/NewParserTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/search/SearchEngineTest.php
tests/phpunit/includes/site/SiteArrayTest.php
tests/phpunit/includes/site/SiteObjectTest.php
tests/phpunit/includes/upload/UploadFromUrlTest.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/LanguageHeTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/maintenance/MaintenanceTest.php
tests/phpunit/maintenance/backup_PageTest.php
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/data/callMwLoaderTestCallback.js
tests/qunit/data/generateJqueryMsgData.php
tests/qunit/data/mediawiki.jqueryMsg.data.js
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js
tests/qunit/suites/resources/jquery/jquery.byteLength.test.js
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/qunit/suites/resources/jquery/jquery.client.test.js
tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js
tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js
tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js
tests/qunit/suites/resources/jquery/jquery.hidpi.test.js
tests/qunit/suites/resources/jquery/jquery.highlightText.test.js
tests/qunit/suites/resources/jquery/jquery.localize.test.js
tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js
tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/jquery/jquery.textSelection.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/testHelpers.inc
thumb.php

index 7f1ac5e..004ecf4 100644 (file)
@@ -1,6 +1,9 @@
 # Repository management
 .svn
 
+# git-deploy status file:
+/.deploy
+
 # Editors
 *.kate-swp
 *~
@@ -31,6 +34,9 @@ AdminSettings.php
 LocalSettings.php
 StartProfiler.php
 
+# Building & testing
+node_modules/
+
 # Operating systems
 ## Mac OS X
 .DS_Store
index 026eaaa..3869deb 100644 (file)
@@ -1,4 +1,6 @@
-# upstream libs
+# third-party libs
+extensions/
+node_modules/
 resources/jquery/jquery.appear.js
 resources/jquery/jquery.async.js
 resources/jquery/jquery.cycle.all.js
@@ -13,9 +15,13 @@ resources/jquery/jquery.mockjax.js
 resources/jquery/jquery.qunit.js
 resources/jquery/jquery.validate.js
 resources/jquery/jquery.xmldom.js
-resources/jquery.effects
-resources/jquery.tipsy
-resources/jquery.ui
-resources/mediawiki.libs
-tests/jasmine/lib/jasmine-1.0.1/jasmine-html.js
-tests/jasmine/lib/jasmine-1.0.1/jasmine.js
+resources/jquery.effects/
+resources/jquery.tipsy/
+resources/jquery.ui/
+resources/mediawiki.libs/
+
+# legacy scripts
+skins/common/
+
+# github.com/jshint/jshint/issues/729
+tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
index b86ceb5..7fa138d 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -1,20 +1,25 @@
 {
        "predef": [
                "mediaWiki",
+               "jQuery",
                "QUnit"
        ],
 
        "bitwise": true,
+       "camelcase": true,
        "curly": true,
        "eqeqeq": true,
+       "forin": false,
        "immed": true,
        "latedef": true,
        "newcap": true,
        "noarg": true,
        "noempty": true,
        "nonew": true,
+       "quotmark": "single",
        "regexp": false,
        "undef": true,
+       "unused": true,
        "strict": false,
        "trailing": true,
 
@@ -23,7 +28,6 @@
        "multistr": true,
 
        "browser": true,
-       "jquery": true,
 
        "nomen": true,
        "onevar": true
diff --git a/CREDITS b/CREDITS
index 6555b07..a03ad5e 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,9 +86,11 @@ following names for their contribution to the product.
 * Yuri Astrakhan
 
 == Patch Contributors ==
+* Aaron Pramana
 * Agbad
 * Ahmad Sherif
 * Alejandro Mery
+* Alexander Monk
 * Amalthea
 * Amir E. Aharoni
 * Andrew Dunbar
@@ -92,7 +98,9 @@ following names for their contribution to the product.
 * Asier Lostalé
 * Azliq7
 * Bagariavivek
+* Bartosz Dziewoński
 * Beau
+* Benny Situ
 * Bergi
 * Borislav Manolov
 * Brad Jorsch
@@ -100,6 +108,7 @@ following names for their contribution to the product.
 * Brianna Laugher
 * Carlin
 * Carsten Nielsen
+* Chris Steipp
 * Christian Neubauer
 * Christian Aistleitner
 * Conrad Irwin
@@ -108,28 +117,36 @@ 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
-* Krenair
 * Lee Worden
 * Lejonel
 * liangent
@@ -137,12 +154,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 +191,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
diff --git a/HISTORY b/HISTORY
index ab56b37..8d232f3 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,5 +1,366 @@
 Change notes from older releases. For current info see RELEASE-NOTES-1.21.
 
+== MediaWiki 1.20 ==
+
+=== PHP 5.3 now required ===
+Since 1.20, the lowest supported version of PHP is now 5.3.2. Please
+upgrade PHP if you have not done so prior to upgrading MediaWiki.
+
+=== Configuration changes in 1.20 ===
+* $wgGitRepositoryViewers defines a mapping from Git remote repository to the
+  Gitweb instance URL used in Special:Version.
+* `$wgUsePathInfo = true;` is no longer needed to make $wgArticlePath work on servers
+  using like nginx, lighttpd, and apache over fastcgi. MediaWiki now always extracts
+  path info from REQUEST_URI if it's available.
+* The user right 'upload_by_url' is no longer given to sysops by default.
+  This only affects installations which have $wgAllowCopyUploads set to true.
+* Removed f-prot support from $wgAntivirusSetup.
+* New variable $wgDBerrorLogTZ to provide dates in the error log in a
+  different timezone than the wiki timezone set by $wgLocaltimezone.
+* New variables $wgDBssl and $wgDBcompress to enable SSL and compression for database
+  connections, if either are available for the selected DB type.
+* $wgUseCombinedLoginLink now defaults to false, making MediaWiki output separate
+  login and create account links by default.
+
+=== New features in 1.20 ===
+* Added TitleIsAlwaysKnown hook which gets called when determining if a page exists.
+* Added NamespaceIsMovable hook which gets called when determining if pages in a
+  certain namespace can be moved.
+* Added SpecialPageBeforeExecute hook which gets called before SpecialPage::execute.
+* Added SpecialPageAfterExecute hook which gets called after SpecialPage::execute.
+* Added ORMTable, ORMRow and ORMResult classes for additional abstraction of
+  database interaction.
+* Added CacheHelper and associated SpecialCachedPage and CachedAction helper classes.
+* (bug 32341) Add upload by URL domain limitation.
+* &useskin=default will now always display the default skin. Useful for users with a
+  preference for the non-default skin to look at something using the default skin.
+* (bug 27619) Remove preference option to display broken links as link?
+* (bug 34896) jQuery JSON plugin upgraded to v2.3 (2011-09-17).
+* (bug 34302) Add CSS classes to email fields in user preferences.
+* Introduced $wgDebugDBTransactions to trace transaction status (currently PostgreSQL only).
+* (bug 23795) Add parser itself to ParserMakeImageParams hook.
+* Introduce a cryptographic random number generator source api for use when
+  generating various tokens.
+* (bug 30963) Option on Special:Prefixindex and Special:Allpages to not show redirects.
+* (bug 18062) New message when edit or create the local page of a shared file.
+* (bug 22870) Separate interface message when creating a page.
+* (bug 17615) nosummary option should be reassigned on preview/captcha.
+* (bug 34355) Add a variable and parser function for the namespace number.
+* (bug 35649) Special:Version now shows hashes of extensions checked out from git.
+* (bug 35728) Git revisions are now linked on Special:Version.
+* "Show Changes" on default messages shows now diff against default message text
+* (bug 23006) create #speciale parser function.
+* generateSitemap can now optionally skip redirect pages.
+* (bug 27757) New API command just for retrieving tokens (not page-based).
+* Added GitViewers hook for extensions using external git repositories to have a web-based
+  repository viewer linked to from Special:Version.
+* Memcached debug logs can now be sent to their own file logs by setting
+  $wgDebugLogFile['memcached'] to some filepath.
+* (bug 35685) api.php URL and other entry point URLs are now listed on
+  Special:Version
+* Edit notices can now be translated.
+* jQuery upgraded to 1.8.2.
+* jQuery UI upgraded to 1.8.23.
+* QUnit upgraded from v1.2.0 to v1.10.0.
+* (bug 37604) jquery.cookie upgraded to 2011 version.
+* (bug 22887) Add warning and tracking category for preprocessor errors
+* (bug 31704) Allow selection of associated namespace on the watchlist
+* (bug 5445) Now remove autoblocks when a user is unblocked.
+* Added $wgLogExceptionBacktrace, on by default, to allow logging of exception
+  backtraces.
+* Added device detection for determining device capabilities.
+* QUnit.newMwEnvironment now supports passing a custom setup and/or teardown function.
+  Arguments signature has changed. First arguments is now an options object of which
+  'config' can be a property. Previously 'config' itself was the first and only argument.
+* New getCreator and getOldestRevision methods added to WikiPage class
+* (bug 4220) the XML dump format schema now have unique identity constraints
+  for page and revision identifiers. Patch by Elvis Stansvik.
+* cleanupSpam.php now can delete spam pages if --delete was specified instead of blanking
+  them.
+* Added new hook ChangePasswordForm to allow adding of additional fields in Special:ChangePassword
+* Added new function getDomain to AuthPlugin for getting a user's domain
+* (bug 23427) New magic word {{PAGEID}} which gives the current page ID.
+  Will be null on previewing a page being created.
+* (bug 37627) UserNotLoggedIn() exception to show a generic error page whenever
+  a user is not logged in.
+* Watched status in changes lists are no longer indicated by <strong></strong>
+  tags with class "mw-watched". Instead, each line now has a class
+  "mw-changeslist-line-watched" or "mw-changeslist-line-not-watched", and the
+  title itself is surrounded by <span></span> tags with class "mw-title".
+* Added ContribsPager::reallyDoQuery hook allowing extensions to data to MyContribs
+* Added new hook ParserAfterParse to allow extensions to affect parsed output
+  after the parse is complete but before block level processing, link holder
+  replacement, and so on.
+* (bug 34678) Added InternalParseBeforeSanitize hook which gets called during Parser's
+  internalParse method just before the parser removes unwanted/dangerous HTML tags.
+* Added new hook AfterFinalPageOutput to allow modifications to buffered page output before sent
+  to the client.
+* (bug 36783) Implement jQuery Promise interface in mediawiki.api module.
+* Make dates in sortable tables sort according to the page content language
+  instead of the site content language
+* (bug 37926) Deleterevision will no longer allow users to delete log entries,
+  the new deletelogentry permission is required for this.
+* (bug 14237) Allow PAGESINCATEGORY to distinguish between 'all', 'pages', 'files'
+  and 'subcats'
+* (bug 38362) Make Special:Listuser includeable on wiki pages.
+* Added support in jquery.localize for placeholder attributes.
+* (bug 38151) Implemented mw.user.getRights for getting and caching the current
+  user's user rights.
+* Session storage can now configured independently of general object cache
+  storage, by using $wgSessionCacheType. $wgSessionsInMemcached has been
+  renamed to $wgSessionsInObjectCache, with the old name retained for backwards
+  compatibility. When this feature is enabled, the expiry time can now be
+  configured with $wgObjectCacheSessionExpiry.
+* Added a Redis client for object caching.
+* Implemented mw.user.getGroups for getting and caching user groups.
+* (bug 37830) Added $wgRequirePasswordforEmailChange to control whether password
+  confirmation is required for changing an email address or not.
+* HTMLForm mutators can now be chained (they return $this)
+* A new message, "api-error-filetype-banned-type", is available for formatting
+  API upload errors due to the file extension blacklist.
+* New hook 'ParserTestGlobals' allows to set globals before running parser tests.
+* Allow importing pages as subpage.
+* Add lang and hreflang attributes to language links on Login page.
+* (bug 22749) Create Special:MostInterwikis.
+* Show change tags when transclude Special:Recentchanges(linked) or Special:Newpages.
+* (bug 23226) Add |class= parameter to image links in order to add class(es) to HTML img tag.
+* (bug 39431) SVG animated status is now shown in long description.
+* (bug 39376) jquery.form upgraded to 3.14.
+* SVG files will now show the actual width in the SVG's specified units
+  in the metadata box.
+* Added ResourceLoader module "jquery.jStorage" (v0.3.0, http://jStorage.info/).
+* (bug 39273) Added AJAX support for "Show changes" (diff) in LivePreview.
+* Added ResourceLoader module "jquery.badge".
+* mw.util.$content now points to the overall content area in the skin rather than just
+  page text content area. If you need the old behaviour please use $( '#mw-content-text').
+* jsMessage has been replaced with a floating bubble notification system complete
+  with auto-hide, multi-message support, and message replacement tags.
+* jquery.messageBox which appears to be unused by both core and extensions has
+  been removed.
+* (bug 34939) Made link parsing insensitive ([HttP://]).
+* (bug 40072) Add CSS classes to items in output of ChangesList pages.
+* Added $wgCopyUploadProxy global to define which proxy to use for copy
+  uploads.
+* (bug 40448) mediawiki.legacy.mwsuggest has been replaced with a new module,
+  mediawiki.searchSuggest, based on SimpleSeach from Extension:Vector.
+
+=== Known issues in 1.20.0 ===
+These are issues that we're targeting to be fixed in a later release
+in the 1.20 series.  Issues may be added or removed from this list as
+we see fit.  For now, it is comprised of those bugs on the 1.20.0
+milestone in Bugzilla.
+
+* (bug 35894): Reports of secret key generation "hanging" on windows
+    This is probably a bug that has been fixed in PHP.  If you run
+    into this, try upgrading your PHP.
+* (bug 38334): PHP Notice:  Undefined index: href in /www/w/skins/Vector.php on line 416
+    We think this is a problem in some extension.  If you see this,
+    try disabling your extensions and check out the logging patch on
+    this bug.  Or try this patch:
+    <https://gerrit.wikimedia.org/r/#/c/27937/1/skins/Vector.php>
+* (bug 39268): [Regression] Toolbar inserts in main textarea only (instead of the focussed textarea)
+    This should only be an issue if you are using the ProofreadPage
+    extension.
+* (bug 40641): Clicking "others" in Special:Version asks to download a file
+    If you encounter this, you can tell your webserver to serve the
+    CREDITS file with text/plain MIME type to fix it.
+
+=== Bug fixes in 1.20 ===
+* (bug 40939): [Regression] InfoAction: Call to a member function getUserText() on a non-object
+* (bug 40780): searchsuggest-containing line ("containing...") doesn't include the entered text
+* (bug 37714): [Regression] Incomplete log entries
+* (bug 27202): API: Add timestamp sort to list=allimages
+* (bug 30245) Use the correct way to construct a log page title.
+* (bug 34237) Regenerate an empty user_token and save to the database
+  when we try to set the user's cookies for login.
+* (bug 32210) New edit emails for watched pages always provide a link to the
+  edit which triggered the mail.
+* (bug 12021) Added user talk link on Special:Listusers.
+* (bug 34445) section edit and TOC hide/show links are excluded from selection and
+  copy/paste on supporting browsers.
+* (bug 34428) Fixed incorrect hash mismatch errors in the DiffHistoryBlob
+  history compression method.
+* (bug 34702) Localised parentheses are now used in more special pages.
+* (bug 34723) When editing a script page on a RTL wiki the textbox should be LTR.
+* (bug 34762) Calling close() on a DatabaseBase object now clears the connection.
+* (bug 34863) Show deletion log extract on non-existent file pages if applicable.
+* (bug 28019) Let ?preloadtitle=foo be passed on to target of
+  Special:MyPage and Special:MyTalk.
+* (bug 34929) Show the correct diff when a section edit is rejected by the spam
+  filter.
+* (bug 15816) Add a switch for SETting the search_path (Postgres).
+* (bug 34521) Returning to the previous page after logging in loses any array-
+  valued parameters in the query string.
+* (bug 34735) Updated compressOld.php documentation to mention the different
+  usages of -s and -n parameters depending on compression type.
+* (bug 13896) Rendering of devanagari numbers in automatic '#' number lists.
+* (bug 33689) Upgrade to 1.19 on Postgres fails due to incomplete query when.
+  trying to defer foreign key for externallinks.
+* (bug 32748) Printer friendly version of article decode Unicode chars as a
+  pretty IRI in footer.
+* Removed white border around thumbnails in galleries.
+* (bug 31236) "Next" and "Previous" buttons are shown incorrectly in
+  an RTL environment.
+* (bug 35749) Updated maintenance/checkSyntax.php to use Git instead of
+  Subversion when invoked with the --modified option.
+* (bug 35069) On history pages, the " . . " separator after the number of
+  characters changed in a revision is now suppressed if no text would follow.
+* (bug 18704) Add a unique CSS class or ID to the tagfilter table row at RecentChanges
+* (bug 33564) transwiki import sometimes result in invalid title.
+* (bug 35572) Blocks appear to succeed even if query fails due to wrong DB structure
+* (bug 31757) Add a word-separator between help-messages in HTMLForm
+* (bug 30410) Removed deprecated $wgFilterCallback and the 'filtered' API error.
+* (bug 32604) Some messages needs escaping of wikitext inside username.
+* (bug 36537) Rename wfArrayToCGI to wfArrayToCgi for consistency with wfCgiToArray.
+* (bug 25946) The message on the top of Special:RecentChanges is now displayed.
+  in user language instead of content language.
+* (bug 35264) Wrong type used for <ns> in export.xsd
+* (bug 24985) Use $wgTmpDirectory as the default temp directory so that people
+  who don't have access to /tmp can specify an alternative.
+* (bug 27283) SqlBagOStuff breaks PostgreSQL transactions.
+* (bug 35727) mw.Api ajax() should put token parameter last.
+* (bug 37708) mw.Uri.clone() should make a deep copy.
+* (bug 38024) ResourceLoader should not create empty stylesheets for modules
+  that don't have stylesheets.
+* (bug 36812) Special:ActiveUsers "Hide bots" should hide users from any group
+  having the "bot" user right, instead of just the default "bot" user group.
+* (bug 35082) mw.util.addPortletLink incorrectly adds link to mutiple <ul> tags.
+* (bug 36991) jquery.tablesorter should extract date sort format from date
+  string instead of global config. Dates like "April 1 2012" and "1 April 2012"
+  now sort correctly regardless of the content language's DefaultDateFormat.
+* (bug 31895) mw.loader mode now correct when triggered from a $.fn.ready
+  handler that is bound before mediawiki.js's handler (e.g. browser-userscripts
+  like greasemonkey).
+* (bug 38152) jquery.tablesorter: Use .data() instead of .attr(), so that live
+  values are used instead of just the fixed values from when the tablesorter
+  was initialized.
+* (bug 38093) Gender of changed user groups missing in Special:Log/rights
+* (bug 35893) Special:Block needs to load mediawiki.special.block.js.
+* (bug 37331) ResourceLoader modules sometimes execute twice in Firefox
+* (bug 31644) GlobalUsage, CentralAuth and AbuseLog extensions should not use
+  insecure links to foreign wikis in the WikiMap.
+* (bug 36073) Avoid duplicate element IDs on File pages.
+* (bug 25095) Special:Categories should also include the first relevant item
+  when "from" is filled.
+* (bug 35526) jquery.tablesorter now uses a stable sort.
+* (bug 38953) --memory-limit switch not working for runJobs.php.
+* (bug 33037) Make subpage of Special:newfiles control how many files
+  are returned, like in previous versions.
+* (bug 36524) "Show" options on Special:RecentChanges and Special:RecentChangesLinked
+  are now remembered between successive clicks.
+* (bug 26069) Page title is no longer "Error" for all error pages.
+* (bug 39297) Show warning if thumbnail of animated image will not be animated.
+* (bug 38249) Parser will throw an exception instead of outputting gibberish if
+  PCRE is compiled without support for unicode properties.
+* (bug 30390) Suggested file name on Special:Upload should not contain
+  illegal characters.
+* EXIF below sea level GPS altitude data is now shown correctly.
+* (bug 39284) jquery.tablesorter should not consider "."" or "?"" to be a currency.
+* (bug 39273) "Show changes" should not be incorrectly displayed in the Live Preview state.
+* Made body-content lang attribute honor the variant language when it is set.
+* (bug 36761) "Mark pages as visited" now submits previously established filter options.
+* (bug 39635) PostgreSQL LOCK IN SHARE MODE option is a syntax error.
+* (bug 36329) Accesskey tooltips for Firefox 14 on Mac should use "ctrl-option-" prefix.
+* (bug 32552) Drop unused database field cat_hidden from table category.
+* (bug 24502) Do not allow multiple language links to the same language.
+* (bug 40214) Category pages no longer use deprecated "width" HTML attribute.
+* (bug 39941) Add missing stylesheets to the installer pages
+* In HTML5 mode, allow new input element types values (such as color, range..)
+* (bug 36151) mw.Title: Don't limit extension in title parsing.
+* (bug 38158) jquery.byteLimit sometimes causes an unexpected 0 maxLength being enforced.
+* (bug 38163) jquery.byteLimit incorrectly limits input when using methods other than
+  basic per-char typing.
+* (bug 34495) patrol log now credit the user patrolling (instead of patrolled
+  user).
+* (bug 31676) ResourceLoader should work around IE stylesheet limit.
+* (bug 40498) ResourceLoader should not output an empty "@media print { }" block.
+* (bug 40500) ResourceLoader should not ignore media-type for urls in debug mode.
+* (bug 40660) ResourceLoaderWikiModule should not convert "&nbsp;" to a space
+  for pages from the MediaWiki-namespace.
+* (bug 40329) (bug 40632) Removed CleanupPresentationalAttributes feature.
+
+=== API changes in 1.20 ===
+* (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
+* (bug 34313) MediaWiki API intro message about "HTML format" should mention
+  the format parameter.
+* (bug 32384) Allow descending order for list=watchlistraw.
+* (bug 31883) Limit of bkusers of list=blocks and titles of action=query is
+  not documented in API help.
+* (bug 32492) API now allows editing using pageid.
+* (bug 32497) API now allows changing of protection level using pageid.
+* (bug 32498) API now allows comparing pages using pageids.
+* (bug 30975) API import of pages with invalid characters in this wiki leads to Fatal Error.
+* (bug 30488) API now allows listing of backlinks/embeddedin/imageusage per pageid.
+* (bug 34927) Output media_type for list=filearchive.
+* (bug 28814) add properties to output of action=parse.
+* (bug 33224) add variants of content language to meta=siteinfo.
+* (bug 32643) action=purge with forcelinkupdate no longer crashes when ratelimit is reached.
+* The paraminfo module now also contains result properties for most modules.
+* (bug 32348) Allow descending order for list=alllinks.
+* (bug 31777) Upload unknown error ``fileexists-forbidden''.
+* (bug 32382) Allow descending order for list=iwbacklinks.
+* (bug 32381) Allow descending order for list=backlinks, list=embeddedin and list=imageusage.
+* (bug 32383) Allow descending order for list=langbacklinks.
+* API meta=siteinfo can now return the list of known variable IDs.
+* (bug 35980) list=deletedrevs now honors drdir correctly in "all" mode (mode #3).
+* (bug 29290) API avoids mangling fields in continuation parameters
+* (bug 36987) API avoids mangling fields in continuation parameters
+* (bug 30836) siteinfo prop=specialpagealiases will no longer return nonexistent special pages
+* (bug 38190) Add "required" flag to some token params for hint in api docs.
+* (bug 27567) Add file repo support to prop=duplicatefiles.
+* (bug 27610) Add archivename for non-latest image version to list=filearchive
+* (bug 38231) Add xml parse tree to action=parse.
+* Watchlist notification timestamp may be queried by page and may be updated via the API.
+* (bug 38904) prop=revisions&rvstart=... no longer blows up when continuing.
+* (bug 39032) ApiQuery generates help in constructor.
+* (bug 11142) Improve file extension blacklist error reporting in API upload.
+* (bug 39665) List of query generators is now not built using reflection, instead it is
+  defined in code.
+
+=== Languages updated in 1.20 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
+
+* Emilian (egl) added.
+* Tornedalen Finnish (fit) added.
+* Mizo (lus) added.
+* Santali (sat) added.
+* (bug 34192) Namespace gender aliases for Albanian languages (sq & aln).
+* (bug 35541) Namespace gender aliases for Croatian (hr).
+* (bug 36012) Space in $separatorTransformTable should be non-breaking in
+  Portuguese, Esperanto and Udmurt.
+* Turoyo (tru) added.
+* Cyrillic-Latin language converter added for Uzbek (uz).
+
+=== Other changes in 1.20 ===
+* The user_token field is now left empty until a user attempts to login and
+  cookies need to be set. It is also now possible to reset every user's
+  user_token simply by clearing the values in the user_token column.
+* Removed ./tests/qunit/index.html from core. It wasn't actively maintained and
+  has been made obsolete when [[Special:JavaScriptTest/qunit]] was introduced,
+  which actually uses ResourceLoader, LocalSettings and the Skin.
+* Removed $wgDBtransactions global. This was only checked in one class
+  and only applies to MyISAM or similar DBs. Those should only be used
+  for archived sites anyway. We can't get edit conflicts on such sites,
+  so the WikiPage code wasn't useful there either.
+* Deprecated mw.user.name in favour of mw.user.getName.
+* Deprecated mw.user.anonymous in favour of mw.user.isAnon.
+* Deprecated DatabaseBase functions newFromParams(), newFromType(), set(),
+  quote_ident(), and escapeLike() were removed.
+* Use of __DIR__ instead of dirname( __FILE__ ).
+* OutputPage::wrapWikiMsg() no longer supports the 'options' parameter. It was
+  not used and complicated migration to Message class.
+* Live preview functionality has been improved and moved into the
+ 'mediawiki.action.edit.preview' module. The old 'mediawiki.legacy.preview' module
+  has been removed.
+* (bug 40448) Removed mediawiki.legacy.mwsuggest module, and removed the
+  following that has become obsolete:
+  - globals $wgEnableMWSuggest and $wgMWSuggestTemplate.
+  - mw.config.values wgMWSuggestTemplate and wgSearchNamespaces.
+  - method SearchEngine::getMWSuggestTemplate().
+
 == MediaWiki 1.19 ==
 
 == MediaWiki 1.19.2 ==
diff --git a/RELEASE-NOTES-1.20 b/RELEASE-NOTES-1.20
deleted file mode 100644 (file)
index 52c4e86..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-= MediaWiki release notes =
-
-Security reminder: MediaWiki does not require PHP's register_globals
-setting since version 1.2.0. If you have it on, turn it '''off''' if you can.
-
-== MediaWiki 1.20 ==
-
-THIS IS NOT A RELEASE YET
-
-MediaWiki 1.20 is an alpha-quality branch and is not recommended for use in
-production.
-
-=== PHP 5.3 now required ===
-Since 1.20, the lowest supported version of PHP is now 5.3.2. Please
-upgrade PHP if you have not done so prior to upgrading MediaWiki.
-
-=== Configuration changes in 1.20 ===
-* $wgGitRepositoryViewers defines a mapping from Git remote repository to the
-  Gitweb instance URL used in Special:Version.
-* `$wgUsePathInfo = true;` is no longer needed to make $wgArticlePath work on servers
-  using like nginx, lighttpd, and apache over fastcgi. MediaWiki now always extracts
-  path info from REQUEST_URI if it's available.
-* The user right 'upload_by_url' is no longer given to sysops by default.
-  This only affects installations which have $wgAllowCopyUploads set to true.
-* Removed f-prot support from $wgAntivirusSetup.
-* New variable $wgDBerrorLogTZ to provide dates in the error log in a
-  different timezone than the wiki timezone set by $wgLocaltimezone.
-* New variables $wgDBssl and $wgDBcompress to enable SSL and compression for database
-  connections, if either are available for the selected DB type.
-* $wgUseCombinedLoginLink now defaults to false, making MediaWiki output separate
-  login and create account links by default.
-
-=== New features in 1.20 ===
-* Added TitleIsAlwaysKnown hook which gets called when determining if a page exists.
-* Added NamespaceIsMovable hook which gets called when determining if pages in a
-  certain namespace can be moved.
-* Added SpecialPageBeforeExecute hook which gets called before SpecialPage::execute.
-* Added SpecialPageAfterExecute hook which gets called after SpecialPage::execute.
-* Added ORMTable, ORMRow and ORMResult classes for additional abstraction of
-  database interaction.
-* Added CacheHelper and associated SpecialCachedPage and CachedAction helper classes.
-* (bug 32341) Add upload by URL domain limitation.
-* &useskin=default will now always display the default skin. Useful for users with a
-  preference for the non-default skin to look at something using the default skin.
-* (bug 27619) Remove preference option to display broken links as link?
-* (bug 34896) jQuery JSON plugin upgraded to v2.3 (2011-09-17).
-* (bug 34302) Add CSS classes to email fields in user preferences.
-* Introduced $wgDebugDBTransactions to trace transaction status (currently PostgreSQL only).
-* (bug 23795) Add parser itself to ParserMakeImageParams hook.
-* Introduce a cryptographic random number generator source api for use when
-  generating various tokens.
-* (bug 30963) Option on Special:Prefixindex and Special:Allpages to not show redirects.
-* (bug 18062) New message when edit or create the local page of a shared file.
-* (bug 22870) Separate interface message when creating a page.
-* (bug 17615) nosummary option should be reassigned on preview/captcha.
-* (bug 34355) Add a variable and parser function for the namespace number.
-* (bug 35649) Special:Version now shows hashes of extensions checked out from git.
-* (bug 35728) Git revisions are now linked on Special:Version.
-* "Show Changes" on default messages shows now diff against default message text
-* (bug 23006) create #speciale parser function.
-* generateSitemap can now optionally skip redirect pages.
-* (bug 27757) New API command just for retrieving tokens (not page-based).
-* Added GitViewers hook for extensions using external git repositories to have a web-based
-  repository viewer linked to from Special:Version.
-* Memcached debug logs can now be sent to their own file logs by setting
-  $wgDebugLogFile['memcached'] to some filepath.
-* (bug 35685) api.php URL and other entry point URLs are now listed on
-  Special:Version
-* Edit notices can now be translated.
-* jQuery upgraded to 1.8.2.
-* jQuery UI upgraded to 1.8.23.
-* QUnit upgraded from v1.2.0 to v1.10.0.
-* (bug 37604) jquery.cookie upgraded to 2011 version.
-* (bug 22887) Add warning and tracking category for preprocessor errors
-* (bug 31704) Allow selection of associated namespace on the watchlist
-* (bug 5445) Now remove autoblocks when a user is unblocked.
-* Added $wgLogExceptionBacktrace, on by default, to allow logging of exception
-  backtraces.
-* Added device detection for determining device capabilities.
-* QUnit.newMwEnvironment now supports passing a custom setup and/or teardown function.
-  Arguments signature has changed. First arguments is now an options object of which
-  'config' can be a property. Previously 'config' itself was the first and only argument.
-* New getCreator and getOldestRevision methods added to WikiPage class
-* (bug 4220) the XML dump format schema now have unique identity constraints
-  for page and revision identifiers. Patch by Elvis Stansvik.
-* cleanupSpam.php now can delete spam pages if --delete was specified instead of blanking
-  them.
-* Added new hook ChangePasswordForm to allow adding of additional fields in Special:ChangePassword
-* Added new function getDomain to AuthPlugin for getting a user's domain
-* (bug 23427) New magic word {{PAGEID}} which gives the current page ID.
-  Will be null on previewing a page being created.
-* (bug 37627) UserNotLoggedIn() exception to show a generic error page whenever
-  a user is not logged in.
-* Watched status in changes lists are no longer indicated by <strong></strong>
-  tags with class "mw-watched". Instead, each line now has a class
-  "mw-changeslist-line-watched" or "mw-changeslist-line-not-watched", and the
-  title itself is surrounded by <span></span> tags with class "mw-title".
-* Added ContribsPager::reallyDoQuery hook allowing extensions to data to MyContribs
-* Added new hook ParserAfterParse to allow extensions to affect parsed output
-  after the parse is complete but before block level processing, link holder
-  replacement, and so on.
-* (bug 34678) Added InternalParseBeforeSanitize hook which gets called during Parser's
-  internalParse method just before the parser removes unwanted/dangerous HTML tags.
-* Added new hook AfterFinalPageOutput to allow modifications to buffered page output before sent
-  to the client.
-* (bug 36783) Implement jQuery Promise interface in mediawiki.api module.
-* Make dates in sortable tables sort according to the page content language
-  instead of the site content language
-* (bug 37926) Deleterevision will no longer allow users to delete log entries,
-  the new deletelogentry permission is required for this.
-* (bug 14237) Allow PAGESINCATEGORY to distinguish between 'all', 'pages', 'files'
-  and 'subcats'
-* (bug 38362) Make Special:Listuser includeable on wiki pages.
-* Added support in jquery.localize for placeholder attributes.
-* (bug 38151) Implemented mw.user.getRights for getting and caching the current
-  user's user rights.
-* Session storage can now configured independently of general object cache
-  storage, by using $wgSessionCacheType. $wgSessionsInMemcached has been
-  renamed to $wgSessionsInObjectCache, with the old name retained for backwards
-  compatibility. When this feature is enabled, the expiry time can now be
-  configured with $wgObjectCacheSessionExpiry.
-* Added a Redis client for object caching.
-* Implemented mw.user.getGroups for getting and caching user groups.
-* (bug 37830) Added $wgRequirePasswordforEmailChange to control whether password
-  confirmation is required for changing an email address or not.
-* HTMLForm mutators can now be chained (they return $this)
-* A new message, "api-error-filetype-banned-type", is available for formatting
-  API upload errors due to the file extension blacklist.
-* New hook 'ParserTestGlobals' allows to set globals before running parser tests.
-* Allow importing pages as subpage.
-* Add lang and hreflang attributes to language links on Login page.
-* (bug 22749) Create Special:MostInterwikis.
-* Show change tags when transclude Special:Recentchanges(linked) or Special:Newpages.
-* (bug 23226) Add |class= parameter to image links in order to add class(es) to HTML img tag.
-* (bug 39431) SVG animated status is now shown in long description.
-* (bug 39376) jquery.form upgraded to 3.14.
-* SVG files will now show the actual width in the SVG's specified units
-  in the metadata box.
-* Added ResourceLoader module "jquery.jStorage" (v0.3.0, http://jStorage.info/).
-* (bug 39273) Added AJAX support for "Show changes" (diff) in LivePreview.
-* Added ResourceLoader module "jquery.badge".
-* mw.util.$content now points to the overall content area in the skin rather than just
-  page text content area. If you need the old behaviour please use $( '#mw-content-text').
-* jsMessage has been replaced with a floating bubble notification system complete
-  with auto-hide, multi-message support, and message replacement tags.
-* jquery.messageBox which appears to be unused by both core and extensions has
-  been removed.
-* (bug 34939) Made link parsing insensitive ([HttP://]).
-* (bug 40072) Add CSS classes to items in output of ChangesList pages.
-* Added $wgCopyUploadProxy global to define which proxy to use for copy
-  uploads.
-* (bug 40448) mediawiki.legacy.mwsuggest has been replaced with a new module,
-  mediawiki.searchSuggest, based on SimpleSeach from Extension:Vector.
-
-=== Bug fixes in 1.20 ===
-* (bug 30245) Use the correct way to construct a log page title.
-* (bug 34237) Regenerate an empty user_token and save to the database
-  when we try to set the user's cookies for login.
-* (bug 32210) New edit emails for watched pages always provide a link to the
-  edit which triggered the mail.
-* (bug 12021) Added user talk link on Special:Listusers.
-* (bug 34445) section edit and TOC hide/show links are excluded from selection and
-  copy/paste on supporting browsers.
-* (bug 34428) Fixed incorrect hash mismatch errors in the DiffHistoryBlob
-  history compression method.
-* (bug 34702) Localised parentheses are now used in more special pages.
-* (bug 34723) When editing a script page on a RTL wiki the textbox should be LTR.
-* (bug 34762) Calling close() on a DatabaseBase object now clears the connection.
-* (bug 34863) Show deletion log extract on non-existent file pages if applicable.
-* (bug 28019) Let ?preloadtitle=foo be passed on to target of
-  Special:MyPage and Special:MyTalk.
-* (bug 34929) Show the correct diff when a section edit is rejected by the spam
-  filter.
-* (bug 15816) Add a switch for SETting the search_path (Postgres).
-* (bug 34521) Returning to the previous page after logging in loses any array-
-  valued parameters in the query string.
-* (bug 34735) Updated compressOld.php documentation to mention the different
-  usages of -s and -n parameters depending on compression type.
-* (bug 13896) Rendering of devanagari numbers in automatic '#' number lists.
-* (bug 33689) Upgrade to 1.19 on Postgres fails due to incomplete query when.
-  trying to defer foreign key for externallinks.
-* (bug 32748) Printer friendly version of article decode Unicode chars as a
-  pretty IRI in footer.
-* Removed white border around thumbnails in galleries.
-* (bug 31236) "Next" and "Previous" buttons are shown incorrectly in
-  an RTL environment.
-* (bug 35749) Updated maintenance/checkSyntax.php to use Git instead of
-  Subversion when invoked with the --modified option.
-* (bug 35069) On history pages, the " . . " separator after the number of
-  characters changed in a revision is now suppressed if no text would follow.
-* (bug 18704) Add a unique CSS class or ID to the tagfilter table row at RecentChanges
-* (bug 33564) transwiki import sometimes result in invalid title.
-* (bug 35572) Blocks appear to succeed even if query fails due to wrong DB structure
-* (bug 31757) Add a word-separator between help-messages in HTMLForm
-* (bug 30410) Removed deprecated $wgFilterCallback and the 'filtered' API error.
-* (bug 32604) Some messages needs escaping of wikitext inside username.
-* (bug 36537) Rename wfArrayToCGI to wfArrayToCgi for consistency with wfCgiToArray.
-* (bug 25946) The message on the top of Special:RecentChanges is now displayed.
-  in user language instead of content language.
-* (bug 35264) Wrong type used for <ns> in export.xsd
-* (bug 24985) Use $wgTmpDirectory as the default temp directory so that people
-  who don't have access to /tmp can specify an alternative.
-* (bug 27283) SqlBagOStuff breaks PostgreSQL transactions.
-* (bug 35727) mw.Api ajax() should put token parameter last.
-* (bug 37708) mw.Uri.clone() should make a deep copy.
-* (bug 38024) ResourceLoader should not create empty stylesheets for modules
-  that don't have stylesheets.
-* (bug 36812) Special:ActiveUsers "Hide bots" should hide users from any group
-  having the "bot" user right, instead of just the default "bot" user group.
-* (bug 35082) mw.util.addPortletLink incorrectly adds link to mutiple <ul> tags.
-* (bug 36495) Sanitizer::fixDeprecatedAttributes should convert "align"
-  attribute to margin or float instead of text-align (for non-table-cells).
-* (bug 36991) jquery.tablesorter should extract date sort format from date
-  string instead of global config. Dates like "April 1 2012" and "1 April 2012"
-  now sort correctly regardless of the content language's DefaultDateFormat.
-* (bug 31895) mw.loader mode now correct when triggered from a $.fn.ready
-  handler that is bound before mediawiki.js's handler (e.g. browser-userscripts
-  like greasemonkey).
-* (bug 38152) jquery.tablesorter: Use .data() instead of .attr(), so that live
-  values are used instead of just the fixed values from when the tablesorter
-  was initialized.
-* (bug 38093) Gender of changed user groups missing in Special:Log/rights
-* (bug 35893) Special:Block needs to load mediawiki.special.block.js.
-* (bug 37331) ResourceLoader modules sometimes execute twice in Firefox
-* (bug 31644) GlobalUsage, CentralAuth and AbuseLog extensions should not use
-  insecure links to foreign wikis in the WikiMap.
-* (bug 36073) Avoid duplicate element IDs on File pages.
-* (bug 25095) Special:Categories should also include the first relevant item
-  when "from" is filled.
-* (bug 35526) jquery.tablesorter now uses a stable sort.
-* (bug 38953) --memory-limit switch not working for runJobs.php.
-* (bug 33037) Make subpage of Special:newfiles control how many files
-  are returned, like in previous versions.
-* (bug 36524) "Show" options on Special:RecentChanges and Special:RecentChangesLinked
-  are now remembered between successive clicks.
-* (bug 26069) Page title is no longer "Error" for all error pages.
-* (bug 39297) Show warning if thumbnail of animated image will not be animated.
-* (bug 38249) Parser will throw an exception instead of outputting gibberish if
-  PCRE is compiled without support for unicode properties.
-* (bug 30390) Suggested file name on Special:Upload should not contain
-  illegal characters.
-* EXIF below sea level GPS altitude data is now shown correctly.
-* (bug 39284) jquery.tablesorter should not consider "."" or "?"" to be a currency.
-* (bug 39273) "Show changes" should not be incorrectly displayed in the Live Preview state.
-* Made body-content lang attribute honor the variant language when it is set.
-* (bug 36761) "Mark pages as visited" now submits previously established filter options.
-* (bug 39635) PostgreSQL LOCK IN SHARE MODE option is a syntax error.
-* (bug 36329) Accesskey tooltips for Firefox 14 on Mac should use "ctrl-option-" prefix.
-* (bug 32552) Drop unused database field cat_hidden from table category.
-* (bug 24502) Do not allow multiple language links to the same language.
-* (bug 40214) Category pages no longer use deprecated "width" HTML attribute.
-* (bug 39941) Add missing stylesheets to the installer pages
-* In HTML5 mode, allow new input element types values (such as color, range..)
-* (bug 36151) mw.Title: Don't limit extension in title parsing.
-* (bug 38158) jquery.byteLimit sometimes causes an unexpected 0 maxLength being enforced.
-* (bug 38163) jquery.byteLimit incorrectly limits input when using methods other than
-  basic per-char typing.
-* (bug 34495) patrol log now credit the user patrolling (instead of patrolled
-  user).
-* (bug 31676) ResourceLoader should work around IE stylesheet limit.
-* (bug 40498) ResourceLoader should not output an empty "@media print { }" block.
-* (bug 40500) ResourceLoader should not ignore media-type for urls in debug mode.
-* (bug 40660) ResourceLoaderWikiModule should not convert "&nbsp;" to a space
-  for pages from the MediaWiki-namespace.
-
-=== API changes in 1.20 ===
-* (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
-* (bug 34313) MediaWiki API intro message about "HTML format" should mention
-  the format parameter.
-* (bug 32384) Allow descending order for list=watchlistraw.
-* (bug 31883) Limit of bkusers of list=blocks and titles of action=query is
-  not documented in API help.
-* (bug 32492) API now allows editing using pageid.
-* (bug 32497) API now allows changing of protection level using pageid.
-* (bug 32498) API now allows comparing pages using pageids.
-* (bug 30975) API import of pages with invalid characters in this wiki leads to Fatal Error.
-* (bug 30488) API now allows listing of backlinks/embeddedin/imageusage per pageid.
-* (bug 34927) Output media_type for list=filearchive.
-* (bug 28814) add properties to output of action=parse.
-* (bug 33224) add variants of content language to meta=siteinfo.
-* (bug 32643) action=purge with forcelinkupdate no longer crashes when ratelimit is reached.
-* The paraminfo module now also contains result properties for most modules.
-* (bug 32348) Allow descending order for list=alllinks.
-* (bug 31777) Upload unknown error ``fileexists-forbidden''.
-* (bug 32382) Allow descending order for list=iwbacklinks.
-* (bug 32381) Allow descending order for list=backlinks, list=embeddedin and list=imageusage.
-* (bug 32383) Allow descending order for list=langbacklinks.
-* API meta=siteinfo can now return the list of known variable IDs.
-* (bug 35980) list=deletedrevs now honors drdir correctly in "all" mode (mode #3).
-* (bug 29290) API avoids mangling fields in continuation parameters
-* (bug 36987) API avoids mangling fields in continuation parameters
-* (bug 30836) siteinfo prop=specialpagealiases will no longer return nonexistent special pages
-* (bug 38190) Add "required" flag to some token params for hint in api docs.
-* (bug 27567) Add file repo support to prop=duplicatefiles.
-* (bug 27610) Add archivename for non-latest image version to list=filearchive
-* (bug 38231) Add xml parse tree to action=parse.
-* Watchlist notification timestamp may be queried by page and may be updated via the API.
-* (bug 38904) prop=revisions&rvstart=... no longer blows up when continuing.
-* (bug 39032) ApiQuery generates help in constructor.
-* (bug 11142) Improve file extension blacklist error reporting in API upload.
-* (bug 39665) List of query generators is now not built using reflection, instead it is
-  defined in code.
-
-=== Languages updated in 1.20 ===
-
-MediaWiki supports over 350 languages. Many localisations are updated
-regularly. Below only new and removed languages are listed, as well as
-changes to languages because of Bugzilla reports.
-
-* Emilian (egl) added.
-* Tornedalen Finnish (fit) added.
-* Mizo (lus) added.
-* Santali (sat) added.
-* (bug 34192) Namespace gender aliases for Albanian languages (sq & aln).
-* (bug 35541) Namespace gender aliases for Croatian (hr).
-* (bug 36012) Space in $separatorTransformTable should be non-breaking in
-  Portuguese, Esperanto and Udmurt.
-* Turoyo (tru) added.
-* Cyrillic-Latin language converter added for Uzbek (uz).
-
-=== Other changes in 1.20 ===
-* The user_token field is now left empty until a user attempts to login and
-  cookies need to be set. It is also now possible to reset every user's
-  user_token simply by clearing the values in the user_token column.
-* Removed ./tests/qunit/index.html from core. It wasn't actively maintained and
-  has been made obsolete when [[Special:JavaScriptTest/qunit]] was introduced,
-  which actually uses ResourceLoader, LocalSettings and the Skin.
-* Removed $wgDBtransactions global. This was only checked in one class
-  and only applies to MyISAM or similar DBs. Those should only be used
-  for archived sites anyway. We can't get edit conflicts on such sites,
-  so the WikiPage code wasn't useful there either.
-* Deprecated mw.user.name in favour of mw.user.getName.
-* Deprecated mw.user.anonymous in favour of mw.user.isAnon.
-* Deprecated DatabaseBase functions newFromParams(), newFromType(), set(),
-  quote_ident(), and escapeLike() were removed.
-* Use of __DIR__ instead of dirname( __FILE__ ).
-* OutputPage::wrapWikiMsg() no longer supports the 'options' parameter. It was
-  not used and complicated migration to Message class.
-* Live preview functionality has been improved and moved into the
- 'mediawiki.action.edit.preview' module. The old 'mediawiki.legacy.preview' module
-  has been removed.
-* (bug 40448) Removed mediawiki.legacy.mwsuggest module, and removed the
-  following that has become obsolete:
-  - globals $wgEnableMWSuggest and $wgMWSuggestTemplate.
-  - mw.config.values wgMWSuggestTemplate and wgSearchNamespaces.
-  - method SearchEngine::getMWSuggestTemplate().
-
-== Compatibility ==
-
-MediaWiki 1.20 requires PHP 5.3.2. PHP 4 is no longer supported.
-
-MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for IBM
-DB2 and Oracle.
-
-The supported versions are:
-
-* MySQL 5.0.2 or later
-* PostgreSQL 8.3 or later
-* SQLite 3.3.7 or later
-* Oracle 9.0.1 or later
-
-== Upgrading ==
-
-1.20 has several database changes since 1.19, and will not work without schema
-updates.
-
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
-
-If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
-new database fields are filled with data.
-
-If you are upgrading from MediaWiki 1.4.x or earlier, 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!
-
-See the file UPGRADE for more detailed upgrade instructions.
-
-For notes on 1.19.x and older releases, see HISTORY.
-
-== Online documentation ==
-
-Documentation for both end-users and site administrators is available on
-MediaWiki.org, and is covered under the GNU Free Documentation License (except
-for pages that explicitly state that their contents are in the public domain):
-
-       https://www.mediawiki.org/wiki/Documentation
-
-== Mailing list ==
-
-A mailing list is available for MediaWiki user support and discussion:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
-
-A low-traffic announcements-only list is also available:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
-
-It's highly recommended that you sign up for one of these lists if you're
-going to run a public MediaWiki, so you can be notified of security fixes.
-
-== IRC help ==
-
-There's usually someone online in #mediawiki on irc.freenode.net.
index ce6966e..01ff993 100644 (file)
@@ -1,5 +1,3 @@
-= MediaWiki release notes =
-
 Security reminder: MediaWiki does not require PHP's register_globals. If you
 have it on, turn it '''off''' if you can.
 
@@ -14,27 +12,79 @@ 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
+  fields) can be now be done separately from from other changes that
+  update.php makes.  This is useful in environments that use database
+  permissions to restrict schema changes but allow the DB user that
+  MediaWiki normally runs as to perform other changes that update.php
+  makes.  Schema changes can be run seperately.  See the file UPGRADE
+  for more information.
 * (bug 34876) jquery.makeCollapsible has been improved in performance.
-* Added ContentHandler facility to allow extensions to support other content than wikitext.
-  See docs/contenthandler.txt for details.
+* Added ContentHandler facility to allow extensions to support other content
+  than wikitext. See docs/contenthandler.txt for details.
 * New feature was developed for showing high-DPI thumbnails for high-DPI mobile
   and desktop displays (configurable with $wgResponsiveImages).
 * Added new backend to represent and store information about sites and site
   specific configuration.
+* jQuery upgraded from 1.8.2 to 1.8.3.
 * jQuery UI upgraded from 1.8.23 to 1.8.24.
 * Added separate fa_sha1 field to filearchive table. This allows sha1
   searches with the api in miser mode for deleted files.
 * Add initial and programmatic sorting for tablesorter.
 * Add the event "sortEnd.tablesorter", triggered after sorting has completed.
-* The Job system was refactored to allow for different backing stores for queues
-  as well as cross-wiki access to queues, among other things. The schema for the
-  DB queue was changed to support better concurrency and reduce deadlock errors.
+* The Job system was refactored to allow for different backing stores for
+  queues as well as cross-wiki access to queues, among other things. The schema
+  for the DB queue was changed to support better concurrency and reduce
+  deadlock errors.
 * Added ApiQueryORM class to facilitate creation of query API modules based on
   tables that have a corresponding ORMTable class.
 * (bug 40876) Icon for PSD (Adobe Photoshop) file types.
 * (bug 40641) Implemented Special:Version/Credits with a list of contributors.
+* (bug 7851) Implemented one-click AJAX patrolling.
+* The <data>, <time>, <meta>, and <link> elements are allowed within WikiText
+  for use with Microdata.
+* The HTML5 <mark> tag has been whitelisted.
+* Added ParserCloned hook for when the Parser object is cloned.
+* Added AlternateEditPreview hook to allow extensions to replace the page
+  preview from the edit page.
+* Added EditPage::showStandardInputs:options hook to allow extensions to add
+  new fields to the "editOptions" area of the edit form.
+* Upload stash DB schema altered to improve upload performance.
+* The following global functions are now reporting deprecated warnings in
+  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.
 
 === Bug fixes in 1.21 ===
 * (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
@@ -44,34 +94,118 @@ production.
   recentchanges table.
 * (bug 32951) Do not register internal externals with absolute protocol,
   when server has relative protocol.
-* (bug 39005) When purging proxies listed in $wgSquidServers using HTTP PURGE 
-  method requests, we now send a Host header by default, for Varnish 
-  compatibility. This also works with Squid in reverse-proxy mode. If you wish 
-  to support Squid configured in forward-proxy mode, set 
+* (bug 39005) When purging proxies listed in $wgSquidServers using HTTP PURGE
+  method requests, we now send a Host header by default, for Varnish
+  compatibility. This also works with Squid in reverse-proxy mode. If you wish
+  to support Squid configured in forward-proxy mode, set
   $wgSquidPurgeUseHostHeader to false.
-* (bug 37020) sql.php with readline eats semicolon
+* (bug 37020) sql.php with readline eats semicolon.
 * (bug 11748) Properly handle optionally-closed HTML tags when Tidy is
   disabled, and don't wrap HTML-syntax definition lists in paragraphs.
 * (bug 41409) Diffs while editing an old revision should again diff against the
   current revision.
 * (bug 41494) Honor $wgLogExceptionBacktrace when logging non-API exceptions
   caught during API execution.
-* (bug 37963) Fixed loading process for user options
+* (bug 37963) Fixed loading process for user options.
 * (bug 26995) Update filename field on Upload page after having sanitized it.
+* (bug 41793) Contribution links to users with 0 edits on Special:ListUsers
+  didn't show up red.
+* (bug 41899) A PHP notice no longer occurs when using the "rvcontinue" API
+  parameter.
+* (bug 42036) Account creation emails now contain canonical (not
+  protocol-relative) URLs.
+* (bug 41990) Fix regression: API edit with redirect=true and lacking
+  starttimestamp and basetimestamp should not cause an edit conflict.
+* (bug 41706) EditPage: Preloaded page should be converted if possible and
+  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.
+  (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
+  title parameter was specified.
+* (bug 42410) API action=edit now returns correct timestamp for the new edit.
+* (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). 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.
 
 === API changes in 1.21 ===
-* prop=revisions can now report the contentmodel and contentformat, see docs/contenthandler.txt
-* action=edit and action=parse now support contentmodel and contentformat parameters to control the interpretation of
-  page content; See docs/contenthandler.txt for details.
+* prop=revisions can now report the contentmodel and contentformat.
+  See docs/contenthandler.txt.
+* action=edit and action=parse now support contentmodel and contentformat
+  parameters to control the interpretation of page content.
+  See docs/contenthandler.txt for details.
 * (bug 35693) ApiQueryImageInfo now suppresses errors when unserializing metadata.
-* (bug 40111) Disable minor edit for page/section creation by API
-* (bug 41042) Revert change to action=parse&page=... behavior when the page does not exist.
+* (bug 40111) Disable minor edit for page/section creation by API.
+* (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.
+
+=== 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 ===
 
 MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
+
+* South Azerbaijani (azb) added.
+* (bug 30040) Autonym for nds-nl is now 'Nedersaksies' (was 'Nedersaksisch').
+* (bug 34977) Now formatted numbers in Spanish use space as separator
+  for thousands, as mandated by the Real Academia Española.
+* (bug 35031) Kurdish formatted numbers now use period and comma
+  as separators for thousands and decimals respectively.
+
 === Other changes in 1.21 ===
 
 == Compatibility ==
@@ -103,9 +237,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 46f5e65..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.
@@ -51,6 +51,11 @@ deleted file archives, and any custom skins.
 
 === Perform the database upgrade ===
 
+As of 1.21, it is possible to separate schema changes (i.e. adding,
+dropping, or changing tables, fields, or indices) from all other
+database changes (e.g. populating fields).  If you need this
+capability, see "From the command line" below.
+
 ==== From the web ====
 
 If you browse to the web-based installation script (usually at
@@ -64,6 +69,12 @@ update.php script to check and update the schema. This will insert missing
 tables, update existing tables, and move data around as needed. In most cases,
 this is successful and nothing further needs to be done.
 
+If you need to separate out the schema changes so they can be run
+by someone with more privileges, then you can use the --schema option
+to produce a text file with the necessary commands.  You can use
+--schema, --noschema, $wgAllowSchemaUpdates as well as proper database
+permissions to enforce this separation.
+
 === Check configuration settings ===
 
 The names of configuration variables, and their default values and purposes,
@@ -139,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/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..3f24172
--- /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 ]; then
+       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
index 998523f..6574c17 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,27 +270,28 @@ $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
@@ -304,158 +307,163 @@ $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
-
-'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.
+'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
+( EditPage::getPreviewText() ).
+$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.
 $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 mofify the propertiesin 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
-$article: the WikiPage (object) being 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
 $error: if the deletion was prohibited, the (raw HTML) error message to display
@@ -463,36 +471,37 @@ $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
-$article: the WikiPage that was 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
 $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
-$article: WikiPage (object) of the user talk page
+'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
-$article: the WikiPage (object)
+'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
-$article: WikiPage (object) being modified
+'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
-$article: WikiPage created
+'ArticleInsertComplete': After a new article is created. DEPRECATED, use
+PageContentInsertComplete.
+$wikiPage: WikiPage created
 $user: User creating the article
 $text: New content
 $summary: Edit summary/comment
@@ -502,56 +511,57 @@ $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
-$article: WikiPage (object) whose data were loaded
+'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
-$article: WikiPage (object) that data will be loaded
+'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
 
-'ArticlePrepareTextForEdit': called when preparing text to be saved
-$article: the WikiPage being 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
-$article: the WikiPage being 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
-$article: the WikiPage that was 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"
-$article: WikiPage (object) to 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
-$article: the WikiPage that was edited
+'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
-$article: the WikiPage (object) being saved
+'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
 $summary: the article summary (comment)
@@ -559,8 +569,9 @@ $isminor: minor flag
 $iswatch: watch flag
 $section: section #
 
-'ArticleSaveComplete': After an article has been updated. DEPRECATED, use PageContentSaveComplete instead.
-$article: WikiPage modified
+'ArticleSaveComplete': After an article has been updated. DEPRECATED, use
+PageContentSaveComplete instead.
+$wikiPage: WikiPage modified
 $user: User performing the modification
 $text: New content
 $summary: Edit summary/comment
@@ -572,14 +583,19 @@ $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.
 
-'ArticleUpdateBeforeRedirect': After a page is updated (usually on save),
-before the user is redirected back to the page
+'ArticleUndeleteLogEntry': When a log entry is generated but not yet saved.
+$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.
 &$article: the article
 &$sectionanchor: The section anchor link (e.g. "#overview" )
 &$extraq: Extra query parameters which can be added via hooked functions
@@ -594,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 preferrable 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 preferrable 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)
+'AuthPluginSetup': Update or replace authentication plugin object ($wgAuth).
 Gives a chance for an extension to set it programattically 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 spefific 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
@@ -655,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
 
@@ -666,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
@@ -695,51 +716,57 @@ $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
@@ -748,10 +775,20 @@ $title: the Title in question
 &$model: the model name. Use with CONTENT_MODEL_XXX constants.
 
 'ContentHandlerForModelID': Called when a ContentHandler is requested for a given
-cointent model name, but no entry for that model exists in $wgContentHandlers.
+content model name, but no entry for that model exists in $wgContentHandlers.
 $modeName: the requested content model name
 &$handler: set this to a ContentHandler object, if desired.
 
+'ConvertContent': Called by AbstractContent::convert when a conversion to another
+content model is requested.
+$content: The Content object to be converted.
+$toModel: The ID of the content model to convert to.
+$lossy:   boolean indicating whether lossy conversion is allowed.
+&$result: Output parameter, in case the handler function wants to provide a
+converted Content object. Note that $result->getContentModel() must return $toModel.
+Handler functions that modify $result should generally return false to further
+attempts at conversion.
+
 'ContribsPager::getQueryInfo': Before the contributions query is about to run
 &$pager: Pager object for contributions
 &$queryInfo: The query for the contribs Pager
@@ -785,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)
 
@@ -796,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
@@ -832,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
@@ -847,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
 
@@ -871,6 +915,13 @@ yourself. Alternatively, modifying $error and returning true will cause the
 contents of $error to be echoed at the top of the edit form as wikitext.
 Return true without altering $error to allow the edit to proceed.
 
+'EditPage::showStandardInputs:options': allows injection of form fields into
+the editOptions area
+$editor: EditPage instance (object)
+$out: an OutputPage instance to write to
+&$tabindex: HTML tabindex of the last edit check/button
+return value is ignored (should always be true)
+
 'EditPageBeforeConflictDiff': allows modifying the EditPage object and output
 when there's an edit conflict.  Return false to halt normal diff output; in
 this case you're responsible for computing and outputting the entire "conflict"
@@ -879,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
+preferrable 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 preferrable 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 preferrable
+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 preferrable 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)
 
@@ -926,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
@@ -940,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
@@ -1014,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()
@@ -1044,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 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.
 &$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 contructed.
 $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
@@ -1207,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
@@ -1221,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.
@@ -1236,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
 
@@ -1272,42 +1351,42 @@ $lang: laguage code (string)
 $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.
+  ciative 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)
@@ -1315,11 +1394,17 @@ 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 arry 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.
@@ -1328,10 +1413,10 @@ completed
 '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
@@ -1339,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.
 $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': Aefore 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
@@ -1431,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.
 
@@ -1447,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
@@ -1461,61 +1543,65 @@ 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
-$article: the WikiPage edited
+'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
 $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
 
@@ -1523,17 +1609,17 @@ 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
-$article: WikiPage created
+'PageContentInsertComplete': After a new article is created.
+$wikiPage: WikiPage created
 $user: User creating the article
 $content: New content as a Content object
 $summary: Edit summary/comment
@@ -1543,14 +1629,14 @@ $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.
-$article: the WikiPage (object) being 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
 $summary: the article summary (comment)
@@ -1558,8 +1644,8 @@ $isminor: minor flag
 $iswatch: watch flag
 $section: section #
 
-'PageContentSaveComplete': After an article has been updated
-$article: WikiPage modified
+'PageContentSaveComplete': After an article has been updated.
+$wikiPage: WikiPage modified
 $user: User performing the modification
 $content: New content, as a Content object
 $summary: Edit summary/comment
@@ -1574,55 +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
 
-'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
 
-'ParserFirstCallInit': called when the parser initialises for the first time
+'ParserCloned': Called when the parser is cloned.
+$parser: Newly-cloned Parser object
+
+'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
@@ -1631,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)
 
-'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)
 
@@ -1654,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,
@@ -1682,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
@@ -1708,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
+'PrefsPasswordAudit': Called when user changes his password.
 $user: User (object) changing his passoword
 $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,
@@ -1781,21 +1885,30 @@ $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.
 
-'SearchGetNearMatch': An extra chance for exact-title-matches in "go" searches if nothing was found
+'SearchAfterNoDirectMatch': If there was no match for the exact result. This
+runs before lettercase variants are attempted, whereas 'SearchGetNearMatch'
+runs after.
 $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
+'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.
 $term : Search term string
 &$title : Current Title object that is being returned (null if none found).
 
@@ -1813,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.
@@ -1831,47 +1946,64 @@ $result: The search result
 $terms: The search terms entered
 $page: The SpecialSearch object.
 
-'SiteNoticeBefore': Before the sitenotice/anonnotice is composed
+'ShowSearchHit': Customize display of search hit.
+$searchPage: The SpecialSearch instance.
+$result: The SearchResult to show
+$terms: Search terms, for highlighting
+&$link: HTML of link to the matching page. May be modified.
+&$redirect: HTML of redirect info. May be modified.
+&$section: HTML of matching section. May be modified.
+&$extract: HTML of content extract. May be modified.
+&$score: HTML of score. May be modified.
+&$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.
+
+'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
@@ -1880,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
 
@@ -1915,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
@@ -1969,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
@@ -2020,210 +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': Valled 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
 
-'SpecialWatchlistFilters': called after building form options at Watchlist
+'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.
 $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 attibute 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
-$result: Boolean|null; whether MediaWiki currently thinks this page is known
+&$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 seperate 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 occured (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
 
-'UploadForm:initial': before the upload form is generated
+'UpdateUserMailerFormattedPageStatus': Before notification email gets sent.
+$formattedPageStatus: list of valid page states
+
+'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
@@ -2231,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
+'UserClearNewTalkNotification': Called when clearing the "You have new
+messages!" message, return false to not delete it.
 $user: User (object) that'll 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 authentification.
 $user: User object
 &$timestamp: timestamp, change this to override local email authentification
-       timestamp
+  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
+$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
+  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 authentification.
 $user: User object
 &$timestamp: new timestamp, change this to override local email
 authentification 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 b3a3495..b04974b 100644 (file)
@@ -48,7 +48,7 @@ if ( isset( $_SERVER['MW_COMPILED'] ) ) {
 wfProfileIn( 'img_auth.php' );
 
 # Set action base paths so that WebRequest::getPathInfo()
-# recognizes the "X" as the 'title' in ../image_auth/X urls.
+# recognizes the "X" as the 'title' in ../img_auth.php/X urls.
 $wgArticlePath = false; # Don't let a "/*" article path clober our action path
 $wgActionPaths = array( "$wgUploadPath/" );
 
index 19552bc..8201763 100644 (file)
@@ -455,9 +455,10 @@ abstract class FormAction extends Action {
 
        /**
         * @see Action::execute()
-        * @throws ErrorPageError
+        *
         * @param $data array|null
         * @param $captureErrors bool
+        * @throws ErrorPageError|Exception
         * @return bool
         */
        public function execute( array $data = null, $captureErrors = true ) {
@@ -546,7 +547,7 @@ abstract class FormlessAction extends Action {
         * forms, they probably won't have any data, but some (eg rollback) may do
         * @param $data Array values that would normally be in the GET request
         * @param $captureErrors Bool whether to catch exceptions and just return false
-        * @throws ErrorPageError
+        * @throws ErrorPageError|Exception
         * @return Bool whether execution was successful
         */
        public function execute( array $data = null, $captureErrors = true ) {
index 6bf94cc..23c31bf 100644 (file)
@@ -204,7 +204,7 @@ class AjaxResponse {
 
        /**
         * checkLastModified tells the client to use the client-cached response if
-        * possible. If sucessful, the AjaxResponse is disabled so that
+        * possible. If successful, the AjaxResponse is disabled so that
         * any future call to AjaxResponse::printText() have no effect.
         *
         * @param $timestamp string
diff --git a/includes/ArrayUtils.php b/includes/ArrayUtils.php
new file mode 100644 (file)
index 0000000..4ff31b8
--- /dev/null
@@ -0,0 +1,34 @@
+<?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 0eb0c68..10cbac7 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
         */
@@ -515,7 +513,7 @@ class Article extends Page {
         * page of the given title.
         */
        public function view() {
-               global $wgParser, $wgUseFileCache, $wgUseETag, $wgDebugToolbar;
+               global $wgUseFileCache, $wgUseETag, $wgDebugToolbar;
 
                wfProfileIn( __METHOD__ );
 
@@ -688,7 +686,7 @@ class Article extends Page {
                                                $outputDone = true;
                                        } else {
                                                $content = $this->getContentObject();
-                                               $rt = $content->getRedirectChain();
+                                               $rt = $content ? $content->getRedirectChain() : null;
                                                if ( $rt ) {
                                                        wfDebug( __METHOD__ . ": showing redirect=no page\n" );
                                                        # Viewing a redirect page (e.g. with parameter redirect=no)
@@ -704,9 +702,8 @@ class Article extends Page {
                                        # Run the parse, protected by a pool counter
                                        wfDebug( __METHOD__ . ": doing uncached parse\n" );
 
-                                       // @todo: shouldn't we be passing $this->getPage() to PoolWorkArticleView instead of plain $this?
-                                       $poolArticleView = new PoolWorkArticleView( $this, $parserOptions,
-                                               $this->getRevIdFetched(), $useParserCache, $this->getContentObject(), $this->getContext() );
+                                       $poolArticleView = new PoolWorkArticleView( $this->getPage(), $parserOptions,
+                                               $this->getRevIdFetched(), $useParserCache, $this->getContentObject() );
 
                                        if ( !$poolArticleView->execute() ) {
                                                $error = $poolArticleView->getError();
@@ -842,10 +839,14 @@ class Article extends Page {
                                'clearyourcache' );
                }
 
-               // Give hooks a chance to customise the output
-               if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
-                       $po = $this->mContentObject->getParserOutput( $this->getTitle() );
-                       $outputPage->addHTML( $po->getText() );
+               $this->fetchContentObject();
+
+               if ( $this->mContentObject ) {
+                       // Give hooks a chance to customise the output
+                       if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->mContentObject, $this->getTitle(), $outputPage ) ) ) {
+                               $po = $this->mContentObject->getParserOutput( $this->getTitle() );
+                               $outputPage->addHTML( $po->getText() );
+                       }
                }
        }
 
@@ -861,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'
+                               );
                        }
                }
 
@@ -985,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 );
@@ -1041,6 +1046,8 @@ class Article extends Page {
         * If patrol is possible, output a patrol UI box. This is called from the
         * footer section of ordinary page views. If patrol is not possible or not
         * desired, does nothing.
+        * Side effect: When the patrol link is build, this method will call
+        * OutputPage::preventClickjacking() and load mediawiki.page.patrol.ajax.
         */
        public function showPatrolFooter() {
                $request = $this->getContext()->getRequest();
@@ -1053,7 +1060,9 @@ class Article extends Page {
                }
 
                $token = $user->getEditToken( $rcid );
+
                $outputPage->preventClickjacking();
+               $outputPage->addModules( 'mediawiki.page.patrol.ajax' );
 
                $link = Linker::linkKnown(
                        $this->getTitle(),
index dcaaf5a..5eb497d 100644 (file)
@@ -33,12 +33,12 @@ $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',
        'AuthPluginUser' => 'includes/AuthPlugin.php',
        'Autopromote' => 'includes/Autopromote.php',
-       'BacklinkCache' => 'includes/BacklinkCache.php',
        'BadTitleError' => 'includes/Exception.php',
        'BaseTemplate' => 'includes/SkinTemplate.php',
        'Block' => 'includes/Block.php',
@@ -71,8 +71,6 @@ $wgAutoloadLocalClasses = array(
        'DeferredUpdates' => 'includes/DeferredUpdates.php',
        'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
        'DerivativeRequest' => 'includes/WebRequest.php',
-       'DeviceDetection' => 'includes/mobile/DeviceDetection.php',
-       'DeviceProperties' => 'includes/mobile/DeviceDetection.php',
        'DiffHistoryBlob' => 'includes/HistoryBlob.php',
        'DoubleReplacer' => 'includes/StringUtils.php',
        'DummyLinker' => 'includes/Linker.php',
@@ -93,9 +91,9 @@ $wgAutoloadLocalClasses = array(
        'ErrorPageError' => 'includes/Exception.php',
        'ExplodeIterator' => 'includes/StringUtils.php',
        'ExternalEdit' => 'includes/ExternalEdit.php',
-       'ExternalStore' => 'includes/ExternalStore.php',
-       'ExternalStoreDB' => 'includes/ExternalStoreDB.php',
-       'ExternalStoreHttp' => 'includes/ExternalStoreHttp.php',
+       'ExternalStore' => 'includes/externalstore/ExternalStore.php',
+       'ExternalStoreDB' => 'includes/externalstore/ExternalStoreDB.php',
+       'ExternalStoreHttp' => 'includes/externalstore/ExternalStoreHttp.php',
        'ExternalUser' => 'includes/ExternalUser.php',
        'FakeTitle' => 'includes/FakeTitle.php',
        'Fallback' => 'includes/Fallback.php',
@@ -117,6 +115,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',
@@ -138,8 +137,6 @@ $wgAutoloadLocalClasses = array(
        'HttpRequest' => 'includes/HttpFunctions.old.php',
        'ICacheHelper' => 'includes/CacheHelper.php',
        'IcuCollation' => 'includes/Collation.php',
-       'IDeviceProperties' => 'includes/mobile/DeviceDetection.php',
-       'IDeviceDetector' => 'includes/mobile/DeviceDetection.php',
        'IdentityCollation' => 'includes/Collation.php',
        'ImageGallery' => 'includes/ImageGallery.php',
        'ImageHistoryList' => 'includes/ImagePage.php',
@@ -152,10 +149,11 @@ $wgAutoloadLocalClasses = array(
        'IndexPager' => 'includes/Pager.php',
        'Interwiki' => 'includes/interwiki/Interwiki.php',
        'IP' => 'includes/IP.php',
-       'LCStore_Accel' => 'includes/LocalisationCache.php',
-       'LCStore_CDB' => 'includes/LocalisationCache.php',
-       'LCStore_DB' => 'includes/LocalisationCache.php',
-       'LCStore_Null' => 'includes/LocalisationCache.php',
+       'LCStore' => 'includes/cache/LocalisationCache.php',
+       'LCStore_Accel' => 'includes/cache/LocalisationCache.php',
+       'LCStore_CDB' => 'includes/cache/LocalisationCache.php',
+       'LCStore_DB' => 'includes/cache/LocalisationCache.php',
+       'LCStore_Null' => 'includes/cache/LocalisationCache.php',
        'LegacyTemplate' => 'includes/SkinLegacy.php',
        'License' => 'includes/Licenses.php',
        'Licenses' => 'includes/Licenses.php',
@@ -163,8 +161,8 @@ $wgAutoloadLocalClasses = array(
        'LinkFilter' => 'includes/LinkFilter.php',
        'LinksUpdate' => 'includes/LinksUpdate.php',
        'LinksDeletionUpdate' => 'includes/LinksUpdate.php',
-       'LocalisationCache' => 'includes/LocalisationCache.php',
-       'LocalisationCache_BulkLoad' => 'includes/LocalisationCache.php',
+       'LocalisationCache' => 'includes/cache/LocalisationCache.php',
+       'LocalisationCache_BulkLoad' => 'includes/cache/LocalisationCache.php',
        'MagicWord' => 'includes/MagicWord.php',
        'MagicWordArray' => 'includes/MagicWord.php',
        'MailAddress' => 'includes/UserMailer.php',
@@ -200,10 +198,12 @@ $wgAutoloadLocalClasses = array(
        'ProtectionForm' => 'includes/ProtectionForm.php',
        'QueryPage' => 'includes/QueryPage.php',
        'QuickTemplate' => 'includes/SkinTemplate.php',
+       'RawMessage' => 'includes/Message.php',
        'RCCacheEntry' => 'includes/ChangesList.php',
        'RdfMetaData' => 'includes/Metadata.php',
        'ReadOnlyError' => 'includes/Exception.php',
        'RecentChange' => 'includes/RecentChange.php',
+       'RedirectSpecialArticle' => 'includes/SpecialPage.php',
        'RedirectSpecialPage' => 'includes/SpecialPage.php',
        'RegexlikeReplacer' => 'includes/StringUtils.php',
        'ReplacementArray' => 'includes/StringUtils.php',
@@ -218,6 +218,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',
@@ -333,6 +334,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',
@@ -427,6 +429,7 @@ $wgAutoloadLocalClasses = array(
        'UsageException' => 'includes/api/ApiMain.php',
 
        # includes/cache
+       'BacklinkCache' => 'includes/cache/BacklinkCache.php',
        'CacheDependency' => 'includes/cache/CacheDependency.php',
        'ConstantDependency' => 'includes/cache/CacheDependency.php',
        'DependencyWrapper' => 'includes/cache/CacheDependency.php',
@@ -454,6 +457,7 @@ $wgAutoloadLocalClasses = array(
 
        # includes/dao
        'IDBAccessObject' => 'includes/dao/IDBAccessObject.php',
+       'DBAccessBase' => 'includes/dao/DBAccessBase.php',
 
        # includes/db
        'Blob' => 'includes/db/DatabaseUtility.php',
@@ -563,7 +567,7 @@ $wgAutoloadLocalClasses = array(
        'NullFileJournal' => 'includes/filebackend/filejournal/FileJournal.php',
        'LockManagerGroup' => 'includes/filebackend/lockmanager/LockManagerGroup.php',
        'LockManager' => 'includes/filebackend/lockmanager/LockManager.php',
-       'ScopedLock' => 'includes/filebackend/lockmanager/LockManager.php',
+       'ScopedLock' => 'includes/filebackend/lockmanager/ScopedLock.php',
        'FSLockManager' => 'includes/filebackend/lockmanager/FSLockManager.php',
        'DBLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
        'LSLockManager' => 'includes/filebackend/lockmanager/LSLockManager.php',
@@ -577,8 +581,8 @@ $wgAutoloadLocalClasses = array(
        'CopyFileOp' => 'includes/filebackend/FileOp.php',
        'MoveFileOp' => 'includes/filebackend/FileOp.php',
        'DeleteFileOp' => 'includes/filebackend/FileOp.php',
-       'ConcatenateFileOp' => 'includes/filebackend/FileOp.php',
        'CreateFileOp' => 'includes/filebackend/FileOp.php',
+       'DescribeFileOp' => 'includes/filebackend/FileOp.php',
        'NullFileOp' => 'includes/filebackend/FileOp.php',
 
        # includes/filerepo
@@ -613,7 +617,6 @@ $wgAutoloadLocalClasses = array(
        'Ibm_db2Updater' => 'includes/installer/Ibm_db2Updater.php',
        'InstallDocFormatter' => 'includes/installer/InstallDocFormatter.php',
        'Installer' => 'includes/installer/Installer.php',
-       'LBFactory_InstallerFake' => 'includes/installer/Installer.php',
        'LocalSettingsGenerator' => 'includes/installer/LocalSettingsGenerator.php',
        'MysqlInstaller' => 'includes/installer/MysqlInstaller.php',
        'MysqlUpdater' => 'includes/installer/MysqlUpdater.php',
@@ -653,6 +656,7 @@ $wgAutoloadLocalClasses = array(
 
        # includes/job/jobs
        'DoubleRedirectJob' => 'includes/job/jobs/DoubleRedirectJob.php',
+       'DuplicateJob' => 'includes/job/jobs/DuplicateJob.php',
        'EmaillingJob' => 'includes/job/jobs/EmaillingJob.php',
        'EnotifNotifyJob' => 'includes/job/jobs/EnotifNotifyJob.php',
        'HTMLCacheUpdateJob' => 'includes/job/jobs/HTMLCacheUpdateJob.php',
@@ -850,7 +854,6 @@ $wgAutoloadLocalClasses = array(
        'RevDel_LogList' => 'includes/revisiondelete/RevisionDelete.php',
        'RevDel_RevisionItem' => 'includes/revisiondelete/RevisionDelete.php',
        'RevDel_RevisionList' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevisionDelete' => 'includes/revisiondelete/RevisionDelete.php',
        'RevisionDeleter' => 'includes/revisiondelete/RevisionDeleter.php',
        'RevisionDeleteUser' => 'includes/revisiondelete/RevisionDeleteUser.php',
 
@@ -894,8 +897,6 @@ $wgAutoloadLocalClasses = array(
        'BrokenRedirectsPage' => 'includes/specials/SpecialBrokenRedirects.php',
        'CategoryPager' => 'includes/specials/SpecialCategories.php',
        'ContribsPager' => 'includes/specials/SpecialContributions.php',
-       'DBLockForm' => 'includes/specials/SpecialLockdb.php',
-       'DBUnlockForm' => 'includes/specials/SpecialUnlockdb.php',
        'DeadendPagesPage' => 'includes/specials/SpecialDeadendpages.php',
        'DeletedContribsPager' => 'includes/specials/SpecialDeletedContributions.php',
        'DeletedContributionsPage' => 'includes/specials/SpecialDeletedContributions.php',
@@ -960,7 +961,6 @@ $wgAutoloadLocalClasses = array(
        'SpecialLockdb' => 'includes/specials/SpecialLockdb.php',
        'SpecialLog' => 'includes/specials/SpecialLog.php',
        'SpecialMergeHistory' => 'includes/specials/SpecialMergeHistory.php',
-       'SpecialMostlinkedtemplates' => 'includes/specials/SpecialMostlinkedtemplates.php',
        'SpecialNewFiles' => 'includes/specials/SpecialNewimages.php',
        'SpecialNewpages' => 'includes/specials/SpecialNewpages.php',
        'SpecialPasswordReset' => 'includes/specials/SpecialPasswordReset.php',
@@ -1020,7 +1020,6 @@ $wgAutoloadLocalClasses = array(
        'UploadFromUrl' => 'includes/upload/UploadFromUrl.php',
        'UploadStash' => 'includes/upload/UploadStash.php',
        'UploadStashBadPathException' => 'includes/upload/UploadStash.php',
-       'UploadStashBadVersionException' => 'includes/upload/UploadStash.php',
        'UploadStashFile' => 'includes/upload/UploadStash.php',
        'UploadStashFileException' => 'includes/upload/UploadStash.php',
        'UploadStashFileNotFoundException' => 'includes/upload/UploadStash.php',
@@ -1044,14 +1043,17 @@ $wgAutoloadLocalClasses = array(
        'CLDRPluralRuleError' => 'languages/utils/CLDRPluralRuleEvaluator.php',
 
        # maintenance
+       'BackupDumper' => 'maintenance/backup.inc',
        'ConvertLinks' => 'maintenance/convertLinks.php',
        'DeleteArchivedFilesImplementation' => 'maintenance/deleteArchivedFiles.inc',
        'DeleteArchivedRevisionsImplementation' => 'maintenance/deleteArchivedRevisions.inc',
        'DeleteDefaultMessages' => 'maintenance/deleteDefaultMessages.php',
+       'DumpDBZip2Output' => 'maintenance/backup.inc',
+       'ExportProgressFilter' => 'maintenance/backup.inc',
        'FakeMaintenance' => 'maintenance/Maintenance.php',
+       'FixExtLinksProtocolRelative' => 'maintenance/fixExtLinksProtocolRelative.php',
        'LoggedUpdateMaintenance' => 'maintenance/Maintenance.php',
        'Maintenance' => 'maintenance/Maintenance.php',
-       'FixExtLinksProtocolRelative' => 'maintenance/fixExtLinksProtocolRelative.php',
        'PopulateCategory' => 'maintenance/populateCategory.php',
        'PopulateImageSha1' => 'maintenance/populateImageSha1.php',
        'PopulateFilearchiveSha1' => 'maintenance/populateFilearchiveSha1.php',
@@ -1084,47 +1086,6 @@ $wgAutoloadLocalClasses = array(
        'InstallerOverrides' => 'mw-config/overrides.php',
        'MyLocalSettingsGenerator' => 'mw-config/overrides.php',
 
-       # tests
-       'DbTestPreviewer' => 'tests/testHelpers.inc',
-       'DbTestRecorder' => 'tests/testHelpers.inc',
-       'DelayedParserTest' => 'tests/testHelpers.inc',
-       'TestFileIterator' => 'tests/testHelpers.inc',
-       'TestRecorder' => 'tests/testHelpers.inc',
-
-       # tests/phpunit
-       'RevisionStorageTest' => 'tests/phpunit/includes/RevisionStorageTest.php',
-       'WikiPageTest' => 'tests/phpunit/includes/WikiPageTest.php',
-
-       # tests/phpunit/content
-       'DummyContentHandlerForTesting' => 'tests/phpunit/includes/content/ContentHandlerTest.php',
-       'DummyContentForTesting' => 'tests/phpunit/includes/content/ContentHandlerTest.php',
-       'JavascriptContentTest' => 'tests/phpunit/includes/content/JavascriptContentTest.php',
-       'TextContentTest' => 'tests/phpunit/includes/content/TextContentTest.php',
-
-       # tests/phpunit/includes
-       'GenericArrayObjectTest' => 'tests/phpunit/includes/libs/GenericArrayObjectTest.php',
-
-       # tests/phpunit/includes/db
-       'ORMRowTest' => 'tests/phpunit/includes/db/ORMRowTest.php',
-
-       # tests/phpunit/includes/site
-       'SiteObjectTest' => 'tests/phpunit/includes/site/SiteObjectTest.php',
-       'TestSites' => 'tests/phpunit/includes/site/TestSites.php',
-
-       # tests/parser
-       'ParserTest' => 'tests/parser/parserTest.inc',
-       'ParserTestParserHook' => 'tests/parser/parserTestsParserHook.php',
-
-       # tests/selenium
-       'Selenium' => 'tests/selenium/Selenium.php',
-       'SeleniumLoader' => 'tests/selenium/SeleniumLoader.php',
-       'SeleniumTestCase' => 'tests/selenium/SeleniumTestCase.php',
-       'SeleniumTestConsoleLogger' => 'tests/selenium/SeleniumTestConsoleLogger.php',
-       'SeleniumTestHTMLLogger' => 'tests/selenium/SeleniumTestHTMLLogger.php',
-       'SeleniumTestListener' => 'tests/selenium/SeleniumTestListener.php',
-       'SeleniumTestSuite' => 'tests/selenium/SeleniumTestSuite.php',
-       'SeleniumConfig' => 'tests/selenium/SeleniumConfig.php',
-
        # skins
        'CologneBlueTemplate' => 'skins/CologneBlue.php',
        'ModernTemplate' => 'skins/Modern.php',
diff --git a/includes/BacklinkCache.php b/includes/BacklinkCache.php
deleted file mode 100644 (file)
index ba8691b..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-<?php
-/**
- * Class for fetching backlink lists, approximate backlink counts and
- * partitions.
- *
- * 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
- * @author Tim Starling
- * @copyright © 2009, Tim Starling, Domas Mituzas
- * @copyright © 2010, Max Sem
- * @copyright © 2011, Antoine Musso
- */
-
-/**
- * Class for fetching backlink lists, approximate backlink counts and
- * partitions. This is a shared cache.
- *
- * Instances of this class should typically be fetched with the method
- * $title->getBacklinkCache().
- *
- * Ideally you should only get your backlinks from here when you think
- * there is some advantage in caching them. Otherwise it's just a waste
- * of memory.
- *
- * Introduced by r47317
- *
- * @internal documentation reviewed on 18 Mar 2011 by hashar
- */
-class BacklinkCache {
-       /** @var ProcessCacheLRU */
-       protected static $cache;
-
-       /**
-        * Multi dimensions array representing batches. Keys are:
-        *  > (string) links table name
-        *    > 'numRows' : Number of rows for this link table
-        *    > 'batches' : array( $start, $end )
-        *
-        * @see BacklinkCache::partitionResult()
-        *
-        * Cleared with BacklinkCache::clear()
-        */
-       protected $partitionCache = array();
-
-       /**
-        * Contains the whole links from a database result.
-        * This is raw data that will be partitioned in $partitionCache
-        *
-        * Initialized with BacklinkCache::getLinks()
-        * Cleared with BacklinkCache::clear()
-        */
-       protected $fullResultCache = array();
-
-       /**
-        * Local copy of a database object.
-        *
-        * Accessor: BacklinkCache::getDB()
-        * Mutator : BacklinkCache::setDB()
-        * Cleared with BacklinkCache::clear()
-        */
-       protected $db;
-
-       /**
-        * Local copy of a Title object
-        */
-       protected $title;
-
-       const CACHE_EXPIRY = 3600;
-
-       /**
-        * Create a new BacklinkCache
-        *
-        * @param Title $title : Title object to create a backlink cache for
-        */
-       public function __construct( Title $title ) {
-               $this->title = $title;
-       }
-
-       /**
-        * Create a new BacklinkCache or reuse any existing one.
-        * Currently, only one cache instance can exist; callers that
-        * need multiple backlink cache objects should keep them in scope.
-        *
-        * @param Title $title : Title object to get a backlink cache for
-        * @return BacklinkCache
-        */
-       public static function get( Title $title ) {
-               if ( !self::$cache ) { // init cache
-                       self::$cache = new ProcessCacheLRU( 1 );
-               }
-               $dbKey = $title->getPrefixedDBkey();
-               if ( !self::$cache->has( $dbKey, 'obj' ) ) {
-                       self::$cache->set( $dbKey, 'obj', new self( $title ) );
-               }
-               return self::$cache->get( $dbKey, 'obj' );
-       }
-
-       /**
-        * Serialization handler, diasallows to serialize the database to prevent
-        * failures after this class is deserialized from cache with dead DB
-        * connection.
-        *
-        * @return array
-        */
-       function __sleep() {
-               return array( 'partitionCache', 'fullResultCache', 'title' );
-       }
-
-       /**
-        * Clear locally stored data and database object.
-        */
-       public function clear() {
-               $this->partitionCache = array();
-               $this->fullResultCache = array();
-               unset( $this->db );
-       }
-
-       /**
-        * Set the Database object to use
-        *
-        * @param $db DatabaseBase
-        */
-       public function setDB( $db ) {
-               $this->db = $db;
-       }
-
-       /**
-        * Get the slave connection to the database
-        * When non existing, will initialize the connection.
-        * @return DatabaseBase object
-        */
-       protected function getDB() {
-               if ( !isset( $this->db ) ) {
-                       $this->db = wfGetDB( DB_SLAVE );
-               }
-
-               return $this->db;
-       }
-
-       /**
-        * Get the backlinks for a given table. Cached in process memory only.
-        * @param $table String
-        * @param $startId Integer or false
-        * @param $endId Integer or false
-        * @return TitleArrayFromResult
-        */
-       public function getLinks( $table, $startId = false, $endId = false ) {
-               wfProfileIn( __METHOD__ );
-
-               $fromField = $this->getPrefix( $table ) . '_from';
-
-               if ( $startId || $endId ) {
-                       // Partial range, not cached
-                       wfDebug( __METHOD__ . ": from DB (uncacheable range)\n" );
-                       $conds = $this->getConditions( $table );
-
-                       // Use the from field in the condition rather than the joined page_id,
-                       // because databases are stupid and don't necessarily propagate indexes.
-                       if ( $startId ) {
-                               $conds[] = "$fromField >= " . intval( $startId );
-                       }
-
-                       if ( $endId ) {
-                               $conds[] = "$fromField <= " . intval( $endId );
-                       }
-
-                       $res = $this->getDB()->select(
-                               array( $table, 'page' ),
-                               array( 'page_namespace', 'page_title', 'page_id' ),
-                               $conds,
-                               __METHOD__,
-                               array(
-                                       'STRAIGHT_JOIN',
-                                       'ORDER BY' => $fromField
-                               ) );
-                       $ta = TitleArray::newFromResult( $res );
-
-                       wfProfileOut( __METHOD__ );
-                       return $ta;
-               }
-
-               // @todo FIXME: Make this a function?
-               if ( !isset( $this->fullResultCache[$table] ) ) {
-                       wfDebug( __METHOD__ . ": from DB\n" );
-                       $res = $this->getDB()->select(
-                               array( $table, 'page' ),
-                               array( 'page_namespace', 'page_title', 'page_id' ),
-                               $this->getConditions( $table ),
-                               __METHOD__,
-                               array(
-                                       'STRAIGHT_JOIN',
-                                       'ORDER BY' => $fromField,
-                               ) );
-                       $this->fullResultCache[$table] = $res;
-               }
-
-               $ta = TitleArray::newFromResult( $this->fullResultCache[$table] );
-
-               wfProfileOut( __METHOD__ );
-               return $ta;
-       }
-
-       /**
-        * Get the field name prefix for a given table
-        * @param $table String
-        * @throws MWException
-        * @return null|string
-        */
-       protected function getPrefix( $table ) {
-               static $prefixes = array(
-                       'pagelinks'     => 'pl',
-                       'imagelinks'    => 'il',
-                       'categorylinks' => 'cl',
-                       'templatelinks' => 'tl',
-                       'redirect'      => 'rd',
-               );
-
-               if ( isset( $prefixes[$table] ) ) {
-                       return $prefixes[$table];
-               } else {
-                       $prefix = null;
-                       wfRunHooks( 'BacklinkCacheGetPrefix', array( $table, &$prefix ) );
-                       if( $prefix ) {
-                               return $prefix;
-                       } else {
-                               throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
-                       }
-               }
-       }
-
-       /**
-        * Get the SQL condition array for selecting backlinks, with a join
-        * on the page table.
-        * @param $table String
-        * @throws MWException
-        * @return array|null
-        */
-       protected function getConditions( $table ) {
-               $prefix = $this->getPrefix( $table );
-
-               // @todo FIXME: imagelinks and categorylinks do not rely on getNamespace,
-               // they could be moved up for nicer case statements
-               switch ( $table ) {
-                       case 'pagelinks':
-                       case 'templatelinks':
-                               $conds = array(
-                                       "{$prefix}_namespace" => $this->title->getNamespace(),
-                                       "{$prefix}_title"     => $this->title->getDBkey(),
-                                       "page_id={$prefix}_from"
-                               );
-                               break;
-                       case 'redirect':
-                               $conds = array(
-                                       "{$prefix}_namespace" => $this->title->getNamespace(),
-                                       "{$prefix}_title"     => $this->title->getDBkey(),
-                                       $this->getDb()->makeList( array(
-                                               "{$prefix}_interwiki = ''",
-                                               "{$prefix}_interwiki is null",
-                                       ), LIST_OR ),
-                                       "page_id={$prefix}_from"
-                               );
-                               break;
-                       case 'imagelinks':
-                               $conds = array(
-                                       'il_to' => $this->title->getDBkey(),
-                                       'page_id=il_from'
-                               );
-                               break;
-                       case 'categorylinks':
-                               $conds = array(
-                                       'cl_to' => $this->title->getDBkey(),
-                                       'page_id=cl_from',
-                               );
-                               break;
-                       default:
-                               $conds = null;
-                               wfRunHooks( 'BacklinkCacheGetConditions', array( $table, $this->title, &$conds ) );
-                               if( !$conds ) {
-                                       throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
-                               }
-               }
-
-               return $conds;
-       }
-
-       /**
-        * Get the approximate number of backlinks
-        * @param $table String
-        * @return integer
-        */
-       public function getNumLinks( $table ) {
-               if ( isset( $this->fullResultCache[$table] ) ) {
-                       return $this->fullResultCache[$table]->numRows();
-               }
-
-               if ( isset( $this->partitionCache[$table] ) ) {
-                       $entry = reset( $this->partitionCache[$table] );
-                       return $entry['numRows'];
-               }
-
-               $titleArray = $this->getLinks( $table );
-
-               return $titleArray->count();
-       }
-
-       /**
-        * Partition the backlinks into batches.
-        * Returns an array giving the start and end of each range. The first
-        * batch has a start of false, and the last batch has an end of false.
-        *
-        * @param $table String: the links table name
-        * @param $batchSize Integer
-        * @return Array
-        */
-       public function partition( $table, $batchSize ) {
-
-               // 1) try partition cache ...
-
-               if ( isset( $this->partitionCache[$table][$batchSize] ) ) {
-                       wfDebug( __METHOD__ . ": got from partition cache\n" );
-                       return $this->partitionCache[$table][$batchSize]['batches'];
-               }
-
-               $this->partitionCache[$table][$batchSize] = false;
-               $cacheEntry =& $this->partitionCache[$table][$batchSize];
-
-               // 2) ... then try full result cache ...
-
-               if ( isset( $this->fullResultCache[$table] ) ) {
-                       $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize );
-                       wfDebug( __METHOD__ . ": got from full result cache\n" );
-
-                       return $cacheEntry['batches'];
-               }
-
-               // 3) ... fallback to memcached ...
-
-               global $wgMemc;
-
-               $memcKey = wfMemcKey(
-                       'backlinks',
-                       md5( $this->title->getPrefixedDBkey() ),
-                       $table,
-                       $batchSize
-               );
-
-               $memcValue = $wgMemc->get( $memcKey );
-
-               if ( is_array( $memcValue ) ) {
-                       $cacheEntry = $memcValue;
-                       wfDebug( __METHOD__ . ": got from memcached $memcKey\n" );
-
-                       return $cacheEntry['batches'];
-               }
-
-
-               // 4) ... finally fetch from the slow database :(
-
-               $this->getLinks( $table );
-               $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize );
-               // Save to memcached
-               $wgMemc->set( $memcKey, $cacheEntry, self::CACHE_EXPIRY );
-
-               wfDebug( __METHOD__ . ": got from database\n" );
-               return $cacheEntry['batches'];
-       }
-
-       /**
-        * Partition a DB result with backlinks in it into batches
-        * @param $res ResultWrapper database result
-        * @param $batchSize integer
-        * @throws MWException
-        * @return array @see
-        */
-       protected function partitionResult( $res, $batchSize ) {
-               $batches = array();
-               $numRows = $res->numRows();
-               $numBatches = ceil( $numRows / $batchSize );
-
-               for ( $i = 0; $i < $numBatches; $i++ ) {
-                       if ( $i == 0  ) {
-                               $start = false;
-                       } else {
-                               $rowNum = intval( $numRows * $i / $numBatches );
-                               $res->seek( $rowNum );
-                               $row = $res->fetchObject();
-                               $start = $row->page_id;
-                       }
-
-                       if ( $i == $numBatches - 1 ) {
-                               $end = false;
-                       } else {
-                               $rowNum = intval( $numRows * ( $i + 1 ) / $numBatches );
-                               $res->seek( $rowNum );
-                               $row = $res->fetchObject();
-                               $end = $row->page_id - 1;
-                       }
-
-                       # Sanity check order
-                       if ( $start && $end && $start > $end ) {
-                               throw new MWException( __METHOD__ . ': Internal error: query result out of order' );
-                       }
-
-                       $batches[] = array( $start, $end );
-               }
-
-               return array( 'numRows' => $numRows, 'batches' => $batches );
-       }
-}
index e05b2ac..b81cf3a 100644 (file)
@@ -69,7 +69,7 @@ class Block {
                        $timestamp = wfTimestampNow();
                }
 
-               if( count( func_get_args() ) > 0 ){
+               if( count( func_get_args() ) > 0 ) {
                        # Soon... :D
                        # wfDeprecated( __METHOD__ . " with arguments" );
                }
@@ -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;
@@ -510,7 +510,7 @@ class Block {
         * @param $db DatabaseBase
         * @return Array
         */
-       protected function getDatabaseArray( $db = null ){
+       protected function getDatabaseArray( $db = null ) {
                if( !$db ){
                        $db = wfGetDB( DB_SLAVE );
                }
@@ -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' );
@@ -587,7 +594,7 @@ class Block {
                $res = $dbr->select( 'recentchanges', array( 'rc_ip' ), $conds,
                        __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__ );
+               }
        }
 
        /**
@@ -1050,7 +1059,7 @@ class Block {
                        # 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 );
 
@@ -1066,12 +1075,13 @@ 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
@@ -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 ffd7bb8..b9c9609 100644 (file)
@@ -58,6 +58,9 @@ class Category {
                        # Already initialized
                        return true;
                }
+
+               wfProfileIn( __METHOD__ );
+
                $dbr = wfGetDB( DB_SLAVE );
                $row = $dbr->selectRow(
                        'category',
@@ -66,6 +69,8 @@ class Category {
                        __METHOD__
                );
 
+               wfProfileOut( __METHOD__ );
+
                if ( !$row ) {
                        # Okay, there were no contents.  Nothing to initialize.
                        if ( $this->mTitle ) {
@@ -190,25 +195,37 @@ class Category {
        }
 
        /** @return mixed DB key name, or false on failure */
-       public function getName() { return $this->getX( 'mName' ); }
+       public function getName() {
+               return $this->getX( 'mName' );
+       }
 
        /** @return mixed Category ID, or false on failure */
-       public function getID() { return $this->getX( 'mID' ); }
+       public function getID() {
+               return $this->getX( 'mID' );
+       }
 
        /** @return mixed Total number of member pages, or false on failure */
-       public function getPageCount() { return $this->getX( 'mPages' ); }
+       public function getPageCount() {
+               return $this->getX( 'mPages' );
+       }
 
        /** @return mixed Number of subcategories, or false on failure */
-       public function getSubcatCount() { return $this->getX( 'mSubcats' ); }
+       public function getSubcatCount() {
+               return $this->getX( 'mSubcats' );
+       }
 
        /** @return mixed Number of member files, or false on failure */
-       public function getFileCount() { return $this->getX( 'mFiles' ); }
+       public function getFileCount() {
+               return $this->getX( 'mFiles' );
+       }
 
        /**
         * @return Title|bool Title for this category, or false on failure.
         */
        public function getTitle() {
-               if ( $this->mTitle ) return $this->mTitle;
+               if ( $this->mTitle ) {
+                       return $this->mTitle;
+               }
 
                if ( !$this->initialize() ) {
                        return false;
@@ -226,20 +243,22 @@ class Category {
         * @return TitleArray object for category members.
         */
        public function getMembers( $limit = false, $offset = '' ) {
+               wfProfileIn( __METHOD__ );
+
                $dbr = wfGetDB( DB_SLAVE );
 
                $conds = array( 'cl_to' => $this->getName(), 'cl_from = page_id' );
                $options = array( 'ORDER BY' => 'cl_sortkey' );
 
                if ( $limit ) {
-                       $options[ 'LIMIT' ] = $limit;
+                       $options['LIMIT'] = $limit;
                }
 
                if ( $offset !== '' ) {
                        $conds[] = 'cl_sortkey > ' . $dbr->addQuotes( $offset );
                }
 
-               return TitleArray::newFromResult(
+               $result = TitleArray::newFromResult(
                        $dbr->select(
                                array( 'page', 'categorylinks' ),
                                array( 'page_id', 'page_namespace', 'page_title', 'page_len',
@@ -249,6 +268,10 @@ class Category {
                                $options
                        )
                );
+
+               wfProfileOut( __METHOD__ );
+
+               return $result;
        }
 
        /**
@@ -259,7 +282,7 @@ class Category {
                if ( !$this->initialize() ) {
                        return false;
                }
-               return $this-> { $key } ;
+               return $this->{$key};
        }
 
        /**
@@ -279,8 +302,10 @@ class Category {
                        }
                }
 
+               wfProfileIn( __METHOD__ );
+
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__  );
+               $dbw->begin( __METHOD__ );
 
                # Insert the row if it doesn't exist yet (e.g., this is being run via
                # update.php from a pre-1.16 schema).  TODO: This will cause lots and
@@ -303,12 +328,12 @@ class Category {
                $result = $dbw->selectRow(
                        array( 'categorylinks', 'page' ),
                        array( 'pages' => 'COUNT(*)',
-                                  'subcats' => "COUNT($cond1)",
-                                  'files' => "COUNT($cond2)"
+                               'subcats' => "COUNT($cond1)",
+                               'files' => "COUNT($cond2)"
                        ),
                        array( 'cl_to' => $this->mName, 'page_id = cl_from' ),
                        __METHOD__,
-                       'LOCK IN SHARE MODE'
+                       array( 'LOCK IN SHARE MODE' )
                );
                $ret = $dbw->update(
                        'category',
@@ -322,6 +347,8 @@ class Category {
                );
                $dbw->commit( __METHOD__ );
 
+               wfProfileOut( __METHOD__ );
+
                # Now we should update our local counts.
                $this->mPages   = $result->pages;
                $this->mSubcats = $result->subcats;
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 3d66b74..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 );
@@ -173,7 +174,7 @@ class CategoryViewer extends ContextSource {
 
        /**
         * Add a subcategory to the internal lists, using a title object
-        * @deprecated since 1.17 kept for compatibility, please use addSubcategoryObject instead
+        * @deprecated since 1.17 kept for compatibility, use addSubcategoryObject instead
         */
        function addSubcategory( Title $title, $sortkey, $pageLength ) {
                wfDeprecated( __METHOD__, '1.17' );
@@ -181,14 +182,14 @@ class CategoryViewer extends ContextSource {
        }
 
        /**
-       * Get the character to be used for sorting subcategories.
-       * If there's a link from Category:A to Category:B, the sortkey of the resulting
-       * entry in the categorylinks table is Category:A, not A, which it SHOULD be.
-       * Workaround: If sortkey == "Category:".$title, than use $title for sorting,
-       * else use sortkey...
-       *
-       * @param Title $title
-       * @param string $sortkey The human-readable sortkey (before transforming to icu or whatever).
+        * Get the character to be used for sorting subcategories.
+        * If there's a link from Category:A to Category:B, the sortkey of the resulting
+        * entry in the categorylinks table is Category:A, not A, which it SHOULD be.
+        * Workaround: If sortkey == "Category:".$title, than use $title for sorting,
+        * else use sortkey...
+        *
+        * @param Title $title
+        * @param string $sortkey The human-readable sortkey (before transforming to icu or whatever).
         * @return string
         */
        function getSubcategorySortChar( $title, $sortkey ) {
@@ -259,15 +260,15 @@ class CategoryViewer extends ContextSource {
 
        function finaliseCategoryState() {
                if ( $this->flip['subcat'] ) {
-                       $this->children            = array_reverse( $this->children );
+                       $this->children = array_reverse( $this->children );
                        $this->children_start_char = array_reverse( $this->children_start_char );
                }
                if ( $this->flip['page'] ) {
-                       $this->articles            = array_reverse( $this->articles );
+                       $this->articles = array_reverse( $this->articles );
                        $this->articles_start_char = array_reverse( $this->articles_start_char );
                }
                if ( !$this->showGallery && $this->flip['file'] ) {
-                       $this->imgsNoGallery            = array_reverse( $this->imgsNoGallery );
+                       $this->imgsNoGallery = array_reverse( $this->imgsNoGallery );
                        $this->imgsNoGallery_start_char = array_reverse( $this->imgsNoGallery_start_char );
                }
        }
@@ -302,7 +303,7 @@ class CategoryViewer extends ContextSource {
                                        'page_is_redirect', 'cl_sortkey', 'cat_id', 'cat_title',
                                        'cat_subcats', 'cat_pages', 'cat_files',
                                        'cl_sortkey_prefix', 'cl_collation' ),
-                               array_merge( array( 'cl_to' => $this->title->getDBkey() ),  $extraConds ),
+                               array_merge( array( 'cl_to' => $this->title->getDBkey() ), $extraConds ),
                                __METHOD__,
                                array(
                                        'USE INDEX' => array( 'categorylinks' => 'cl_sortkey' ),
@@ -310,8 +311,11 @@ class CategoryViewer extends ContextSource {
                                        'ORDER BY' => $this->flip[$type] ? 'cl_sortkey DESC' : 'cl_sortkey',
                                ),
                                array(
-                                       'categorylinks'  => array( 'INNER JOIN', 'cl_from = page_id' ),
-                                       'category' => array( 'LEFT JOIN', 'cat_title = page_title AND page_namespace = ' . NS_CATEGORY )
+                                       'categorylinks' => array( 'INNER JOIN', 'cl_from = page_id' ),
+                                       'category' => array( 'LEFT JOIN', array(
+                                               'cat_title = page_title',
+                                               'page_namespace' => NS_CATEGORY
+                                       ))
                                )
                        );
 
@@ -469,7 +473,7 @@ class CategoryViewer extends ContextSource {
         */
        function formatList( $articles, $articles_start_char, $cutoff = 6 ) {
                $list = '';
-               if ( count ( $articles ) > $cutoff ) {
+               if ( count( $articles ) > $cutoff ) {
                        $list = self::columnList( $articles, $articles_start_char );
                } elseif ( count( $articles ) > 0 ) {
                        // for short lists of articles in categories.
@@ -478,7 +482,7 @@ class CategoryViewer extends ContextSource {
 
                $pageLang = $this->title->getPageLanguage();
                $attribs = array( 'lang' => $pageLang->getCode(), 'dir' => $pageLang->getDir(),
-                       'class' => 'mw-content-'.$pageLang->getDir() );
+                       'class' => 'mw-content-' . $pageLang->getDir() );
                $list = Html::rawElement( 'div', $attribs, $list );
 
                return $list;
@@ -604,7 +608,7 @@ class CategoryViewer extends ContextSource {
                        );
                }
 
-               return $this->msg('categoryviewer-pagedlinks')->rawParams($prevLink, $nextLink)->escaped();
+               return $this->msg( 'categoryviewer-pagedlinks' )->rawParams( $prevLink, $nextLink )->escaped();
        }
 
        /**
@@ -635,6 +639,7 @@ class CategoryViewer extends ContextSource {
                return Title::makeTitle( $title->getNamespace(),
                        $title->getDBkey(), $fragment );
        }
+
        /**
         * What to do if the category table conflicts with the number of results
         * returned?  This function says what. Each type is considered independently
@@ -676,8 +681,9 @@ class CategoryViewer extends ContextSource {
                        $fromOrUntil = true;
                }
 
-               if ( $dbcnt == $rescnt || ( ( $rescnt == $this->limit || $fromOrUntil )
-                       && $dbcnt > $rescnt ) ) {
+               if ( $dbcnt == $rescnt ||
+                       ( ( $rescnt == $this->limit || $fromOrUntil ) && $dbcnt > $rescnt )
+               ) {
                        # Case 1: seems sane.
                        $totalcnt = $dbcnt;
                } elseif ( $rescnt < $this->limit && !$fromOrUntil ) {
index e2b6a0c..589950f 100644 (file)
  *
  * Example use :
  * <code>
- *     # Determines whether the article with the page_id 12345 is in both
- *     # "Category 1" and "Category 2" or their subcategories, respectively
+ *     # Determines whether the article with the page_id 12345 is in both
+ *     # "Category 1" and "Category 2" or their subcategories, respectively
  *
- *     $cf = new Categoryfinder;
- *     $cf->seed(
- *             array( 12345 ),
- *             array( 'Category 1', 'Category 2' ),
- *             'AND'
- *     );
- *     $a = $cf->run();
- *     print implode( ',' , $a );
+ *     $cf = new Categoryfinder;
+ *     $cf->seed(
+ *         array( 12345 ),
+ *         array( 'Category 1', 'Category 2' ),
+ *         'AND'
+ *     );
+ *     $a = $cf->run();
+ *     print implode( ',' , $a );
  * </code>
  *
  */
@@ -135,7 +135,7 @@ class Categoryfinder {
 
                # iterate through the parents
                foreach ( $this->parents[$id] as $p ) {
-                       $pname = $p->cl_to ;
+                       $pname = $p->cl_to;
 
                        # Is this a condition?
                        if ( isset( $conds[$pname] ) ) {
@@ -172,6 +172,8 @@ class Categoryfinder {
         * Scans a "parent layer" of the articles/categories in $this->next
         */
        function scan_next_layer() {
+               wfProfileIn( __METHOD__ );
+
                # Find all parents of the article currently in $this->next
                $layer = array();
                $res = $this->dbr->select(
@@ -225,6 +227,7 @@ class Categoryfinder {
                foreach ( $layer as $v ) {
                        $this->deadend[$v] = $v;
                }
-       }
 
+               wfProfileOut( __METHOD__ );
+       }
 }
index 6b7e99c..e98fcac 100644 (file)
@@ -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
         */
@@ -349,7 +358,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param $s
+        * @param $s string HTML to update
         * @param $rc RecentChange
         * @param $unpatrolled
         * @param $watched
@@ -384,14 +393,27 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @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
         *
@@ -435,6 +457,7 @@ class ChangesList extends ContextSource {
                                return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
                        }
                }
+               return '';
        }
 
        /**
@@ -567,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;
@@ -658,7 +682,10 @@ class OldChangesList extends ChangesList {
                        $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";
@@ -862,6 +889,8 @@ class EnhancedChangesList extends ChangesList {
                # Other properties
                $unpatrolled = false;
                $isnew = false;
+               $allBots = true;
+               $allMinors = true;
                $curId = $currentRevision = 0;
                # Some catalyst variables...
                $namehidden = true;
@@ -895,7 +924,13 @@ class EnhancedChangesList extends ChangesList {
                                $currentRevision = $rcObj->mAttribs['rc_this_oldid'];
                        }
 
-                       $bot = $rcObj->mAttribs['rc_bot'];
+                       if( !$rcObj->mAttribs['rc_bot'] ) {
+                               $allBots = false;
+                       }
+                       if( !$rcObj->mAttribs['rc_minor'] ) {
+                               $allMinors = false;
+                       }
+
                        $userlinks[$u]++;
                }
 
@@ -917,15 +952,15 @@ 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
                $r .= '<td class="mw-enhanced-rc">' . $this->recentChangesFlags( array(
-                       'newpage' => $isnew,
-                       'minor' => false,
-                       'unpatrolled' => $unpatrolled,
-                       'bot' => $bot ,
+                       'newpage' => $isnew, # show, when one have this flag
+                       'minor' => $allMinors, # show only, when all have this flag
+                       'unpatrolled' => $unpatrolled, # show, when one have this flag
+                       'bot' => $allBots, # show only, when all have this flag
                ) );
 
                # Timestamp
@@ -1171,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
index d304e65..e563416 100644 (file)
@@ -1060,6 +1060,7 @@ class ConfEditorParseError extends MWException {
                                return "$line\n" .str_repeat( ' ', $this->colNum - 1 ) . "^\n";
                        }
                }
+               return '';
        }
 
 }
index 16cae7d..a6d745f 100644 (file)
@@ -361,7 +361,9 @@ $wgImgAuthPublicTest = true;
  *                          container  : backend container name the zone is in
  *                          directory  : root path within container for the zone
  *                          url        : base URL to the root of the zone
- *                          handlerUrl : base script handled URL to the root of the zone
+ *                          urlsByExt  : map of file extension types to base URLs
+ *                                       (useful for using a different cache for videos)
+ *                          handlerUrl : base script-handled URL to the root of the zone
  *                                       (see FileRepo::getZoneHandlerUrl() function)
  *                      Zones default to using "<repo name>-<zone name>" as the container name
  *                      and default to using the container root as the zone's root directory.
@@ -1262,6 +1264,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
@@ -2163,6 +2171,12 @@ $wgUsePrivateIPs = false;
 /** Site language code, should be one of ./languages/Language(.*).php */
 $wgLanguageCode = 'en';
 
+/**
+ * Language cache size, or really how many languages can we handle
+ * simultanously without degrading to crawl speed.
+ */
+$wgLangObjCacheSize = 10;
+
 /**
  * Some languages need different word forms, usually for different cases.
  * Used in Language::convertGrammar().
@@ -2355,7 +2369,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 */
@@ -2455,17 +2469,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
 
 /*************************************************************************//**
@@ -2533,11 +2536,6 @@ $wgAllowRdfaAttributes = false;
  */
 $wgAllowMicrodataAttributes = false;
 
-/**
- * Cleanup as much presentational html like valign -> css vertical-align as we can
- */
-$wgCleanupPresentationalAttributes = true;
-
 /**
  * Should we try to make our HTML output well-formed XML?  If set to false,
  * output will be a few bytes shorter, and the HTML will arguably be more
@@ -2823,12 +2821,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 }
 
 /*************************************************************************//**
@@ -4288,6 +4295,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;
 
@@ -4582,7 +4590,9 @@ $wgProfileOnly = false;
  * Log sums from profiling into "profiling" table in db.
  *
  * You have to create a 'profiling' table in your database before using
- * this feature, see maintenance/archives/patch-profiling.sql
+ * this feature.  Run set $wgProfileToDatabase to true in
+ * LocalSettings.php and run maintenance/update.php or otherwise
+ * manually add patch-profiling.sql to your database.
  *
  * To enable profiling, edit StartProfiler.php
  */
@@ -4635,6 +4645,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
@@ -5153,6 +5170,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 }
 
 /************************************************************************//**
@@ -5427,7 +5453,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.
@@ -5965,6 +5992,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.
@@ -6082,10 +6125,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.
  */
@@ -6146,6 +6195,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 }
 
 /************************************************************************//**
@@ -6198,20 +6256,6 @@ $wgCompiledFiles = array();
 
 /** @} */ # End of HipHop compilation }
 
-
-/************************************************************************//**
- * @name   Mobile support
- * @{
- */
-
-/**
- * Name of the class used for mobile device detection, must be inherited from
- * IDeviceDetector.
- */
-$wgDeviceDetectionClass = 'DeviceDetection';
-
-/** @} */ # End of Mobile support }
-
 /************************************************************************//**
  * @name   Miscellaneous
  * @{
@@ -6358,8 +6402,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 963b4af..ce8077d 100644 (file)
@@ -480,6 +480,7 @@ class EditPage {
                        throw new PermissionsError( $action, $permErrors );
                }
 
+               $wgOut->setRobotPolicy( 'noindex,nofollow' );
                $wgOut->setPageTitle( wfMessage( 'viewsource-title', $this->getContextTitle()->getPrefixedText() ) );
                $wgOut->addBacklinkSubtitle( $this->getContextTitle() );
                $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' ) );
@@ -576,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();
        }
 
        /**
@@ -596,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() ) {
@@ -609,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
@@ -1063,6 +1074,7 @@ class EditPage {
                $title = Title::newFromText( $preload );
                # Check for existence to avoid getting MediaWiki:Noarticletext
                if ( $title === null || !$title->exists() || !$title->userCan( 'read', $wgUser ) ) {
+                       //TODO: somehow show a warning to the user!
                        return $handler->makeEmptyContent();
                }
 
@@ -1071,6 +1083,7 @@ class EditPage {
                        $title = $page->getRedirectTarget();
                        # Same as before
                        if ( $title === null || !$title->exists() || !$title->userCan( 'read', $wgUser ) ) {
+                               //TODO: somehow show a warning to the user!
                                return $handler->makeEmptyContent();
                        }
                        $page = WikiPage::factory( $title );
@@ -1080,9 +1093,25 @@ class EditPage {
                $content = $page->getContent( Revision::RAW );
 
                if ( !$content ) {
+                       //TODO: somehow show a warning to the user!
                        return $handler->makeEmptyContent();
                }
 
+               if ( $content->getModel() !== $handler->getModelID() ) {
+                       $converted = $content->convert( $handler->getModelID() );
+
+                       if ( !$converted ) {
+                               //TODO: somehow show a warning to the user!
+                               wfDebug( "Attempt to preload incompatible content: "
+                                               . "can't convert " . $content->getModel()
+                                               . " to " . $handler->getModelID() );
+
+                               return $handler->makeEmptyContent();
+                       }
+
+                       $content = $converted;
+               }
+
                return $content->preloadTransform( $title, $parserOptions );
        }
 
@@ -1199,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)
         *
@@ -1216,7 +1293,7 @@ class EditPage {
 
                $status = Status::newGood();
 
-               wfProfileIn( __METHOD__  );
+               wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-checks' );
 
                if ( !wfRunHooks( 'EditPage::attemptSave', array( $this ) ) ) {
@@ -1224,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;
                }
@@ -1246,7 +1324,7 @@ class EditPage {
                                $status->setResult( false, $code );
 
                                wfProfileOut( __METHOD__ . '-checks' );
-                               wfProfileOut( __METHOD__  );
+                               wfProfileOut( __METHOD__ );
 
                                return $status;
                }
@@ -1367,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;
                        }
@@ -1473,16 +1541,14 @@ class EditPage {
                                $this->isConflict = true;
                                $content = $textbox_content; // do not try to merge here!
                        } elseif ( $this->isConflict ) {
-                               $contentObj = $content;
                                # Attempt merge
-                               if ( $this->mergeChangesInto( $content ) ) {
+                               if ( $this->mergeChangesIntoContent( $content ) ) {
                                        // Successful merge! Maybe we should tell the user the good news?
                                        $this->isConflict = false;
-                                       $content = $this->toEditContent( $content );
                                        wfDebug( __METHOD__ . ": Suppressing edit conflict, successful merge.\n" );
                                } else {
                                        $this->section = '';
-                                       $this->textbox1 = ContentHandler::getContentText( $contentObj );
+                                       $this->textbox1 = ContentHandler::getContentText( $content );
                                        wfDebug( __METHOD__ . ": Keeping edit conflict, failed merge.\n" );
                                }
                        }
@@ -1493,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;
                        }
@@ -1607,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
@@ -1627,6 +1675,11 @@ class EditPage {
                        wfProfileOut( __METHOD__ );
                        return $doEditStatus;
                }
+
+               $result['redirect'] = $content->isRedirect();
+               $this->updateWatchlist();
+               wfProfileOut( __METHOD__ );
+               return $status;
        }
 
        /**
@@ -1655,8 +1708,7 @@ class EditPage {
        }
 
        /**
-        * @private
-        * @todo document
+        * Attempts to merge text content with base and current revisions
         *
         * @param $editText string
         *
@@ -1666,46 +1718,27 @@ class EditPage {
        function mergeChangesInto( &$editText ){
                ContentHandler::deprecated( __METHOD__, "1.21" );
 
-               wfProfileIn( __METHOD__ );
-
-               $db = wfGetDB( DB_MASTER );
-
-               // This is the revision the editor started from
-               $baseRevision = $this->getBaseRevision();
-               if ( is_null( $baseRevision ) ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-               $baseText = $baseRevision->getText();
-
-               // The current state, we want to merge updates into it
-               $currentRevision = Revision::loadFromTitle( $db, $this->mTitle );
-               if ( is_null( $currentRevision ) ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-               $currentText = $currentRevision->getText();
+               $editContent = $this->toEditContent( $editText );
 
-               $result = '';
-               $editText = $this->toEditText( $editText );
+               $ok = $this->mergeChangesIntoContent( $editContent );
 
-               if ( wfMerge( $baseText, $editText, $currentText, $result ) ) {
-                       $editText = $result;
-                       wfProfileOut( __METHOD__ );
+               if ( $ok ) {
+                       $editText = $this->toEditText( $editContent );
                        return true;
-               } else {
-                       wfProfileOut( __METHOD__ );
-                       return false;
                }
+               return false;
        }
 
        /**
-        * @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 ){
                wfProfileIn( __METHOD__ );
@@ -1738,10 +1771,10 @@ class EditPage {
                        $editContent = $result;
                        wfProfileOut( __METHOD__ );
                        return true;
-               } else {
-                       wfProfileOut( __METHOD__ );
-                       return false;
                }
+
+               wfProfileOut( __METHOD__ );
+               return false;
        }
 
        /**
@@ -2200,30 +2233,8 @@ class EditPage {
                        $wgOut->addWikiMsg( 'talkpagetext' );
                }
 
-               # Optional notices on a per-namespace and per-page basis
-               $editnotice_ns = 'editnotice-' . $this->mTitle->getNamespace();
-               $editnotice_ns_message = wfMessage( $editnotice_ns );
-               if ( $editnotice_ns_message->exists() ) {
-                       $wgOut->addWikiText( $editnotice_ns_message->plain() );
-               }
-               if ( MWNamespace::hasSubpages( $this->mTitle->getNamespace() ) ) {
-                       $parts = explode( '/', $this->mTitle->getDBkey() );
-                       $editnotice_base = $editnotice_ns;
-                       while ( count( $parts ) > 0 ) {
-                               $editnotice_base .= '-' . array_shift( $parts );
-                               $editnotice_base_msg = wfMessage( $editnotice_base );
-                               if ( $editnotice_base_msg->exists() ) {
-                                       $wgOut->addWikiText( $editnotice_base_msg->plain() );
-                               }
-                       }
-               } else {
-                       # Even if there are no subpages in namespace, we still don't want / in MW ns.
-                       $editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $this->mTitle->getDBkey() );
-                       $editnoticeMsg = wfMessage( $editnoticeText );
-                       if ( $editnoticeMsg->exists() ) {
-                               $wgOut->addWikiText( $editnoticeMsg->plain() );
-                       }
-               }
+               // Add edit notices
+               $wgOut->addHTML( implode( "\n", $this->mTitle->getEditNotices() ) );
 
                if ( $this->isConflict ) {
                        $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1\n</div>", 'explainconflict' );
@@ -2786,7 +2797,9 @@ HTML
                        wfMessage( 'newwindow' )->parse();
                $wgOut->addHTML( "      <span class='cancelLink'>{$cancel}</span>\n" );
                $wgOut->addHTML( "      <span class='editHelp'>{$edithelp}</span>\n" );
-               $wgOut->addHTML( "</div><!-- editButtons -->\n</div><!-- editOptions -->\n" );
+               $wgOut->addHTML( "</div><!-- editButtons -->\n" );
+               wfRunHooks( 'EditPage::showStandardInputs:options', array( $this, $wgOut, &$tabindex ) );
+               $wgOut->addHTML( "</div><!-- editOptions -->\n" );
        }
 
        /**
@@ -2936,6 +2949,12 @@ HTML
                try {
                        $content = $this->toEditContent( $this->textbox1 );
 
+                       $previewHTML = '';
+                       if ( !wfRunHooks( 'AlternateEditPreview', array( $this, &$content, &$previewHTML, &$this->mParserOutput ) ) ) {
+                               wfProfileOut( __METHOD__ );
+                               return $previewHTML;
+                       }
+
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
                                        $note = wfMessage( 'token_suffix_mismatch' )->plain() ;
index 714f73e..f09e8f8 100644 (file)
@@ -500,25 +500,24 @@ class UserBlockedError extends ErrorPageError {
 /**
  * Shows a generic "user is not logged in" error page.
  *
- * This is essentially an ErrorPageError exception which by default use the
+ * This is essentially an ErrorPageError exception which by default uses the
  * 'exception-nologin' as a title and 'exception-nologin-text' for the message.
  * @see bug 37627
  * @since 1.20
  *
  * @par Example:
  * @code
- * if( $user->isAnon ) {
+ * if( $user->isAnon() ) {
  *     throw new UserNotLoggedIn();
  * }
  * @endcode
  *
- * Please note the parameters are mixed up compared to ErrorPageError, this
- * is done to be able to simply specify a reason whitout overriding the default
- * title.
+ * Note the parameter order differs from ErrorPageError, this allows you to
+ * simply specify a reason without overriding the default title.
  *
  * @par Example:
  * @code
- * if( $user->isAnon ) {
+ * if( $user->isAnon() ) {
  *     throw new UserNotLoggedIn( 'action-require-loggedin' );
  * }
  * @endcode
@@ -533,7 +532,7 @@ class UserNotLoggedIn extends ErrorPageError {
         * @param $titleMsg A message key to set the page title.
         *        Optional, default: 'exception-nologin'
         * @param $params Parameters to wfMessage().
-        *        Optiona, default: null
+        *        Optional, default: null
         */
        public function __construct(
                $reasonMsg = 'exception-nologin-text',
index 45a5366..16c297e 100644 (file)
@@ -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 );
diff --git a/includes/ExternalStore.php b/includes/ExternalStore.php
deleted file mode 100644 (file)
index 1b7c29d..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-/**
- * 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
- * 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
- */
-
-/**
- * @defgroup ExternalStorage ExternalStorage
- */
-
-/**
- * Constructor class for data kept in external repositories
- *
- * 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)
- *
- * @ingroup ExternalStorage
- */
-class ExternalStore {
-       var $mParams;
-
-       /**
-        * @param $params array
-        */
-       function __construct( $params = array() ) {
-               $this->mParams = $params;
-       }
-
-       /**
-        * 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.
-        * @return string|bool The text stored or false on error
-        */
-       static function fetchFromURL( $url, $params = array() ) {
-               global $wgExternalStores;
-
-               if( !$wgExternalStores ) {
-                       return false;
-               }
-
-               $parts = explode( '://', $url, 2 );
-
-               if ( count( $parts ) != 2 ) {
-                       return false;
-               }
-
-               list( $proto, $path ) = $parts;
-
-               if ( $path == '' ) { // Bad URL
-                       return false;
-               }
-
-               $store = self::getStoreObject( $proto, $params );
-               if ( $store === false ) {
-                       return false;
-               }
-
-               return $store->fetchFromURL( $url );
-       }
-
-       /**
-        * 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 parameters for the ExternalStore object.
-        * @return ExternalStore|bool ExternalStore class or false on error
-        */
-       static function getStoreObject( $proto, $params = array() ) {
-               global $wgExternalStores;
-               if( !$wgExternalStores ) {
-                       return false;
-               }
-
-               /* Protocol not enabled */
-               if( !in_array( $proto, $wgExternalStores ) ) {
-                       return false;
-               }
-
-               $class = 'ExternalStore' . ucfirst( $proto );
-               /* Any custom modules should be added to $wgAutoLoadClasses for on-demand loading */
-               if( !MWInit::classExists( $class ) ) {
-                       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 );
-               }
-       }
-
-       /**
-        * Like insert() above, but does more of the work for us.
-        * 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
-        * @return string|bool The URL of the stored data item, or false on error
-        */
-       public static function insertToDefault( $data, $storageParams = array() ) {
-               global $wgDefaultExternalStore;
-               $tryStores = (array)$wgDefaultExternalStore;
-               $error = false;
-               while ( count( $tryStores ) > 0 ) {
-                       $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 );
-                       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 = false;
-                       }
-                       if ( $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" );
-                       }
-               }
-               // All stores failed
-               if ( $error ) {
-                       // Rethrow the last connection error
-                       throw $error;
-               } else {
-                       throw new MWException( "Unable to store text to external storage" );
-               }
-       }
-
-       /**
-        * @param $data
-        * @param $wiki
-        *
-        * @return string
-        */
-       public static function insertToForeignDefault( $data, $wiki ) {
-               return self::insertToDefault( $data, array( 'wiki' => $wiki ) );
-       }
-}
diff --git a/includes/ExternalStoreDB.php b/includes/ExternalStoreDB.php
deleted file mode 100644 (file)
index 37b1b93..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
- * External storage in SQL database.
- *
- * 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
- */
-
-/**
- * DB accessable external objects
- * @ingroup ExternalStorage
- */
-class ExternalStoreDB {
-
-       /**
-        * @param $params array
-        */
-       function __construct( $params = array() ) {
-               $this->mParams = $params;
-       }
-
-       /**
-        * Get a LoadBalancer for the specified cluster
-        *
-        * @param $cluster String: cluster name
-        * @return LoadBalancer object
-        */
-       function &getLoadBalancer( $cluster ) {
-               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
-
-               return wfGetLBFactory()->getExternalLB( $cluster, $wiki );
-       }
-
-       /**
-        * Get a slave database connection for the specified cluster
-        *
-        * @param $cluster String: cluster name
-        * @return DatabaseBase object
-        */
-       function &getSlave( $cluster ) {
-               global $wgDefaultExternalStore;
-
-               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
-               $lb =& $this->getLoadBalancer( $cluster );
-
-               if ( !in_array( "DB://" . $cluster, (array)$wgDefaultExternalStore ) ) {
-                       wfDebug( "read only external store" );
-                       $lb->allowLagged(true);
-               } else {
-                       wfDebug( "writable external store" );
-               }
-
-               return $lb->getConnection( DB_SLAVE, array(), $wiki );
-       }
-
-       /**
-        * Get a master database connection for the specified cluster
-        *
-        * @param $cluster String: cluster name
-        * @return DatabaseBase object
-        */
-       function &getMaster( $cluster ) {
-               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
-               $lb =& $this->getLoadBalancer( $cluster );
-               return $lb->getConnection( DB_MASTER, array(), $wiki );
-       }
-
-       /**
-        * Get the 'blobs' table name for this database
-        *
-        * @param $db DatabaseBase
-        * @return String: table name ('blobs' by default)
-        */
-       function getTable( &$db ) {
-               $table = $db->getLBInfo( 'blobs table' );
-               if ( is_null( $table ) ) {
-                       $table = 'blobs';
-               }
-               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
-        * can avoid redundant database access and decompression.
-        * @param $cluster
-        * @param $id
-        * @param $itemID
-        * @return mixed
-        * @private
-        */
-       function &fetchBlob( $cluster, $id, $itemID ) {
-               /**
-                * One-step cache variable to hold base blobs; operations that
-                * pull multiple revisions may often pull multiple times from
-                * the same blob. By keeping the last-used one open, we avoid
-                * redundant unserialization and decompression overhead.
-                */
-               static $externalBlobCache = array();
-
-               $cacheID = ( $itemID === false ) ? "$cluster/$id" : "$cluster/$id/";
-               if( isset( $externalBlobCache[$cacheID] ) ) {
-                       wfDebug( "ExternalStoreDB::fetchBlob cache hit on $cacheID\n" );
-                       return $externalBlobCache[$cacheID];
-               }
-
-               wfDebug( "ExternalStoreDB::fetchBlob cache miss on $cacheID\n" );
-
-               $dbr =& $this->getSlave( $cluster );
-               $ret = $dbr->selectField( $this->getTable( $dbr ), 'blob_text', array( 'blob_id' => $id ), __METHOD__ );
-               if ( $ret === false ) {
-                       wfDebugLog( 'ExternalStoreDB', "ExternalStoreDB::fetchBlob master fallback on $cacheID\n" );
-                       // Try the master
-                       $dbw =& $this->getMaster( $cluster );
-                       $ret = $dbw->selectField( $this->getTable( $dbw ), 'blob_text', array( 'blob_id' => $id ), __METHOD__ );
-                       if( $ret === false) {
-                               wfDebugLog( 'ExternalStoreDB', "ExternalStoreDB::fetchBlob master failed to find $cacheID\n" );
-                       }
-               }
-               if( $itemID !== false && $ret !== false ) {
-                       // Unserialise object; caller extracts item
-                       $ret = unserialize( $ret );
-               }
-
-               $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";
-       }
-}
diff --git a/includes/ExternalStoreHttp.php b/includes/ExternalStoreHttp.php
deleted file mode 100644 (file)
index 311e32b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * External storage using HTTP requests.
- *
- * 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
- */
-
-/**
- * Example class for HTTP accessable external objects.
- * Only supports reading, not storing.
- *
- * @ingroup ExternalStorage
- */
-class ExternalStoreHttp {
-
-       /**
-        * Fetch data from given URL
-        *
-        * @param $url String: the URL
-        * @return String: the content at $url
-        */
-       function fetchFromURL( $url ) {
-               $ret = Http::get( $url );
-               return $ret;
-       }
-
-       /* XXX: may require other methods, for store, delete,
-        * whatever, for initial ext storage
-        */
-}
index 4b138c1..b517656 100644 (file)
@@ -192,22 +192,4 @@ class Fallback {
                        return false;
                }
        }
-
-       /**
-        * Fallback implementation of stream_resolve_include_path()
-        * Native stream_resolve_include_path is available for PHP 5 >= 5.3.2
-        * @param $filename String
-        * @return String
-        */
-       public static function stream_resolve_include_path( $filename ) {
-               $pathArray = explode( PATH_SEPARATOR, get_include_path() );
-               foreach ( $pathArray as $path ) {
-                       $fullFilename = $path . DIRECTORY_SEPARATOR . $filename;
-                       if ( file_exists( $fullFilename ) ) {
-                               return $fullFilename;
-                       }
-               }
-               return false;
-       }
-
 }
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 3de25e7..2292e31 100644 (file)
@@ -1037,7 +1037,7 @@ function wfDebugLog( $logGroup, $text, $public = true ) {
                        wfErrorLog( "$time $host $wiki: $text", $wgDebugLogGroups[$logGroup] );
                }
        } elseif ( $public === true ) {
-               wfDebug( $text, true );
+               wfDebug( "[$logGroup] $text", true );
        }
 }
 
@@ -1214,9 +1214,18 @@ function wfLogProfilingData() {
        if ( $wgUser->isItemLoaded( 'id' ) && $wgUser->isAnon() ) {
                $forward .= ' anon';
        }
+
+       // Command line script uses a FauxRequest object which does not have
+       // any knowledge about an URL and throw an exception instead.
+       try {
+               $requestUrl = $wgRequest->getRequestURL();
+       } catch ( MWException $e ) {
+               $requestUrl = 'n/a';
+       }
+
        $log = sprintf( "%s\t%04.3f\t%s\n",
                gmdate( 'YmdHis' ), $elapsed,
-               urldecode( $wgRequest->getRequestURL() . $forward ) );
+               urldecode( $requestUrl . $forward ) );
 
        wfErrorLog( $log . $profiler->getOutput(), $wgDebugLogFile );
 }
@@ -1226,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 );
@@ -1418,6 +1431,8 @@ function wfMessageFallback( /*...*/ ) {
  * @return String
  */
 function wfMsg( $key ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        $args = func_get_args();
        array_shift( $args );
        return wfMsgReal( $key, $args );
@@ -1432,6 +1447,8 @@ function wfMsg( $key ) {
  * @return String
  */
 function wfMsgNoTrans( $key ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        $args = func_get_args();
        array_shift( $args );
        return wfMsgReal( $key, $args, true, false, false );
@@ -1463,6 +1480,8 @@ function wfMsgNoTrans( $key ) {
  * @return String
  */
 function wfMsgForContent( $key ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        global $wgForceUIMsgAsContentMsg;
        $args = func_get_args();
        array_shift( $args );
@@ -1484,6 +1503,8 @@ function wfMsgForContent( $key ) {
  * @return String
  */
 function wfMsgForContentNoTrans( $key ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        global $wgForceUIMsgAsContentMsg;
        $args = func_get_args();
        array_shift( $args );
@@ -1509,6 +1530,8 @@ function wfMsgForContentNoTrans( $key ) {
  * @return String: the requested message.
  */
 function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform = true ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        wfProfileIn( __METHOD__ );
        $message = wfMsgGetKey( $key, $useDB, $forContent, $transform );
        $message = wfMsgReplaceArgs( $message, $args );
@@ -1529,6 +1552,8 @@ function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform
  * @return string
  */
 function wfMsgGetKey( $key, $useDB = true, $langCode = false, $transform = true ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        wfRunHooks( 'NormalizeMessageKey', array( &$key, &$useDB, &$langCode, &$transform ) );
 
        $cache = MessageCache::singleton();
@@ -1583,6 +1608,8 @@ function wfMsgReplaceArgs( $message, $args ) {
  * @return string
  */
 function wfMsgHtml( $key ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        $args = func_get_args();
        array_shift( $args );
        return wfMsgReplaceArgs( htmlspecialchars( wfMsgGetKey( $key ) ), $args );
@@ -1602,6 +1629,8 @@ function wfMsgHtml( $key ) {
  * @return string
  */
 function wfMsgWikiHtml( $key ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        $args = func_get_args();
        array_shift( $args );
        return wfMsgReplaceArgs(
@@ -1633,6 +1662,8 @@ function wfMsgWikiHtml( $key ) {
  * @return String
  */
 function wfMsgExt( $key, $options ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        $args = func_get_args();
        array_shift( $args );
        array_shift( $args );
@@ -1713,6 +1744,8 @@ function wfMsgExt( $key, $options ) {
  * @return Boolean True if the message *doesn't* exist.
  */
 function wfEmptyMsg( $key ) {
+       wfDeprecated( __METHOD__, '1.21' );
+
        return MessageCache::singleton()->get( $key, /*useDB*/true, /*content*/false ) === false;
 }
 
@@ -2331,7 +2364,7 @@ function wfSuppressWarnings( $end = false ) {
                }
        } else {
                if ( !$suppressCount ) {
-                       $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_DEPRECATED | E_USER_DEPRECATED ) );
+                       $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_DEPRECATED | E_USER_DEPRECATED | E_STRICT ) );
                }
                ++$suppressCount;
        }
@@ -2408,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 ) {
@@ -2738,12 +2771,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 ) ) {
@@ -2791,14 +2825,19 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
 
        if ( php_uname( 's' ) == 'Linux' ) {
                $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 ) {
-                       $script = "$IP/bin/ulimit4.sh";
-                       if ( is_executable( $script ) ) {
-                               $cmd = '/bin/bash ' . escapeshellarg( $script ) . " $time $mem $filesize " . escapeshellarg( $cmd );
-                       }
+               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" );
@@ -2895,15 +2934,19 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        $mytextFile = fopen( $mytextName = tempnam( $td, 'merge-mine-' ), 'w' );
        $yourtextFile = fopen( $yourtextName = tempnam( $td, 'merge-your-' ), 'w' );
 
-       fwrite( $oldtextFile, $old );
+       # NOTE: diff3 issues a warning to stderr if any of the files does not end with
+       #       a newline character. To avoid this, we normalize the trailing whitespace before
+       #       creating the diff.
+
+       fwrite( $oldtextFile, rtrim( $old ) . "\n" );
        fclose( $oldtextFile );
-       fwrite( $mytextFile, $mine );
+       fwrite( $mytextFile, rtrim( $mine ) . "\n" );
        fclose( $mytextFile );
-       fwrite( $yourtextFile, $yours );
+       fwrite( $yourtextFile, rtrim( $yours ) . "\n" );
        fclose( $yourtextFile );
 
        # Check for a conflict
-       $cmd = $wgDiff3 . ' -a --overlap-only ' .
+       $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a --overlap-only ' .
                wfEscapeShellArg( $mytextName ) . ' ' .
                wfEscapeShellArg( $oldtextName ) . ' ' .
                wfEscapeShellArg( $yourtextName );
@@ -2917,7 +2960,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 = '';
@@ -3146,84 +3189,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();
+
+                       // Long division...
+                       foreach( $inDigits as $digit ) {
+                               $work *= $sourceBase;
+                               $work += $digit;
 
-                               // 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;
+                               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 );
 }
 
 /**
@@ -3256,6 +3312,18 @@ function wfHttpOnlySafe() {
        return true;
 }
 
+/**
+ * Check if there is sufficent entropy in php's built-in session generation
+ * @return bool true = there is sufficient entropy
+ */
+function wfCheckEntropy() {
+       return (
+                       ( wfIsWindows() && version_compare( PHP_VERSION, '5.3.3', '>=' ) )
+                       || ini_get( 'session.entropy_file' )
+               )
+               && intval( ini_get( 'session.entropy_length' ) ) >= 32;
+}
+
 /**
  * Override session_id before session startup if php's built-in
  * session generation code is not secure.
@@ -3270,11 +3338,7 @@ function wfFixSessionID() {
        // - entropy_file is set or you're on Windows with php 5.3.3+
        // - AND entropy_length is > 0
        // We treat it as disabled if it doesn't have an entropy length of at least 32
-       $entropyEnabled = (
-                       ( wfIsWindows() && version_compare( PHP_VERSION, '5.3.3', '>=' ) )
-                       || ini_get( 'session.entropy_file' )
-               )
-               && intval( ini_get( 'session.entropy_length' ) ) >= 32;
+       $entropyEnabled = wfCheckEntropy();
 
        // If built-in entropy is not enabled or not sufficient override php's built in session id generation code
        if ( !$entropyEnabled ) {
index ef24b62..952022f 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',
@@ -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..55c2ae5 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,10 +242,9 @@ 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);
index c9c0679..9e201a2 100644 (file)
@@ -138,6 +138,8 @@ class Hooks {
         * @param $event String: event name
         * @param $args  Array: parameters passed to hook functions
         *
+        * @throws MWException
+        * @throws FatalError
         * @return Boolean True if no handler aborted the hook
         */
        public static function run( $event, $args = array() ) {
index 01dca6f..14456e4 100644 (file)
@@ -234,6 +234,13 @@ class Html {
                        unset( $attribs['maxlength'] );
                }
 
+               // According to standard the default type for <button> elements is "submit".
+               // Depending on compatibility mode IE might use "button", instead.
+               // We enforce the standard "submit".
+               if ( $element == 'button' && !isset( $attribs['type'] ) ) {
+                       $attribs['type'] = 'submit';
+               }
+
                return "<$element" . self::expandAttributes(
                        self::dropDefaults( $element, $attribs ) ) . '>';
        }
@@ -301,7 +308,6 @@ class Html {
                        'button' => array(
                                'formaction' => 'GET',
                                'formenctype' => 'application/x-www-form-urlencoded',
-                               'type' => 'submit',
                        ),
                        'canvas' => array(
                                'height' => '150',
@@ -470,7 +476,13 @@ class Html {
                        // server-side validation.  Opera is the only other implementation at
                        // this time, and has ugly UI, so just kill the feature entirely until
                        // we have at least one good implementation.
-                       if ( in_array( $key, array( 'max', 'min', 'pattern', 'required', 'step' ) ) ) {
+
+                       // As the default value of "1" for "step" rejects decimal
+                       // numbers to be entered in 'type="number"' fields, allow
+                       // the special case 'step="any"'.
+
+                       if ( in_array( $key, array( 'max', 'min', 'pattern', 'required' ) ) ||
+                                $key === 'step' && $value !== 'any' ) {
                                continue;
                        }
 
index e621f62..b1092df 100644 (file)
@@ -45,7 +45,9 @@ class Http {
         *                          Otherwise it will use $wgHTTPProxy (if set)
         *                          Otherwise it will use the environment variable "http_proxy" (if set)
         *    - noProxy             Don't use any proxy at all. Takes precedence over proxy value(s).
-        *    - sslVerifyHost       (curl only) Verify hostname against certificate
+        *    - sslVerifyHost       (curl only) Set to 2 to verify hostname against certificate
+        *                                  Setting to 1 (or true) will NOT verify the host name. It will
+        *                                  only check its existence. Setting to 0 (or false) disables entirely.
         *    - sslVerifyCert       (curl only) Verify SSL certificate
         *    - caInfo              (curl only) Provide CA information
         *    - maxRedirects        Maximum number of redirects to follow (defaults to 5)
@@ -185,7 +187,15 @@ class MWHttpRequest {
        protected $postData = null;
        protected $proxy = null;
        protected $noProxy = false;
-       protected $sslVerifyHost = true;
+       /**
+        * Parameter passed to Curl that specifies whether
+        * to validate SSL certificates.
+        *
+        * Setting to 0 disables entirely. Setting to 1 checks
+        * the existence of a CN, but doesn't verify it. Setting
+        * to 2 (the default) actually verifies the host.
+        */
+       protected $sslVerifyHost = 2;
        protected $sslVerifyCert = true;
        protected $caInfo = null;
        protected $method = "GET";
@@ -318,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 ) {
index 316e1c9..4965054 100644 (file)
@@ -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 ) );
 
@@ -340,18 +341,18 @@ class ImagePage extends Article {
                                if ( $width > $maxWidth || $height > $maxHeight ) {
                                        # Calculate the thumbnail size.
                                        # First case, the limiting factor is the width, not the height.
-                                       if ( $width / $height >= $maxWidth / $maxHeight ) {
-                                               $height = round( $height * $maxWidth / $width );
+                                       if ( $width / $height >= $maxWidth / $maxHeight ) { // FIXME: Possible divison by 0. bug 36911
+                                               $height = round( $height * $maxWidth / $width ); // FIXME: Possible divison by 0. bug 36911
                                                $width = $maxWidth;
                                                # Note that $height <= $maxHeight now.
                                        } else {
-                                               $newwidth = floor( $width * $maxHeight / $height );
-                                               $height = round( $height * $newwidth / $width );
+                                               $newwidth = floor( $width * $maxHeight / $height ); // FIXME: Possible divison by 0. bug 36911
+                                               $height = round( $height * $newwidth / $width ); // FIXME: Possible divison by 0. bug 36911
                                                $width = $newwidth;
                                                # 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 {
@@ -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
@@ -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";
@@ -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();
                        }
@@ -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 2017466..bd9ce25 100644 (file)
@@ -252,8 +252,16 @@ class WikiImporter {
         * @return bool
         */
        public function importRevision( $revision ) {
-               $dbw = wfGetDB( DB_MASTER );
-               return $dbw->deadlockLoop( array( $revision, 'importOldRevision' ) );
+               try {
+                       $dbw = wfGetDB( DB_MASTER );
+                       return $dbw->deadlockLoop( array( $revision, 'importOldRevision' ) );
+               } catch ( MWContentSerializationException $ex ) {
+                       $this->notice( 'import-error-unserialize',
+                               $revision->getTitle()->getPrefixedText(),
+                               $revision->getID(),
+                               $revision->getModel(),
+                               $revision->getFormat() );
+               }
        }
 
        /**
index e5db232..bc0bb77 100644 (file)
@@ -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 ) );
        }
 
        /**
@@ -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 ) );
@@ -1075,6 +1082,9 @@ class Linker {
        public static function userLink( $userId, $userName, $altUserName = false ) {
                if ( $userId == 0 ) {
                        $page = SpecialPage::getTitleFor( 'Contributions', $userName );
+                       if ( $altUserName === false ) {
+                               $altUserName = IP::prettifyIP( $userName );
+                       }
                } else {
                        $page = Title::makeTitle( NS_USER, $userName );
                }
@@ -1238,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>
@@ -1275,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,
@@ -1300,6 +1311,7 @@ class Linker {
        }
 
        /**
+        * Helper function for Linker::formatAutocomments
         * @param $match
         * @return string
         */
@@ -1373,7 +1385,18 @@ class Linker {
                self::$commentContextTitle = $title;
                self::$commentLocal = $local;
                $html = preg_replace_callback(
-                       '/\[\[:?(.*?)(\|(.*?))*\]\]([^[]*)/',
+                       '/
+                               \[\[
+                               :? # ignore optional leading colon
+                               ([^\]|]+) # 1. link target; page names cannot include ] or |
+                               (?:\|
+                                       # 2. a pipe-separated substring; only the last is captured
+                                       # Stop matching at | and ]] without relying on backtracking.
+                                       ((?:]?[^\]|])*+)
+                               )*
+                               \]\]
+                               ([^[]*) # 3. link trail (the text up until the next link)
+                       /x',
                        array( 'Linker', 'formatLinksInCommentCallback' ),
                        $comment );
                self::$commentContextTitle = null;
@@ -1399,8 +1422,8 @@ class Linker {
                }
 
                # Handle link renaming [[foo|text]] will show link as "text"
-               if ( $match[3] != "" ) {
-                       $text = $match[3];
+               if ( $match[2] != "" ) {
+                       $text = $match[2];
                } else {
                        $text = $match[1];
                }
@@ -1415,7 +1438,7 @@ class Linker {
                        }
                } else {
                        # Other kind of link
-                       if ( preg_match( $wgContLang->linkTrail(), $match[4], $submatch ) ) {
+                       if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) {
                                $trail = $submatch[1];
                        } else {
                                $trail = "";
@@ -1740,19 +1763,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 );
+
+               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
+                       )
+               );
 
-               return '<span class="mw-rollback-link">'
-                       . $context->msg( 'brackets' )->rawParams(
-                               self::buildRollbackLink( $rev, $context ) )->plain()
-                       . '</span>';
+               $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;
        }
 
        /**
@@ -1760,9 +1865,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
@@ -1794,25 +1900,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 ) {
@@ -1842,13 +1931,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 = '';
@@ -1905,9 +2000,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;
        }
 
@@ -1933,7 +2035,7 @@ class Linker {
                        }
                        $outText .= '</ul>';
                }
-               wfProfileOut( __METHOD__  );
+               wfProfileOut( __METHOD__ );
                return $outText;
        }
 
index fd1fefb..cfd7413 100644 (file)
@@ -238,26 +238,20 @@ class LinksUpdate extends SqlDataUpdate {
        }
 
        function queueRecursiveJobs() {
-               global $wgUpdateRowsPerJob;
                wfProfileIn( __METHOD__ );
 
-               $cache = $this->mTitle->getBacklinkCache();
-               $batches = $cache->partition( 'templatelinks', $wgUpdateRowsPerJob );
-               if ( !$batches ) {
-                       wfProfileOut( __METHOD__ );
-                       return;
-               }
-               $jobs = array();
-               foreach ( $batches as $batch ) {
-                       list( $start, $end ) = $batch;
-                       $params = array(
-                               'table' => 'templatelinks',
-                               'start' => $start,
-                               'end' => $end,
+               if ( $this->mTitle->getBacklinkCache()->hasLinks( 'templatelinks' ) ) {
+                       $job = new RefreshLinksJob2(
+                               $this->mTitle,
+                               array(
+                                       'table' => 'templatelinks',
+                               ) + Job::newRootJobParams( // "overall" refresh links job info
+                                       "refreshlinks:templatelinks:{$this->mTitle->getPrefixedText()}"
+                               )
                        );
-                       $jobs[] = new RefreshLinksJob2( $this->mTitle, $params );
+                       JobQueueGroup::singleton()->push( $job );
+                       JobQueueGroup::singleton()->deduplicateRootJob( $job );
                }
-               Job::batchInsert( $jobs );
 
                wfProfileOut( __METHOD__ );
        }
@@ -348,6 +342,7 @@ class LinksUpdate extends SqlDataUpdate {
                }
                if ( count( $insertions ) ) {
                        $this->mDb->insert( $table, $insertions, __METHOD__, 'IGNORE' );
+                       wfRunHooks( 'LinksUpdateAfterInsert', array( $this, $table, $insertions ) );
                }
        }
 
@@ -825,6 +820,7 @@ class LinksDeletionUpdate extends SqlDataUpdate {
         * Constructor
         *
         * @param $page WikiPage Page we are updating
+        * @throws MWException
         */
        function __construct( WikiPage $page ) {
                parent::__construct( false ); // no implicit transaction
diff --git a/includes/LocalisationCache.php b/includes/LocalisationCache.php
deleted file mode 100644 (file)
index e88c240..0000000
+++ /dev/null
@@ -1,1285 +0,0 @@
-<?php
-/**
- * Cache of the contents of localisation files.
- *
- * 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
- */
-
-define( 'MW_LC_VERSION', 2 );
-
-/**
- * Class for caching the contents of localisation files, Messages*.php
- * and *.i18n.php.
- *
- * An instance of this class is available using Language::getLocalisationCache().
- *
- * The values retrieved from here are merged, containing items from extension
- * files, core messages files and the language fallback sequence (e.g. zh-cn ->
- * zh-hans -> en ). Some common errors are corrected, for example namespace
- * names with spaces instead of underscores, but heavyweight processing, such
- * as grammatical transformation, is done by the caller.
- */
-class LocalisationCache {
-       /** Configuration associative array */
-       var $conf;
-
-       /**
-        * True if recaching should only be done on an explicit call to recache().
-        * Setting this reduces the overhead of cache freshness checking, which
-        * requires doing a stat() for every extension i18n file.
-        */
-       var $manualRecache = false;
-
-       /**
-        * True to treat all files as expired until they are regenerated by this object.
-        */
-       var $forceRecache = false;
-
-       /**
-        * The cache data. 3-d array, where the first key is the language code,
-        * the second key is the item key e.g. 'messages', and the third key is
-        * an item specific subkey index. Some items are not arrays and so for those
-        * items, there are no subkeys.
-        */
-       var $data = array();
-
-       /**
-        * The persistent store object. An instance of LCStore.
-        *
-        * @var LCStore
-        */
-       var $store;
-
-       /**
-        * A 2-d associative array, code/key, where presence indicates that the item
-        * is loaded. Value arbitrary.
-        *
-        * For split items, if set, this indicates that all of the subitems have been
-        * loaded.
-        */
-       var $loadedItems = array();
-
-       /**
-        * A 3-d associative array, code/key/subkey, where presence indicates that
-        * the subitem is loaded. Only used for the split items, i.e. messages.
-        */
-       var $loadedSubitems = array();
-
-       /**
-        * An array where presence of a key indicates that that language has been
-        * initialised. Initialisation includes checking for cache expiry and doing
-        * any necessary updates.
-        */
-       var $initialisedLangs = array();
-
-       /**
-        * An array mapping non-existent pseudo-languages to fallback languages. This
-        * is filled by initShallowFallback() when data is requested from a language
-        * that lacks a Messages*.php file.
-        */
-       var $shallowFallbacks = array();
-
-       /**
-        * An array where the keys are codes that have been recached by this instance.
-        */
-       var $recachedLangs = array();
-
-       /**
-        * All item keys
-        */
-       static public $allKeys = array(
-               'fallback', 'namespaceNames', 'bookstoreList',
-               'magicWords', 'messages', 'rtl', 'capitalizeAllNouns', 'digitTransformTable',
-               'separatorTransformTable', 'fallback8bitEncoding', 'linkPrefixExtension',
-               'linkTrail', 'namespaceAliases',
-               'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
-               'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
-               'imageFiles', 'preloadedMessages', 'namespaceGenderAliases',
-               'digitGroupingPattern', 'pluralRules', 'compiledPluralRules',
-       );
-
-       /**
-        * Keys for items which consist of associative arrays, which may be merged
-        * by a fallback sequence.
-        */
-       static public $mergeableMapKeys = array( 'messages', 'namespaceNames',
-               'dateFormats', 'imageFiles', 'preloadedMessages'
-       );
-
-       /**
-        * Keys for items which are a numbered array.
-        */
-       static public $mergeableListKeys = array( 'extraUserToggles' );
-
-       /**
-        * Keys for items which contain an array of arrays of equivalent aliases
-        * for each subitem. The aliases may be merged by a fallback sequence.
-        */
-       static public $mergeableAliasListKeys = array( 'specialPageAliases' );
-
-       /**
-        * Keys for items which contain an associative array, and may be merged if
-        * the primary value contains the special array key "inherit". That array
-        * key is removed after the first merge.
-        */
-       static public $optionalMergeKeys = array( 'bookstoreList' );
-
-       /**
-        * Keys for items that are formatted like $magicWords
-        */
-       static public $magicWordKeys = array( 'magicWords' );
-
-       /**
-        * Keys for items where the subitems are stored in the backend separately.
-        */
-       static public $splitKeys = array( 'messages' );
-
-       /**
-        * Keys which are loaded automatically by initLanguage()
-        */
-       static public $preloadedKeys = array( 'dateFormats', 'namespaceNames' );
-
-       /**
-        * Associative array of cached plural rules. The key is the language code,
-        * the value is an array of plural rules for that language.
-        */
-       var $pluralRules = null;
-
-       var $mergeableKeys = null;
-
-       /**
-        * Constructor.
-        * For constructor parameters, see the documentation in DefaultSettings.php
-        * for $wgLocalisationCacheConf.
-        *
-        * @param $conf Array
-        * @throws MWException
-        */
-       function __construct( $conf ) {
-               global $wgCacheDirectory;
-
-               $this->conf = $conf;
-               $storeConf = array();
-               if ( !empty( $conf['storeClass'] ) ) {
-                       $storeClass = $conf['storeClass'];
-               } else {
-                       switch ( $conf['store'] ) {
-                               case 'files':
-                               case 'file':
-                                       $storeClass = 'LCStore_CDB';
-                                       break;
-                               case 'db':
-                                       $storeClass = 'LCStore_DB';
-                                       break;
-                               case 'accel':
-                                       $storeClass = 'LCStore_Accel';
-                                       break;
-                               case 'detect':
-                                       $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
-                                       break;
-                               default:
-                                       throw new MWException(
-                                               'Please set $wgLocalisationCacheConf[\'store\'] to something sensible.' );
-                       }
-               }
-
-               wfDebug( get_class( $this ) . ": using store $storeClass\n" );
-               if ( !empty( $conf['storeDirectory'] ) ) {
-                       $storeConf['directory'] = $conf['storeDirectory'];
-               }
-
-               $this->store = new $storeClass( $storeConf );
-               foreach ( array( 'manualRecache', 'forceRecache' ) as $var ) {
-                       if ( isset( $conf[$var] ) ) {
-                               $this->$var = $conf[$var];
-                       }
-               }
-       }
-
-       /**
-        * Returns true if the given key is mergeable, that is, if it is an associative
-        * array which can be merged through a fallback sequence.
-        * @param $key
-        * @return bool
-        */
-       public function isMergeableKey( $key ) {
-               if ( $this->mergeableKeys === null ) {
-                       $this->mergeableKeys = array_flip( array_merge(
-                               self::$mergeableMapKeys,
-                               self::$mergeableListKeys,
-                               self::$mergeableAliasListKeys,
-                               self::$optionalMergeKeys,
-                               self::$magicWordKeys
-                       ) );
-               }
-               return isset( $this->mergeableKeys[$key] );
-       }
-
-       /**
-        * Get a cache item.
-        *
-        * Warning: this may be slow for split items (messages), since it will
-        * need to fetch all of the subitems from the cache individually.
-        * @param $code
-        * @param $key
-        * @return mixed
-        */
-       public function getItem( $code, $key ) {
-               if ( !isset( $this->loadedItems[$code][$key] ) ) {
-                       wfProfileIn( __METHOD__ . '-load' );
-                       $this->loadItem( $code, $key );
-                       wfProfileOut( __METHOD__ . '-load' );
-               }
-
-               if ( $key === 'fallback' && isset( $this->shallowFallbacks[$code] ) ) {
-                       return $this->shallowFallbacks[$code];
-               }
-
-               return $this->data[$code][$key];
-       }
-
-       /**
-        * Get a subitem, for instance a single message for a given language.
-        * @param $code
-        * @param $key
-        * @param $subkey
-        * @return null
-        */
-       public function getSubitem( $code, $key, $subkey ) {
-               if ( !isset( $this->loadedSubitems[$code][$key][$subkey] ) &&
-                        !isset( $this->loadedItems[$code][$key] ) ) {
-                       wfProfileIn( __METHOD__ . '-load' );
-                       $this->loadSubitem( $code, $key, $subkey );
-                       wfProfileOut( __METHOD__ . '-load' );
-               }
-
-               if ( isset( $this->data[$code][$key][$subkey] ) ) {
-                       return $this->data[$code][$key][$subkey];
-               } else {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the list of subitem keys for a given item.
-        *
-        * This is faster than array_keys($lc->getItem(...)) for the items listed in
-        * self::$splitKeys.
-        *
-        * Will return null if the item is not found, or false if the item is not an
-        * array.
-        * @param $code
-        * @param $key
-        * @return bool|null|string
-        */
-       public function getSubitemList( $code, $key ) {
-               if ( in_array( $key, self::$splitKeys ) ) {
-                       return $this->getSubitem( $code, 'list', $key );
-               } else {
-                       $item = $this->getItem( $code, $key );
-                       if ( is_array( $item ) ) {
-                               return array_keys( $item );
-                       } else {
-                               return false;
-                       }
-               }
-       }
-
-       /**
-        * Load an item into the cache.
-        * @param $code
-        * @param $key
-        */
-       protected function loadItem( $code, $key ) {
-               if ( !isset( $this->initialisedLangs[$code] ) ) {
-                       $this->initLanguage( $code );
-               }
-
-               // Check to see if initLanguage() loaded it for us
-               if ( isset( $this->loadedItems[$code][$key] ) ) {
-                       return;
-               }
-
-               if ( isset( $this->shallowFallbacks[$code] ) ) {
-                       $this->loadItem( $this->shallowFallbacks[$code], $key );
-                       return;
-               }
-
-               if ( in_array( $key, self::$splitKeys ) ) {
-                       $subkeyList = $this->getSubitem( $code, 'list', $key );
-                       foreach ( $subkeyList as $subkey ) {
-                               if ( isset( $this->data[$code][$key][$subkey] ) ) {
-                                       continue;
-                               }
-                               $this->data[$code][$key][$subkey] = $this->getSubitem( $code, $key, $subkey );
-                       }
-               } else {
-                       $this->data[$code][$key] = $this->store->get( $code, $key );
-               }
-
-               $this->loadedItems[$code][$key] = true;
-       }
-
-       /**
-        * Load a subitem into the cache
-        * @param $code
-        * @param $key
-        * @param $subkey
-        * @return
-        */
-       protected function loadSubitem( $code, $key, $subkey ) {
-               if ( !in_array( $key, self::$splitKeys ) ) {
-                       $this->loadItem( $code, $key );
-                       return;
-               }
-
-               if ( !isset( $this->initialisedLangs[$code] ) ) {
-                       $this->initLanguage( $code );
-               }
-
-               // Check to see if initLanguage() loaded it for us
-               if ( isset( $this->loadedItems[$code][$key] ) ||
-                        isset( $this->loadedSubitems[$code][$key][$subkey] ) ) {
-                       return;
-               }
-
-               if ( isset( $this->shallowFallbacks[$code] ) ) {
-                       $this->loadSubitem( $this->shallowFallbacks[$code], $key, $subkey );
-                       return;
-               }
-
-               $value = $this->store->get( $code, "$key:$subkey" );
-               $this->data[$code][$key][$subkey] = $value;
-               $this->loadedSubitems[$code][$key][$subkey] = true;
-       }
-
-       /**
-        * Returns true if the cache identified by $code is missing or expired.
-        * @return bool
-        */
-       public function isExpired( $code ) {
-               if ( $this->forceRecache && !isset( $this->recachedLangs[$code] ) ) {
-                       wfDebug( __METHOD__ . "($code): forced reload\n" );
-                       return true;
-               }
-
-               $deps = $this->store->get( $code, 'deps' );
-               $keys = $this->store->get( $code, 'list', 'messages' );
-               $preload = $this->store->get( $code, 'preload' );
-               // Different keys may expire separately, at least in LCStore_Accel
-               if ( $deps === null || $keys === null || $preload === null ) {
-                       wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
-                       return true;
-               }
-
-               foreach ( $deps as $dep ) {
-                       // Because we're unserializing stuff from cache, we
-                       // could receive objects of classes that don't exist
-                       // anymore (e.g. uninstalled extensions)
-                       // When this happens, always expire the cache
-                       if ( !$dep instanceof CacheDependency || $dep->isExpired() ) {
-                               wfDebug( __METHOD__ . "($code): cache for $code expired due to " .
-                                       get_class( $dep ) . "\n" );
-                               return true;
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        * Initialise a language in this object. Rebuild the cache if necessary.
-        * @param $code
-        * @throws MWException
-        */
-       protected function initLanguage( $code ) {
-               if ( isset( $this->initialisedLangs[$code] ) ) {
-                       return;
-               }
-
-               $this->initialisedLangs[$code] = true;
-
-               # If the code is of the wrong form for a Messages*.php file, do a shallow fallback
-               if ( !Language::isValidBuiltInCode( $code ) ) {
-                       $this->initShallowFallback( $code, 'en' );
-                       return;
-               }
-
-               # Recache the data if necessary
-               if ( !$this->manualRecache && $this->isExpired( $code ) ) {
-                       if ( file_exists( Language::getMessagesFileName( $code ) ) ) {
-                               $this->recache( $code );
-                       } elseif ( $code === 'en' ) {
-                               throw new MWException( 'MessagesEn.php is missing.' );
-                       } else {
-                               $this->initShallowFallback( $code, 'en' );
-                       }
-                       return;
-               }
-
-               # Preload some stuff
-               $preload = $this->getItem( $code, 'preload' );
-               if ( $preload === null ) {
-                       if ( $this->manualRecache ) {
-                               // No Messages*.php file. Do shallow fallback to en.
-                               if ( $code === 'en' ) {
-                                       throw new MWException( 'No localisation cache found for English. ' .
-                                               'Please run maintenance/rebuildLocalisationCache.php.' );
-                               }
-                               $this->initShallowFallback( $code, 'en' );
-                               return;
-                       } else {
-                               throw new MWException( 'Invalid or missing localisation cache.' );
-                       }
-               }
-               $this->data[$code] = $preload;
-               foreach ( $preload as $key => $item ) {
-                       if ( in_array( $key, self::$splitKeys ) ) {
-                               foreach ( $item as $subkey => $subitem ) {
-                                       $this->loadedSubitems[$code][$key][$subkey] = true;
-                               }
-                       } else {
-                               $this->loadedItems[$code][$key] = true;
-                       }
-               }
-       }
-
-       /**
-        * Create a fallback from one language to another, without creating a
-        * complete persistent cache.
-        * @param $primaryCode
-        * @param $fallbackCode
-        */
-       public function initShallowFallback( $primaryCode, $fallbackCode ) {
-               $this->data[$primaryCode] =& $this->data[$fallbackCode];
-               $this->loadedItems[$primaryCode] =& $this->loadedItems[$fallbackCode];
-               $this->loadedSubitems[$primaryCode] =& $this->loadedSubitems[$fallbackCode];
-               $this->shallowFallbacks[$primaryCode] = $fallbackCode;
-       }
-
-       /**
-        * Read a PHP file containing localisation data.
-        * @param $_fileName
-        * @param $_fileType
-        * @throws MWException
-        * @return array
-        */
-       protected function readPHPFile( $_fileName, $_fileType ) {
-               // Disable APC caching
-               $_apcEnabled = ini_set( 'apc.cache_by_default', '0' );
-               include( $_fileName );
-               ini_set( 'apc.cache_by_default', $_apcEnabled );
-
-               if ( $_fileType == 'core' || $_fileType == 'extension' ) {
-                       $data = compact( self::$allKeys );
-               } elseif ( $_fileType == 'aliases' ) {
-                       $data = compact( 'aliases' );
-               } else {
-                       throw new MWException( __METHOD__ . ": Invalid file type: $_fileType" );
-               }
-               return $data;
-       }
-
-       /**
-        * Get the compiled plural rules for a given language from the XML files.
-        * @since 1.20
-        */
-       public function getCompiledPluralRules( $code ) {
-               $rules = $this->getPluralRules( $code );
-               if ( $rules === null ) {
-                       return null;
-               }
-               try {
-                       $compiledRules = CLDRPluralRuleEvaluator::compile( $rules );
-               } catch( CLDRPluralRuleError $e ) {
-                       wfDebugLog( 'l10n', $e->getMessage() . "\n" );
-                       return array();
-               }
-               return $compiledRules;
-       }
-
-       /**
-        * Get the plural rules for a given language from the XML files.
-        * Cached.
-        * @since 1.20
-        */
-       public function getPluralRules( $code ) {
-               if ( $this->pluralRules === null ) {
-                       $cldrPlural = __DIR__ . "/../languages/data/plurals.xml";
-                       $mwPlural = __DIR__ . "/../languages/data/plurals-mediawiki.xml";
-                       // Load CLDR plural rules
-                       $this->loadPluralFile( $cldrPlural );
-                       if ( file_exists( $mwPlural ) ) {
-                               // Override or extend
-                               $this->loadPluralFile( $mwPlural );
-                       }
-               }
-               if ( !isset( $this->pluralRules[$code] ) ) {
-                       return null;
-               } else {
-                       return $this->pluralRules[$code];
-               }
-       }
-
-
-       /**
-        * Load a plural XML file with the given filename, compile the relevant
-        * rules, and save the compiled rules in a process-local cache.
-        */
-       protected function loadPluralFile( $fileName ) {
-               $doc = new DOMDocument;
-               $doc->load( $fileName );
-               $rulesets = $doc->getElementsByTagName( "pluralRules" );
-               foreach ( $rulesets as $ruleset ) {
-                       $codes = $ruleset->getAttribute( 'locales' );
-                       $rules = array();
-                       $ruleElements = $ruleset->getElementsByTagName( "pluralRule" );
-                       foreach ( $ruleElements as $elt ) {
-                               $rules[] = $elt->nodeValue;
-                       }
-                       foreach ( explode( ' ', $codes ) as $code ) {
-                               $this->pluralRules[$code] = $rules;
-                       }
-               }
-       }
-
-       /**
-        * Read the data from the source files for a given language, and register
-        * the relevant dependencies in the $deps array. If the localisation
-        * exists, the data array is returned, otherwise false is returned.
-        */
-       protected function readSourceFilesAndRegisterDeps( $code, &$deps ) {
-               $fileName = Language::getMessagesFileName( $code );
-               if ( !file_exists( $fileName ) ) {
-                       return false;
-               }
-
-               $deps[] = new FileDependency( $fileName );
-               $data = $this->readPHPFile( $fileName, 'core' );
-
-               # Load CLDR plural rules for JavaScript
-               $data['pluralRules'] = $this->getPluralRules( $code );
-               # And for PHP
-               $data['compiledPluralRules'] = $this->getCompiledPluralRules( $code );
-
-               $deps['plurals'] = new FileDependency( __DIR__ . "/../languages/data/plurals.xml" );
-               $deps['plurals-mw'] = new FileDependency( __DIR__ . "/../languages/data/plurals-mediawiki.xml" );
-               return $data;
-       }
-
-       /**
-        * Merge two localisation values, a primary and a fallback, overwriting the
-        * primary value in place.
-        * @param $key
-        * @param $value
-        * @param $fallbackValue
-        */
-       protected function mergeItem( $key, &$value, $fallbackValue ) {
-               if ( !is_null( $value ) ) {
-                       if ( !is_null( $fallbackValue ) ) {
-                               if ( in_array( $key, self::$mergeableMapKeys ) ) {
-                                       $value = $value + $fallbackValue;
-                               } elseif ( in_array( $key, self::$mergeableListKeys ) ) {
-                                       $value = array_unique( array_merge( $fallbackValue, $value ) );
-                               } elseif ( in_array( $key, self::$mergeableAliasListKeys ) ) {
-                                       $value = array_merge_recursive( $value, $fallbackValue );
-                               } elseif ( in_array( $key, self::$optionalMergeKeys ) ) {
-                                       if ( !empty( $value['inherit'] ) )  {
-                                               $value = array_merge( $fallbackValue, $value );
-                                       }
-
-                                       if ( isset( $value['inherit'] ) ) {
-                                               unset( $value['inherit'] );
-                                       }
-                               } elseif ( in_array( $key, self::$magicWordKeys ) ) {
-                                       $this->mergeMagicWords( $value, $fallbackValue );
-                               }
-                       }
-               } else {
-                       $value = $fallbackValue;
-               }
-       }
-
-       /**
-        * @param $value
-        * @param $fallbackValue
-        */
-       protected function mergeMagicWords( &$value, $fallbackValue ) {
-               foreach ( $fallbackValue as $magicName => $fallbackInfo ) {
-                       if ( !isset( $value[$magicName] ) ) {
-                               $value[$magicName] = $fallbackInfo;
-                       } else {
-                               $oldSynonyms = array_slice( $fallbackInfo, 1 );
-                               $newSynonyms = array_slice( $value[$magicName], 1 );
-                               $synonyms = array_values( array_unique( array_merge(
-                                       $newSynonyms, $oldSynonyms ) ) );
-                               $value[$magicName] = array_merge( array( $fallbackInfo[0] ), $synonyms );
-                       }
-               }
-       }
-
-       /**
-        * Given an array mapping language code to localisation value, such as is
-        * found in extension *.i18n.php files, iterate through a fallback sequence
-        * to merge the given data with an existing primary value.
-        *
-        * Returns true if any data from the extension array was used, false
-        * otherwise.
-        * @param $codeSequence
-        * @param $key
-        * @param $value
-        * @param $fallbackValue
-        * @return bool
-        */
-       protected function mergeExtensionItem( $codeSequence, $key, &$value, $fallbackValue ) {
-               $used = false;
-               foreach ( $codeSequence as $code ) {
-                       if ( isset( $fallbackValue[$code] ) ) {
-                               $this->mergeItem( $key, $value, $fallbackValue[$code] );
-                               $used = true;
-                       }
-               }
-
-               return $used;
-       }
-
-       /**
-        * Load localisation data for a given language for both core and extensions
-        * and save it to the persistent cache store and the process cache
-        * @param $code
-        * @throws MWException
-        */
-       public function recache( $code ) {
-               global $wgExtensionMessagesFiles;
-               wfProfileIn( __METHOD__ );
-
-               if ( !$code ) {
-                       throw new MWException( "Invalid language code requested" );
-               }
-               $this->recachedLangs[$code] = true;
-
-               # Initial values
-               $initialData = array_combine(
-                       self::$allKeys,
-                       array_fill( 0, count( self::$allKeys ), null ) );
-               $coreData = $initialData;
-               $deps = array();
-
-               # Load the primary localisation from the source file
-               $data = $this->readSourceFilesAndRegisterDeps( $code, $deps );
-               if ( $data === false ) {
-                       wfDebug( __METHOD__ . ": no localisation file for $code, using fallback to en\n" );
-                       $coreData['fallback'] = 'en';
-               } else {
-                       wfDebug( __METHOD__ . ": got localisation for $code from source\n" );
-
-                       # Merge primary localisation
-                       foreach ( $data as $key => $value ) {
-                               $this->mergeItem( $key, $coreData[$key], $value );
-                       }
-
-               }
-
-               # Fill in the fallback if it's not there already
-               if ( is_null( $coreData['fallback'] ) ) {
-                       $coreData['fallback'] = $code === 'en' ? false : 'en';
-               }
-               if ( $coreData['fallback'] === false ) {
-                       $coreData['fallbackSequence'] = array();
-               } else {
-                       $coreData['fallbackSequence'] = array_map( 'trim', explode( ',', $coreData['fallback'] ) );
-                       $len = count( $coreData['fallbackSequence'] );
-
-                       # Ensure that the sequence ends at en
-                       if ( $coreData['fallbackSequence'][$len - 1] !== 'en' ) {
-                               $coreData['fallbackSequence'][] = 'en';
-                       }
-
-                       # Load the fallback localisation item by item and merge it
-                       foreach ( $coreData['fallbackSequence'] as $fbCode ) {
-                               # Load the secondary localisation from the source file to
-                               # avoid infinite cycles on cyclic fallbacks
-                               $fbData = $this->readSourceFilesAndRegisterDeps( $fbCode, $deps );
-                               if ( $fbData === false ) {
-                                       continue;
-                               }
-
-                               foreach ( self::$allKeys as $key ) {
-                                       if ( !isset( $fbData[$key] ) ) {
-                                               continue;
-                                       }
-
-                                       if ( is_null( $coreData[$key] ) || $this->isMergeableKey( $key ) ) {
-                                               $this->mergeItem( $key, $coreData[$key], $fbData[$key] );
-                                       }
-                               }
-                       }
-               }
-
-               $codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
-
-               # Load the extension localisations
-               # This is done after the core because we know the fallback sequence now.
-               # But it has a higher precedence for merging so that we can support things
-               # like site-specific message overrides.
-               $allData = $initialData;
-               foreach ( $wgExtensionMessagesFiles as $fileName ) {
-                       $data = $this->readPHPFile( $fileName, 'extension' );
-                       $used = false;
-
-                       foreach ( $data as $key => $item ) {
-                               if ( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
-                                       $used = true;
-                               }
-                       }
-
-                       if ( $used ) {
-                               $deps[] = new FileDependency( $fileName );
-                       }
-               }
-
-               # Merge core data into extension data
-               foreach ( $coreData as $key => $item ) {
-                       $this->mergeItem( $key, $allData[$key], $item );
-               }
-
-               # Add cache dependencies for any referenced globals
-               $deps['wgExtensionMessagesFiles'] = new GlobalDependency( 'wgExtensionMessagesFiles' );
-               $deps['version'] = new ConstantDependency( 'MW_LC_VERSION' );
-
-               # Add dependencies to the cache entry
-               $allData['deps'] = $deps;
-
-               # Replace spaces with underscores in namespace names
-               $allData['namespaceNames'] = str_replace( ' ', '_', $allData['namespaceNames'] );
-
-               # And do the same for special page aliases. $page is an array.
-               foreach ( $allData['specialPageAliases'] as &$page ) {
-                       $page = str_replace( ' ', '_', $page );
-               }
-               # Decouple the reference to prevent accidental damage
-               unset( $page );
-
-               # If there were no plural rules, return an empty array
-               if ( $allData['pluralRules'] === null ) {
-                       $allData['pluralRules'] = array();
-               }
-               if ( $allData['compiledPluralRules'] === null ) {
-                       $allData['compiledPluralRules'] = array();
-               }
-
-               # Set the list keys
-               $allData['list'] = array();
-               foreach ( self::$splitKeys as $key ) {
-                       $allData['list'][$key] = array_keys( $allData[$key] );
-               }
-               # Run hooks
-               wfRunHooks( 'LocalisationCacheRecache', array( $this, $code, &$allData ) );
-
-               if ( is_null( $allData['namespaceNames'] ) ) {
-                       throw new MWException( __METHOD__ . ': Localisation data failed sanity check! ' .
-                               'Check that your languages/messages/MessagesEn.php file is intact.' );
-               }
-
-               # Set the preload key
-               $allData['preload'] = $this->buildPreload( $allData );
-
-               # Save to the process cache and register the items loaded
-               $this->data[$code] = $allData;
-               foreach ( $allData as $key => $item ) {
-                       $this->loadedItems[$code][$key] = true;
-               }
-
-               # Save to the persistent cache
-               $this->store->startWrite( $code );
-               foreach ( $allData as $key => $value ) {
-                       if ( in_array( $key, self::$splitKeys ) ) {
-                               foreach ( $value as $subkey => $subvalue ) {
-                                       $this->store->set( "$key:$subkey", $subvalue );
-                               }
-                       } else {
-                               $this->store->set( $key, $value );
-                       }
-               }
-               $this->store->finishWrite();
-
-               # Clear out the MessageBlobStore
-               # HACK: If using a null (i.e. disabled) storage backend, we
-               # can't write to the MessageBlobStore either
-               if ( !$this->store instanceof LCStore_Null ) {
-                       MessageBlobStore::clear();
-               }
-
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * Build the preload item from the given pre-cache data.
-        *
-        * The preload item will be loaded automatically, improving performance
-        * for the commonly-requested items it contains.
-        * @param $data
-        * @return array
-        */
-       protected function buildPreload( $data ) {
-               $preload = array( 'messages' => array() );
-               foreach ( self::$preloadedKeys as $key ) {
-                       $preload[$key] = $data[$key];
-               }
-
-               foreach ( $data['preloadedMessages'] as $subkey ) {
-                       if ( isset( $data['messages'][$subkey] ) ) {
-                               $subitem = $data['messages'][$subkey];
-                       } else {
-                               $subitem = null;
-                       }
-                       $preload['messages'][$subkey] = $subitem;
-               }
-
-               return $preload;
-       }
-
-       /**
-        * Unload the data for a given language from the object cache.
-        * Reduces memory usage.
-        * @param $code
-        */
-       public function unload( $code ) {
-               unset( $this->data[$code] );
-               unset( $this->loadedItems[$code] );
-               unset( $this->loadedSubitems[$code] );
-               unset( $this->initialisedLangs[$code] );
-
-               foreach ( $this->shallowFallbacks as $shallowCode => $fbCode ) {
-                       if ( $fbCode === $code ) {
-                               $this->unload( $shallowCode );
-                       }
-               }
-       }
-
-       /**
-        * Unload all data
-        */
-       public function unloadAll() {
-               foreach ( $this->initialisedLangs as $lang => $unused ) {
-                       $this->unload( $lang );
-               }
-       }
-
-       /**
-        * Disable the storage backend
-        */
-       public function disableBackend() {
-               $this->store = new LCStore_Null;
-               $this->manualRecache = false;
-       }
-}
-
-/**
- * Interface for the persistence layer of LocalisationCache.
- *
- * The persistence layer is two-level hierarchical cache. The first level
- * is the language, the second level is the item or subitem.
- *
- * Since the data for a whole language is rebuilt in one operation, it needs
- * to have a fast and atomic method for deleting or replacing all of the
- * current data for a given language. The interface reflects this bulk update
- * operation. Callers writing to the cache must first call startWrite(), then
- * will call set() a couple of thousand times, then will call finishWrite()
- * to commit the operation. When finishWrite() is called, the cache is
- * expected to delete all data previously stored for that language.
- *
- * The values stored are PHP variables suitable for serialize(). Implementations
- * of LCStore are responsible for serializing and unserializing.
- */
-interface LCStore {
-       /**
-        * Get a value.
-        * @param $code string Language code
-        * @param $key string Cache key
-        */
-       function get( $code, $key );
-
-       /**
-        * Start a write transaction.
-        * @param $code Language code
-        */
-       function startWrite( $code );
-
-       /**
-        * Finish a write transaction.
-        */
-       function finishWrite();
-
-       /**
-        * Set a key to a given value. startWrite() must be called before this
-        * is called, and finishWrite() must be called afterwards.
-        * @param $key
-        * @param $value
-        */
-       function set( $key, $value );
-}
-
-/**
- * LCStore implementation which uses PHP accelerator to store data.
- * This will work if one of XCache, WinCache or APC cacher is configured.
- * (See ObjectCache.php)
- */
-class LCStore_Accel implements LCStore {
-       var $currentLang;
-       var $keys;
-
-       public function __construct() {
-               $this->cache = wfGetCache( CACHE_ACCEL );
-       }
-
-       public function get( $code, $key ) {
-               $k = wfMemcKey( 'l10n', $code, 'k', $key );
-               $r = $this->cache->get( $k );
-               return $r === false ? null : $r;
-       }
-
-       public function startWrite( $code ) {
-               $k = wfMemcKey( 'l10n', $code, 'l' );
-               $keys = $this->cache->get( $k );
-               if ( $keys ) {
-                       foreach ( $keys as $k ) {
-                               $this->cache->delete( $k );
-                       }
-               }
-               $this->currentLang = $code;
-               $this->keys = array();
-       }
-
-       public function finishWrite() {
-               if ( $this->currentLang ) {
-                       $k = wfMemcKey( 'l10n', $this->currentLang, 'l' );
-                       $this->cache->set( $k, array_keys( $this->keys ) );
-               }
-               $this->currentLang = null;
-               $this->keys = array();
-       }
-
-       public function set( $key, $value ) {
-               if ( $this->currentLang ) {
-                       $k = wfMemcKey( 'l10n', $this->currentLang, 'k', $key );
-                       $this->keys[$k] = true;
-                       $this->cache->set( $k, $value );
-               }
-       }
-}
-
-/**
- * LCStore implementation which uses the standard DB functions to store data.
- * This will work on any MediaWiki installation.
- */
-class LCStore_DB implements LCStore {
-       var $currentLang;
-       var $writesDone = false;
-
-       /**
-        * @var DatabaseBase
-        */
-       var $dbw;
-       var $batch;
-       var $readOnly = false;
-
-       public function get( $code, $key ) {
-               if ( $this->writesDone ) {
-                       $db = wfGetDB( DB_MASTER );
-               } else {
-                       $db = wfGetDB( DB_SLAVE );
-               }
-               $row = $db->selectRow( 'l10n_cache', array( 'lc_value' ),
-                       array( 'lc_lang' => $code, 'lc_key' => $key ), __METHOD__ );
-               if ( $row ) {
-                       return unserialize( $row->lc_value );
-               } else {
-                       return null;
-               }
-       }
-
-       public function startWrite( $code ) {
-               if ( $this->readOnly ) {
-                       return;
-               }
-
-               if ( !$code ) {
-                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
-               }
-
-               $this->dbw = wfGetDB( DB_MASTER );
-               try {
-                       $this->dbw->begin( __METHOD__ );
-                       $this->dbw->delete( 'l10n_cache', array( 'lc_lang' => $code ), __METHOD__ );
-               } catch ( DBQueryError $e ) {
-                       if ( $this->dbw->wasReadOnlyError() ) {
-                               $this->readOnly = true;
-                               $this->dbw->rollback( __METHOD__ );
-                               $this->dbw->ignoreErrors( false );
-                               return;
-                       } else {
-                               throw $e;
-                       }
-               }
-
-               $this->currentLang = $code;
-               $this->batch = array();
-       }
-
-       public function finishWrite() {
-               if ( $this->readOnly ) {
-                       return;
-               }
-
-               if ( $this->batch ) {
-                       $this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
-               }
-
-               $this->dbw->commit( __METHOD__ );
-               $this->currentLang = null;
-               $this->dbw = null;
-               $this->batch = array();
-               $this->writesDone = true;
-       }
-
-       public function set( $key, $value ) {
-               if ( $this->readOnly ) {
-                       return;
-               }
-
-               if ( is_null( $this->currentLang ) ) {
-                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
-               }
-
-               $this->batch[] = array(
-                       'lc_lang' => $this->currentLang,
-                       'lc_key' => $key,
-                       'lc_value' => serialize( $value ) );
-
-               if ( count( $this->batch ) >= 100 ) {
-                       $this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
-                       $this->batch = array();
-               }
-       }
-}
-
-/**
- * LCStore implementation which stores data as a collection of CDB files in the
- * directory given by $wgCacheDirectory. If $wgCacheDirectory is not set, this
- * will throw an exception.
- *
- * Profiling indicates that on Linux, this implementation outperforms MySQL if
- * the directory is on a local filesystem and there is ample kernel cache
- * space. The performance advantage is greater when the DBA extension is
- * available than it is with the PHP port.
- *
- * See Cdb.php and http://cr.yp.to/cdb.html
- */
-class LCStore_CDB implements LCStore {
-       var $readers, $writer, $currentLang, $directory;
-
-       function __construct( $conf = array() ) {
-               global $wgCacheDirectory;
-
-               if ( isset( $conf['directory'] ) ) {
-                       $this->directory = $conf['directory'];
-               } else {
-                       $this->directory = $wgCacheDirectory;
-               }
-       }
-
-       public function get( $code, $key ) {
-               if ( !isset( $this->readers[$code] ) ) {
-                       $fileName = $this->getFileName( $code );
-
-                       if ( !file_exists( $fileName ) ) {
-                               $this->readers[$code] = false;
-                       } else {
-                               $this->readers[$code] = CdbReader::open( $fileName );
-                       }
-               }
-
-               if ( !$this->readers[$code] ) {
-                       return null;
-               } else {
-                       $value = $this->readers[$code]->get( $key );
-
-                       if ( $value === false ) {
-                               return null;
-                       }
-                       return unserialize( $value );
-               }
-       }
-
-       public function startWrite( $code ) {
-               if ( !file_exists( $this->directory ) ) {
-                       if ( !wfMkdirParents( $this->directory, null, __METHOD__ ) ) {
-                               throw new MWException( "Unable to create the localisation store " .
-                                       "directory \"{$this->directory}\"" );
-                       }
-               }
-
-               // Close reader to stop permission errors on write
-               if ( !empty( $this->readers[$code] ) ) {
-                       $this->readers[$code]->close();
-               }
-
-               $this->writer = CdbWriter::open( $this->getFileName( $code ) );
-               $this->currentLang = $code;
-       }
-
-       public function finishWrite() {
-               // Close the writer
-               $this->writer->close();
-               $this->writer = null;
-               unset( $this->readers[$this->currentLang] );
-               $this->currentLang = null;
-       }
-
-       public function set( $key, $value ) {
-               if ( is_null( $this->writer ) ) {
-                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
-               }
-               $this->writer->set( $key, serialize( $value ) );
-       }
-
-       protected function getFileName( $code ) {
-               if ( !$code || strpos( $code, '/' ) !== false ) {
-                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
-               }
-               return "{$this->directory}/l10n_cache-$code.cdb";
-       }
-}
-
-/**
- * Null store backend, used to avoid DB errors during install
- */
-class LCStore_Null implements LCStore {
-       public function get( $code, $key ) {
-               return null;
-       }
-
-       public function startWrite( $code ) {}
-       public function finishWrite() {}
-       public function set( $key, $value ) {}
-}
-
-/**
- * A localisation cache optimised for loading large amounts of data for many
- * languages. Used by rebuildLocalisationCache.php.
- */
-class LocalisationCache_BulkLoad extends LocalisationCache {
-       /**
-        * A cache of the contents of data files.
-        * Core files are serialized to avoid using ~1GB of RAM during a recache.
-        */
-       var $fileCache = array();
-
-       /**
-        * Most recently used languages. Uses the linked-list aspect of PHP hashtables
-        * to keep the most recently used language codes at the end of the array, and
-        * the language codes that are ready to be deleted at the beginning.
-        */
-       var $mruLangs = array();
-
-       /**
-        * Maximum number of languages that may be loaded into $this->data
-        */
-       var $maxLoadedLangs = 10;
-
-       /**
-        * @param $fileName
-        * @param $fileType
-        * @return array|mixed
-        */
-       protected function readPHPFile( $fileName, $fileType ) {
-               $serialize = $fileType === 'core';
-               if ( !isset( $this->fileCache[$fileName][$fileType] ) ) {
-                       $data = parent::readPHPFile( $fileName, $fileType );
-
-                       if ( $serialize ) {
-                               $encData = serialize( $data );
-                       } else {
-                               $encData = $data;
-                       }
-
-                       $this->fileCache[$fileName][$fileType] = $encData;
-
-                       return $data;
-               } elseif ( $serialize ) {
-                       return unserialize( $this->fileCache[$fileName][$fileType] );
-               } else {
-                       return $this->fileCache[$fileName][$fileType];
-               }
-       }
-
-       /**
-        * @param $code
-        * @param $key
-        * @return mixed
-        */
-       public function getItem( $code, $key ) {
-               unset( $this->mruLangs[$code] );
-               $this->mruLangs[$code] = true;
-               return parent::getItem( $code, $key );
-       }
-
-       /**
-        * @param $code
-        * @param $key
-        * @param $subkey
-        * @return
-        */
-       public function getSubitem( $code, $key, $subkey ) {
-               unset( $this->mruLangs[$code] );
-               $this->mruLangs[$code] = true;
-               return parent::getSubitem( $code, $key, $subkey );
-       }
-
-       /**
-        * @param $code
-        */
-       public function recache( $code ) {
-               parent::recache( $code );
-               unset( $this->mruLangs[$code] );
-               $this->mruLangs[$code] = true;
-               $this->trimCache();
-       }
-
-       /**
-        * @param $code
-        */
-       public function unload( $code ) {
-               unset( $this->mruLangs[$code] );
-               parent::unload( $code );
-       }
-
-       /**
-        * Unload cached languages until there are less than $this->maxLoadedLangs
-        */
-       protected function trimCache() {
-               while ( count( $this->data ) > $this->maxLoadedLangs && count( $this->mruLangs ) ) {
-                       reset( $this->mruLangs );
-                       $code = key( $this->mruLangs );
-                       wfDebug( __METHOD__ . ": unloading $code\n" );
-                       $this->unload( $code );
-               }
-       }
-
-}
index 6d2e1dc..7cf59e9 100644 (file)
@@ -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;
@@ -577,7 +578,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function getWasModified(){
+       function getWasModified() {
                return $this->mModified;
        }
 
@@ -594,7 +595,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function replaceMultiple( $magicarr, $subject, &$result ){
+       function replaceMultiple( $magicarr, $subject, &$result ) {
                $search = array();
                $replace = array();
                foreach( $magicarr as $id => $replacement ){
index 5a4b810..8f10b8b 100644 (file)
@@ -480,7 +480,24 @@ class Message {
         * @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;';
+               }
        }
 
        /**
@@ -606,7 +623,6 @@ class Message {
         * @since 1.18
         * @param $param String|Array: Parameter as defined in this class.
         * @return Tuple(type, value)
-        * @throws MWException
         */
        protected function extractParam( $param ) {
                if ( is_array( $param ) && isset( $param['raw'] ) ) {
@@ -618,7 +634,11 @@ class Message {
                } elseif ( !is_array( $param ) ) {
                        return array( 'before', $param );
                } else {
-                       throw new MWException( "Invalid message parameter: " . serialize( $param ) );
+                       trigger_error(
+                               "Invalid message parameter: " . htmlspecialchars( serialize( $param ) ),
+                               E_USER_WARNING
+                       );
+                       return array( 'before', '[INVALID]' );
                }
        }
 
@@ -671,3 +691,45 @@ class Message {
        }
 
 }
+
+/**
+ * Variant of the Message class.
+ *
+ * Rather than treating the message key as a lookup
+ * value (which is passed to the MessageCache and
+ * translated as necessary), a RawMessage key is
+ * treated as the actual message.
+ *
+ * All other functionality (parsing, escaping, etc.)
+ * is preserved.
+ *
+ * @since 1.21
+ */
+class RawMessage extends Message {
+       /**
+        * Call the parent constructor, then store the key as
+        * the message.
+        *
+        * @param $key Message to use
+        * @param $params Parameters for the message
+        * @see Message::__construct
+        */
+       public function __construct( $key, $params = array() ) {
+               parent::__construct( $key, $params );
+               // The key is the message.
+               $this->message = $key;
+       }
+
+       /**
+        * Fetch the message (in this case, the key).
+        *
+        * @return string
+        */
+       public function fetchMessage() {
+               // Just in case the message is unset somewhere.
+               if( !isset( $this->message ) ) {
+                       $this->message = $this->key;
+               }
+               return $this->message;
+       }
+}
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..15894a4 100644 (file)
@@ -150,7 +150,7 @@ abstract class RdfMetaData {
                }
        }
 
-       protected function getTerms( $url ){
+       protected function getTerms( $url ) {
                global $wgLicenseTerms;
 
                if( $wgLicenseTerms ){
index e8d5632..46af002 100644 (file)
@@ -419,4 +419,18 @@ class MWNamespace {
                return $wgNonincludableNamespaces && in_array( $index, $wgNonincludableNamespaces );
        }
 
+       /**
+        * Get the default content model for a namespace
+        * This does not mean that all pages in that namespace have the model
+        *
+        * @since 1.21
+        * @param $index int Index to check
+        * @return null|string default model name for the given namespace, if set
+        */
+       public static function getNamespaceContentModel( $index ) {
+               global $wgNamespaceContentModels;
+               return isset( $wgNamespaceContentModels[$index] )
+                       ? $wgNamespaceContentModels[$index]
+                       : null;
+       }
 }
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 ff83f70..5b0f36c 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,7 +439,7 @@ 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 ){
@@ -611,7 +622,7 @@ class OutputPage extends ContextSource {
 
        /**
         * checkLastModified tells the client to use the client-cached page if
-        * possible. If sucessful, the OutputPage is disabled so that
+        * possible. If successful, the OutputPage is disabled so that
         * any future call to OutputPage->output() have no effect.
         *
         * Side effect: sets mLastModified for Last-Modified header
@@ -777,6 +788,7 @@ class OutputPage extends ContextSource {
                if ( isset( $this->mPageTitleActionText ) ) {
                        return $this->mPageTitleActionText;
                }
+               return '';
        }
 
        /**
@@ -1238,7 +1250,7 @@ class OutputPage extends ContextSource {
         * @param $type String ResourceLoaderModule TYPE_ constant
         * @return Int ResourceLoaderModule ORIGIN_ class constant
         */
-       public function getAllowedModules( $type ){
+       public function getAllowedModules( $type ) {
                if( $type == ResourceLoaderModule::TYPE_COMBINED ){
                        return min( array_values( $this->mAllowedModules ) );
                } else {
@@ -1253,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;
        }
 
@@ -1262,7 +1274,7 @@ class OutputPage extends ContextSource {
         * @param  $type String
         * @param  $level Int ResourceLoaderModule class constant
         */
-       public function reduceAllowedModules( $type, $level ){
+       public function reduceAllowedModules( $type, $level ) {
                $this->mAllowedModules[$type] = min( $this->getAllowedModules($type), $level );
        }
 
@@ -1423,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 );
        }
 
@@ -1469,7 +1484,7 @@ class OutputPage extends ContextSource {
         * @param $interface Boolean: whether it is an interface message
         *                                                              (for example disables conversion)
         */
-       public function addWikiTextTitle( $text, &$title, $linestart, $tidy = false, $interface = false ) {
+       public function addWikiTextTitle( $text, Title $title, $linestart, $tidy = false, $interface = false ) {
                global $wgParser;
 
                wfProfileIn( __METHOD__ );
@@ -1769,14 +1784,12 @@ class OutputPage extends ContextSource {
                                } else {
                                        $aloption[] = 'string-contains=' . $variant;
 
-                                       // IE and some other browsers use another form of language code
-                                       // in their Accept-Language header, like "zh-CN" or "zh-TW".
+                                       // IE and some other browsers use BCP 47 standards in
+                                       // their Accept-Language header, like "zh-CN" or "zh-Hant".
                                        // We should handle these too.
-                                       $ievariant = explode( '-', $variant );
-                                       if ( count( $ievariant ) == 2 ) {
-                                               $ievariant[1] = strtoupper( $ievariant[1] );
-                                               $ievariant = implode( '-', $ievariant );
-                                               $aloption[] = 'string-contains=' . $ievariant;
+                                       $variantBCP47 = wfBCP47( $variant );
+                                       if ( $variantBCP47 !== $variant ) {
+                                               $aloption[] = 'string-contains=' . $variantBCP47;
                                        }
                                }
                        }
@@ -3041,6 +3054,8 @@ $templates
 
                $tags = array();
 
+               $canonicalUrl = $this->mCanonicalUrl;
+
                if ( $addContentType ) {
                        if ( $wgHtml5 ) {
                                # More succinct than <meta http-equiv=Content-Type>, has the
@@ -3185,10 +3200,7 @@ $templates
                                                );
                                        }
                                } else {
-                                       $tags['canonical'] = Html::element( 'link', array(
-                                               'rel' => 'canonical',
-                                               'href' => $this->getTitle()->getCanonicalUrl()
-                                       ) );
+                                       $canonicalUrl = $this->getTitle()->getLocalURL();
                                }
                        }
                }
@@ -3257,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;
        }
 
@@ -3485,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',
@@ -3499,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;
+                                       }
                                }
                        }
                }
index 65a0d02..9878396 100644 (file)
@@ -158,18 +158,21 @@ class Preferences {
                        $wgEnableEmail, $wgEmailConfirmToEdit, $wgEnableUserEmail, $wgEmailAuthentication,
                        $wgEnotifWatchlist, $wgEnotifUserTalk, $wgEnotifRevealEditorAddress;
 
+               // retrieving user name for GENDER and misc.
+               $userName = $user->getName();
+
                ## User info #####################################
                // Information panel
                $defaultPreferences['username'] = array(
                        'type' => 'info',
-                       'label-message' => 'username',
-                       'default' => $user->getName(),
+                       'label-message' => array( 'username', $userName ),
+                       'default' => $userName,
                        'section' => 'personal/info',
                );
 
                $defaultPreferences['userid'] = array(
                        'type' => 'info',
-                       'label-message' => 'uid',
+                       'label-message' => array( 'uid', $userName ),
                        'default' => $user->getId(),
                        'section' => 'personal/info',
                );
@@ -185,7 +188,7 @@ class Preferences {
                        $groupName  = User::getGroupName( $ueg );
                        $userGroups[] = User::makeGroupLinkHTML( $ueg, $groupName );
 
-                       $memberName = User::getGroupMember( $ueg, $user->getName() );
+                       $memberName = User::getGroupMember( $ueg, $userName );
                        $userMembers[] = User::makeGroupLinkHTML( $ueg, $memberName );
                }
                asort( $userGroups );
@@ -196,7 +199,7 @@ class Preferences {
                $defaultPreferences['usergroups'] = array(
                        'type' => 'info',
                        'label' => $context->msg( 'prefs-memberingroups' )->numParams(
-                               count( $userGroups ) )->parse(),
+                               count( $userGroups ) )->params( $userName )->parse(),
                        'default' => $context->msg( 'prefs-memberingroups-type',
                                $lang->commaList( $userGroups ),
                                $lang->commaList( $userMembers )
@@ -252,7 +255,7 @@ class Preferences {
                if ( $wgAuth->allowPasswordChange() ) {
                        $link = Linker::link( SpecialPage::getTitleFor( 'ChangePassword' ),
                                $context->msg( 'prefs-resetpass' )->escaped(), array(),
-                               array( 'returnto' => SpecialPage::getTitleFor( 'Preferences' ) ) );
+                               array( 'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText() ) );
 
                        $defaultPreferences['password'] = array(
                                'type' => 'info',
@@ -367,7 +370,7 @@ class Preferences {
                                SpecialPage::getTitleFor( 'ChangeEmail' ),
                                $context->msg( $user->getEmail() ? 'prefs-changeemail' : 'prefs-setemail' )->escaped(),
                                array(),
-                               array( 'returnto' => SpecialPage::getTitleFor( 'Preferences' ) ) );
+                               array( 'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText() ) );
 
                        $emailAddress = $user->getEmail() ? htmlspecialchars( $user->getEmail() ) : '';
                        if ( $wgAuth->allowPropChange( 'emailaddress' ) ) {
@@ -507,14 +510,15 @@ class Preferences {
                # be nice to somehow merge this back in there to avoid redundancy.
                if ( $wgAllowUserCss || $wgAllowUserJs ) {
                        $linkTools = array();
+                       $userName = $user->getName();
 
                        if ( $wgAllowUserCss ) {
-                               $cssPage = Title::makeTitleSafe( NS_USER, $user->getName() . '/common.css' );
+                               $cssPage = Title::makeTitleSafe( NS_USER, $userName . '/common.css' );
                                $linkTools[] = Linker::link( $cssPage, $context->msg( 'prefs-custom-css' )->escaped() );
                        }
 
                        if ( $wgAllowUserJs ) {
-                               $jsPage = Title::makeTitleSafe( NS_USER, $user->getName() . '/common.js' );
+                               $jsPage = Title::makeTitleSafe( NS_USER, $userName . '/common.js' );
                                $linkTools[] = Linker::link( $jsPage, $context->msg( 'prefs-custom-js' )->escaped() );
                        }
 
@@ -1009,27 +1013,17 @@ class Preferences {
                        'section' => 'searchoptions/advancedsearchoptions',
                );
 
-               $nsOptions = array();
-
-               foreach ( $wgContLang->getNamespaces() as $ns => $name ) {
-                       if ( $ns < 0 ) {
-                               continue;
-                       }
-
-                       $displayNs = str_replace( '_', ' ', $name );
-
-                       if ( !$displayNs ) {
-                               $displayNs = $context->msg( 'blanknamespace' )->text();
-                       }
-
-                       $displayNs = htmlspecialchars( $displayNs );
-                       $nsOptions[$displayNs] = $ns;
+               $nsOptions = $wgContLang->getFormattedNamespaces();
+               $nsOptions[0] = $context->msg( 'blanknamespace' )->text();
+               foreach ( $nsOptions as $ns => $name ) {
+                       if ( $ns < 0 )
+                               unset( $nsOptions[$ns] );
                }
 
                $defaultPreferences['searchnamespaces'] = array(
                        'type' => 'multiselect',
                        'label-message' => 'defaultns',
-                       'options' => $nsOptions,
+                       'options' => array_flip( $nsOptions ),
                        'section' => 'searchoptions/advancedsearchoptions',
                        'prefix' => 'searchNs',
                );
@@ -1246,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
                 */
@@ -1332,7 +1333,7 @@ class Preferences {
         * @param $alldata
         * @return int
         */
-       static function filterIntval( $value, $alldata ){
+       static function filterIntval( $value, $alldata ) {
                return intval( $value );
        }
 
@@ -1373,7 +1374,7 @@ class Preferences {
         * @return bool|Status|string
         */
        static function tryFormSubmit( $formData, $form, $entryPoint = 'internal' ) {
-               global $wgHiddenPrefs;
+               global $wgHiddenPrefs, $wgAuth;
 
                $user = $form->getModifiedUser();
                $result = true;
@@ -1412,9 +1413,8 @@ class Preferences {
                        $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 );
@@ -1422,6 +1422,8 @@ class Preferences {
 
                $user->saveSettings();
 
+               $wgAuth->updateExternalDB( $user );
+
                return $result;
        }
 
index 9643ba7..fe871b9 100644 (file)
@@ -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,6 +215,18 @@ 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 ) {
                        $titles = '';
@@ -236,7 +249,6 @@ class ProtectionForm {
                                wfEscapeWikiText( $this->mTitle->getPrefixedText() ) );
                }
 
-               $wgOut->addBacklinkSubtitle( $this->mTitle );
                $wgOut->addHTML( $this->buildForm() );
                $this->showLogExtract( $wgOut );
        }
@@ -501,7 +513,7 @@ class ProtectionForm {
                                        <td class='mw-input'>" .
                                                Xml::checkLabel( wfMessage( 'watchthis' )->text(),
                                                        'mwProtectWatch', 'mwProtectWatch',
-                                                       $this->mTitle->userIsWatching() || $wgUser->getOption( 'watchdefault' ) ) .
+                                                       $wgUser->isWatched( $this->mTitle ) || $wgUser->getOption( 'watchdefault' ) ) .
                                        "</td>
                                </tr>";
                        }
index 1f21584..a01ac68 100644 (file)
@@ -302,55 +302,51 @@ abstract class QueryPage extends SpecialPage {
                        return false;
                }
 
-               if ( $ignoreErrors ) {
-                       $ignoreW = $dbw->ignoreErrors( true );
-                       $ignoreR = $dbr->ignoreErrors( true );
-               }
-
-               # Clear out any old cached data
-               $dbw->delete( 'querycache', array( 'qc_type' => $this->getName() ), $fname );
-               # Do query
-               $res = $this->reallyDoQuery( $limit, false );
-               $num = false;
-               if ( $res ) {
-                       $num = $res->numRows();
-                       # Fetch results
-                       $vals = array();
-                       while ( $res && $row = $dbr->fetchObject( $res ) ) {
-                               if ( isset( $row->value ) ) {
-                                       if ( $this->usesTimestamps() ) {
-                                               $value = wfTimestamp( TS_UNIX,
-                                                       $row->value );
+               try {
+                       # Clear out any old cached data
+                       $dbw->delete( 'querycache', array( 'qc_type' => $this->getName() ), $fname );
+                       # Do query
+                       $res = $this->reallyDoQuery( $limit, false );
+                       $num = false;
+                       if ( $res ) {
+                               $num = $res->numRows();
+                               # Fetch results
+                               $vals = array();
+                               while ( $res && $row = $dbr->fetchObject( $res ) ) {
+                                       if ( isset( $row->value ) ) {
+                                               if ( $this->usesTimestamps() ) {
+                                                       $value = wfTimestamp( TS_UNIX,
+                                                               $row->value );
+                                               } else {
+                                                       $value = intval( $row->value ); // @bug 14414
+                                               }
                                        } else {
-                                               $value = intval( $row->value ); // @bug 14414
+                                               $value = 0;
                                        }
-                               } else {
-                                       $value = 0;
-                               }
 
-                               $vals[] = array( 'qc_type' => $this->getName(),
-                                               'qc_namespace' => $row->namespace,
-                                               'qc_title' => $row->title,
-                                               'qc_value' => $value );
-                       }
+                                       $vals[] = array( 'qc_type' => $this->getName(),
+                                                       'qc_namespace' => $row->namespace,
+                                                       'qc_title' => $row->title,
+                                                       'qc_value' => $value );
+                               }
 
-                       # Save results into the querycache table on the master
-                       if ( count( $vals ) ) {
-                               if ( !$dbw->insert( 'querycache', $vals, __METHOD__ ) ) {
-                                       // Set result to false to indicate error
-                                       $num = false;
+                               # Save results into the querycache table on the master
+                               if ( count( $vals ) ) {
+                                       $dbw->insert( 'querycache', $vals, __METHOD__ );
                                }
+                               # Update the querycache_info record for the page
+                               $dbw->delete( 'querycache_info', array( 'qci_type' => $this->getName() ), $fname );
+                               $dbw->insert( 'querycache_info',
+                                       array( 'qci_type' => $this->getName(), 'qci_timestamp' => $dbw->timestamp() ),
+                                       $fname );
                        }
-                       if ( $ignoreErrors ) {
-                               $dbw->ignoreErrors( $ignoreW );
-                               $dbr->ignoreErrors( $ignoreR );
+               } catch ( DBError $e ) {
+                       if ( !$ignoreErrors ) {
+                               throw $e; // report query error
                        }
-
-                       # Update the querycache_info record for the page
-                       $dbw->delete( 'querycache_info', array( 'qci_type' => $this->getName() ), $fname );
-                       $dbw->insert( 'querycache_info', array( 'qci_type' => $this->getName(), 'qci_timestamp' => $dbw->timestamp() ), $fname );
-
+                       $num = false; // set result to false to indicate error
                }
+
                return $num;
        }
 
@@ -652,7 +648,7 @@ abstract class QueryPage extends SpecialPage {
 
                if ( !$wgFeed ) {
                        $this->getOutput()->addWikiMsg( 'feed-unavailable' );
-                       return;
+                       return false;
                }
 
                global $wgFeedLimit;
index 3cf6c72..56df21e 100644 (file)
@@ -55,6 +55,7 @@
  *  lang            the interwiki prefix, automatically set in save()
  *  oldSize         text size before the change
  *  newSize         text size after the change
+ *  pageStatus      status of the page: created, deleted, moved, restored, changed
  *
  * temporary:       not stored in the database
  *      notificationtimestamp
@@ -125,7 +126,7 @@ class RecentChange {
         */
        public static function newFromConds( $conds, $fname = __METHOD__ ) {
                $dbr = wfGetDB( DB_SLAVE );
-               $row = $dbr->selectRow( 'recentchanges', '*', $conds, $fname );
+               $row = $dbr->selectRow( 'recentchanges', self::selectFields(), $conds, $fname );
                if ( $row !== false ) {
                        return self::newFromRow( $row );
                } else {
@@ -133,6 +134,40 @@ class RecentChange {
                }
        }
 
+       /**
+        * Return the list of recentchanges fields that should be selected to create
+        * a new recentchanges object.
+        * @return array
+        */
+       public static function selectFields() {
+               return array(
+                       'rc_id',
+                       'rc_timestamp',
+                       'rc_cur_time',
+                       'rc_user',
+                       'rc_user_text',
+                       'rc_namespace',
+                       'rc_title',
+                       'rc_comment',
+                       'rc_minor',
+                       'rc_bot',
+                       'rc_new',
+                       'rc_cur_id',
+                       'rc_this_oldid',
+                       'rc_last_oldid',
+                       'rc_type',
+                       'rc_patrolled',
+                       'rc_ip',
+                       'rc_old_len',
+                       'rc_new_len',
+                       'rc_deleted',
+                       'rc_logid',
+                       'rc_log_type',
+                       'rc_log_action',
+                       'rc_params',
+               );
+       }
+
        # Accessors
 
        /**
@@ -200,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 );
 
@@ -239,7 +277,8 @@ class RecentChange {
                                        $this->mAttribs['rc_timestamp'],
                                        $this->mAttribs['rc_comment'],
                                        $this->mAttribs['rc_minor'],
-                                       $this->mAttribs['rc_last_oldid'] );
+                                       $this->mAttribs['rc_last_oldid'],
+                                       $this->mExtra['pageStatus'] );
                        }
                }
        }
@@ -427,6 +466,7 @@ class RecentChange {
                        'lastTimestamp' => $lastTimestamp,
                        'oldSize'       => $oldSize,
                        'newSize'       => $newSize,
+                       'pageStatus'   => 'changed'
                );
                $rc->save();
                return $rc;
@@ -484,7 +524,8 @@ class RecentChange {
                        'prefixedDBkey' => $title->getPrefixedDBkey(),
                        'lastTimestamp' => 0,
                        'oldSize' => 0,
-                       'newSize' => $size
+                       'newSize' => $size,
+                       'pageStatus' => 'created'
                );
                $rc->save();
                return $rc;
@@ -538,6 +579,27 @@ class RecentChange {
                $type, $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' ) {
                global $wgRequest;
 
+               ## Get pageStatus for email notification
+               switch ( $type . '-' . $action ) {
+                       case 'delete-delete':
+                               $pageStatus = 'deleted';
+                               break;
+                       case 'move-move':
+                       case 'move-move_redir':
+                               $pageStatus = 'moved';
+                               break;
+                       case 'delete-restore':
+                               $pageStatus = 'restored';
+                               break;
+                       case 'upload-upload':
+                               $pageStatus = 'created';
+                               break;
+                       case 'upload-overwrite':
+                       default:
+                               $pageStatus = 'changed';
+                               break;
+               }
+
                $rc = new RecentChange;
                $rc->mTitle = $target;
                $rc->mPerformer = $user;
@@ -571,6 +633,7 @@ class RecentChange {
                        'prefixedDBkey' => $title->getPrefixedDBkey(),
                        'lastTimestamp' => 0,
                        'actionComment' => $actionComment, // the comment appended to the action, passed from LogPage
+                       'pageStatus'    => $pageStatus,
                        'actionCommentIRC' => $actionCommentIRC
                );
                return $rc;
index d556edc..5f62e4d 100644 (file)
@@ -52,7 +52,7 @@ class Revision implements IDBAccessObject {
        protected $mContentFormat;
 
        /**
-        * @var Content
+        * @var Content|null|bool
         */
        protected $mContent;
 
@@ -124,7 +124,7 @@ class Revision implements IDBAccessObject {
         * Returns null if no such revision can be found.
         *
         * $flags include:
-        *      Revision::READ_LATEST  : Select the data from the master
+        *      Revision::READ_LATEST  : Select the data from the master (since 1.20)
         *      Revision::READ_LOCKING : Select & lock the data from the master
         *
         * @param $revId Integer
@@ -493,13 +493,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 );
                        }
 
-                       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 );
@@ -982,27 +982,34 @@ class Revision implements IDBAccessObject {
        }
 
        /**
-        * Gets the content object for the revision
+        * Gets the content object for the revision (or null on failure).
+        *
+        * Note that for mutable Content objects, each call to this method will return a
+        * fresh clone.
         *
         * @since 1.21
-        * @return Content
+        * @return Content|null the Revision's content, or null on failure.
         */
        protected function getContentInternal() {
                if( is_null( $this->mContent ) ) {
                        // Revision is immutable. Load on demand:
-
-                       $handler = $this->getContentHandler();
-                       $format = $this->getContentFormat();
-
                        if( is_null( $this->mText ) ) {
-                               // Load text on demand:
                                $this->mText = $this->loadText();
                        }
 
-                       $this->mContent = is_null( $this->mText ) ? null : $handler->unserializeContent( $this->mText, $format );
+                       if ( $this->mText !== null && $this->mText !== false ) {
+                               // Unserialize content
+                               $handler = $this->getContentHandler();
+                               $format = $this->getContentFormat();
+
+                               $this->mContent = $handler->unserializeContent( $this->mText, $format );
+                       } else {
+                               $this->mContent = false; // negative caching!
+                       }
                }
 
-               return $this->mContent->copy(); // NOTE: copy() will return $this for immutable content objects
+               // NOTE: copy() will return $this for immutable content objects
+               return $this->mContent ? $this->mContent->copy() : null;
        }
 
        /**
@@ -1141,9 +1148,13 @@ class Revision implements IDBAccessObject {
          *
          * @param $row Object: the text data
          * @param $prefix String: table prefix (default 'old_')
+         * @param $wiki String|false: the name of the wiki to load the revision text from
+         *         (same as the the wiki $row was loaded from) or false to indicate the local
+         *         wiki (this is the default). Otherwise, it must be a symbolic wiki database
+         *         identifier as understood by the LoadBalancer class.
          * @return String: text the text requested or false on failure
          */
-       public static function getRevisionText( $row, $prefix = 'old_' ) {
+       public static function getRevisionText( $row, $prefix = 'old_', $wiki = false ) {
                wfProfileIn( __METHOD__ );
 
                # Get data
@@ -1171,7 +1182,7 @@ class Revision implements IDBAccessObject {
                                wfProfileOut( __METHOD__ );
                                return false;
                        }
-                       $text = ExternalStore::fetchFromURL( $url );
+                       $text = ExternalStore::fetchFromURL( $url, array( 'wiki' => $wiki ) );
                }
 
                // If the text was fetched without an error, convert it
@@ -1377,7 +1388,7 @@ class Revision implements IDBAccessObject {
 
                $content = $this->getContent( Revision::RAW );
 
-               if ( !$content->isValid() ) {
+               if ( !$content || !$content->isValid() ) {
                        $t = $title->getPrefixedDBkey();
 
                        throw new MWException( "Content of $t is not valid! Content model is $model" );
@@ -1397,7 +1408,7 @@ class Revision implements IDBAccessObject {
         * Lazy-load the revision's text.
         * Currently hardcoded to the 'text' table storage engine.
         *
-        * @return String
+        * @return String|bool the revision's text, or false on failure
         */
        protected function loadText() {
                wfProfileIn( __METHOD__ );
index 5aa0545..0034afe 100644 (file)
@@ -364,14 +364,17 @@ class Sanitizer {
         * @return string
         */
        static function removeHTMLtags( $text, $processCallback = null, $args = array(), $extratags = array(), $removetags = array() ) {
-               global $wgUseTidy;
+               global $wgUseTidy, $wgHtml5, $wgAllowMicrodataAttributes, $wgAllowImageTag;
 
                static $htmlpairsStatic, $htmlsingle, $htmlsingleonly, $htmlnest, $tabletags,
                        $htmllist, $listtags, $htmlsingleallowed, $htmlelementsStatic, $staticInitialised;
 
                wfProfileIn( __METHOD__ );
 
-               if ( !$staticInitialised ) {
+               // Base our staticInitialised variable off of the global config state so that if the globals
+               // are changed (like in the secrewed up test system) we will re-initialise the settings.
+               $globalContext = implode( '-', compact( 'wgHtml5', 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
+               if ( !$staticInitialised || $staticInitialised != $globalContext ) {
 
                        $htmlpairsStatic = array( # Tags that must be closed
                                'b', 'bdi', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1',
@@ -381,13 +384,20 @@ class Sanitizer {
                                'ruby', 'rt' , 'rb' , 'rp', 'p', 'span', 'abbr', 'dfn',
                                'kbd', 'samp'
                        );
+                       if ( $wgHtml5 ) {
+                               $htmlpairsStatic = array_merge( $htmlpairsStatic, array( 'data', 'time', 'mark' ) );
+                       }
                        $htmlsingle = array(
                                'br', 'hr', 'li', 'dt', 'dd'
                        );
                        $htmlsingleonly = array( # Elements that cannot have close tags
                                'br', 'hr'
                        );
-                       $htmlnest = array( # Tags that can be nested directly or indirectly
+                       if ( $wgHtml5 && $wgAllowMicrodataAttributes ) {
+                               $htmlsingle[] = $htmlsingleonly[] = 'meta';
+                               $htmlsingle[] = $htmlsingleonly[] = 'link';
+                       }
+                       $htmlnest = array( # Tags that can be nested--??
                                'table', 'tr', 'td', 'th', 'div', 'blockquote', 'ol', 'ul',
                                'li', 'dl', 'dt', 'dd', 'font', 'big', 'small', 'sub', 'sup', 'span'
                        );
@@ -401,7 +411,6 @@ class Sanitizer {
                                'li',
                        );
 
-                       global $wgAllowImageTag;
                        if ( $wgAllowImageTag ) {
                                $htmlsingle[] = 'img';
                                $htmlsingleonly[] = 'img';
@@ -416,7 +425,7 @@ class Sanitizer {
                        foreach ( $vars as $var ) {
                                $$var = array_flip( $$var );
                        }
-                       $staticInitialised = true;
+                       $staticInitialised = $globalContext;
                }
                # Populate $htmlpairs and $htmlelements with the $extratags and $removetags arrays
                $extratags = array_flip( $extratags );
@@ -532,6 +541,10 @@ class Sanitizer {
                                                        call_user_func_array( $processCallback, array( &$params, $args ) );
                                                }
 
+                                               if ( !Sanitizer::validateTag( $params, $t ) ) {
+                                                       $badtag = true;
+                                               }
+
                                                # Strip non-approved attributes from the tag
                                                $newparams = Sanitizer::fixTagAttributes( $params, $t );
                                        }
@@ -555,16 +568,24 @@ class Sanitizer {
                                preg_match( '/^(\\/?)(\\w+)([^>]*?)(\\/{0,1}>)([^<]*)$/',
                                $x, $regs );
                                @list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
+                               $badtag = false;
                                if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
                                        if( is_callable( $processCallback ) ) {
                                                call_user_func_array( $processCallback, array( &$params, $args ) );
                                        }
+
+                                       if ( !Sanitizer::validateTag( $params, $t ) ) {
+                                               $badtag = true;
+                                       }
+
                                        $newparams = Sanitizer::fixTagAttributes( $params, $t );
-                                       $rest = str_replace( '>', '&gt;', $rest );
-                                       $text .= "<$slash$t$newparams$brace$rest";
-                               } else {
-                                       $text .= '&lt;' . str_replace( '>', '&gt;', $x);
+                                       if ( !$badtag ) {
+                                               $rest = str_replace( '>', '&gt;', $rest );
+                                               $text .= "<$slash$t$newparams$brace$rest";
+                                               continue;
+                                       }
                                }
+                               $text .= '&lt;' . str_replace( '>', '&gt;', $x);
                        }
                }
                wfProfileOut( __METHOD__ );
@@ -617,111 +638,35 @@ class Sanitizer {
        }
 
        /**
-        * Take an array of attribute names and values and fix some deprecated values
-        * for the given element type.
-        * This does not validate properties, so you should ensure that you call
-        * validateTagAttributes AFTER this to ensure that the resulting style rule
-        * this may add is safe.
-        *
-        * - Converts most presentational attributes like align into inline css
+        * Takes attribute names and values for a tag and the tag name and
+        * validates that the tag is allowed to be present.
+        * This DOES NOT validate the attributes, nor does it validate the
+        * tags themselves. This method only handles the special circumstances
+        * where we may want to allow a tag within content but ONLY when it has
+        * specific attributes set.
         *
-        * @param $attribs Array
-        * @param $element String
-        * @return Array
+        * @param $params
+        * @param $element
         */
-       static function fixDeprecatedAttributes( $attribs, $element ) {
-               global $wgHtml5, $wgCleanupPresentationalAttributes;
-
-               // presentational attributes were removed from html5, we can leave them
-               // in when html5 is turned off
-               if ( !$wgHtml5 || !$wgCleanupPresentationalAttributes ) {
-                       return $attribs;
-               }
-
-               $table = array( 'table' );
-               $cells = array( 'td', 'th' );
-               $colls = array( 'col', 'colgroup' );
-               $tblocks = array( 'tbody', 'tfoot', 'thead' );
-               $h = array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' );
-
-               $presentationalAttribs = array(
-                       'align' => array( 'text-align', array_merge( array( 'caption', 'hr', 'div', 'p', 'tr' ), $table, $cells, $colls, $tblocks, $h ) ),
-                       'clear' => array( 'clear', array( 'br' ) ),
-                       'height' => array( 'height', $cells ),
-                       'nowrap' => array( 'white-space', $cells ),
-                       'size' => array( 'height', array( 'hr' ) ),
-                       'type' => array( 'list-style-type', array( 'li', 'ol', 'ul' ) ),
-                       'valign' => array( 'vertical-align', array_merge( $cells, $colls, $tblocks ) ),
-                       'width' => array( 'width', array_merge( array( 'hr', 'pre' ), $table, $cells, $colls ) ),
-               );
-
-               // Ensure that any upper case or mixed case attributes are converted to lowercase
-               foreach ( $attribs as $attribute => $value ) {
-                       if ( $attribute !== strtolower( $attribute ) && array_key_exists( strtolower( $attribute ), $presentationalAttribs ) ) {
-                               $attribs[strtolower( $attribute )] = $value;
-                               unset( $attribs[$attribute] );
-                       }
-               }
-
-               $style = "";
-               foreach ( $presentationalAttribs as $attribute => $info ) {
-                       list( $property, $elements ) = $info;
+       static function validateTag( $params, $element ) {
+               $params = Sanitizer::decodeTagAttributes( $params );
 
-                       // Skip if this attribute is not relevant to this element
-                       if ( !in_array( $element, $elements ) ) {
-                               continue;
-                       }
-
-                       // Skip if the attribute is not used
-                       if ( !array_key_exists( $attribute, $attribs ) ) {
-                               continue;
+               if ( $element == 'meta' || $element == 'link' ) {
+                       if ( !isset( $params['itemprop'] ) ) {
+                               // <meta> and <link> must have an itemprop="" otherwise they are not valid or safe in content
+                               return false;
                        }
-
-                       $value = $attribs[$attribute];
-
-                       // For nowrap the value should be nowrap instead of whatever text is in the value
-                       if ( $attribute === 'nowrap' ) {
-                               $value = 'nowrap';
+                       if ( $element == 'meta' && !isset( $params['content'] ) ) {
+                               // <meta> must have a content="" for the itemprop
+                               return false;
                        }
-
-                       // clear="all" is clear: both; in css
-                       if ( $attribute === 'clear' && strtolower( $value ) === 'all' ) {
-                               $value = 'both';
+                       if ( $element == 'link' && !isset( $params['href'] ) ) {
+                               // <link> must have an associated href=""
+                               return false;
                        }
-
-                       // Size based properties should have px applied to them if they have no unit
-                       if ( in_array( $attribute, array( 'height', 'width', 'size' ) ) ) {
-                               if ( preg_match( '/^[\d.]+$/', $value ) ) {
-                                       $value = "{$value}px";
-                               }
-                       }
-
-                       // Table align is special, it's about block alignment instead of
-                       // content align (see also bug 40306)
-                       if ( $attribute === 'align' && in_array( $element, $table ) ) {
-                               if ( $value === 'center' ) {
-                                       $style .= ' margin-left: auto;';
-                                       $property = 'margin-right';
-                                       $value = 'auto';
-                               } else {
-                                       $property = 'float';
-                               }
-                       }
-
-                       $style .= " $property: $value;";
-
-                       unset( $attribs[$attribute] );
-               }
-
-               if ( $style ) {
-                       // Prepend our style rules so that they can be overridden by user css
-                       if ( isset($attribs['style']) ) {
-                               $style .= " " . $attribs['style'];
-                       }
-                       $attribs['style'] = trim($style);
                }
 
-               return $attribs;
+               return true;
        }
 
        /**
@@ -825,7 +770,7 @@ class Sanitizer {
                                unset( $out['itemid'] );
                                unset( $out['itemref'] );
                        }
-                       # TODO: Strip itemprop if we aren't descendants of an itemscope.
+                       # TODO: Strip itemprop if we aren't descendants of an itemscope or pointed to by an itemref.
                }
                return $out;
        }
@@ -972,7 +917,6 @@ class Sanitizer {
                }
 
                $decoded = Sanitizer::decodeTagAttributes( $text );
-               $decoded = Sanitizer::fixDeprecatedAttributes( $decoded, $element );
                $stripped = Sanitizer::validateTagAttributes( $decoded, $element );
 
                $attribs = array();
@@ -1451,10 +1395,7 @@ class Sanitizer {
         * @return Array
         */
        static function attributeWhitelist( $element ) {
-               static $list;
-               if( !isset( $list ) ) {
-                       $list = Sanitizer::setupAttributeWhitelist();
-               }
+               $list = Sanitizer::setupAttributeWhitelist();
                return isset( $list[$element] )
                        ? $list[$element]
                        : array();
@@ -1468,6 +1409,13 @@ class Sanitizer {
        static function setupAttributeWhitelist() {
                global $wgAllowRdfaAttributes, $wgHtml5, $wgAllowMicrodataAttributes;
 
+               static $whitelist, $staticInitialised;
+               $globalContext = implode( '-', compact( 'wgAllowRdfaAttributes', 'wgHtml5', 'wgAllowMicrodataAttributes' ) );
+
+               if ( isset( $whitelist ) && $staticInitialised == $globalContext ) {
+                       return $whitelist;
+               }
+
                $common = array( 'id', 'class', 'lang', 'dir', 'title', 'style' );
 
                if ( $wgAllowRdfaAttributes ) {
@@ -1500,7 +1448,7 @@ class Sanitizer {
 
                # Numbers refer to sections in HTML 4.01 standard describing the element.
                # See: http://www.w3.org/TR/html4/
-               $whitelist = array (
+               $whitelist = array(
                        # 7.5.4
                        'div'        => $block,
                        'center'     => $common, # deprecated
@@ -1632,7 +1580,28 @@ class Sanitizer {
                        # HTML 5 section 4.6
                        'bdi' => $common,
 
+               );
+
+               if ( $wgHtml5 ) {
+                       # HTML5 elements, defined by:
+                       # http://www.whatwg.org/specs/web-apps/current-work/multipage/
+                       $whitelist += array(
+                               'data' => array_merge( $common, array( 'value' ) ),
+                               'time' => array_merge( $common, array( 'datetime' ) ),
+                               'mark' => $common,
+
+                               // meta and link are only permitted by removeHTMLtags when Microdata
+                               // is enabled so we don't bother adding a conditional to hide these
+                               // Also meta and link are only valid in WikiText as Microdata elements
+                               // (ie: validateTag rejects tags missing the attributes needed for Microdata)
+                               // So we don't bother including $common attributes that have no purpose.
+                               'meta' => array( 'itemprop', 'content' ),
+                               'link' => array( 'itemprop', 'href' ),
                        );
+               }
+
+               $staticInitialised = $globalContext;
+
                return $whitelist;
        }
 
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 83ca516..f6c8245 100644 (file)
@@ -390,6 +390,11 @@ if ( !defined( 'MW_COMPILED' ) ) {
        wfProfileOut( $fname . '-includes' );
 }
 
+if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
+       $wgSecureLogin = false;
+       wfWarn( 'Secure login was enabled on a server that only supports HTTP or HTTPS. Disabling secure login.' );
+}
+
 # Now that GlobalFunctions is loaded, set defaults that depend
 # on it.
 if ( $wgTmpDirectory === false ) {
index 6a861d8..afe0cc7 100644 (file)
@@ -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];
@@ -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,
@@ -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'] ) ) {
index 7fb17a7..90cd131 100644 (file)
@@ -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 dcc37d7..58d443a 100644 (file)
@@ -398,7 +398,7 @@ class SkinTemplate extends Skin {
                # not for special pages or file pages AND only when viewing AND if the page exists
                # (or is in MW namespace, because that has default content)
                if ( !in_array( $title->getNamespace(), array( NS_SPECIAL, NS_FILE ) ) &&
-                       in_array( $request->getVal( 'action', 'view' ), array( 'view', 'historysubmit' ) ) &&
+                       Action::getActionName( $this ) === 'view' &&
                        ( $title->exists() || $title->getNamespace() == NS_MEDIAWIKI ) ) {
                        $pageLang = $title->getPageViewLanguage();
                        $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
@@ -555,7 +555,11 @@ class SkinTemplate extends Skin {
                # $this->getTitle() will just give Special:Badtitle, which is
                # not especially useful as a returnto parameter. Use the title
                # from the request instead, if there was one.
-               $page = Title::newFromURL( $request->getVal( 'title', '' ) );
+               if ( $this->getUser()->isAllowed( 'read' ) ) {
+                       $page = $this->getTitle();
+               } else {
+                       $page = Title::newFromText( $request->getVal( 'title', '' ) );
+               }
                $page = $request->getVal( 'returnto', $page );
                $a = array();
                if ( strval( $page ) !== '' ) {
@@ -639,7 +643,6 @@ class SkinTemplate extends Skin {
                        $is_signup = $request->getText( 'type' ) == 'signup';
 
                        # anonlogin & login are the same
-                       global $wgSecureLogin;
                        $proto = $wgSecureLogin ? PROTO_HTTPS : null;
 
                        $login_id = $this->showIPinHeader() ? 'anonlogin' : 'login';
@@ -687,12 +690,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 ) {
@@ -702,7 +707,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
@@ -954,7 +963,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,
@@ -1204,6 +1213,7 @@ class SkinTemplate extends Skin {
                        $rootUser = $user->getName();
 
                        $nav_urls['contributions'] = array(
+                               'text' => $this->msg( 'contributions', $rootUser )->text(),
                                'href' => self::makeSpecialUrlSubpage( 'Contributions', $rootUser )
                        );
 
index 816831f..da150c9 100644 (file)
@@ -254,13 +254,14 @@ class SpecialPage {
         *
         * @param $name String
         * @param $subpage String|Bool subpage string, or false to not use a subpage
+        * @param $fragment String the link fragment (after the "#")
         * @throws MWException
         * @return Title object
         */
-       public static function getTitleFor( $name, $subpage = false ) {
+       public static function getTitleFor( $name, $subpage = false, $fragment = '' ) {
                $name = SpecialPageFactory::getLocalNameFor( $name, $subpage );
                if ( $name ) {
-                       return Title::makeTitle( NS_SPECIAL, $name );
+                       return Title::makeTitle( NS_SPECIAL, $name, $fragment );
                } else {
                        throw new MWException( "Invalid special page name \"$name\"" );
                }
@@ -513,6 +514,19 @@ class SpecialPage {
                return false;
        }
 
+       /**
+        * Is this page cached?
+        * Expensive pages are cached or disabled in miser mode.
+        * Used by QueryPage and subclasses, moved here so that
+        * Special:SpecialPages can safely call it for all special pages.
+        *
+        * @return Boolean
+        * @since 1.21
+        */
+       public function isCached() {
+               return false;
+       }
+
        /**
         * Can be overridden by subclasses with more complicated permissions
         * schemes.
@@ -864,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
@@ -871,11 +895,11 @@ 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(
index 8ed5264..4a45b44 100644 (file)
@@ -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 );
@@ -373,11 +373,13 @@ class SpecialPageFactory {
                }
                foreach ( self::getList() as $name => $rec ) {
                        $page = self::getPage( $name );
-                       if ( $page // not null
-                               && $page->isListed()
-                               && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
-                       ) {
-                               $pages[$name] = $page;
+                       if ( $page ) { // not null
+                               $page->setContext( RequestContext::getMain() );
+                               if ( $page->isListed()
+                                       && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
+                               ) {
+                                       $pages[$name] = $page;
+                               }
                        }
                }
                return $pages;
index 763c95c..2553f54 100644 (file)
@@ -47,7 +47,7 @@ class Status {
        /**
         * Factory function for fatal errors
         *
-        * @param $message String: message name
+        * @param $message String|Message: message name or object
         * @return Status
         */
        static function newFatal( $message /*, parameters...*/ ) {
@@ -103,7 +103,7 @@ class Status {
        /**
         * Add a new warning
         *
-        * @param $message String: message name
+        * @param $message String|Message: message name or object
         */
        function warning( $message /*, parameters... */ ) {
                $params = array_slice( func_get_args(), 1 );
@@ -117,7 +117,7 @@ class Status {
         * Add an error, do not set fatal flag
         * This can be used for non-fatal errors
         *
-        * @param $message String: message name
+        * @param $message String|Message: message name or object
         */
        function error( $message /*, parameters... */ ) {
                $params = array_slice( func_get_args(), 1 );
@@ -131,7 +131,7 @@ class Status {
         * Add an error and set OK to false, indicating that the operation
         * as a whole was fatal
         *
-        * @param $message String: message name
+        * @param $message String|Message: message name or object
         */
        function fatal( $message /*, parameters... */ ) {
                $params = array_slice( func_get_args(), 1 );
@@ -183,7 +183,7 @@ class Status {
                        }
                }
                if ( count( $this->errors ) == 1 ) {
-                       $s = $this->getWikiTextForError( $this->errors[0], $this->errors[0]  );
+                       $s = $this->getErrorMessage( $this->errors[0] );
                        if ( $shortContext ) {
                                $s = wfMessage( $shortContext, $s )->plain();
                        } elseif ( $longContext ) {
@@ -191,7 +191,7 @@ class Status {
                        }
                } else {
                        $s = '* '. implode("\n* ",
-                               $this->getWikiTextArray( $this->errors ) ) . "\n";
+                               $this->getErrorMessageArray( $this->errors ) ) . "\n";
                        if ( $longContext ) {
                                $s = wfMessage( $longContext, $s )->plain();
                        } elseif ( $shortContext ) {
@@ -202,7 +202,7 @@ class Status {
        }
 
        /**
-        * Return the wiki text for a single error.
+        * Return the message for a single error.
         * @param $error Mixed With an array & two values keyed by
         * 'message' and 'params', use those keys-value pairs.
         * Otherwise, if its an array, just use the first value as the
@@ -210,19 +210,22 @@ class Status {
         *
         * @return String
         */
-       protected function getWikiTextForError( $error ) {
+       protected function getErrorMessage( $error ) {
                if ( is_array( $error ) ) {
-                       if ( isset( $error['message'] ) && isset( $error['params'] ) ) {
-                               return wfMessage( $error['message'],
-                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) )  )->plain();
+                       if( isset( $error['message'] ) && $error['message'] instanceof Message ) {
+                               $msg = $error['message'];
+                       } elseif ( isset( $error['message'] ) && isset( $error['params'] ) ) {
+                               $msg = wfMessage( $error['message'],
+                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) )  );
                        } else {
-                               $message = array_shift($error);
-                               return wfMessage( $message,
-                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ) )->plain();
+                               $msgName = array_shift( $error );
+                               $msg = wfMessage( $msgName,
+                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ) );
                        }
                } else {
-                       return wfMessage( $error )->plain();
+                       $msg = wfMessage( $error );
                }
+               return $msg->plain();
        }
 
        /**
@@ -239,8 +242,8 @@ class Status {
         * @param $errors Array
         * @return Array
         */
-       function getWikiTextArray( $errors ) {
-               return array_map( array( $this, 'getWikiTextForError' ), $errors );
+       protected function getErrorMessageArray( $errors ) {
+               return array_map( array( $this, 'getErrorMessage' ), $errors );
        }
 
        /**
@@ -287,7 +290,9 @@ class Status {
                $result = array();
                foreach ( $this->errors as $error ) {
                        if ( $error['type'] === $type ) {
-                               if( $error['params'] ) {
+                               if( $error['message'] instanceof Message ) {
+                                       $result[] = $error['message'];
+                               } elseif( $error['params'] ) {
                                        $result[] = array_merge( array( $error['message'] ), $error['params'] );
                                } else {
                                        $result[] = array( $error['message'] );
@@ -318,6 +323,9 @@ class Status {
        /**
         * Returns true if the specified message is present as a warning or error
         *
+        * Note, due to the lack of tools for comparing Message objects, this
+        * function will not work when using a Message object as a parameter.
+        *
         * @param $msg String: message name
         * @return Boolean
         */
@@ -334,9 +342,12 @@ class Status {
         * If the specified source message exists, replace it with the specified
         * destination message, but keep the same parameters as in the original error.
         *
-        * Return true if the replacement was done, false otherwise.
+        * Note, due to the lack of tools for comparing Message objects, this
+        * function will not work when using a Message object as the search parameter.
         *
-        * @return bool
+        * @param $source Message|String: Message key or object to search for
+        * @param $dest Message|String: Replacement message key or object
+        * @return bool Return true if the replacement was done, false otherwise.
         */
        function replaceMessage( $source, $dest ) {
                $replaced = false;
index fba31ea..54a85dc 100644 (file)
  * A collection of static methods to play with strings.
  */
 class StringUtils {
+
+       /**
+        * Test whether a string is valid UTF-8.
+        *
+        * The function check for invalid byte sequences, overlong encoding but
+        * not for different normalisations.
+        *
+        * This relies internally on the mbstring function mb_check_encoding()
+        * hardcoded to check against UTF-8. Whenever the function is not available
+        * we fallback to a pure PHP implementation. Setting $disableMbstring to
+        * true will skip the use of mb_check_encoding, this is mostly intended for
+        * unit testing our internal implementation.
+        *
+        * @since 1.21
+        *
+        * @param string $value String to check
+        * @param boolean $disableMbstring Whether to use the pure PHP
+        * implementation instead of trying mb_check_encoding. Intended for unit
+        * testing. Default: false
+        *
+        * @return boolean Whether the given $value is a valid UTF-8 encoded string
+        */
+       static function isUtf8( $value, $disableMbstring = false ) {
+
+               if ( preg_match( '/[\x80-\xff]/', $value ) === 0 ) {
+                       # no high bit set, this is pure ASCII which is defacto
+                       # valid UTF-8
+                       return true;
+               }
+
+               if ( !$disableMbstring && function_exists( 'mb_check_encoding' ) ) {
+                       return mb_check_encoding( $value, 'UTF-8' );
+               } else {
+                       $hasUtf8 = preg_match( '/^(?>
+                                 [\x00-\x7f]
+                               | [\xc0-\xdf][\x80-\xbf]
+                               | [\xe0-\xef][\x80-\xbf]{2}
+                               | [\xf0-\xf7][\x80-\xbf]{3}
+                               | [\xf8-\xfb][\x80-\xbf]{4}
+                               | \xfc[\x84-\xbf][\x80-\xbf]{4}
+                       )+$/x', $value );
+                       return ($hasUtf8 > 0 );
+               }
+       }
+
        /**
         * Perform an operation equivalent to
         *
index 56ce46c..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
        );
 
        /**
@@ -216,7 +218,7 @@ class MWTimestamp {
 
                if( $message ) {
                        $initial = call_user_func_array( 'wfMessage', $message );
-                       return wfMessage( 'ago', $initial );
+                       return wfMessage( 'ago', $initial->parse() );
                } else {
                        return wfMessage( 'just-now' );
                }
index c1e2ccf..442bc22 100644 (file)
@@ -675,6 +675,7 @@ class Title {
        /**
         * Get the page's content model id, see the CONTENT_MODEL_XXX constants.
         *
+        * @throws MWException
         * @return String: Content model id
         */
        public function getContentModel() {
@@ -688,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;
@@ -908,7 +909,7 @@ class Title {
 
        /**
         * Is this the mainpage?
-        * @note Title::newFromText seams to be sufficiently optimized by the title
+        * @note Title::newFromText seems to be sufficiently optimized by the title
         * cache that we don't need to over-optimize by doing direct comparisons and
         * acidentally creating new bugs where $title->equals( Title::newFromText() )
         * ends up reporting something differently than $title->isMainPage();
@@ -1837,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' );
                }
 
@@ -2360,7 +2360,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();
        }
@@ -2972,6 +2973,7 @@ class Title {
         * What is the page_latest field for this page?
         *
         * @param $flags Int a bit field; may be Title::GAID_FOR_UPDATE to select for update
+        * @throws MWException
         * @return Int or 0 if the page doesn't exist
         */
        public function getLatestRevID( $flags = 0 ) {
@@ -2983,6 +2985,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
@@ -3500,9 +3503,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
@@ -3695,8 +3700,8 @@ class Title {
                }
 
                # Update watchlists
-               $oldnamespace = $this->getNamespace() & ~1;
-               $newnamespace = $nt->getNamespace() & ~1;
+               $oldnamespace = MWNamespace::getSubject( $this->getNamespace() );
+               $newnamespace = MWNamespace::getSubject( $nt->getNamespace() );
                $oldtitle = $this->getDBkey();
                $newtitle = $nt->getDBkey();
 
@@ -3981,7 +3986,7 @@ class Title {
                $content = $rev->getContent();
                # Does the redirect point to the source?
                # Or is it a broken self-redirect, usually caused by namespace collisions?
-               $redirTitle = $content->getRedirectTarget();
+               $redirTitle = $content ? $content->getRedirectTarget() : null;
 
                if ( $redirTitle ) {
                        if ( $redirTitle->getPrefixedDBkey() != $this->getPrefixedDBkey() &&
@@ -4027,7 +4032,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();
@@ -4459,6 +4464,7 @@ class Title {
         * @return Bool true if the update succeded
         */
        public function invalidateCache() {
+               global $wgMemc;
                if ( wfReadOnly() ) {
                        return false;
                }
@@ -4470,6 +4476,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;
        }
 
@@ -4733,4 +4747,43 @@ class Title {
                $pageLang = $contentHandler->getPageViewLanguage( $this );
                return $pageLang;
        }
+
+       /**
+        * Get a list of rendered edit notices for this page.
+        *
+        * Array is keyed by the original message key, and values are rendered using parseAsBlock, so
+        * they will already be wrapped in paragraphs.
+        *
+        * @since 1.21
+        * @return Array
+        */
+       public function getEditNotices() {
+               $notices = array();
+
+               # Optional notices on a per-namespace and per-page basis
+               $editnotice_ns = 'editnotice-' . $this->getNamespace();
+               $editnotice_ns_message = wfMessage( $editnotice_ns );
+               if ( $editnotice_ns_message->exists() ) {
+                       $notices[$editnotice_ns] = $editnotice_ns_message->parseAsBlock();
+               }
+               if ( MWNamespace::hasSubpages( $this->getNamespace() ) ) {
+                       $parts = explode( '/', $this->getDBkey() );
+                       $editnotice_base = $editnotice_ns;
+                       while ( count( $parts ) > 0 ) {
+                               $editnotice_base .= '-' . array_shift( $parts );
+                               $editnotice_base_msg = wfMessage( $editnotice_base );
+                               if ( $editnotice_base_msg->exists() ) {
+                                       $notices[$editnotice_base] = $editnotice_base_msg->parseAsBlock();
+                               }
+                       }
+               } else {
+                       # Even if there are no subpages in namespace, we still don't want / in MW ns.
+                       $editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $this->getDBkey() );
+                       $editnoticeMsg = wfMessage( $editnoticeText );
+                       if ( $editnoticeMsg->exists() ) {
+                               $notices[$editnoticeText] = $editnoticeMsg->parseAsBlock();
+                       }
+               }
+               return $notices;
+       }
 }
index c0d71e4..dbe9a64 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;
        }
 
@@ -370,7 +374,7 @@ class User {
         *    User::getCanonicalName(), except that true is accepted as an alias
         *    for 'valid', for BC.
         *
-        * @return User object, or false if the username is invalid
+        * @return User|bool User object, or false if the username is invalid
         *    (e.g. if it contains illegal characters or is an IP address). If the
         *    username is not present in the database, the result will be a user object
         *    with a name, zero user ID and default settings.
@@ -1102,10 +1106,10 @@ class User {
                }
 
                if ( is_array( $data ) ) {
-                       if ( is_array( $data['user_groups'] ) ) {
+                       if ( isset( $data['user_groups'] ) && is_array( $data['user_groups'] ) ) {
                                $this->mGroups = $data['user_groups'];
                        }
-                       if ( is_array( $data['user_properties'] ) ) {
+                       if ( isset( $data['user_properties'] ) && is_array( $data['user_properties'] ) ) {
                                $this->loadOptions( $data['user_properties'] );
                        }
                }
@@ -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;
@@ -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 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() {
+       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;
        }
 
@@ -2357,7 +2487,7 @@ class User {
                        $this->mRights = self::getGroupPermissions( $this->getEffectiveGroups() );
                        wfRunHooks( 'UserGetRights', array( $this, &$this->mRights ) );
                        // Force reindexation of rights when a hook has unset one of them
-                       $this->mRights = array_values( $this->mRights );
+                       $this->mRights = array_values( array_unique( $this->mRights ) );
                }
                return $this->mRights;
        }
@@ -2389,6 +2519,8 @@ class User {
                        ) );
                        # Hook for additional groups
                        wfRunHooks( 'UserEffectiveGroups', array( &$this, &$this->mEffectiveGroups ) );
+                       // Force reindexation of groups when a hook has unset one of them
+                       $this->mEffectiveGroups = array_values( array_unique( $this->mEffectiveGroups ) );
                        wfProfileOut( __METHOD__ );
                }
                return $this->mEffectiveGroups;
@@ -2452,30 +2584,29 @@ class User {
         * @return Int
         */
        public function getEditCount() {
-               if( $this->getId() ) {
-                       if ( !isset( $this->mEditCount ) ) {
-                               /* Populate the count, if it has not been populated yet */
-                               wfProfileIn( __METHOD__ );
-                               $dbr = wfGetDB( DB_SLAVE );
-                               // check if the user_editcount field has been initialized
-                               $count = $dbr->selectField(
-                                       'user', 'user_editcount',
-                                       array( 'user_id' => $this->mId ),
-                                       __METHOD__
-                               );
+               if ( !$this->getId() ) {
+                       return null;
+               }
 
-                               if( $count === null ) {
-                                       // it has not been initialized. do so.
-                                       $count = $this->initEditCount();
-                               }
-                               wfProfileOut( __METHOD__ );
-                               $this->mEditCount = $count;
+               if ( !isset( $this->mEditCount ) ) {
+                       /* Populate the count, if it has not been populated yet */
+                       wfProfileIn( __METHOD__ );
+                       $dbr = wfGetDB( DB_SLAVE );
+                       // check if the user_editcount field has been initialized
+                       $count = $dbr->selectField(
+                               'user', 'user_editcount',
+                               array( 'user_id' => $this->mId ),
+                               __METHOD__
+                       );
+
+                       if( $count === null ) {
+                               // it has not been initialized. do so.
+                               $count = $this->initEditCount();
                        }
-                       return $this->mEditCount;
-               } else {
-                       /* nil */
-                       return null;
+                       $this->mEditCount = intval( $count );
+                       wfProfileOut( __METHOD__ );
                }
+               return $this->mEditCount;
        }
 
        /**
@@ -2557,7 +2688,7 @@ class User {
         *
         * @return bool
         */
-       public function isAllowedAny( /*...*/ ){
+       public function isAllowedAny( /*...*/ ) {
                $permissions = func_get_args();
                foreach( $permissions as $permission ){
                        if( $this->isAllowed( $permission ) ){
@@ -2572,7 +2703,7 @@ 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 ) ){
@@ -3033,6 +3164,7 @@ class User {
         * so it is still advisable to make the call conditional on isLoggedIn(),
         * and to commit the transaction after calling.
         *
+        * @throws MWException
         * @return Status
         */
        public function addToDatabase() {
@@ -3181,7 +3313,7 @@ class User {
                # 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' )
@@ -3979,7 +4111,7 @@ class User {
                // Pull from a slave to be less cruel to servers
                // Accuracy isn't the point anyway here
                $dbr = wfGetDB( DB_SLAVE );
-               $count = $dbr->selectField(
+               $count = (int) $dbr->selectField(
                        'revision',
                        'COUNT(rev_user)',
                        array( 'rev_user' => $this->getId() ),
@@ -4085,38 +4217,60 @@ 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 = '' ) {
+       public function addNewUserLogEntry( $action = false, $reason = '' ) {
                global $wgUser, $wgContLang, $wgNewUserLog;
                if( empty( $wgNewUserLog ) ) {
                        return true; // disabled
                }
 
-               if( $this->getName() == $wgUser->getName() ) {
-                       $action = 'create';
-               } else {
+               if ( $action === true || $action === 'byemail' ) {
                        $action = 'create2';
-                       if ( $byEmail ) {
-                               if ( $reason === '' ) {
-                                       $reason = wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text();
-                               } else {
-                                       $reason = $wgContLang->commaList( array(
-                                               $reason, wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text() ) );
-                               }
+                       if ( $reason === '' ) {
+                               $reason = wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text();
+                       } else {
+                               $reason = $wgContLang->commaList( array(
+                                       $reason, wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text() ) );
+                       }
+               } elseif ( $action === false ) {
+                       if ( $this->getName() == $wgUser->getName() ) {
+                               $action = 'create';
+                       } else {
+                               $action = 'create2';
                        }
                }
+
+               if ( $action === 'create' ) {
+                       $performer = $this;
+               } else {
+                       $performer = $wgUser;
+               }
+
                $log = new LogPage( 'newusers' );
                return (int)$log->addEntry(
                        $action,
                        $this->getUserPage(),
                        $reason,
-                       array( $this->getId() )
+                       array( $this->getId() ),
+                       $performer
                );
        }
 
index b9ce9e0..324e7ce 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" ) {
@@ -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,12 +299,7 @@ class UserMailer {
                        # PEAR MAILER
                        #
 
-                       if ( function_exists( 'stream_resolve_include_path' ) ) {
-                               $found = stream_resolve_include_path( 'Mail.php' );
-                       } else {
-                               $found = Fallback::stream_resolve_include_path( 'Mail.php' );
-                       }
-                       if ( !$found ) {
+                       if ( !stream_resolve_include_path( 'Mail.php' ) ) {
                                throw new MWException( 'PEAR mail package is not installed' );
                        }
                        require_once( 'Mail.php' );
@@ -277,16 +340,6 @@ 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 ) {
                                $headers['To'] = 'undisclosed-recipients:;';
                        }
@@ -300,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 );
@@ -347,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 = '' ) {
@@ -396,7 +456,7 @@ class UserMailer {
  */
 class EmailNotification {
        protected $subject, $body, $replyto, $from;
-       protected $timestamp, $summary, $minorEdit, $oldid, $composed_common;
+       protected $timestamp, $summary, $minorEdit, $oldid, $composed_common, $pageStatus;
        protected $mailTargets = array();
 
        /**
@@ -421,8 +481,9 @@ class EmailNotification {
         * @param $summary
         * @param $minorEdit
         * @param $oldid (default: false)
+        * @param $pageStatus (default: 'changed')
         */
-       public function notifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit, $oldid = false ) {
+       public function notifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit, $oldid = false, $pageStatus = 'changed' ) {
                global $wgEnotifUseJobQ, $wgEnotifWatchlist, $wgShowUpdatedMarker, $wgEnotifMinorEdits,
                        $wgUsersNotifiedOnAllChanges, $wgEnotifUserTalk;
 
@@ -493,12 +554,13 @@ class EmailNotification {
                                'summary' => $summary,
                                'minorEdit' => $minorEdit,
                                'oldid' => $oldid,
-                               'watchers' => $watchers
+                               'watchers' => $watchers,
+                               'pageStatus' => $pageStatus
                        );
                        $job = new EnotifNotifyJob( $title, $params );
-                       $job->insert();
+                       JobQueueGroup::singleton()->push( $job );
                } else {
-                       $this->actuallyNotifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit, $oldid, $watchers );
+                       $this->actuallyNotifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit, $oldid, $watchers, $pageStatus );
                }
        }
 
@@ -515,8 +577,11 @@ class EmailNotification {
         * @param $minorEdit bool
         * @param $oldid int Revision ID
         * @param $watchers array of user IDs
+        * @param string $pageStatus
+        * @throws MWException
         */
-       public function actuallyNotifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit, $oldid, $watchers ) {
+       public function actuallyNotifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit,
+               $oldid, $watchers, $pageStatus = 'changed' ) {
                # we use $wgPasswordSender as sender's address
                global $wgEnotifWatchlist;
                global $wgEnotifMinorEdits, $wgEnotifUserTalk;
@@ -536,6 +601,14 @@ class EmailNotification {
                $this->oldid = $oldid;
                $this->editor = $editor;
                $this->composed_common = false;
+               $this->pageStatus = $pageStatus;
+
+               $formattedPageStatus = array( 'deleted', 'created', 'moved', 'restored', 'changed' );
+
+               wfRunHooks( 'UpdateUserMailerFormattedPageStatus', array( &$formattedPageStatus ) );
+               if ( !in_array( $this->pageStatus, $formattedPageStatus ) ) {
+                       throw new MWException( 'Not a valid page status!' );
+               }
 
                $userTalkId = false;
 
@@ -625,25 +698,30 @@ class EmailNotification {
 
                $keys = array();
                $postTransformKeys = array();
+               $pageTitleUrl = $this->title->getCanonicalUrl();
+               $pageTitle = $this->title->getPrefixedText();
 
                if ( $this->oldid ) {
                        // Always show a link to the diff which triggered the mail. See bug 32210.
-                       $keys['$NEWPAGE'] = wfMessage( 'enotif_lastdiff',
+                       $keys['$NEWPAGE'] = "\n\n" . wfMessage( 'enotif_lastdiff',
                                $this->title->getCanonicalUrl( 'diff=next&oldid=' . $this->oldid ) )
                                ->inContentLanguage()->text();
+
                        if ( !$wgEnotifImpersonal ) {
                                // For personal mail, also show a link to the diff of all changes
                                // since last visited.
-                               $keys['$NEWPAGE'] .= " \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;
+                       // @deprecated Remove in MediaWiki 1.23.
                        $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
                } else {
-                       $keys['$NEWPAGE'] = wfMessage( 'enotif_newpagetext' )->inContentLanguage()->text();
                        # clear $OLDID placeholder in the message template
                        $keys['$OLDID']   = '';
+                       $keys['$NEWPAGE'] = '';
+                       // @deprecated Remove in MediaWiki 1.23.
                        $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
                }
 
@@ -658,6 +736,7 @@ class EmailNotification {
                        $keys['$PAGEEDITOR'] = wfMessage( 'enotif_anon_editor', $this->editor->getName() )
                                ->inContentLanguage()->text();
                        $keys['$PAGEEDITOR_EMAIL'] = wfMessage( 'noemailtitle' )->inContentLanguage()->text();
+
                } else {
                        $keys['$PAGEEDITOR'] = $wgEnotifUseRealName ? $this->editor->getRealName() : $this->editor->getName();
                        $emailPage = SpecialPage::getSafeTitleFor( 'Emailuser', $this->editor->getName() );
@@ -670,11 +749,12 @@ class EmailNotification {
                $postTransformKeys['$PAGESUMMARY'] = $this->summary == '' ? ' - ' : $this->summary;
 
                # Now build message's subject and body
+               $this->subject = wfMessage( 'enotif_subject_' . $this->pageStatus )->inContentLanguage()
+                       ->params( $pageTitle, $keys['$PAGEEDITOR'] )->text();
 
-               $subject = wfMessage( 'enotif_subject' )->inContentLanguage()->plain();
-               $subject = strtr( $subject, $keys );
-               $subject = MessageCache::singleton()->transform( $subject, false, null, $this->title );
-               $this->subject = strtr( $subject, $postTransformKeys );
+               $keys['$PAGEINTRO'] = wfMessage( 'enotif_body_intro_' . $this->pageStatus )
+                       ->inContentLanguage()->params( $pageTitle, $keys['$PAGEEDITOR'], $pageTitleUrl )
+                       ->text();
 
                $body = wfMessage( 'enotif_body' )->inContentLanguage()->plain();
                $body = strtr( $body, $keys );
@@ -766,13 +846,15 @@ class EmailNotification {
        /**
         * Same as sendPersonalised but does impersonal mail suitable for bulk
         * mailing.  Takes an array of MailAddress objects.
-        * @return Status
+        * @param $addresses array
+        * @return Status|null
         */
        function sendImpersonal( $addresses ) {
                global $wgContLang;
 
-               if ( empty( $addresses ) )
-                       return;
+               if ( empty( $addresses ) ) {
+                       return null;
+               }
 
                $body = str_replace(
                                array( '$WATCHINGUSERNAME',
index 28ba341..22a4649 100644 (file)
@@ -53,16 +53,13 @@ class ViewCountUpdate implements DeferrableUpdate {
                }
 
                # Not important enough to warrant an error page in case of failure
-               $oldignore = $dbw->ignoreErrors( true );
-
-               $dbw->insert( 'hitcounter', array( 'hc_id' => $this->id ), __METHOD__ );
-
-               $checkfreq = intval( $wgHitcounterUpdateFreq / 25 + 1 );
-               if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
-                       $this->collect();
-               }
-
-               $dbw->ignoreErrors( $oldignore );
+               try {
+                       $dbw->insert( 'hitcounter', array( 'hc_id' => $this->id ), __METHOD__ );
+                       $checkfreq = intval( $wgHitcounterUpdateFreq / 25 + 1 );
+                       if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
+                               $this->collect();
+                       }
+               } catch ( DBError $e ) {}
        }
 
        protected function collect() {
index 932af16..ffdc285 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(),
+               );
        }
 
        /**
@@ -144,9 +163,9 @@ class WatchedItem {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->insert( '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(),
                        'wl_notificationtimestamp' => null
                  ), __METHOD__, 'IGNORE' );
 
@@ -154,9 +173,9 @@ class WatchedItem {
                // 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_user' => $this->getUserId(),
+                       'wl_namespace' => MWNamespace::getTalk($this->getTitleNs()),
+                       'wl_title' => $this->getTitleDBkey(),
                        'wl_notificationtimestamp' => null
                  ), __METHOD__, 'IGNORE' );
 
@@ -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 e251ac5..68d22a8 100644 (file)
@@ -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;
        }
 
        /**
@@ -1044,6 +1051,7 @@ HTML;
         *
         * @since 1.19
         *
+        * @throws MWException
         * @return String
         */
        protected function getRawIP() {
@@ -1306,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;
        }
@@ -1335,8 +1347,10 @@ class FauxRequest extends WebRequest {
         * @return mixed
         */
        public function getSessionData( $key ) {
-               if( isset( $this->session[$key] ) )
+               if( isset( $this->session[$key] ) ) {
                        return $this->session[$key];
+               }
+               return null;
        }
 
        /**
index d4840cc..7604241 100644 (file)
@@ -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 ) {
@@ -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 df3086a..e2cd5d9 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 );
        }
 
@@ -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();
@@ -1237,13 +1237,13 @@ class WikiPage extends Page implements IDBAccessObject {
                wfProfileIn( __METHOD__ );
 
                $content = $revision->getContent();
-               $len = $content->getSize();
-               $rt = $content->getUltimateRedirectTarget();
+               $len = $content ? $content->getSize() : 0;
+               $rt = $content ? $content->getUltimateRedirectTarget() : null;
 
                $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;
                }
@@ -1409,6 +1409,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $text String: new text of the section
         * @param $sectionTitle String: new section's subject, only if $section is 'new'
         * @param $edittime String: revision timestamp or null to use the current revision
+        * @throws MWException
         * @return String new complete article text, or null if error
         *
         * @deprecated since 1.21, use replaceSectionContent() instead
@@ -1425,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 );
@@ -1451,6 +1452,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $sectionTitle String: new section's subject, only if $section is 'new'
         * @param $edittime String: revision timestamp or null to use the current revision
         *
+        * @throws MWException
         * @return Content new complete article content, or null if error
         *
         * @since 1.21
@@ -1469,11 +1471,6 @@ class WikiPage extends Page implements IDBAccessObject {
                        // Bug 30711: always use current version when adding a new section
                        if ( is_null( $edittime ) || $section == 'new' ) {
                                $oldContent = $this->getContent();
-                               if ( ! $oldContent ) {
-                                       wfDebug( __METHOD__ . ": no page text\n" );
-                                       wfProfileOut( __METHOD__ );
-                                       return null;
-                               }
                        } else {
                                $dbw = wfGetDB( DB_MASTER );
                                $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
@@ -1488,6 +1485,13 @@ class WikiPage extends Page implements IDBAccessObject {
                                $oldContent = $rev->getContent();
                        }
 
+                       if ( ! $oldContent ) {
+                               wfDebug( __METHOD__ . ": no page text\n" );
+                               wfProfileOut( __METHOD__ );
+                               return null;
+                       }
+
+                       // FIXME: $oldContent might be null?
                        $newContent = $oldContent->replaceSection( $section, $sectionContent, $sectionTitle );
                }
 
@@ -1597,10 +1601,11 @@ class WikiPage extends Page implements IDBAccessObject {
         * edit-already-exists error will be returned. These two conditions are also possible with
         * auto-detection due to MediaWiki's performance-optimised locking strategy.
         *
-        * @param $baseRevId the revision ID this edit was based off, if any
+        * @param bool|\the $baseRevId the revision ID this edit was based off, if any
         * @param $user User the user doing the edit
         * @param $serialisation_format String: format for storing the content in the database
         *
+        * @throws MWException
         * @return Status object. Possible errors:
         *     edit-hook-aborted:       The ArticleSave hook aborted the edit but didn't set the fatal flag of $status
         *     edit-gone-missing:       In update mode, but the article didn't exist
@@ -1620,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' );
                }
@@ -1644,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 );
 
@@ -1661,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;
 
@@ -1674,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 );
@@ -1690,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}." );
                        }
@@ -1719,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 );
 
@@ -1734,7 +1739,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $status->merge( $prepStatus );
 
                                if ( !$status->isOK() ) {
-                                       $dbw->rollback();
+                                       $dbw->rollback( __METHOD__ );
 
                                        wfProfileOut( __METHOD__ );
                                        return $status;
@@ -1742,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__ );
@@ -1762,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 );
                                        }
@@ -1786,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,
@@ -1804,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__ );
@@ -1813,7 +1818,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $status->merge( $prepStatus );
 
                        if ( !$status->isOK() ) {
-                               $dbw->rollback();
+                               $dbw->rollback( __METHOD__ );
 
                                wfProfileOut( __METHOD__ );
                                return $status;
@@ -1821,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 ) {
@@ -1833,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
@@ -1849,24 +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
 
-                       # Update the page record with revision data
+                       if ( $content ) {
+                               $newsize = $content->getSize();
+                       }
+
+                       // 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,
-                                       '', $content->getSize(), $revisionId, $patrolled );
+                                       '', $newsize, $revisionId, $patrolled );
 
-                               # Log auto-patrolled edits
+                               // Log auto-patrolled edits
                                if ( $patrolled ) {
                                        PatrolLog::record( $rc, true, $user );
                                }
@@ -1874,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,
@@ -1884,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();
                }
@@ -1898,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__ );
@@ -1956,7 +1965,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @since 1.21
         */
        public function prepareContentForEdit( Content $content, $revid = null, User $user = null, $serialization_format = null ) {
-               global $wgParser, $wgContLang, $wgUser;
+               global $wgContLang, $wgUser;
                $user = is_null( $user ) ? $wgUser : $user;
                //XXX: check $user->getId() here???
 
@@ -1965,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;
@@ -1977,23 +1986,21 @@ class WikiPage extends Page implements IDBAccessObject {
                $edit = (object)array();
                $edit->revid = $revid;
 
-               $edit->pstContent = $content->preSaveTransform( $this->mTitle, $user, $popts );
-               $edit->pst = $edit->pstContent->serialize( $serialization_format ); #XXX: do we need this??
-               $edit->format = $serialization_format;
+               $edit->pstContent = $content ? $content->preSaveTransform( $this->mTitle, $user, $popts ) : null;
 
+               $edit->format = $serialization_format;
                $edit->popts = $this->makeParserOptions( 'canonical' );
-
-               $edit->output = $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts );
+               $edit->output = $edit->pstContent ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts ) : null;
 
                $edit->newContent = $content;
                $edit->oldContent = $this->getContent( Revision::RAW );
 
-               #NOTE: B/C for hooks! don't use these fields!
-               $edit->newText = ContentHandler::getContentText( $edit->newContent );
+               // 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 ) : '';
 
                $this->mPreparedEdit = $edit;
-
                return $edit;
        }
 
@@ -2021,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 );
@@ -2031,15 +2038,17 @@ 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
-               $updates = $content->getSecondaryDataUpdates( $this->getTitle(), null, true, $editInfo->output );
-               DataUpdate::runUpdates( $updates );
+               // Update the links tables and other secondary data
+               if ( $content ) {
+                       $updates = $content->getSecondaryDataUpdates( $this->getTitle(), null, true, $editInfo->output );
+                       DataUpdate::runUpdates( $updates );
+               }
 
                wfRunHooks( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
 
@@ -2053,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__
                                );
                        }
@@ -2084,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()
@@ -2110,8 +2119,8 @@ 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.
-                       $msgtext = $content->getWikitextForTransclusion();
+                       // XXX: could skip pseudo-messages like js/css here, based on content model.
+                       $msgtext = $content ? $content->getWikitextForTransclusion() : null;
                        if ( $msgtext === false || $msgtext === null ) $msgtext = '';
 
                        MessageCache::singleton()->replace( $shortTitle, $msgtext );
@@ -2169,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 );
 
@@ -2207,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;
@@ -2225,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;
@@ -2234,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;
                                }
@@ -2247,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 ) {
@@ -2268,39 +2277,54 @@ class WikiPage extends Page implements IDBAccessObject {
                foreach ( $limit as $action => $restrictions ) {
                        $encodedExpiry[$action] = $dbw->encodeExpiry( $expiry[$action] );
                        if ( $restrictions != '' ) {
-                               $protectDescription .= $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->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();
                        }
                }
-               $protectDescription = trim( $protectDescription );
 
-               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' ) ),
@@ -2318,7 +2342,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,
@@ -2329,20 +2353,22 @@ class WikiPage extends Page implements IDBAccessObject {
                                $editComment .= ": $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(),
@@ -2355,8 +2381,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'] != '' ) {
@@ -2390,7 +2416,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $logParams = array( $protectDescription, $cascade ? 'cascade' : '' );
                }
 
-               # Update the protection log
+               // Update the protection log
                $log = new LogPage( 'protect' );
                $log->addEntry( $logAction, $this->mTitle, trim( $reason ), $logParams, $user );
 
@@ -2553,7 +2579,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
 
@@ -2565,7 +2591,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' );
@@ -2592,20 +2618,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 );
        }
 
@@ -2638,7 +2664,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 ) );
@@ -2651,7 +2677,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;
                }
@@ -2684,16 +2710,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',
@@ -2703,8 +2729,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',
@@ -2716,21 +2742,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;
                }
 
@@ -2744,7 +2770,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
@@ -2754,7 +2780,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 ) ),
@@ -2766,10 +2792,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' ) ) {
@@ -2780,7 +2809,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() ) {
@@ -2817,7 +2846,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 {
@@ -2838,7 +2867,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 {
@@ -2851,21 +2880,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 ) {
@@ -2873,7 +2902,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # Image redirects
+               // Image redirects
                RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $title );
        }
 
@@ -2887,14 +2916,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 );
        }
 
@@ -2940,7 +2968,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' );
 
@@ -2973,15 +3001,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;
                }
 
@@ -3042,7 +3070,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();
@@ -3058,7 +3086,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 ) {
@@ -3066,12 +3094,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();
                }
@@ -3280,7 +3308,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 );
@@ -3336,7 +3364,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 );
@@ -3344,7 +3372,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();
                        }
                }
@@ -3357,7 +3385,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() ) );
index 67f3658..d5e9189 100644 (file)
@@ -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";
        }
 
        /**
index b1ccbe6..df98836 100644 (file)
@@ -4770,7 +4770,7 @@ $zh2Hant = array(
 '吹干' => '吹乾',
 '吹发' => '吹髮',
 '吹胡' => '吹鬍',
-'吾之范我驰驱' => '吾爲之範我馳驅',
+'吾之范我驰驱' => '吾爲之範我馳驅',
 '吕后' => '呂后',
 '呂后' => '呂后',
 '呆呆傻傻' => '呆呆傻傻',
@@ -4947,7 +4947,7 @@ $zh2Hant = array(
 '城里' => '城裡',
 '埔裡社撫墾局' => '埔裏社撫墾局',
 '埔裏社撫墾局' => '埔裏社撫墾局',
-'埔社抚垦局' => '埔裏社撫墾局',
+'埔社抚垦局' => '埔裏社撫墾局',
 '基干' => '基幹',
 '基于' => '基於',
 '基准' => '基準',
@@ -5740,6 +5740,7 @@ $zh2Hant = array(
 '心脏' => '心臟',
 '心荡' => '心蕩',
 '心药' => '心藥',
+'心里面' => '心裏面',
 '心里' => '心裡',
 '心长发短' => '心長髮短',
 '心余' => '心餘',
@@ -5871,7 +5872,7 @@ $zh2Hant = array(
 '手表达' => '手表達',
 '手表露' => '手表露',
 '手表面' => '手表面',
-'手剑' => '手裏劍',
+'手剑' => '手裏劍',
 '手里' => '手裡',
 '手表' => '手錶',
 '手松' => '手鬆',
@@ -8298,9 +8299,8 @@ $zh2Hant = array(
 '被发阳狂' => '被髮陽狂',
 '裁并' => '裁併',
 '裁制' => '裁製',
-'裏勾外连' => '裏勾外連',
-'裏手' => '裏手',
-'裏海' => '裏海',
+'里手' => '裏手',
+'里海' => '裏海',
 '补于' => '補於',
 '补药' => '補藥',
 '补血药' => '補血藥',
@@ -11004,6 +11004,7 @@ $zh2Hans = array(
 '爐' => '炉',
 '爛' => '烂',
 '爭' => '争',
+'爲' => '为',
 '爺' => '爷',
 '爾' => '尔',
 '牆' => '墙',
@@ -11331,6 +11332,7 @@ $zh2Hans = array(
 '綠' => '绿',
 '綢' => '绸',
 '綣' => '绻',
+'綫' => '线',
 '綬' => '绶',
 '維' => '维',
 '綯' => '绹',
@@ -11653,6 +11655,7 @@ $zh2Hans = array(
 '衝' => '冲',
 '袞' => '衮',
 '裊' => '袅',
+'裏' => '里',
 '補' => '补',
 '裝' => '装',
 '裡' => '里',
@@ -15766,6 +15769,7 @@ $zh2Hans = array(
 '達著述' => '达著述',
 '近角聪信' => '近角聪信',
 '近角聰信' => '近角聪信',
+'这么' => '这么',
 '遠著' => '远着',
 '遠著書' => '远著书',
 '遠著作' => '远著作',
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..051fa42 100644 (file)
@@ -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();
                }
@@ -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 )
@@ -602,13 +602,16 @@ 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 );
@@ -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 )
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 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..78525e0 100644 (file)
@@ -112,8 +112,12 @@ abstract class ApiBase extends ContextSource {
         * 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
@@ -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 );
        }
 
        /**
@@ -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
@@ -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..b58be11 100644 (file)
@@ -55,6 +55,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 +63,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 +78,7 @@ class ApiBlock extends ApiBase {
                }
 
                $data = array(
+                       'PreviousTarget' => $params['user'],
                        'Target' => $params['user'],
                        'Reason' => array(
                                $params['reason'],
@@ -83,7 +92,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,
                );
@@ -256,8 +265,4 @@ class ApiBlock extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Block';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6741259..230ed33 100644 (file)
@@ -172,8 +172,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..cfa8035 100644 (file)
@@ -267,8 +267,4 @@ class ApiDelete extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Delete';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 13975ae..ebcfa01 100644 (file)
@@ -63,8 +63,4 @@ class ApiDisabled extends ApiBase {
        public function getExamples() {
                return array();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 4cb91bc..74d3e14 100644 (file)
@@ -54,28 +54,6 @@ class ApiEditPage extends ApiBase {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
 
-               if ( !isset( $params['contentmodel'] ) || $params['contentmodel'] == '' ) {
-                       $contentHandler = $pageObj->getContentHandler();
-               } else {
-                       $contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
-               }
-
-               // @todo ask handler whether direct editing is supported at all! make allowFlatEdit() method or some such
-
-               if ( !isset( $params['contentformat'] ) || $params['contentformat'] == '' ) {
-                       $params['contentformat'] = $contentHandler->getDefaultFormat();
-               }
-
-               $contentFormat = $params['contentformat'];
-
-               if ( !$contentHandler->isSupportedFormat( $contentFormat ) ) {
-                       $name = $titleObj->getPrefixedDBkey();
-                       $model = $contentHandler->getModelID();
-
-                       $this->dieUsage( "The requested format $contentFormat is not supported for content model ".
-                                                       " $model used by $name", 'badformat' );
-               }
-
                $apiResult = $this->getResult();
 
                if ( $params['redirect'] ) {
@@ -90,12 +68,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()
                                        );
 
@@ -104,9 +82,34 @@ class ApiEditPage extends ApiBase {
 
                                $apiResult->setIndexedTagName( $redirValues, 'r' );
                                $apiResult->addValue( null, 'redirects', $redirValues );
+
+                               // Since the page changed, update $pageObj
+                               $pageObj = WikiPage::factory( $titleObj );
                        }
                }
 
+               if ( !isset( $params['contentmodel'] ) || $params['contentmodel'] == '' ) {
+                       $contentHandler = $pageObj->getContentHandler();
+               } else {
+                       $contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
+               }
+
+               // @todo ask handler whether direct editing is supported at all! make allowFlatEdit() method or some such
+
+               if ( !isset( $params['contentformat'] ) || $params['contentformat'] == '' ) {
+                       $params['contentformat'] = $contentHandler->getDefaultFormat();
+               }
+
+               $contentFormat = $params['contentformat'];
+
+               if ( !$contentHandler->isSupportedFormat( $contentFormat ) ) {
+                       $name = $titleObj->getPrefixedDBkey();
+                       $model = $contentHandler->getModelID();
+
+                       $this->dieUsage( "The requested format $contentFormat is not supported for content model ".
+                                                       " $model used by $name", 'badformat' );
+               }
+
                if ( $params['createonly'] && $titleObj->exists() ) {
                        $this->dieUsageMsg( 'createonly-exists' );
                }
@@ -404,6 +407,7 @@ class ApiEditPage extends ApiBase {
                                } else {
                                        $r['oldrevid'] = intval( $oldRevId );
                                        $r['newrevid'] = intval( $newRevId );
+                                       $pageObj->clear();
                                        $r['newtimestamp'] = wfTimestamp( TS_ISO_8601,
                                                $pageObj->getTimestamp() );
                                }
@@ -645,8 +649,4 @@ class ApiEditPage extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Edit';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 4fa0343..ba8edc0 100644 (file)
@@ -160,8 +160,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..f740cf8 100644 (file)
@@ -130,8 +130,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..2f02674 100644 (file)
@@ -51,7 +51,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 +213,4 @@ class ApiFeedContributions extends ApiBase {
                        'api.php?action=feedcontributions&user=Reedy',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6ccb02f..7a91641 100644 (file)
@@ -62,7 +62,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 +233,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..1e463e5 100644 (file)
@@ -195,8 +195,4 @@ class ApiFileRevert extends ApiBase {
                                => 'Revert Wiki.png to the version of 20110305152740',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 8ad9b8c..e8edb3d 100644 (file)
@@ -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..f280a29 100644 (file)
@@ -48,8 +48,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..db66083 100644 (file)
@@ -52,8 +52,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..bee1ac9 100644 (file)
@@ -44,8 +44,4 @@ class ApiFormatNone extends ApiFormatBase {
        public function getDescription() {
                return 'Output nothing' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index fac2ca5..99a047a 100644 (file)
@@ -45,8 +45,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..3e1f592 100644 (file)
@@ -48,8 +48,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..fd1b327 100644 (file)
@@ -112,8 +112,4 @@ class ApiFormatWddx extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in WDDX format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 5ccf185..582e405 100644 (file)
@@ -248,8 +248,4 @@ class ApiFormatXml extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in XML format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 730ad8e..700d4a5 100644 (file)
@@ -35,10 +35,6 @@ class ApiFormatYaml extends ApiFormatJson {
        }
 
        public function getDescription() {
-               return 'Output data in YAML format' . parent::getDescription();
-       }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+               return 'Output data in YAML format' . ApiFormatBase::getDescription();
        }
 }
index 2b5de21..28bb2e9 100644 (file)
@@ -151,8 +151,4 @@ class ApiHelp extends ApiBase {
                        'https://www.mediawiki.org/wiki/API:Quick_start_guide',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 637c1ff..f5636bd 100644 (file)
@@ -186,10 +186,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..00dd625 100644 (file)
@@ -75,8 +75,4 @@ class ApiLogout extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Logout';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 91b8cc8..3f82d3c 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" );
@@ -680,7 +680,6 @@ class ApiMain extends ApiBase {
 
                $params = $this->extractRequestParams();
 
-               $this->mShowVersions = $params['version'];
                $this->mAction = $params['action'];
 
                if ( !is_string( $this->mAction ) ) {
@@ -786,9 +785,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 +875,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 +926,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 +972,6 @@ class ApiMain extends ApiBase {
                                ApiBase::PARAM_DFLT => 'help',
                                ApiBase::PARAM_TYPE => $this->mModuleNames
                        ),
-                       'version' => false,
                        'maxlag'  => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
@@ -994,12 +998,11 @@ 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',
                                'wait until the replication lag is less than the specified value.',
-                               'In case of a replag error, a HTTP 503 error is returned, with the message like',
+                               'In case of a replag error, error code "maxlag" is returned, with the message like',
                                '"Waiting for $host: $lag seconds lagged\n".',
                                'See https://www.mediawiki.org/wiki/Manual:Maxlag_parameter for more information',
                        ),
@@ -1110,8 +1113,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 +1141,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 +1152,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 +1203,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..bbf4089 100644 (file)
@@ -82,9 +82,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 +129,7 @@ class ApiMove extends ApiBase {
                        }
                }
 
-               $watch = "preferences";
+               $watch = 'preferences';
                if ( isset( $params['watchlist'] ) ) {
                        $watch = $params['watchlist'];
                } elseif ( $params['watch'] ) {
@@ -295,8 +302,4 @@ class ApiMove extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Move';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index ef56274..6403bd6 100644 (file)
@@ -123,8 +123,4 @@ class ApiOpenSearch extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Opensearch';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 4398eb0..eff05de 100644 (file)
@@ -47,34 +47,73 @@ class ApiOptions extends ApiBase {
                }
 
                $params = $this->extractRequestParams();
-               $changes = 0;
+               $changed = false;
 
                if ( isset( $params['optionvalue'] ) && !isset( $params['optionname'] ) ) {
                        $this->dieUsageMsg( array( 'missingparam', 'optionname' ) );
                }
 
                if ( $params['reset'] ) {
-                       $user->resetOptions();
-                       $changes++;
+                       $user->resetOptions( $params['resetkinds'] );
+                       $changed = true;
                }
+
+               $changes = array();
                if ( count( $params['change'] ) ) {
                        foreach ( $params['change'] as $entry ) {
                                $array = explode( '=', $entry, 2 );
-                               $user->setOption( $array[0], isset( $array[1] ) ? $array[1] : null );
-                               $changes++;
+                               $changes[$array[0]] = isset( $array[1] ) ? $array[1] : null;
                        }
                }
                if ( isset( $params['optionname'] ) ) {
                        $newValue = isset( $params['optionvalue'] ) ? $params['optionvalue'] : null;
-                       $user->setOption( $params['optionname'], $newValue );
-                       $changes++;
+                       $changes[$params['optionname']] = $newValue;
+               }
+               if ( !$changed && !count( $changes ) ) {
+                       $this->dieUsage( 'No changes were requested', 'nochanges' );
+               }
+
+               $prefs = Preferences::getPreferences( $user, $this->getContext() );
+               $prefsKinds = $user->getOptionKinds( $this->getContext(), $changes );
+
+               foreach ( $changes as $key => $value ) {
+                       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 );
+                               $changed = true;
+                       } else {
+                               $this->setWarning( "Validation error for '$key': $validation" );
+                       }
                }
 
-               if ( $changes ) {
+               if ( $changed ) {
                        // Commit changes
                        $user->saveSettings();
-               } else {
-                       $this->dieUsage( 'No changes were requested', 'nochanges' );
                }
 
                $this->getResult()->addValue( null, $this->getModuleName(), 'success' );
@@ -89,12 +128,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,
                        ),
@@ -122,15 +169,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() {
@@ -159,8 +211,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..e2f4dae 100644 (file)
@@ -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 12c20fb..143540b 100644 (file)
@@ -72,7 +72,7 @@ class ApiParse extends ApiBase {
                // TODO: Does this still need $wgTitle?
                global $wgParser, $wgTitle;
 
-               // Currently unnecessary, code to act as a safeguard against any change in current behaviour of uselang breaks
+               // Currently unnecessary, code to act as a safeguard against any change in current behaviour of uselang
                $oldLang = null;
                if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
                        $oldLang = $this->getContext()->getLanguage(); // Backup language
@@ -450,14 +450,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 +671,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..336068f 100644 (file)
@@ -120,8 +120,4 @@ class ApiPatrol extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Patrol';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b3ca67e..fa6da52 100644 (file)
@@ -234,8 +234,4 @@ class ApiProtect extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Protect';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index dbfa89c..e1ba759 100644 (file)
@@ -187,8 +187,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 45cc404..bbc5272 100644 (file)
@@ -81,30 +81,87 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        $this->dieUsage( 'Local file repository does not support querying all images', 'unsupportedrepo' );
                }
 
+               $prefix = $this->getModulePrefix();
+
                $db = $this->getDB();
 
                $params = $this->extractRequestParams();
 
-               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" );
-                       }
-                       $op = $params['dir'] == 'descending' ? '<' : '>';
-                       $cont_from = $db->addQuotes( $cont[0] );
-                       $this->addWhere( "img_name $op= $cont_from" );
+               // Table and return fields
+               $this->addTables( 'image' );
+
+               $prop = array_flip( $params['prop'] );
+               $this->addFields( LocalFile::selectFields() );
+
+               $ascendingOrder = true;
+               if ( $params['dir'] == 'descending' || $params['dir'] == 'older') {
+                       $ascendingOrder = false;
                }
 
-               // Image filters
-               $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
-               $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
-               $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
-               $this->addWhereRange( 'img_name', $dir, $from, $to );
+               if ( $params['sort'] == 'name' ) {
+                       // Check mutually exclusive params
+                       $disallowed = array( 'start', 'end', 'user' );
+                       foreach ( $disallowed as $pname ) {
+                               if ( isset( $params[$pname] ) ) {
+                                       $this->dieUsage( "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=timestamp", 'badparams' );
+                               }
+                       }
+                       if ( $params['filterbots'] != 'all' ) {
+                                       $this->dieUsage( "Parameter '{$prefix}filterbots' can only be used with {$prefix}sort=timestamp", 'badparams' );
+                       }
+
+                       // Pagination
+                       if ( !is_null( $params['continue'] ) ) {
+                               $cont = explode( '|', $params['continue'] );
+                               $this->dieContinueUsageIf( count( $cont ) != 1 );
+                               $op = ( $ascendingOrder ? '>' : '<' );
+                               $continueFrom = $db->addQuotes( $cont[0] );
+                               $this->addWhere( "img_name $op= $continueFrom" );
+                       }
 
-               if ( isset( $params['prefix'] ) )
-                       $this->addWhere( 'img_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       // Image filters
+                       $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
+                       $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
+                       $this->addWhereRange( 'img_name', ( $ascendingOrder ? 'newer' : 'older' ), $from, $to );
 
+                       if ( isset( $params['prefix'] ) ) {
+                               $this->addWhere( 'img_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       }
+               } else {
+                       // Check mutually exclusive params
+                       $disallowed = array( 'from', 'to', 'prefix' );
+                       foreach ( $disallowed as $pname ) {
+                               if ( isset( $params[$pname] ) ) {
+                                       $this->dieUsage( "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=name", 'badparams' );
+                               }
+                       }
+                       if ( !is_null( $params['user'] ) && $params['filterbots'] != 'all' ) {
+                               // Since filterbots checks if each user has the bot right, it doesn't make sense to use it with user
+                               $this->dieUsage( "Parameters '{$prefix}user' and '{$prefix}filterbots' cannot be used together", 'badparams' );
+                       }
+
+                       // Pagination
+                       $this->addTimestampWhereRange( 'img_timestamp', ( $ascendingOrder ? 'newer' : 'older' ), $params['start'], $params['end'] );
+
+                       // Image filters
+                       if ( !is_null( $params['user'] ) ) {
+                               $this->addWhereFld( 'img_user_text', $params['user'] );
+                       }
+                       if ( $params['filterbots'] != 'all' ) {
+                               $this->addTables( 'user_groups' );
+                               $this->addJoinConds( array( 'user_groups' => array(
+                                       'LEFT JOIN',
+                                       array(
+                                               'ug_group' => User::getGroupsWithPermission( 'bot' ),
+                                               'ug_user = img_user'
+                                       )
+                               ) ) );
+                               $groupCond = ( $params['filterbots'] == 'nobots' ? 'NULL': 'NOT NULL' );
+                               $this->addWhere( "ug_group IS $groupCond" );
+                       }
+               }
+
+               // Filters not depending on sort
                if ( isset( $params['minsize'] ) ) {
                        $this->addWhere( 'img_size>=' . intval( $params['minsize'] ) );
                }
@@ -115,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' );
                        }
@@ -141,15 +199,22 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        $this->addWhereFld( 'img_minor_mime', $minor );
                }
 
-               $this->addTables( 'image' );
-
-               $prop = array_flip( $params['prop'] );
-               $this->addFields( LocalFile::selectFields() );
-
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
-               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
-               $this->addOption( 'ORDER BY', 'img_name' . $sort );
+               $sortFlag = '';
+               if ( !$ascendingOrder ) {
+                       $sortFlag = ' DESC';
+               }
+               if ( $params['sort'] == 'timestamp' ) {
+                       $this->addOption( 'ORDER BY', 'img_timestamp' . $sortFlag );
+                       if ( !is_null( $params['user'] ) ) {
+                               $this->addOption( 'USE INDEX', array( 'image' => 'img_usertext_timestamp' ) );
+                       } else {
+                               $this->addOption( 'USE INDEX', array( 'image' => 'img_timestamp' ) );
+                       }
+               } else {
+                       $this->addOption( 'ORDER BY', 'img_name' . $sortFlag );
+               }
 
                $res = $this->select( __METHOD__ );
 
@@ -159,7 +224,11 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                foreach ( $res as $row ) {
                        if ( ++ $count > $limit ) {
                                // We've reached the one extra which shows that there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'continue', $row->img_name );
+                               if ( $params['sort'] == 'name' ) {
+                                       $this->setContinueEnumParameter( 'continue', $row->img_name );
+                               } else {
+                                       $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->img_timestamp ) );
+                               }
                                break;
                        }
 
@@ -171,7 +240,11 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $info );
                                if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'continue', $row->img_name );
+                                       if ( $params['sort'] == 'name' ) {
+                                               $this->setContinueEnumParameter( 'continue', $row->img_name );
+                                       } else {
+                                               $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->img_timestamp ) );
+                                       }
                                        break;
                                }
                        } else {
@@ -188,9 +261,38 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                return array (
+                       'sort' => array(
+                               ApiBase::PARAM_DFLT => 'name',
+                               ApiBase::PARAM_TYPE => array(
+                                       'name',
+                                       'timestamp'
+                               )
+                       ),
+                       'dir' => array(
+                               ApiBase::PARAM_DFLT => 'ascending',
+                               ApiBase::PARAM_TYPE => array(
+                                       // sort=name
+                                       'ascending',
+                                       'descending',
+                                       // sort=timestamp
+                                       'newer',
+                                       'older'
+                               )
+                       ),
                        'from' => null,
-                       'continue' => null,
                        'to' => null,
+                       'continue' => null,
+                       'start' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp'
+                       ),
+                       'end' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp'
+                       ),
+                       'prop' => array(
+                               ApiBase::PARAM_TYPE => ApiQueryImageInfo::getPropertyNames( $this->propertyFilter ),
+                               ApiBase::PARAM_DFLT => 'timestamp|url',
+                               ApiBase::PARAM_ISMULTI => true
+                       ),
                        'prefix' => null,
                        'minsize' => array(
                                ApiBase::PARAM_TYPE => 'integer',
@@ -198,6 +300,20 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        'maxsize' => array(
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
+                       'sha1' => null,
+                       'sha1base36' => null,
+                       'user' => array(
+                               ApiBase::PARAM_TYPE => 'user'
+                       ),
+                       'filterbots' => array(
+                               ApiBase::PARAM_DFLT => 'all',
+                               ApiBase::PARAM_TYPE => array(
+                                       'all',
+                                       'bots',
+                                       'nobots'
+                               )
+                       ),
+                       'mime' => null,
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -205,38 +321,29 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'dir' => array(
-                               ApiBase::PARAM_DFLT => 'ascending',
-                               ApiBase::PARAM_TYPE => array(
-                                       'ascending',
-                                       'descending'
-                               )
-                       ),
-                       'sha1' => null,
-                       'sha1base36' => null,
-                       'prop' => array(
-                               ApiBase::PARAM_TYPE => ApiQueryImageInfo::getPropertyNames( $this->propertyFilter ),
-                               ApiBase::PARAM_DFLT => 'timestamp|url',
-                               ApiBase::PARAM_ISMULTI => true
-                       ),
-                       'mime' => null,
                );
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'from' => 'The image title to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The image title to stop enumerating at',
-                       'prefix' => 'Search for all image titles that begin with this value',
+                       'sort' => 'Property to sort by',
                        'dir' => 'The direction in which to list',
+                       'from' => "The image title to start enumerating from. Can only be used with {$p}sort=name",
+                       'to' => "The image title to stop enumerating at. Can only be used with {$p}sort=name",
+                       'continue' => 'When more results are available, use this to continue',
+                       'start' => "The timestamp to start enumerating from. Can only be used with {$p}sort=timestamp",
+                       'end' => "The timestamp to end enumerating. Can only be used with {$p}sort=timestamp",
+                       'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
+                       'prefix' => "Search for all image titles that begin with this value. Can only be used with {$p}sort=name",
                        'minsize' => 'Limit to images with at least this many bytes',
                        'maxsize' => 'Limit to images with at most this many bytes',
-                       'limit' => 'How many images in total to return',
-                       'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
+                       'sha1' => "SHA1 hash of image. Overrides {$p}sha1base36",
                        'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
+                       'user' => "Only return files uploaded by this user. Can only be used with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
+                       'filterbots' => "How to filter files uploaded by bots. Can only be used with {$p}sort=timestamp. Cannot be used together with {$p}user",
                        'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
+                       'limit' => 'How many images in total to return',
                );
        }
 
@@ -260,13 +367,21 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        }
 
        public function getPossibleErrors() {
+               $p = $this->getModulePrefix();
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'code' => 'params', 'info' => 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator' ),
+                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}start' can only be used with {$p}sort=timestamp" ),
+                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}end' can only be used with {$p}sort=timestamp" ),
+                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}user' can only be used with {$p}sort=timestamp" ),
+                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}filterbots' can only be used with {$p}sort=timestamp" ),
+                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}from' can only be used with {$p}sort=name" ),
+                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}to' can only be used with {$p}sort=name" ),
+                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}prefix' can only be used with {$p}sort=name" ),
+                       array( 'code' => 'badparams', 'info' => "Parameters '{$p}user' and '{$p}filterbots' cannot be used together" ),
                        array( 'code' => 'unsupportedrepo', 'info' => 'Local file repository does not support querying all images' ),
                        array( 'code' => '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' ),
                ) );
        }
 
@@ -274,11 +389,15 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                return array(
                        'api.php?action=query&list=allimages&aifrom=B' => array(
                                'Simple Use',
-                               'Show a list of images starting at the letter "B"',
+                               'Show a list of files starting at the letter "B"',
+                       ),
+                       'api.php?action=query&list=allimages&aiprop=user|timestamp|url&aisort=timestamp&aidir=older' => array(
+                               'Simple Use',
+                               'Show a list of recently uploaded files similar to Special:NewFiles',
                        ),
                        'api.php?action=query&generator=allimages&gailimit=4&gaifrom=T&prop=imageinfo' => array(
                                'Using as Generator',
-                               'Show info about 4 images starting at the letter "T"',
+                               'Show info about 4 files starting at the letter "T"',
                        ),
                );
        }
@@ -286,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 2c48aca..02d071b 100644 (file)
@@ -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
@@ -534,7 +547,7 @@ abstract class ApiQueryBase extends ApiBase {
         * @return bool
         */
        public function validateSha1Hash( $hash ) {
-               return preg_match( '/[a-fA-F0-9]{40}/', $hash );
+               return preg_match( '/^[a-f0-9]{40}$/', $hash );
        }
 
        /**
@@ -542,25 +555,28 @@ abstract class ApiQueryBase extends ApiBase {
         * @return bool
         */
        public function validateSha1Base36Hash( $hash ) {
-               return preg_match( '/[a-zA-Z0-9]{31}/', $hash );
+               return preg_match( '/^[a-z0-9]{31}$/', $hash );
        }
 
        /**
         * @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;
        }
 }
 
index a8d4a7c..0d2fa0d 100644 (file)
@@ -182,8 +182,8 @@ class ApiQueryBlocks extends ApiQueryBase {
                                $block['reason'] = $row->ipb_reason;
                        }
                        if ( $fld_range && !$row->ipb_auto ) {
-                               $block['rangestart'] = IP::hexToQuad( $row->ipb_range_start );
-                               $block['rangeend'] = IP::hexToQuad( $row->ipb_range_end );
+                               $block['rangestart'] = IP::formatHex( $row->ipb_range_start );
+                               $block['rangeend'] = IP::formatHex( $row->ipb_range_end );
                        }
                        if ( $fld_flags ) {
                                // For clarity, these flags use the same names as their action=block counterparts
@@ -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..6a392bd 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
@@ -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..c0929a0 100644 (file)
@@ -61,8 +61,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 de02614..b368af8 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 ) ),
@@ -580,6 +577,15 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                        ApiBase::PROP_NULLABLE => true
                                )
                        ),
+                       'dimensions' => array(
+                               'size' => 'integer',
+                               'width' => 'integer',
+                               'height' => 'integer',
+                               'pagecount' => array(
+                                       ApiBase::PROP_TYPE => 'integer',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       ),
                        'comment' => array(
                                'commenthidden' => 'boolean',
                                'comment' => array(
@@ -635,6 +641,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                        ApiBase::PROP_NULLABLE => true
                                )
                        ),
+                       'thumbmime' => array(
+                               'filehidden' => 'boolean',
+                               'thumbmime' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       ),
                        'mediatype' => array(
                                'filehidden' => 'boolean',
                                'mediatype' => array(
@@ -689,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..138d79b 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] );
@@ -250,8 +247,4 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return $this->helpUrl;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 5d85c22..6b77898 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
 
@@ -209,15 +209,15 @@ 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;
@@ -241,7 +241,12 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                break;
                        case 'rights':
                                $vals2 = array();
-                               list( $vals2['old'], $vals2['new'] ) = $params;
+                               if( $legacy ) {
+                                       list( $vals2['old'], $vals2['new'] ) = $params;
+                               } else {
+                                       $vals2['new'] = implode( ', ', $params['5::newgroups'] );
+                                       $vals2['old'] = implode( ', ', $params['4::oldgroups'] );
+                               }
                                $vals[$type] = $vals2;
                                $params = null;
                                break;
@@ -262,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;
        }
@@ -362,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';
                }
        }
 
@@ -526,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 1eef67e..189e15a 100644 (file)
@@ -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 14aed28..4aa0000 100644 (file)
@@ -98,7 +98,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                        $vals['user'] = $row->user_name;
                                }
 
-                               if ( isset( $prop['user'] ) ) {
+                               if ( isset( $prop['userid'] ) || /*B/C*/isset( $prop['user'] ) ) {
                                        $vals['userid'] = $row->pt_user;
                                }
 
@@ -231,6 +231,9 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                ),
                                'userid' => 'integer'
                        ),
+                       'userid' => array(
+                               'userid' => 'integer'
+                       ),
                        'comment' => array(
                                'comment' => 'string'
                        ),
@@ -261,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..182bc2c 100644 (file)
@@ -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..f7a22bd 100644 (file)
@@ -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 5c3b33b..27ea6be 100644 (file)
@@ -261,7 +261,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        // rvstart and rvstartid when that is supplied.
                        if ( !is_null( $params['continue'] ) ) {
                                $params['startid'] = $params['continue'];
-                               unset( $params['start'] );
+                               $params['start'] = null;
                        }
 
                        // This code makes an assumption that sorting by rev_id and rev_timestamp produces
@@ -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 ) {
@@ -546,9 +545,9 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                        if ( $text === null ) {
                                $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat();
+                               $model = $content->getModel();
 
                                if ( !$content->isSupportedFormat( $format ) ) {
-                                       $model = $content->getModel();
                                        $name = $title->getPrefixedDBkey();
 
                                        $this->dieUsage( "The requested format {$this->contentFormat} is not supported ".
@@ -556,20 +555,31 @@ class ApiQueryRevisions extends ApiQueryBase {
                                }
 
                                $text = $content->serialize( $format );
+
+                               // always include format and model.
+                               // Format is needed to deserialize, model is needed to interpret.
                                $vals['contentformat'] = $format;
+                               $vals['contentmodel'] = $model;
                        }
 
                        if ( $text !== false ) {
                                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 );
@@ -782,8 +792,12 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        ApiBase::PROP_TYPE => 'string',
                                        ApiBase::PROP_NULLABLE => true
                                ),
-                               'texthidden' => 'boolean'
-                       )
+                               'texthidden' => 'boolean',
+                               'textmissing' => 'boolean',
+                       ),
+                       'contentmodel' => array(
+                               'contentmodel' => 'string'
+                       ),
                );
 
                self::addTokenProperties( $props, $this->getTokenFunctions() );
@@ -840,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 ec503d6..a6a6dff 100644 (file)
@@ -227,6 +227,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        if ( MWNamespace::isNonincludable( $ns ) ) {
                                $data[$ns]['nonincludable'] = '';
                        }
+
+                       $contentmodel = MWNamespace::getNamespaceContentModel( $ns );
+                       if ( $contentmodel ) {
+                               $data[$ns]['defaultcontentmodel'] = $contentmodel;
+                       }
                }
 
                $this->getResult()->setIndexedTagName( $data, 'ns' );
@@ -662,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..1b97317 100644 (file)
@@ -138,9 +138,5 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
-
 }
 
index f97c1b2..e0637ff 100644 (file)
@@ -162,7 +162,7 @@ class ApiQueryTags extends ApiQueryBase {
                        'prop' => array(
                                'Which properties to get',
                                ' name         - Adds name of tag',
-                               ' displayname  - Adds system messsage for the tag',
+                               ' displayname  - Adds system message for the tag',
                                ' description  - Adds description of the tag',
                                ' hitcount     - Adds the amount of revisions that have this tag',
                        ),
@@ -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..4d1edf1 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] ) );
@@ -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 1cf8e31..03a0b79 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 ) {
@@ -138,7 +138,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                if ( !isset( $userGroups ) ) {
                                        $user = User::newFromRow( $row );
                                } else {
-                                       if ( !is_array( $userGroups[$row->user_name] ) ) {
+                                       if ( !isset( $userGroups[$row->user_name] ) || !is_array( $userGroups[$row->user_name] ) ) {
                                                $userGroups[$row->user_name] = array();
                                        }
                                        $user = User::newFromRow( $row, array( 'user_groups' => $userGroups[$row->user_name] ) );
@@ -250,7 +250,7 @@ class ApiQueryUsers extends ApiQueryBase {
                        }
                        $done[] = $u;
                }
-               return $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' );
+               $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' );
        }
 
        /**
@@ -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..402bab1 100644 (file)
@@ -205,8 +205,4 @@ class ApiRollback extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Rollback';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f0e1fad..752a6be 100644 (file)
@@ -155,10 +155,6 @@ class ApiRsd extends ApiBase {
                }
                return $outputData;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
 
 class ApiFormatXmlRsd extends ApiFormatXml {
@@ -170,8 +166,4 @@ class ApiFormatXmlRsd extends ApiFormatXml {
        public function getMimeType() {
                return 'application/rsd+xml';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 098b1a6..68160fa 100644 (file)
@@ -49,7 +49,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 +278,4 @@ class ApiSetNotificationTimestamp extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:SetNotificationTimestamp';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2c9b482..2be2b24 100644 (file)
@@ -151,8 +151,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..5802a98 100644 (file)
@@ -178,8 +178,4 @@ class ApiUnblock extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Block';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2ee8641..b1eeff3 100644 (file)
@@ -176,8 +176,4 @@ class ApiUndelete extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Undelete';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6b8639c..4afc8e7 100644 (file)
@@ -51,6 +51,8 @@ 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() );
                // Add the uploaded file to the params array
                $this->mParams['file'] = $request->getFileName( 'file' );
                $this->mParams['chunk'] = $request->getFileName( 'chunk' );
@@ -62,17 +64,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 +89,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 +98,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() );
                }
@@ -114,6 +116,7 @@ class ApiUpload extends ApiBase {
                // Cleanup any temporary mess
                $this->mUpload->cleanupTempFile();
        }
+
        /**
         * Get an uplaod result based on upload context
         * @return array
@@ -134,6 +137,7 @@ 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
@@ -155,6 +159,7 @@ class ApiUpload extends ApiBase {
                }
                return $result;
        }
+
        /**
         * Get Warnings Result
         * @param $warnings array Array of Api upload warnings
@@ -174,12 +179,15 @@ class ApiUpload extends ApiBase {
                }
                return $result;
        }
+
        /**
         * Get the result of a chunk upload.
         * @param $warnings array Array of Api upload warnings
         * @return array
         */
-       private function getChunkResult( $warnings ){
+       private function getChunkResult( $warnings ) {
+               global $IP;
+
                $result = array();
 
                $result['result'] = 'Continue';
@@ -192,8 +200,8 @@ class ApiUpload extends ApiBase {
                if ($this->mParams['offset'] == 0) {
                        $result['filekey'] = $this->performStash();
                } else {
-                       $status = $this->mUpload->addChunk($chunkPath, $chunkSize,
-                                                                               $this->mParams['offset']);
+                       $status = $this->mUpload->addChunk(
+                               $chunkPath, $chunkSize, $this->mParams['offset'] );
                        if ( !$status->isGood() ) {
                                $this->dieUsage( $status->getWikiText(), 'stashfailed' );
                                return array();
@@ -201,23 +209,54 @@ class ApiUpload extends ApiBase {
 
                        // Check we added the last chunk:
                        if( $this->mParams['offset'] + $chunkSize == $this->mParams['filesize'] ) {
-                               $status = $this->mUpload->concatenateChunks();
-
-                               if ( !$status->isGood() ) {
-                                       $this->dieUsage( $status->getWikiText(), 'stashfailed' );
-                                       return array();
-                               }
-
-                               // We have a new filekey for the fully concatenated file.
-                               $result['filekey'] =  $this->mUpload->getLocalFile()->getFileKey();
+                               if ( $this->mParams['async'] && !wfIsWindows() ) {
+                                       $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
+                                       if ( $progress && $progress['result'] === 'Poll' ) {
+                                               $this->dieUsage( "Chunk assembly already in progress.", 'stashfailed' );
+                                       }
+                                       UploadBase::setSessionStatus(
+                                               $this->mParams['filekey'],
+                                               array( 'result' => 'Poll',
+                                                       'stage' => 'queued', 'status' => Status::newGood() )
+                                       );
+                                       $retVal = 1;
+                                       $cmd = wfShellWikiCmd(
+                                               "$IP/includes/upload/AssembleUploadChunks.php",
+                                               array(
+                                                       '--wiki', wfWikiID(),
+                                                       '--filename', $this->mParams['filename'],
+                                                       '--filekey', $this->mParams['filekey'],
+                                                       '--userid', $this->getUser()->getId(),
+                                                       '--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 {
+                                               UploadBase::setSessionStatus( $this->mParams['filekey'], false );
+                                               $this->dieUsage(
+                                                       "Failed to start AssembleUploadChunks.php", 'stashfailed' );
+                                       }
+                               } else {
+                                       $status = $this->mUpload->concatenateChunks();
+                                       if ( !$status->isGood() ) {
+                                               $this->dieUsage( $status->getWikiText(), 'stashfailed' );
+                                               return array();
+                                       }
 
-                               // Remove chunk from stash. (Checks against user ownership of chunks.)
-                               $this->mUpload->stash->removeFile( $this->mParams['filekey'] );
+                                       // We have a new filekey for the fully concatenated file.
+                                       $result['filekey'] =  $this->mUpload->getLocalFile()->getFileKey();
 
-                               $result['result'] = 'Success';
+                                       // Remove chunk from stash. (Checks against user ownership of chunks.)
+                                       $this->mUpload->stash->removeFile( $this->mParams['filekey'] );
 
+                                       $result['result'] = 'Success';
+                               }
                        } else {
-
                                // Continue passing through the filekey for adding further chunks.
                                $result['filekey'] = $this->mParams['filekey'];
                        }
@@ -232,7 +271,7 @@ class ApiUpload extends ApiBase {
         * @throws MWException
         * @return String file key
         */
-       function performStash() {
+       private function performStash() {
                try {
                        $stashFile = $this->mUpload->stashFile();
 
@@ -257,7 +296,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'];
@@ -281,11 +320,27 @@ class ApiUpload extends ApiBase {
                $request = $this->getMain()->getRequest();
 
                // chunk or one and only one of the following parameters is needed
-               if( !$this->mParams['chunk'] ) {
+               if ( !$this->mParams['chunk'] ) {
                        $this->requireOnlyOneParameter( $this->mParams,
                                '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 ) {
+                               $this->dieUsage( 'No result in status data', 'missingresult' );
+                       } 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;
+               }
+
                if ( $this->mParams['statuskey'] ) {
                        $this->checkAsyncDownloadEnabled();
 
@@ -300,7 +355,6 @@ class ApiUpload extends ApiBase {
                        }
                        $this->getResult()->addValue( null, $this->getModuleName(), $sessionData );
                        return false;
-
                }
 
                // The following modules all require the filename parameter to be set
@@ -332,8 +386,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(
@@ -395,12 +452,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'] ) {
@@ -510,6 +574,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'];
@@ -524,29 +590,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() );
+
+                       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 );
+                                       $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;
@@ -612,9 +712,11 @@ class ApiUpload extends ApiBase {
                        'offset' => null,
                        'chunk' => null,
 
+                       'async' => false,
                        'asyncdownload' => false,
                        'leavemessage' => false,
                        'statuskey' => null,
+                       'checkstatus' => false,
                );
 
                return $params;
@@ -639,9 +741,11 @@ class ApiUpload extends ApiBase {
                        'offset' => 'Offset of chunk in bytes',
                        'filesize' => 'Filesize of entire upload',
 
+                       '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',
+                       'statuskey' => 'Fetch the upload status for this file key (upload by URL)',
+                       'checkstatus' => 'Only fetch the upload status for the given file key',
                );
 
                return $params;
@@ -710,6 +814,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' ),
@@ -738,8 +843,4 @@ class ApiUpload extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Upload';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cbb66a4..0c6ebb1 100644 (file)
@@ -141,8 +141,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 0509f1f..16da176 100644 (file)
@@ -50,6 +50,14 @@ class ApiWatch extends ApiBase {
 
                $res = array( 'title' => $title->getPrefixedText() );
 
+               // Currently unnecessary, code to act as a safeguard against any change in current behaviour of uselang
+               // Copy from ApiParse
+               $oldLang = null;
+               if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
+                       $oldLang = $this->getContext()->getLanguage(); // Backup language
+                       $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
+               }
+
                if ( $params['unwatch'] ) {
                        $res['unwatched'] = '';
                        $res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
@@ -59,6 +67,11 @@ class ApiWatch extends ApiBase {
                        $res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
                        $success = WatchAction::doWatch( $title, $user );
                }
+
+               if ( !is_null( $oldLang ) ) {
+                       $this->getContext()->setLanguage( $oldLang ); // Reset language to $oldLang
+               }
+
                if ( !$success ) {
                        $this->dieUsageMsg( 'hookaborted' );
                }
@@ -88,6 +101,7 @@ class ApiWatch extends ApiBase {
                                ApiBase::PARAM_REQUIRED => true
                        ),
                        'unwatch' => false,
+                       'uselang' => null,
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
@@ -99,6 +113,7 @@ class ApiWatch extends ApiBase {
                return array(
                        'title' => 'The page to (un)watch',
                        'unwatch' => 'If set the page will be unwatched rather than watched',
+                       'uselang' => 'Language to show the message in',
                        'token' => 'A token previously acquired via prop=info',
                );
        }
@@ -136,8 +151,4 @@ class ApiWatch extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Watch';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
diff --git a/includes/cache/BacklinkCache.php b/includes/cache/BacklinkCache.php
new file mode 100644 (file)
index 0000000..0710caa
--- /dev/null
@@ -0,0 +1,453 @@
+<?php
+/**
+ * Class for fetching backlink lists, approximate backlink counts and
+ * partitions.
+ *
+ * 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
+ * @author Tim Starling
+ * @copyright © 2009, Tim Starling, Domas Mituzas
+ * @copyright © 2010, Max Sem
+ * @copyright © 2011, Antoine Musso
+ */
+
+/**
+ * Class for fetching backlink lists, approximate backlink counts and
+ * partitions. This is a shared cache.
+ *
+ * Instances of this class should typically be fetched with the method
+ * $title->getBacklinkCache().
+ *
+ * Ideally you should only get your backlinks from here when you think
+ * there is some advantage in caching them. Otherwise it's just a waste
+ * of memory.
+ *
+ * Introduced by r47317
+ *
+ * @internal documentation reviewed on 18 Mar 2011 by hashar
+ */
+class BacklinkCache {
+       /** @var ProcessCacheLRU */
+       protected static $cache;
+
+       /**
+        * Multi dimensions array representing batches. Keys are:
+        *  > (string) links table name
+        *    > 'numRows' : Number of rows for this link table
+        *    > 'batches' : array( $start, $end )
+        *
+        * @see BacklinkCache::partitionResult()
+        *
+        * Cleared with BacklinkCache::clear()
+        */
+       protected $partitionCache = array();
+
+       /**
+        * Contains the whole links from a database result.
+        * This is raw data that will be partitioned in $partitionCache
+        *
+        * Initialized with BacklinkCache::getLinks()
+        * Cleared with BacklinkCache::clear()
+        */
+       protected $fullResultCache = array();
+
+       /**
+        * Local copy of a database object.
+        *
+        * Accessor: BacklinkCache::getDB()
+        * Mutator : BacklinkCache::setDB()
+        * Cleared with BacklinkCache::clear()
+        */
+       protected $db;
+
+       /**
+        * Local copy of a Title object
+        */
+       protected $title;
+
+       const CACHE_EXPIRY = 3600;
+
+       /**
+        * Create a new BacklinkCache
+        *
+        * @param Title $title : Title object to create a backlink cache for
+        */
+       public function __construct( Title $title ) {
+               $this->title = $title;
+       }
+
+       /**
+        * Create a new BacklinkCache or reuse any existing one.
+        * Currently, only one cache instance can exist; callers that
+        * need multiple backlink cache objects should keep them in scope.
+        *
+        * @param Title $title : Title object to get a backlink cache for
+        * @return BacklinkCache
+        */
+       public static function get( Title $title ) {
+               if ( !self::$cache ) { // init cache
+                       self::$cache = new ProcessCacheLRU( 1 );
+               }
+               $dbKey = $title->getPrefixedDBkey();
+               if ( !self::$cache->has( $dbKey, 'obj' ) ) {
+                       self::$cache->set( $dbKey, 'obj', new self( $title ) );
+               }
+               return self::$cache->get( $dbKey, 'obj' );
+       }
+
+       /**
+        * Serialization handler, diasallows to serialize the database to prevent
+        * failures after this class is deserialized from cache with dead DB
+        * connection.
+        *
+        * @return array
+        */
+       function __sleep() {
+               return array( 'partitionCache', 'fullResultCache', 'title' );
+       }
+
+       /**
+        * Clear locally stored data and database object.
+        */
+       public function clear() {
+               $this->partitionCache = array();
+               $this->fullResultCache = array();
+               unset( $this->db );
+       }
+
+       /**
+        * Set the Database object to use
+        *
+        * @param $db DatabaseBase
+        */
+       public function setDB( $db ) {
+               $this->db = $db;
+       }
+
+       /**
+        * Get the slave connection to the database
+        * When non existing, will initialize the connection.
+        * @return DatabaseBase object
+        */
+       protected function getDB() {
+               if ( !isset( $this->db ) ) {
+                       $this->db = wfGetDB( DB_SLAVE );
+               }
+
+               return $this->db;
+       }
+
+       /**
+        * Get the backlinks for a given table. Cached in process memory only.
+        * @param $table String
+        * @param $startId Integer or false
+        * @param $endId Integer or false
+        * @return TitleArrayFromResult
+        */
+       public function getLinks( $table, $startId = false, $endId = false ) {
+               wfProfileIn( __METHOD__ );
+
+               $fromField = $this->getPrefix( $table ) . '_from';
+
+               if ( $startId || $endId ) {
+                       // Partial range, not cached
+                       wfDebug( __METHOD__ . ": from DB (uncacheable range)\n" );
+                       $conds = $this->getConditions( $table );
+
+                       // Use the from field in the condition rather than the joined page_id,
+                       // because databases are stupid and don't necessarily propagate indexes.
+                       if ( $startId ) {
+                               $conds[] = "$fromField >= " . intval( $startId );
+                       }
+
+                       if ( $endId ) {
+                               $conds[] = "$fromField <= " . intval( $endId );
+                       }
+
+                       $res = $this->getDB()->select(
+                               array( $table, 'page' ),
+                               array( 'page_namespace', 'page_title', 'page_id' ),
+                               $conds,
+                               __METHOD__,
+                               array(
+                                       'STRAIGHT_JOIN',
+                                       'ORDER BY' => $fromField
+                               ) );
+                       $ta = TitleArray::newFromResult( $res );
+
+                       wfProfileOut( __METHOD__ );
+                       return $ta;
+               }
+
+               // @todo FIXME: Make this a function?
+               if ( !isset( $this->fullResultCache[$table] ) ) {
+                       wfDebug( __METHOD__ . ": from DB\n" );
+                       $res = $this->getDB()->select(
+                               array( $table, 'page' ),
+                               array( 'page_namespace', 'page_title', 'page_id' ),
+                               $this->getConditions( $table ),
+                               __METHOD__,
+                               array(
+                                       'STRAIGHT_JOIN',
+                                       'ORDER BY' => $fromField,
+                               ) );
+                       $this->fullResultCache[$table] = $res;
+               }
+
+               $ta = TitleArray::newFromResult( $this->fullResultCache[$table] );
+
+               wfProfileOut( __METHOD__ );
+               return $ta;
+       }
+
+       /**
+        * Get the field name prefix for a given table
+        * @param $table String
+        * @throws MWException
+        * @return null|string
+        */
+       protected function getPrefix( $table ) {
+               static $prefixes = array(
+                       'pagelinks'     => 'pl',
+                       'imagelinks'    => 'il',
+                       'categorylinks' => 'cl',
+                       'templatelinks' => 'tl',
+                       'redirect'      => 'rd',
+               );
+
+               if ( isset( $prefixes[$table] ) ) {
+                       return $prefixes[$table];
+               } else {
+                       $prefix = null;
+                       wfRunHooks( 'BacklinkCacheGetPrefix', array( $table, &$prefix ) );
+                       if( $prefix ) {
+                               return $prefix;
+                       } else {
+                               throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
+                       }
+               }
+       }
+
+       /**
+        * Get the SQL condition array for selecting backlinks, with a join
+        * on the page table.
+        * @param $table String
+        * @throws MWException
+        * @return array|null
+        */
+       protected function getConditions( $table ) {
+               $prefix = $this->getPrefix( $table );
+
+               // @todo FIXME: imagelinks and categorylinks do not rely on getNamespace,
+               // they could be moved up for nicer case statements
+               switch ( $table ) {
+                       case 'pagelinks':
+                       case 'templatelinks':
+                               $conds = array(
+                                       "{$prefix}_namespace" => $this->title->getNamespace(),
+                                       "{$prefix}_title"     => $this->title->getDBkey(),
+                                       "page_id={$prefix}_from"
+                               );
+                               break;
+                       case 'redirect':
+                               $conds = array(
+                                       "{$prefix}_namespace" => $this->title->getNamespace(),
+                                       "{$prefix}_title"     => $this->title->getDBkey(),
+                                       $this->getDb()->makeList( array(
+                                               "{$prefix}_interwiki = ''",
+                                               "{$prefix}_interwiki is null",
+                                       ), LIST_OR ),
+                                       "page_id={$prefix}_from"
+                               );
+                               break;
+                       case 'imagelinks':
+                               $conds = array(
+                                       'il_to' => $this->title->getDBkey(),
+                                       'page_id=il_from'
+                               );
+                               break;
+                       case 'categorylinks':
+                               $conds = array(
+                                       'cl_to' => $this->title->getDBkey(),
+                                       'page_id=cl_from',
+                               );
+                               break;
+                       default:
+                               $conds = null;
+                               wfRunHooks( 'BacklinkCacheGetConditions', array( $table, $this->title, &$conds ) );
+                               if( !$conds ) {
+                                       throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
+                               }
+               }
+
+               return $conds;
+       }
+
+       /**
+        * Check if there are any backlinks
+        * @param $table String
+        * @return bool
+        */
+       public function hasLinks( $table ) {
+               return ( $this->getNumLinks( $table, 1 ) > 0 );
+       }
+
+       /**
+        * Get the approximate number of backlinks
+        * @param $table String
+        * @param $max integer Only count up to this many backlinks
+        * @return integer
+        */
+       public function getNumLinks( $table, $max = INF ) {
+               global $wgMemc;
+
+               // 1) try partition cache ...
+               if ( isset( $this->partitionCache[$table] ) ) {
+                       $entry = reset( $this->partitionCache[$table] );
+                       return min( $max, $entry['numRows'] );
+               }
+
+               // 2) ... then try full result cache ...
+               if ( isset( $this->fullResultCache[$table] ) ) {
+                       return min( $max, $this->fullResultCache[$table]->numRows() );
+               }
+
+               $memcKey = wfMemcKey( 'numbacklinks', md5( $this->title->getPrefixedDBkey() ), $table );
+
+               // 3) ... fallback to memcached ...
+               $count = $wgMemc->get( $memcKey );
+               if ( $count ) {
+                       return min( $max, $count );
+               }
+
+               // 4) fetch from the database ...
+               if ( is_infinite( $max ) ) { // full count
+                       $count = $this->getLinks( $table )->count();
+                       $wgMemc->set( $memcKey, $count, self::CACHE_EXPIRY );
+               } else { // with limit
+                       $count = $this->getDB()->select(
+                               array( $table, 'page' ),
+                               '1',
+                               $this->getConditions( $table ),
+                               __METHOD__,
+                               array( 'LIMIT' => $max )
+                       )->numRows();
+               }
+
+               return $count;
+       }
+
+       /**
+        * Partition the backlinks into batches.
+        * Returns an array giving the start and end of each range. The first
+        * batch has a start of false, and the last batch has an end of false.
+        *
+        * @param $table String: the links table name
+        * @param $batchSize Integer
+        * @return Array
+        */
+       public function partition( $table, $batchSize ) {
+               global $wgMemc;
+
+               // 1) try partition cache ...
+               if ( isset( $this->partitionCache[$table][$batchSize] ) ) {
+                       wfDebug( __METHOD__ . ": got from partition cache\n" );
+                       return $this->partitionCache[$table][$batchSize]['batches'];
+               }
+
+               $this->partitionCache[$table][$batchSize] = false;
+               $cacheEntry =& $this->partitionCache[$table][$batchSize];
+
+               // 2) ... then try full result cache ...
+               if ( isset( $this->fullResultCache[$table] ) ) {
+                       $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize );
+                       wfDebug( __METHOD__ . ": got from full result cache\n" );
+                       return $cacheEntry['batches'];
+               }
+
+               $memcKey = wfMemcKey(
+                       'backlinks',
+                       md5( $this->title->getPrefixedDBkey() ),
+                       $table,
+                       $batchSize
+               );
+
+               // 3) ... fallback to memcached ...
+               $memcValue = $wgMemc->get( $memcKey );
+               if ( is_array( $memcValue ) ) {
+                       $cacheEntry = $memcValue;
+                       wfDebug( __METHOD__ . ": got from memcached $memcKey\n" );
+                       return $cacheEntry['batches'];
+               }
+
+
+               // 4) ... finally fetch from the slow database :(
+               $this->getLinks( $table );
+               $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize );
+               // Save partitions to memcached
+               $wgMemc->set( $memcKey, $cacheEntry, self::CACHE_EXPIRY );
+
+               // Save backlink count to memcached
+               $memcKey = wfMemcKey( 'numbacklinks', md5( $this->title->getPrefixedDBkey() ), $table );
+               $wgMemc->set( $memcKey, $cacheEntry['numRows'], self::CACHE_EXPIRY );
+
+               wfDebug( __METHOD__ . ": got from database\n" );
+               return $cacheEntry['batches'];
+       }
+
+       /**
+        * Partition a DB result with backlinks in it into batches
+        * @param $res ResultWrapper database result
+        * @param $batchSize integer
+        * @throws MWException
+        * @return array @see
+        */
+       protected function partitionResult( $res, $batchSize ) {
+               $batches = array();
+               $numRows = $res->numRows();
+               $numBatches = ceil( $numRows / $batchSize );
+
+               for ( $i = 0; $i < $numBatches; $i++ ) {
+                       if ( $i == 0  ) {
+                               $start = false;
+                       } else {
+                               $rowNum = intval( $numRows * $i / $numBatches );
+                               $res->seek( $rowNum );
+                               $row = $res->fetchObject();
+                               $start = $row->page_id;
+                       }
+
+                       if ( $i == $numBatches - 1 ) {
+                               $end = false;
+                       } else {
+                               $rowNum = intval( $numRows * ( $i + 1 ) / $numBatches );
+                               $res->seek( $rowNum );
+                               $row = $res->fetchObject();
+                               $end = $row->page_id - 1;
+                       }
+
+                       # Sanity check order
+                       if ( $start && $end && $start > $end ) {
+                               throw new MWException( __METHOD__ . ': Internal error: query result out of order' );
+                       }
+
+                       $batches[] = array( $start, $end );
+               }
+
+               return array( 'numRows' => $numRows, 'batches' => $batches );
+       }
+}
index 51a28ca..88e7928 100644 (file)
 
 /**
  * Class to invalidate the HTML cache of all the pages linking to a given title.
- * Small numbers of links will be done immediately, large numbers are pushed onto
- * the job queue.
- *
- * This class is designed to work efficiently with small numbers of links, and
- * to work reasonably well with up to ~10^5 links. Above ~10^6 links, the memory
- * and time requirements of loading all backlinked IDs in doUpdate() might become
- * prohibitive. The requirements measured at Wikimedia are approximately:
- *
- *   memory: 48 bytes per row
- *   time: 16us per row for the query plus processing
- *
- * The reason this query is done is to support partitioning of the job
- * by backlinked ID. The memory issue could be allieviated by doing this query in
- * batches, but of course LIMIT with an offset is inefficient on the DB side.
- *
- * The class is nevertheless a vast improvement on the previous method of using
- * File::getLinksTo() and Title::touchArray(), which uses about 2KB of memory per
- * link.
  *
  * @ingroup Cache
  */
@@ -50,8 +32,7 @@ class HTMLCacheUpdate implements DeferrableUpdate {
         */
        public $mTitle;
 
-       public $mTable, $mPrefix, $mStart, $mEnd;
-       public $mRowsPerJob, $mRowsPerQuery;
+       public $mTable;
 
        /**
         * @param $titleTo
@@ -59,172 +40,35 @@ class HTMLCacheUpdate implements DeferrableUpdate {
         * @param $start bool
         * @param $end bool
         */
-       function __construct( $titleTo, $table, $start = false, $end = false ) {
-               global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery;
-
+       function __construct( Title $titleTo, $table ) {
                $this->mTitle = $titleTo;
                $this->mTable = $table;
-               $this->mStart = $start;
-               $this->mEnd = $end;
-               $this->mRowsPerJob = $wgUpdateRowsPerJob;
-               $this->mRowsPerQuery = $wgUpdateRowsPerQuery;
-               $this->mCache = $this->mTitle->getBacklinkCache();
        }
 
        public function doUpdate() {
-               if ( $this->mStart || $this->mEnd ) {
-                       $this->doPartialUpdate();
-                       return;
-               }
-
-               # Get an estimate of the number of rows from the BacklinkCache
-               $numRows = $this->mCache->getNumLinks( $this->mTable );
-               if ( $numRows > $this->mRowsPerJob * 2 ) {
-                       # Do fast cached partition
-                       $this->insertJobs();
-               } else {
-                       # Get the links from the DB
-                       $titleArray = $this->mCache->getLinks( $this->mTable );
-                       # Check if the row count estimate was correct
-                       if ( $titleArray->count() > $this->mRowsPerJob * 2 ) {
-                               # Not correct, do accurate partition
-                               wfDebug( __METHOD__.": row count estimate was incorrect, repartitioning\n" );
-                               $this->insertJobsFromTitles( $titleArray );
-                       } else {
-                               $this->invalidateTitles( $titleArray );
-                       }
-               }
-       }
-
-       /**
-        * Update some of the backlinks, defined by a page ID range
-        */
-       protected function doPartialUpdate() {
-               $titleArray = $this->mCache->getLinks( $this->mTable, $this->mStart, $this->mEnd );
-               if ( $titleArray->count() <= $this->mRowsPerJob * 2 ) {
-                       # This partition is small enough, do the update
-                       $this->invalidateTitles( $titleArray );
-               } else {
-                       # Partitioning was excessively inaccurate. Divide the job further.
-                       # This can occur when a large number of links are added in a short
-                       # period of time, say by updating a heavily-used template.
-                       $this->insertJobsFromTitles( $titleArray );
-               }
-       }
-
-       /**
-        * Partition the current range given by $this->mStart and $this->mEnd,
-        * using a pre-calculated title array which gives the links in that range.
-        * Queue the resulting jobs.
-        *
-        * @param $titleArray array
-        */
-       protected function insertJobsFromTitles( $titleArray ) {
-               # We make subpartitions in the sense that the start of the first job
-               # will be the start of the parent partition, and the end of the last
-               # job will be the end of the parent partition.
-               $jobs = array();
-               $start = $this->mStart; # start of the current job
-               $numTitles = 0;
-               foreach ( $titleArray as $title ) {
-                       $id = $title->getArticleID();
-                       # $numTitles is now the number of titles in the current job not
-                       # including the current ID
-                       if ( $numTitles >= $this->mRowsPerJob ) {
-                               # Add a job up to but not including the current ID
-                               $params = array(
-                                       'table' => $this->mTable,
-                                       'start' => $start,
-                                       'end' => $id - 1
-                               );
-                               $jobs[] = new HTMLCacheUpdateJob( $this->mTitle, $params );
-                               $start = $id;
-                               $numTitles = 0;
-                       }
-                       $numTitles++;
-               }
-               # Last job
-               $params = array(
-                       'table' => $this->mTable,
-                       'start' => $start,
-                       'end' => $this->mEnd
-               );
-               $jobs[] = new HTMLCacheUpdateJob( $this->mTitle, $params );
-               wfDebug( __METHOD__.": repartitioning into " . count( $jobs ) . " jobs\n" );
+               global $wgMaxBacklinksInvalidate;
 
-               if ( count( $jobs ) < 2 ) {
-                       # I don't think this is possible at present, but handling this case
-                       # makes the code a bit more robust against future code updates and
-                       # avoids a potential infinite loop of repartitioning
-                       wfDebug( __METHOD__.": repartitioning failed!\n" );
-                       $this->invalidateTitles( $titleArray );
-                       return;
-               }
+               wfProfileIn( __METHOD__ );
 
-               Job::batchInsert( $jobs );
-       }
-
-       /**
-        * @return mixed
-        */
-       protected function insertJobs() {
-               $batches = $this->mCache->partition( $this->mTable, $this->mRowsPerJob );
-               if ( !$batches ) {
-                       return;
-               }
-               $jobs = array();
-               foreach ( $batches as $batch ) {
-                       $params = array(
+               $job = new HTMLCacheUpdateJob(
+                       $this->mTitle,
+                       array(
                                'table' => $this->mTable,
-                               'start' => $batch[0],
-                               'end' => $batch[1],
-                       );
-                       $jobs[] = new HTMLCacheUpdateJob( $this->mTitle, $params );
-               }
-               Job::batchInsert( $jobs );
-       }
-
-       /**
-        * Invalidate an array (or iterator) of Title objects, right now
-        * @param $titleArray array
-        */
-       protected function invalidateTitles( $titleArray ) {
-               global $wgUseFileCache, $wgUseSquid;
-
-               $dbw = wfGetDB( DB_MASTER );
-               $timestamp = $dbw->timestamp();
-
-               # Get all IDs in this query into an array
-               $ids = array();
-               foreach ( $titleArray as $title ) {
-                       $ids[] = $title->getArticleID();
-               }
-
-               if ( !$ids ) {
-                       return;
-               }
-
-               # Update page_touched
-               $batches = array_chunk( $ids, $this->mRowsPerQuery );
-               foreach ( $batches as $batch ) {
-                       $dbw->update( 'page',
-                               array( 'page_touched' => $timestamp ),
-                               array( 'page_id' => $batch ),
-                               __METHOD__
-                       );
-               }
+                       ) + Job::newRootJobParams( // "overall" refresh links job info
+                               "htmlCacheUpdate:{$this->mTable}:{$this->mTitle->getPrefixedText()}"
+                       )
+               );
 
-               # Update squid
-               if ( $wgUseSquid ) {
-                       $u = SquidUpdate::newFromTitles( $titleArray );
-                       $u->doUpdate();
+               $count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 200 );
+               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)
+                       $job->run(); // just do the purge query now
                }
 
-               # Update file cache
-               if  ( $wgUseFileCache ) {
-                       foreach ( $titleArray as $title ) {
-                               HTMLFileCache::clearFileCache( $title );
-                       }
-               }
+               wfProfileOut( __METHOD__ );
        }
 }
diff --git a/includes/cache/LocalisationCache.php b/includes/cache/LocalisationCache.php
new file mode 100644 (file)
index 0000000..7cc1b9c
--- /dev/null
@@ -0,0 +1,1289 @@
+<?php
+/**
+ * Cache of the contents of localisation files.
+ *
+ * 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
+ */
+
+define( 'MW_LC_VERSION', 2 );
+
+/**
+ * Class for caching the contents of localisation files, Messages*.php
+ * and *.i18n.php.
+ *
+ * An instance of this class is available using Language::getLocalisationCache().
+ *
+ * The values retrieved from here are merged, containing items from extension
+ * files, core messages files and the language fallback sequence (e.g. zh-cn ->
+ * zh-hans -> en ). Some common errors are corrected, for example namespace
+ * names with spaces instead of underscores, but heavyweight processing, such
+ * as grammatical transformation, is done by the caller.
+ */
+class LocalisationCache {
+       /** Configuration associative array */
+       var $conf;
+
+       /**
+        * True if recaching should only be done on an explicit call to recache().
+        * Setting this reduces the overhead of cache freshness checking, which
+        * requires doing a stat() for every extension i18n file.
+        */
+       var $manualRecache = false;
+
+       /**
+        * True to treat all files as expired until they are regenerated by this object.
+        */
+       var $forceRecache = false;
+
+       /**
+        * The cache data. 3-d array, where the first key is the language code,
+        * the second key is the item key e.g. 'messages', and the third key is
+        * an item specific subkey index. Some items are not arrays and so for those
+        * items, there are no subkeys.
+        */
+       var $data = array();
+
+       /**
+        * The persistent store object. An instance of LCStore.
+        *
+        * @var LCStore
+        */
+       var $store;
+
+       /**
+        * A 2-d associative array, code/key, where presence indicates that the item
+        * is loaded. Value arbitrary.
+        *
+        * For split items, if set, this indicates that all of the subitems have been
+        * loaded.
+        */
+       var $loadedItems = array();
+
+       /**
+        * A 3-d associative array, code/key/subkey, where presence indicates that
+        * the subitem is loaded. Only used for the split items, i.e. messages.
+        */
+       var $loadedSubitems = array();
+
+       /**
+        * An array where presence of a key indicates that that language has been
+        * initialised. Initialisation includes checking for cache expiry and doing
+        * any necessary updates.
+        */
+       var $initialisedLangs = array();
+
+       /**
+        * An array mapping non-existent pseudo-languages to fallback languages. This
+        * is filled by initShallowFallback() when data is requested from a language
+        * that lacks a Messages*.php file.
+        */
+       var $shallowFallbacks = array();
+
+       /**
+        * An array where the keys are codes that have been recached by this instance.
+        */
+       var $recachedLangs = array();
+
+       /**
+        * All item keys
+        */
+       static public $allKeys = array(
+               'fallback', 'namespaceNames', 'bookstoreList',
+               'magicWords', 'messages', 'rtl', 'capitalizeAllNouns', 'digitTransformTable',
+               'separatorTransformTable', 'fallback8bitEncoding', 'linkPrefixExtension',
+               'linkTrail', 'namespaceAliases',
+               'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
+               'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
+               'imageFiles', 'preloadedMessages', 'namespaceGenderAliases',
+               'digitGroupingPattern', 'pluralRules', 'compiledPluralRules',
+       );
+
+       /**
+        * Keys for items which consist of associative arrays, which may be merged
+        * by a fallback sequence.
+        */
+       static public $mergeableMapKeys = array( 'messages', 'namespaceNames',
+               'dateFormats', 'imageFiles', 'preloadedMessages'
+       );
+
+       /**
+        * Keys for items which are a numbered array.
+        */
+       static public $mergeableListKeys = array( 'extraUserToggles' );
+
+       /**
+        * Keys for items which contain an array of arrays of equivalent aliases
+        * for each subitem. The aliases may be merged by a fallback sequence.
+        */
+       static public $mergeableAliasListKeys = array( 'specialPageAliases' );
+
+       /**
+        * Keys for items which contain an associative array, and may be merged if
+        * the primary value contains the special array key "inherit". That array
+        * key is removed after the first merge.
+        */
+       static public $optionalMergeKeys = array( 'bookstoreList' );
+
+       /**
+        * Keys for items that are formatted like $magicWords
+        */
+       static public $magicWordKeys = array( 'magicWords' );
+
+       /**
+        * Keys for items where the subitems are stored in the backend separately.
+        */
+       static public $splitKeys = array( 'messages' );
+
+       /**
+        * Keys which are loaded automatically by initLanguage()
+        */
+       static public $preloadedKeys = array( 'dateFormats', 'namespaceNames' );
+
+       /**
+        * Associative array of cached plural rules. The key is the language code,
+        * the value is an array of plural rules for that language.
+        */
+       var $pluralRules = null;
+
+       var $mergeableKeys = null;
+
+       /**
+        * Constructor.
+        * For constructor parameters, see the documentation in DefaultSettings.php
+        * for $wgLocalisationCacheConf.
+        *
+        * @param $conf Array
+        * @throws MWException
+        */
+       function __construct( $conf ) {
+               global $wgCacheDirectory;
+
+               $this->conf = $conf;
+               $storeConf = array();
+               if ( !empty( $conf['storeClass'] ) ) {
+                       $storeClass = $conf['storeClass'];
+               } else {
+                       switch ( $conf['store'] ) {
+                               case 'files':
+                               case 'file':
+                                       $storeClass = 'LCStore_CDB';
+                                       break;
+                               case 'db':
+                                       $storeClass = 'LCStore_DB';
+                                       break;
+                               case 'accel':
+                                       $storeClass = 'LCStore_Accel';
+                                       break;
+                               case 'detect':
+                                       $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
+                                       break;
+                               default:
+                                       throw new MWException(
+                                               'Please set $wgLocalisationCacheConf[\'store\'] to something sensible.' );
+                       }
+               }
+
+               wfDebug( get_class( $this ) . ": using store $storeClass\n" );
+               if ( !empty( $conf['storeDirectory'] ) ) {
+                       $storeConf['directory'] = $conf['storeDirectory'];
+               }
+
+               $this->store = new $storeClass( $storeConf );
+               foreach ( array( 'manualRecache', 'forceRecache' ) as $var ) {
+                       if ( isset( $conf[$var] ) ) {
+                               $this->$var = $conf[$var];
+                       }
+               }
+       }
+
+       /**
+        * Returns true if the given key is mergeable, that is, if it is an associative
+        * array which can be merged through a fallback sequence.
+        * @param $key
+        * @return bool
+        */
+       public function isMergeableKey( $key ) {
+               if ( $this->mergeableKeys === null ) {
+                       $this->mergeableKeys = array_flip( array_merge(
+                               self::$mergeableMapKeys,
+                               self::$mergeableListKeys,
+                               self::$mergeableAliasListKeys,
+                               self::$optionalMergeKeys,
+                               self::$magicWordKeys
+                       ) );
+               }
+               return isset( $this->mergeableKeys[$key] );
+       }
+
+       /**
+        * Get a cache item.
+        *
+        * Warning: this may be slow for split items (messages), since it will
+        * need to fetch all of the subitems from the cache individually.
+        * @param $code
+        * @param $key
+        * @return mixed
+        */
+       public function getItem( $code, $key ) {
+               if ( !isset( $this->loadedItems[$code][$key] ) ) {
+                       wfProfileIn( __METHOD__ . '-load' );
+                       $this->loadItem( $code, $key );
+                       wfProfileOut( __METHOD__ . '-load' );
+               }
+
+               if ( $key === 'fallback' && isset( $this->shallowFallbacks[$code] ) ) {
+                       return $this->shallowFallbacks[$code];
+               }
+
+               return $this->data[$code][$key];
+       }
+
+       /**
+        * Get a subitem, for instance a single message for a given language.
+        * @param $code
+        * @param $key
+        * @param $subkey
+        * @return null
+        */
+       public function getSubitem( $code, $key, $subkey ) {
+               if ( !isset( $this->loadedSubitems[$code][$key][$subkey] ) &&
+                        !isset( $this->loadedItems[$code][$key] ) ) {
+                       wfProfileIn( __METHOD__ . '-load' );
+                       $this->loadSubitem( $code, $key, $subkey );
+                       wfProfileOut( __METHOD__ . '-load' );
+               }
+
+               if ( isset( $this->data[$code][$key][$subkey] ) ) {
+                       return $this->data[$code][$key][$subkey];
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Get the list of subitem keys for a given item.
+        *
+        * This is faster than array_keys($lc->getItem(...)) for the items listed in
+        * self::$splitKeys.
+        *
+        * Will return null if the item is not found, or false if the item is not an
+        * array.
+        * @param $code
+        * @param $key
+        * @return bool|null|string
+        */
+       public function getSubitemList( $code, $key ) {
+               if ( in_array( $key, self::$splitKeys ) ) {
+                       return $this->getSubitem( $code, 'list', $key );
+               } else {
+                       $item = $this->getItem( $code, $key );
+                       if ( is_array( $item ) ) {
+                               return array_keys( $item );
+                       } else {
+                               return false;
+                       }
+               }
+       }
+
+       /**
+        * Load an item into the cache.
+        * @param $code
+        * @param $key
+        */
+       protected function loadItem( $code, $key ) {
+               if ( !isset( $this->initialisedLangs[$code] ) ) {
+                       $this->initLanguage( $code );
+               }
+
+               // Check to see if initLanguage() loaded it for us
+               if ( isset( $this->loadedItems[$code][$key] ) ) {
+                       return;
+               }
+
+               if ( isset( $this->shallowFallbacks[$code] ) ) {
+                       $this->loadItem( $this->shallowFallbacks[$code], $key );
+                       return;
+               }
+
+               if ( in_array( $key, self::$splitKeys ) ) {
+                       $subkeyList = $this->getSubitem( $code, 'list', $key );
+                       foreach ( $subkeyList as $subkey ) {
+                               if ( isset( $this->data[$code][$key][$subkey] ) ) {
+                                       continue;
+                               }
+                               $this->data[$code][$key][$subkey] = $this->getSubitem( $code, $key, $subkey );
+                       }
+               } else {
+                       $this->data[$code][$key] = $this->store->get( $code, $key );
+               }
+
+               $this->loadedItems[$code][$key] = true;
+       }
+
+       /**
+        * Load a subitem into the cache
+        * @param $code
+        * @param $key
+        * @param $subkey
+        * @return
+        */
+       protected function loadSubitem( $code, $key, $subkey ) {
+               if ( !in_array( $key, self::$splitKeys ) ) {
+                       $this->loadItem( $code, $key );
+                       return;
+               }
+
+               if ( !isset( $this->initialisedLangs[$code] ) ) {
+                       $this->initLanguage( $code );
+               }
+
+               // Check to see if initLanguage() loaded it for us
+               if ( isset( $this->loadedItems[$code][$key] ) ||
+                        isset( $this->loadedSubitems[$code][$key][$subkey] ) ) {
+                       return;
+               }
+
+               if ( isset( $this->shallowFallbacks[$code] ) ) {
+                       $this->loadSubitem( $this->shallowFallbacks[$code], $key, $subkey );
+                       return;
+               }
+
+               $value = $this->store->get( $code, "$key:$subkey" );
+               $this->data[$code][$key][$subkey] = $value;
+               $this->loadedSubitems[$code][$key][$subkey] = true;
+       }
+
+       /**
+        * Returns true if the cache identified by $code is missing or expired.
+        * @return bool
+        */
+       public function isExpired( $code ) {
+               if ( $this->forceRecache && !isset( $this->recachedLangs[$code] ) ) {
+                       wfDebug( __METHOD__ . "($code): forced reload\n" );
+                       return true;
+               }
+
+               $deps = $this->store->get( $code, 'deps' );
+               $keys = $this->store->get( $code, 'list' );
+               $preload = $this->store->get( $code, 'preload' );
+               // Different keys may expire separately, at least in LCStore_Accel
+               if ( $deps === null || $keys === null || $preload === null ) {
+                       wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
+                       return true;
+               }
+
+               foreach ( $deps as $dep ) {
+                       // Because we're unserializing stuff from cache, we
+                       // could receive objects of classes that don't exist
+                       // anymore (e.g. uninstalled extensions)
+                       // When this happens, always expire the cache
+                       if ( !$dep instanceof CacheDependency || $dep->isExpired() ) {
+                               wfDebug( __METHOD__ . "($code): cache for $code expired due to " .
+                                       get_class( $dep ) . "\n" );
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+        * Initialise a language in this object. Rebuild the cache if necessary.
+        * @param $code
+        * @throws MWException
+        */
+       protected function initLanguage( $code ) {
+               if ( isset( $this->initialisedLangs[$code] ) ) {
+                       return;
+               }
+
+               $this->initialisedLangs[$code] = true;
+
+               # If the code is of the wrong form for a Messages*.php file, do a shallow fallback
+               if ( !Language::isValidBuiltInCode( $code ) ) {
+                       $this->initShallowFallback( $code, 'en' );
+                       return;
+               }
+
+               # Recache the data if necessary
+               if ( !$this->manualRecache && $this->isExpired( $code ) ) {
+                       if ( file_exists( Language::getMessagesFileName( $code ) ) ) {
+                               $this->recache( $code );
+                       } elseif ( $code === 'en' ) {
+                               throw new MWException( 'MessagesEn.php is missing.' );
+                       } else {
+                               $this->initShallowFallback( $code, 'en' );
+                       }
+                       return;
+               }
+
+               # Preload some stuff
+               $preload = $this->getItem( $code, 'preload' );
+               if ( $preload === null ) {
+                       if ( $this->manualRecache ) {
+                               // No Messages*.php file. Do shallow fallback to en.
+                               if ( $code === 'en' ) {
+                                       throw new MWException( 'No localisation cache found for English. ' .
+                                               'Please run maintenance/rebuildLocalisationCache.php.' );
+                               }
+                               $this->initShallowFallback( $code, 'en' );
+                               return;
+                       } else {
+                               throw new MWException( 'Invalid or missing localisation cache.' );
+                       }
+               }
+               $this->data[$code] = $preload;
+               foreach ( $preload as $key => $item ) {
+                       if ( in_array( $key, self::$splitKeys ) ) {
+                               foreach ( $item as $subkey => $subitem ) {
+                                       $this->loadedSubitems[$code][$key][$subkey] = true;
+                               }
+                       } else {
+                               $this->loadedItems[$code][$key] = true;
+                       }
+               }
+       }
+
+       /**
+        * Create a fallback from one language to another, without creating a
+        * complete persistent cache.
+        * @param $primaryCode
+        * @param $fallbackCode
+        */
+       public function initShallowFallback( $primaryCode, $fallbackCode ) {
+               $this->data[$primaryCode] =& $this->data[$fallbackCode];
+               $this->loadedItems[$primaryCode] =& $this->loadedItems[$fallbackCode];
+               $this->loadedSubitems[$primaryCode] =& $this->loadedSubitems[$fallbackCode];
+               $this->shallowFallbacks[$primaryCode] = $fallbackCode;
+       }
+
+       /**
+        * Read a PHP file containing localisation data.
+        * @param $_fileName
+        * @param $_fileType
+        * @throws MWException
+        * @return array
+        */
+       protected function readPHPFile( $_fileName, $_fileType ) {
+               // Disable APC caching
+               $_apcEnabled = ini_set( 'apc.cache_by_default', '0' );
+               include( $_fileName );
+               ini_set( 'apc.cache_by_default', $_apcEnabled );
+
+               if ( $_fileType == 'core' || $_fileType == 'extension' ) {
+                       $data = compact( self::$allKeys );
+               } elseif ( $_fileType == 'aliases' ) {
+                       $data = compact( 'aliases' );
+               } else {
+                       throw new MWException( __METHOD__ . ": Invalid file type: $_fileType" );
+               }
+               return $data;
+       }
+
+       /**
+        * Get the compiled plural rules for a given language from the XML files.
+        * @since 1.20
+        */
+       public function getCompiledPluralRules( $code ) {
+               $rules = $this->getPluralRules( $code );
+               if ( $rules === null ) {
+                       return null;
+               }
+               try {
+                       $compiledRules = CLDRPluralRuleEvaluator::compile( $rules );
+               } catch( CLDRPluralRuleError $e ) {
+                       wfDebugLog( 'l10n', $e->getMessage() . "\n" );
+                       return array();
+               }
+               return $compiledRules;
+       }
+
+       /**
+        * Get the plural rules for a given language from the XML files.
+        * Cached.
+        * @since 1.20
+        */
+       public function getPluralRules( $code ) {
+               global $IP;
+
+               if ( $this->pluralRules === null ) {
+                       $cldrPlural = "$IP/languages/data/plurals.xml";
+                       $mwPlural = "$IP/languages/data/plurals-mediawiki.xml";
+                       // Load CLDR plural rules
+                       $this->loadPluralFile( $cldrPlural );
+                       if ( file_exists( $mwPlural ) ) {
+                               // Override or extend
+                               $this->loadPluralFile( $mwPlural );
+                       }
+               }
+               if ( !isset( $this->pluralRules[$code] ) ) {
+                       return null;
+               } else {
+                       return $this->pluralRules[$code];
+               }
+       }
+
+
+       /**
+        * Load a plural XML file with the given filename, compile the relevant
+        * rules, and save the compiled rules in a process-local cache.
+        */
+       protected function loadPluralFile( $fileName ) {
+               $doc = new DOMDocument;
+               $doc->load( $fileName );
+               $rulesets = $doc->getElementsByTagName( "pluralRules" );
+               foreach ( $rulesets as $ruleset ) {
+                       $codes = $ruleset->getAttribute( 'locales' );
+                       $rules = array();
+                       $ruleElements = $ruleset->getElementsByTagName( "pluralRule" );
+                       foreach ( $ruleElements as $elt ) {
+                               $rules[] = $elt->nodeValue;
+                       }
+                       foreach ( explode( ' ', $codes ) as $code ) {
+                               $this->pluralRules[$code] = $rules;
+                       }
+               }
+       }
+
+       /**
+        * Read the data from the source files for a given language, and register
+        * the relevant dependencies in the $deps array. If the localisation
+        * exists, the data array is returned, otherwise false is returned.
+        */
+       protected function readSourceFilesAndRegisterDeps( $code, &$deps ) {
+               global $IP;
+
+               $fileName = Language::getMessagesFileName( $code );
+               if ( !file_exists( $fileName ) ) {
+                       return false;
+               }
+
+               $deps[] = new FileDependency( $fileName );
+               $data = $this->readPHPFile( $fileName, 'core' );
+
+               # Load CLDR plural rules for JavaScript
+               $data['pluralRules'] = $this->getPluralRules( $code );
+               # And for PHP
+               $data['compiledPluralRules'] = $this->getCompiledPluralRules( $code );
+
+               $deps['plurals'] = new FileDependency( "$IP/languages/data/plurals.xml" );
+               $deps['plurals-mw'] = new FileDependency( "$IP/languages/data/plurals-mediawiki.xml" );
+
+               return $data;
+       }
+
+       /**
+        * Merge two localisation values, a primary and a fallback, overwriting the
+        * primary value in place.
+        * @param $key
+        * @param $value
+        * @param $fallbackValue
+        */
+       protected function mergeItem( $key, &$value, $fallbackValue ) {
+               if ( !is_null( $value ) ) {
+                       if ( !is_null( $fallbackValue ) ) {
+                               if ( in_array( $key, self::$mergeableMapKeys ) ) {
+                                       $value = $value + $fallbackValue;
+                               } elseif ( in_array( $key, self::$mergeableListKeys ) ) {
+                                       $value = array_unique( array_merge( $fallbackValue, $value ) );
+                               } elseif ( in_array( $key, self::$mergeableAliasListKeys ) ) {
+                                       $value = array_merge_recursive( $value, $fallbackValue );
+                               } elseif ( in_array( $key, self::$optionalMergeKeys ) ) {
+                                       if ( !empty( $value['inherit'] ) )  {
+                                               $value = array_merge( $fallbackValue, $value );
+                                       }
+
+                                       if ( isset( $value['inherit'] ) ) {
+                                               unset( $value['inherit'] );
+                                       }
+                               } elseif ( in_array( $key, self::$magicWordKeys ) ) {
+                                       $this->mergeMagicWords( $value, $fallbackValue );
+                               }
+                       }
+               } else {
+                       $value = $fallbackValue;
+               }
+       }
+
+       /**
+        * @param $value
+        * @param $fallbackValue
+        */
+       protected function mergeMagicWords( &$value, $fallbackValue ) {
+               foreach ( $fallbackValue as $magicName => $fallbackInfo ) {
+                       if ( !isset( $value[$magicName] ) ) {
+                               $value[$magicName] = $fallbackInfo;
+                       } else {
+                               $oldSynonyms = array_slice( $fallbackInfo, 1 );
+                               $newSynonyms = array_slice( $value[$magicName], 1 );
+                               $synonyms = array_values( array_unique( array_merge(
+                                       $newSynonyms, $oldSynonyms ) ) );
+                               $value[$magicName] = array_merge( array( $fallbackInfo[0] ), $synonyms );
+                       }
+               }
+       }
+
+       /**
+        * Given an array mapping language code to localisation value, such as is
+        * found in extension *.i18n.php files, iterate through a fallback sequence
+        * to merge the given data with an existing primary value.
+        *
+        * Returns true if any data from the extension array was used, false
+        * otherwise.
+        * @param $codeSequence
+        * @param $key
+        * @param $value
+        * @param $fallbackValue
+        * @return bool
+        */
+       protected function mergeExtensionItem( $codeSequence, $key, &$value, $fallbackValue ) {
+               $used = false;
+               foreach ( $codeSequence as $code ) {
+                       if ( isset( $fallbackValue[$code] ) ) {
+                               $this->mergeItem( $key, $value, $fallbackValue[$code] );
+                               $used = true;
+                       }
+               }
+
+               return $used;
+       }
+
+       /**
+        * Load localisation data for a given language for both core and extensions
+        * and save it to the persistent cache store and the process cache
+        * @param $code
+        * @throws MWException
+        */
+       public function recache( $code ) {
+               global $wgExtensionMessagesFiles;
+               wfProfileIn( __METHOD__ );
+
+               if ( !$code ) {
+                       throw new MWException( "Invalid language code requested" );
+               }
+               $this->recachedLangs[$code] = true;
+
+               # Initial values
+               $initialData = array_combine(
+                       self::$allKeys,
+                       array_fill( 0, count( self::$allKeys ), null ) );
+               $coreData = $initialData;
+               $deps = array();
+
+               # Load the primary localisation from the source file
+               $data = $this->readSourceFilesAndRegisterDeps( $code, $deps );
+               if ( $data === false ) {
+                       wfDebug( __METHOD__ . ": no localisation file for $code, using fallback to en\n" );
+                       $coreData['fallback'] = 'en';
+               } else {
+                       wfDebug( __METHOD__ . ": got localisation for $code from source\n" );
+
+                       # Merge primary localisation
+                       foreach ( $data as $key => $value ) {
+                               $this->mergeItem( $key, $coreData[$key], $value );
+                       }
+
+               }
+
+               # Fill in the fallback if it's not there already
+               if ( is_null( $coreData['fallback'] ) ) {
+                       $coreData['fallback'] = $code === 'en' ? false : 'en';
+               }
+               if ( $coreData['fallback'] === false ) {
+                       $coreData['fallbackSequence'] = array();
+               } else {
+                       $coreData['fallbackSequence'] = array_map( 'trim', explode( ',', $coreData['fallback'] ) );
+                       $len = count( $coreData['fallbackSequence'] );
+
+                       # Ensure that the sequence ends at en
+                       if ( $coreData['fallbackSequence'][$len - 1] !== 'en' ) {
+                               $coreData['fallbackSequence'][] = 'en';
+                       }
+
+                       # Load the fallback localisation item by item and merge it
+                       foreach ( $coreData['fallbackSequence'] as $fbCode ) {
+                               # Load the secondary localisation from the source file to
+                               # avoid infinite cycles on cyclic fallbacks
+                               $fbData = $this->readSourceFilesAndRegisterDeps( $fbCode, $deps );
+                               if ( $fbData === false ) {
+                                       continue;
+                               }
+
+                               foreach ( self::$allKeys as $key ) {
+                                       if ( !isset( $fbData[$key] ) ) {
+                                               continue;
+                                       }
+
+                                       if ( is_null( $coreData[$key] ) || $this->isMergeableKey( $key ) ) {
+                                               $this->mergeItem( $key, $coreData[$key], $fbData[$key] );
+                                       }
+                               }
+                       }
+               }
+
+               $codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
+
+               # Load the extension localisations
+               # This is done after the core because we know the fallback sequence now.
+               # But it has a higher precedence for merging so that we can support things
+               # like site-specific message overrides.
+               $allData = $initialData;
+               foreach ( $wgExtensionMessagesFiles as $fileName ) {
+                       $data = $this->readPHPFile( $fileName, 'extension' );
+                       $used = false;
+
+                       foreach ( $data as $key => $item ) {
+                               if ( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
+                                       $used = true;
+                               }
+                       }
+
+                       if ( $used ) {
+                               $deps[] = new FileDependency( $fileName );
+                       }
+               }
+
+               # Merge core data into extension data
+               foreach ( $coreData as $key => $item ) {
+                       $this->mergeItem( $key, $allData[$key], $item );
+               }
+
+               # Add cache dependencies for any referenced globals
+               $deps['wgExtensionMessagesFiles'] = new GlobalDependency( 'wgExtensionMessagesFiles' );
+               $deps['version'] = new ConstantDependency( 'MW_LC_VERSION' );
+
+               # Add dependencies to the cache entry
+               $allData['deps'] = $deps;
+
+               # Replace spaces with underscores in namespace names
+               $allData['namespaceNames'] = str_replace( ' ', '_', $allData['namespaceNames'] );
+
+               # And do the same for special page aliases. $page is an array.
+               foreach ( $allData['specialPageAliases'] as &$page ) {
+                       $page = str_replace( ' ', '_', $page );
+               }
+               # Decouple the reference to prevent accidental damage
+               unset( $page );
+
+               # If there were no plural rules, return an empty array
+               if ( $allData['pluralRules'] === null ) {
+                       $allData['pluralRules'] = array();
+               }
+               if ( $allData['compiledPluralRules'] === null ) {
+                       $allData['compiledPluralRules'] = array();
+               }
+
+               # Set the list keys
+               $allData['list'] = array();
+               foreach ( self::$splitKeys as $key ) {
+                       $allData['list'][$key] = array_keys( $allData[$key] );
+               }
+               # Run hooks
+               wfRunHooks( 'LocalisationCacheRecache', array( $this, $code, &$allData ) );
+
+               if ( is_null( $allData['namespaceNames'] ) ) {
+                       throw new MWException( __METHOD__ . ': Localisation data failed sanity check! ' .
+                               'Check that your languages/messages/MessagesEn.php file is intact.' );
+               }
+
+               # Set the preload key
+               $allData['preload'] = $this->buildPreload( $allData );
+
+               # Save to the process cache and register the items loaded
+               $this->data[$code] = $allData;
+               foreach ( $allData as $key => $item ) {
+                       $this->loadedItems[$code][$key] = true;
+               }
+
+               # Save to the persistent cache
+               $this->store->startWrite( $code );
+               foreach ( $allData as $key => $value ) {
+                       if ( in_array( $key, self::$splitKeys ) ) {
+                               foreach ( $value as $subkey => $subvalue ) {
+                                       $this->store->set( "$key:$subkey", $subvalue );
+                               }
+                       } else {
+                               $this->store->set( $key, $value );
+                       }
+               }
+               $this->store->finishWrite();
+
+               # Clear out the MessageBlobStore
+               # HACK: If using a null (i.e. disabled) storage backend, we
+               # can't write to the MessageBlobStore either
+               if ( !$this->store instanceof LCStore_Null ) {
+                       MessageBlobStore::clear();
+               }
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Build the preload item from the given pre-cache data.
+        *
+        * The preload item will be loaded automatically, improving performance
+        * for the commonly-requested items it contains.
+        * @param $data
+        * @return array
+        */
+       protected function buildPreload( $data ) {
+               $preload = array( 'messages' => array() );
+               foreach ( self::$preloadedKeys as $key ) {
+                       $preload[$key] = $data[$key];
+               }
+
+               foreach ( $data['preloadedMessages'] as $subkey ) {
+                       if ( isset( $data['messages'][$subkey] ) ) {
+                               $subitem = $data['messages'][$subkey];
+                       } else {
+                               $subitem = null;
+                       }
+                       $preload['messages'][$subkey] = $subitem;
+               }
+
+               return $preload;
+       }
+
+       /**
+        * Unload the data for a given language from the object cache.
+        * Reduces memory usage.
+        * @param $code
+        */
+       public function unload( $code ) {
+               unset( $this->data[$code] );
+               unset( $this->loadedItems[$code] );
+               unset( $this->loadedSubitems[$code] );
+               unset( $this->initialisedLangs[$code] );
+
+               foreach ( $this->shallowFallbacks as $shallowCode => $fbCode ) {
+                       if ( $fbCode === $code ) {
+                               $this->unload( $shallowCode );
+                       }
+               }
+       }
+
+       /**
+        * Unload all data
+        */
+       public function unloadAll() {
+               foreach ( $this->initialisedLangs as $lang => $unused ) {
+                       $this->unload( $lang );
+               }
+       }
+
+       /**
+        * Disable the storage backend
+        */
+       public function disableBackend() {
+               $this->store = new LCStore_Null;
+               $this->manualRecache = false;
+       }
+}
+
+/**
+ * Interface for the persistence layer of LocalisationCache.
+ *
+ * The persistence layer is two-level hierarchical cache. The first level
+ * is the language, the second level is the item or subitem.
+ *
+ * Since the data for a whole language is rebuilt in one operation, it needs
+ * to have a fast and atomic method for deleting or replacing all of the
+ * current data for a given language. The interface reflects this bulk update
+ * operation. Callers writing to the cache must first call startWrite(), then
+ * will call set() a couple of thousand times, then will call finishWrite()
+ * to commit the operation. When finishWrite() is called, the cache is
+ * expected to delete all data previously stored for that language.
+ *
+ * The values stored are PHP variables suitable for serialize(). Implementations
+ * of LCStore are responsible for serializing and unserializing.
+ */
+interface LCStore {
+       /**
+        * Get a value.
+        * @param $code string Language code
+        * @param $key string Cache key
+        */
+       function get( $code, $key );
+
+       /**
+        * Start a write transaction.
+        * @param $code Language code
+        */
+       function startWrite( $code );
+
+       /**
+        * Finish a write transaction.
+        */
+       function finishWrite();
+
+       /**
+        * Set a key to a given value. startWrite() must be called before this
+        * is called, and finishWrite() must be called afterwards.
+        * @param $key
+        * @param $value
+        */
+       function set( $key, $value );
+}
+
+/**
+ * LCStore implementation which uses PHP accelerator to store data.
+ * This will work if one of XCache, WinCache or APC cacher is configured.
+ * (See ObjectCache.php)
+ */
+class LCStore_Accel implements LCStore {
+       var $currentLang;
+       var $keys;
+
+       public function __construct() {
+               $this->cache = wfGetCache( CACHE_ACCEL );
+       }
+
+       public function get( $code, $key ) {
+               $k = wfMemcKey( 'l10n', $code, 'k', $key );
+               $r = $this->cache->get( $k );
+               return $r === false ? null : $r;
+       }
+
+       public function startWrite( $code ) {
+               $k = wfMemcKey( 'l10n', $code, 'l' );
+               $keys = $this->cache->get( $k );
+               if ( $keys ) {
+                       foreach ( $keys as $k ) {
+                               $this->cache->delete( $k );
+                       }
+               }
+               $this->currentLang = $code;
+               $this->keys = array();
+       }
+
+       public function finishWrite() {
+               if ( $this->currentLang ) {
+                       $k = wfMemcKey( 'l10n', $this->currentLang, 'l' );
+                       $this->cache->set( $k, array_keys( $this->keys ) );
+               }
+               $this->currentLang = null;
+               $this->keys = array();
+       }
+
+       public function set( $key, $value ) {
+               if ( $this->currentLang ) {
+                       $k = wfMemcKey( 'l10n', $this->currentLang, 'k', $key );
+                       $this->keys[$k] = true;
+                       $this->cache->set( $k, $value );
+               }
+       }
+}
+
+/**
+ * LCStore implementation which uses the standard DB functions to store data.
+ * This will work on any MediaWiki installation.
+ */
+class LCStore_DB implements LCStore {
+       var $currentLang;
+       var $writesDone = false;
+
+       /**
+        * @var DatabaseBase
+        */
+       var $dbw;
+       var $batch;
+       var $readOnly = false;
+
+       public function get( $code, $key ) {
+               if ( $this->writesDone ) {
+                       $db = wfGetDB( DB_MASTER );
+               } else {
+                       $db = wfGetDB( DB_SLAVE );
+               }
+               $row = $db->selectRow( 'l10n_cache', array( 'lc_value' ),
+                       array( 'lc_lang' => $code, 'lc_key' => $key ), __METHOD__ );
+               if ( $row ) {
+                       return unserialize( $row->lc_value );
+               } else {
+                       return null;
+               }
+       }
+
+       public function startWrite( $code ) {
+               if ( $this->readOnly ) {
+                       return;
+               }
+
+               if ( !$code ) {
+                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
+               }
+
+               $this->dbw = wfGetDB( DB_MASTER );
+               try {
+                       $this->dbw->begin( __METHOD__ );
+                       $this->dbw->delete( 'l10n_cache', array( 'lc_lang' => $code ), __METHOD__ );
+               } catch ( DBQueryError $e ) {
+                       if ( $this->dbw->wasReadOnlyError() ) {
+                               $this->readOnly = true;
+                               $this->dbw->rollback( __METHOD__ );
+                               return;
+                       } else {
+                               throw $e;
+                       }
+               }
+
+               $this->currentLang = $code;
+               $this->batch = array();
+       }
+
+       public function finishWrite() {
+               if ( $this->readOnly ) {
+                       return;
+               }
+
+               if ( $this->batch ) {
+                       $this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
+               }
+
+               $this->dbw->commit( __METHOD__ );
+               $this->currentLang = null;
+               $this->dbw = null;
+               $this->batch = array();
+               $this->writesDone = true;
+       }
+
+       public function set( $key, $value ) {
+               if ( $this->readOnly ) {
+                       return;
+               }
+
+               if ( is_null( $this->currentLang ) ) {
+                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
+               }
+
+               $this->batch[] = array(
+                       'lc_lang' => $this->currentLang,
+                       'lc_key' => $key,
+                       'lc_value' => serialize( $value ) );
+
+               if ( count( $this->batch ) >= 100 ) {
+                       $this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
+                       $this->batch = array();
+               }
+       }
+}
+
+/**
+ * LCStore implementation which stores data as a collection of CDB files in the
+ * directory given by $wgCacheDirectory. If $wgCacheDirectory is not set, this
+ * will throw an exception.
+ *
+ * Profiling indicates that on Linux, this implementation outperforms MySQL if
+ * the directory is on a local filesystem and there is ample kernel cache
+ * space. The performance advantage is greater when the DBA extension is
+ * available than it is with the PHP port.
+ *
+ * See Cdb.php and http://cr.yp.to/cdb.html
+ */
+class LCStore_CDB implements LCStore {
+       var $readers, $writer, $currentLang, $directory;
+
+       function __construct( $conf = array() ) {
+               global $wgCacheDirectory;
+
+               if ( isset( $conf['directory'] ) ) {
+                       $this->directory = $conf['directory'];
+               } else {
+                       $this->directory = $wgCacheDirectory;
+               }
+       }
+
+       public function get( $code, $key ) {
+               if ( !isset( $this->readers[$code] ) ) {
+                       $fileName = $this->getFileName( $code );
+
+                       if ( !file_exists( $fileName ) ) {
+                               $this->readers[$code] = false;
+                       } else {
+                               $this->readers[$code] = CdbReader::open( $fileName );
+                       }
+               }
+
+               if ( !$this->readers[$code] ) {
+                       return null;
+               } else {
+                       $value = $this->readers[$code]->get( $key );
+
+                       if ( $value === false ) {
+                               return null;
+                       }
+                       return unserialize( $value );
+               }
+       }
+
+       public function startWrite( $code ) {
+               if ( !file_exists( $this->directory ) ) {
+                       if ( !wfMkdirParents( $this->directory, null, __METHOD__ ) ) {
+                               throw new MWException( "Unable to create the localisation store " .
+                                       "directory \"{$this->directory}\"" );
+                       }
+               }
+
+               // Close reader to stop permission errors on write
+               if ( !empty( $this->readers[$code] ) ) {
+                       $this->readers[$code]->close();
+               }
+
+               $this->writer = CdbWriter::open( $this->getFileName( $code ) );
+               $this->currentLang = $code;
+       }
+
+       public function finishWrite() {
+               // Close the writer
+               $this->writer->close();
+               $this->writer = null;
+               unset( $this->readers[$this->currentLang] );
+               $this->currentLang = null;
+       }
+
+       public function set( $key, $value ) {
+               if ( is_null( $this->writer ) ) {
+                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
+               }
+               $this->writer->set( $key, serialize( $value ) );
+       }
+
+       protected function getFileName( $code ) {
+               if ( strval( $code ) === '' || strpos( $code, '/' ) !== false ) {
+                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
+               }
+               return "{$this->directory}/l10n_cache-$code.cdb";
+       }
+}
+
+/**
+ * Null store backend, used to avoid DB errors during install
+ */
+class LCStore_Null implements LCStore {
+       public function get( $code, $key ) {
+               return null;
+       }
+
+       public function startWrite( $code ) {}
+       public function finishWrite() {}
+       public function set( $key, $value ) {}
+}
+
+/**
+ * A localisation cache optimised for loading large amounts of data for many
+ * languages. Used by rebuildLocalisationCache.php.
+ */
+class LocalisationCache_BulkLoad extends LocalisationCache {
+       /**
+        * A cache of the contents of data files.
+        * Core files are serialized to avoid using ~1GB of RAM during a recache.
+        */
+       var $fileCache = array();
+
+       /**
+        * Most recently used languages. Uses the linked-list aspect of PHP hashtables
+        * to keep the most recently used language codes at the end of the array, and
+        * the language codes that are ready to be deleted at the beginning.
+        */
+       var $mruLangs = array();
+
+       /**
+        * Maximum number of languages that may be loaded into $this->data
+        */
+       var $maxLoadedLangs = 10;
+
+       /**
+        * @param $fileName
+        * @param $fileType
+        * @return array|mixed
+        */
+       protected function readPHPFile( $fileName, $fileType ) {
+               $serialize = $fileType === 'core';
+               if ( !isset( $this->fileCache[$fileName][$fileType] ) ) {
+                       $data = parent::readPHPFile( $fileName, $fileType );
+
+                       if ( $serialize ) {
+                               $encData = serialize( $data );
+                       } else {
+                               $encData = $data;
+                       }
+
+                       $this->fileCache[$fileName][$fileType] = $encData;
+
+                       return $data;
+               } elseif ( $serialize ) {
+                       return unserialize( $this->fileCache[$fileName][$fileType] );
+               } else {
+                       return $this->fileCache[$fileName][$fileType];
+               }
+       }
+
+       /**
+        * @param $code
+        * @param $key
+        * @return mixed
+        */
+       public function getItem( $code, $key ) {
+               unset( $this->mruLangs[$code] );
+               $this->mruLangs[$code] = true;
+               return parent::getItem( $code, $key );
+       }
+
+       /**
+        * @param $code
+        * @param $key
+        * @param $subkey
+        * @return
+        */
+       public function getSubitem( $code, $key, $subkey ) {
+               unset( $this->mruLangs[$code] );
+               $this->mruLangs[$code] = true;
+               return parent::getSubitem( $code, $key, $subkey );
+       }
+
+       /**
+        * @param $code
+        */
+       public function recache( $code ) {
+               parent::recache( $code );
+               unset( $this->mruLangs[$code] );
+               $this->mruLangs[$code] = true;
+               $this->trimCache();
+       }
+
+       /**
+        * @param $code
+        */
+       public function unload( $code ) {
+               unset( $this->mruLangs[$code] );
+               parent::unload( $code );
+       }
+
+       /**
+        * Unload cached languages until there are less than $this->maxLoadedLangs
+        */
+       protected function trimCache() {
+               while ( count( $this->data ) > $this->maxLoadedLangs && count( $this->mruLangs ) ) {
+                       reset( $this->mruLangs );
+                       $code = key( $this->mruLangs );
+                       wfDebug( __METHOD__ . ": unloading $code\n" );
+                       $this->unload( $code );
+               }
+       }
+
+}
index 9bf7436..e2cf1b4 100644 (file)
@@ -257,12 +257,15 @@ class MessageCache {
         * or false if populating empty cache fails. Also returns true if MessageCache
         * is disabled.
         *
-        * @param $code String: language to which load messages
+        * @param bool|String $code String: language to which load messages
+        * @throws MWException
         * @return bool
         */
        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
@@ -325,34 +328,43 @@ 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 ) {
-                       # Bad luck... this should not happen
-                       $where[] = 'loading FAILED - cache is disabled';
-                       $info = implode( ', ', $where );
-                       wfDebug( __METHOD__ . ": Loading $code... $info\n" );
                        $this->mDisable = true;
                        $this->mCache = false;
+                       // This used to go on, but that led to lots of nasty side
+                       // effects like gadgets and sidebar getting cached with their
+                       // default content
+                       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 );
index f215ebd..76c76f3 100644 (file)
@@ -28,6 +28,8 @@
 class ProcessCacheLRU {
        /** @var Array */
        protected $cache = array(); // (key => prop => value)
+       /** @var Array */
+       protected $cacheTimes = array(); // (key => prop => UNIX timestamp)
 
        protected $maxCacheKeys; // integer; max entries
 
@@ -44,7 +46,7 @@ class ProcessCacheLRU {
 
        /**
         * Set a property field for a cache entry.
-        * This will prune the cache if it gets too large.
+        * This will prune the cache if it gets too large based on LRU.
         * If the item is already set, it will be pushed to the top of the cache.
         *
         * @param $key string
@@ -57,9 +59,12 @@ class ProcessCacheLRU {
                        $this->ping( $key ); // push to top
                } elseif ( count( $this->cache ) >= $this->maxCacheKeys ) {
                        reset( $this->cache );
-                       unset( $this->cache[key( $this->cache )] );
+                       $evictKey = key( $this->cache );
+                       unset( $this->cache[$evictKey] );
+                       unset( $this->cacheTimes[$evictKey] );
                }
                $this->cache[$key][$prop] = $value;
+               $this->cacheTimes[$key][$prop] = time();
        }
 
        /**
@@ -67,10 +72,14 @@ class ProcessCacheLRU {
         *
         * @param $key string
         * @param $prop string
+        * @param $maxAge integer Ignore items older than this many seconds (since 1.21)
         * @return bool
         */
-       public function has( $key, $prop ) {
-               return isset( $this->cache[$key][$prop] );
+       public function has( $key, $prop, $maxAge = 0 ) {
+               if ( isset( $this->cache[$key][$prop] ) ) {
+                       return ( $maxAge <= 0 || ( time() - $this->cacheTimes[$key][$prop] ) <= $maxAge );
+               }
+               return false;
        }
 
        /**
@@ -100,9 +109,11 @@ class ProcessCacheLRU {
        public function clear( $keys = null ) {
                if ( $keys === null ) {
                        $this->cache = array();
+                       $this->cacheTimes = array();
                } else {
                        foreach ( (array)$keys as $key ) {
                                unset( $this->cache[$key] );
+                               unset( $this->cacheTimes[$key] );
                        }
                }
        }
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 0a8bb9e..cab65a5 100644 (file)
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Base implementation for content objects.
+ *
+ * @ingroup Content
+ */
 abstract class AbstractContent implements Content {
 
        /**
@@ -411,4 +417,30 @@ abstract class AbstractContent implements Content {
        public function matchMagicWord( MagicWord $word ) {
                return false;
        }
+
+       /**
+        * @see Content::convert()
+        *
+        * This base implementation calls the hook ConvertContent to enable custom conversions.
+        * Subclasses may override this to implement conversion for "their" content model.
+        *
+        * @param String  $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param String  $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+        * not allowed, full round-trip conversion is expected to work without losing information.
+        *
+        * @return Content|bool A content object with the content model $toModel, or false if
+        * that conversion is not supported.
+        */
+       public function convert( $toModel, $lossy = '' ) {
+               if ( $this->getModel() === $toModel ) {
+                       //nothing to do, shorten out.
+                       return $this;
+               }
+
+               $lossy = ( $lossy === 'lossy' ); // string flag, convert to boolean for convenience
+               $result = false;
+
+               wfRunHooks( 'ConvertContent', array( $this, $toModel, $lossy, &$result ) );
+               return $result;
+       }
 }
index 3c77694..75ac5f2 100644 (file)
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Base interface for content objects.
+ *
+ * @ingroup Content
+ */
 interface Content {
 
        /**
@@ -42,7 +48,7 @@ interface Content {
        /**
         * @since 1.21
         *
-        * @return string The wikitext to include when another page includes this
+        * @return string|false The wikitext to include when another page includes this
         * content, or false if the content is not includable in a wikitext page.
         *
         * @todo allow native handling, bypassing wikitext representation, like
@@ -481,7 +487,20 @@ interface Content {
         */
        public function matchMagicWord( MagicWord $word );
 
-       // TODO: ImagePage and CategoryPage interfere with per-content action handlers
+       /**
+        * Converts this content object into another content object with the given content model,
+        * if that is possible.
+        *
+        * @param String  $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param String  $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+        * not allowed, full round-trip conversion is expected to work without losing information.
+        *
+        * @return Content|bool A content object with the content model $toModel, or false if
+        * that conversion is not supported.
+        */
+       public function convert( $toModel, $lossy = '' );
+
+               // TODO: ImagePage and CategoryPage interfere with per-content action handlers
        // TODO: nice&sane integration of GeSHi syntax highlighting
        //   [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
        //   config to set the class which handles syntax highlighting
index ee2f2ed..ccc9b2c 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 {
 
@@ -131,6 +138,7 @@ abstract class ContentHandler {
         * @param $format null|string the format to use for deserialization. If not
         *    given, the model's default format is used.
         *
+        * @throws MWException
         * @return Content a Content object representing $text
         *
         * @throw MWException if $model or $format is not supported or if $text can
@@ -185,8 +193,6 @@ abstract class ContentHandler {
         * @return null|string default model name for the page given by $title
         */
        public static function getDefaultModelFor( Title $title ) {
-               global $wgNamespaceContentModels;
-
                // NOTE: this method must not rely on $title->getContentModel() directly or indirectly,
                //       because it is used to initialize the mContentModel member.
 
@@ -194,11 +200,7 @@ abstract class ContentHandler {
 
                $ext = false;
                $m = null;
-               $model = null;
-
-               if ( !empty( $wgNamespaceContentModels[ $ns ] ) ) {
-                       $model = $wgNamespaceContentModels[ $ns ];
-               }
+               $model = MWNamespace::getNamespaceContentModel( $ns );
 
                // Hook can determine default model
                if ( !wfRunHooks( 'ContentHandlerDefaultModelFor', array( $title, &$model ) ) ) {
@@ -441,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.
@@ -582,8 +587,6 @@ abstract class ContentHandler {
                $rcid = 0, # FIXME: use everywhere!
                $refreshCache = false, $unhide = false
        ) {
-               $this->checkModelID( $context->getTitle()->getContentModel() );
-
                $diffEngineClass = $this->getDiffEngineClass();
 
                return new $diffEngineClass( $context, $old, $new, $rcid, $refreshCache, $unhide );
@@ -714,8 +717,6 @@ abstract class ContentHandler {
         * @return string An appropriate auto-summary, or an empty string.
         */
        public function getAutosummary( Content $oldContent = null, Content $newContent = null, $flags ) {
-               global $wgContLang;
-
                // Decide what kind of auto-summary is needed.
 
                // Redirect auto-summaries
@@ -787,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 ) {
@@ -968,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.
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 e2199c4..cb5a349 100644 (file)
@@ -1,7 +1,31 @@
 <?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
+ * (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 Content
+ */
 
 /**
+ * Content handler for CSS pages.
+ *
  * @since 1.21
+ * @ingroup Content
  */
 class CssContentHandler extends TextContentHandler {
 
@@ -40,4 +64,4 @@ class CssContentHandler extends TextContentHandler {
        public function getPageViewLanguage( Title $title, Content $content = null ) {
                return wfGetLangObj( 'en' );
        }
-}
\ No newline at end of file
+}
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 8b080bf..33fa917 100644 (file)
@@ -1,9 +1,31 @@
 <?php
-
-# XXX: make ScriptContentHandler base class, do highlighting stuff there?
+/**
+ * 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
+ * (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
+ */
 
 /**
+ * Content handler for JavaScript pages.
+ *
  * @since 1.21
+ * @ingroup Content
+ * @todo make ScriptContentHandler base class, do highlighting stuff there?
  */
 class JavaScriptContentHandler extends TextContentHandler {
 
@@ -33,7 +55,7 @@ class JavaScriptContentHandler extends TextContentHandler {
        }
 
        /**
-        * Returns the english language, because CSS is english, and should be handled as such.
+        * Returns the english language, because JS is english, and should be handled as such.
         *
         * @return Language wfGetLangObj( 'en' )
         *
@@ -42,4 +64,4 @@ class JavaScriptContentHandler extends TextContentHandler {
        public function getPageViewLanguage( Title $title, Content $content = null ) {
                return wfGetLangObj( 'en' );
        }
-}
\ No newline at end of file
+}
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 0e22fce..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 ) {
@@ -115,12 +120,21 @@ class TextContent extends AbstractContent {
        }
 
        /**
-        * Returns the text represented by this Content object, as a string.
+        * Returns attempts to convert this content object to wikitext,
+        * and then returns the text string. The conversion may be lossy.
         *
-        * @return string: the raw text
+        * @note: this allows any text-based content to be transcluded as if it was wikitext.
+        *
+        * @return string|false: the raw text, or null if the conversion failed
         */
        public function getWikitextForTransclusion( ) {
-               return $this->getNativeData();
+               $wikitext = $this->convert( CONTENT_MODEL_WIKITEXT, 'lossy' );
+
+               if ( $wikitext ) {
+                       return $wikitext->getNativeData();
+               } else {
+                       return false;
+               }
        }
 
        /**
@@ -237,4 +251,35 @@ class TextContent extends AbstractContent {
                # TODO: make Highlighter interface, use highlighter here, if available
                return htmlspecialchars( $this->getNativeData() );
        }
+
+       /**
+        * @see Content::convert()
+        *
+        * This implementation provides lossless conversion between content models based
+        * on TextContent.
+        *
+        * @param String  $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param String  $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+        * not allowed, full round-trip conversion is expected to work without losing information.
+        *
+        * @return Content|bool A content object with the content model $toModel, or false if
+        * that conversion is not supported.
+        */
+       public function convert( $toModel, $lossy = '' ) {
+               $converted = parent::convert( $toModel, $lossy );
+
+               if ( $converted !== false ) {
+                       return $converted;
+               }
+
+               $toHandler = ContentHandler::getForModelID( $toModel );
+
+               if ( $toHandler instanceof TextContentHandler ) {
+                       //NOTE: ignore content serialization format - it's just text anyway.
+                       $text = $this->getNativeData();
+                       $converted = $toHandler->unserializeContent( $text );
+               }
+
+               return $converted;
+       }
 }
index 9c2ae35..e7f41e1 100644 (file)
@@ -1,7 +1,32 @@
 <?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
+ * (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
+ */
+
+/**
+ * Base content handler implementation for flat text contents.
+ *
+ * @ingroup Content
  */
 class TextContentHandler extends ContentHandler {
 
index c11018b..8d778f5 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 ) {
@@ -63,6 +71,7 @@ class WikitextContent extends TextContent {
                $text = $with->getNativeData();
 
                if ( $section === '' ) {
+                       wfProfileOut( __METHOD__ );
                        return $with; # XXX: copy first?
                } if ( $section == 'new' ) {
                        # Inserting a new section
index c6ac2ba..f78ccbb 100644 (file)
@@ -1,7 +1,32 @@
 <?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
+ * (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
+ */
+
+/**
+ * Content handler for wiki text pages.
+ *
+ * @ingroup Content
  */
 class WikitextContentHandler extends TextContentHandler {
 
@@ -36,11 +61,22 @@ class WikitextContentHandler extends TextContentHandler {
         */
        public function makeRedirectContent( Title $destination ) {
                $mwRedir = MagicWord::get( 'redirect' );
-               $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $destination->getPrefixedText() . "]]\n";
+               $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $destination->getPrefixedText() . ']]';
 
                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.
         *
@@ -60,4 +96,4 @@ class WikitextContentHandler extends TextContentHandler {
        public function isParserCacheSupported() {
                return true;
        }
-}
\ No newline at end of file
+}
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 cd2bf55..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,10 +88,12 @@ class RequestContext implements IContextSource {
        /**
         * Set the Title object
         *
-        * @param $t Title object
+        * @param Title $t
         */
        public function setTitle( Title $t ) {
                $this->title = $t;
+               // Erase the WikiPage so a new one with the new title gets created.
+               $this->wikipage = null;
        }
 
        /**
@@ -135,9 +136,15 @@ 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();
+               $pageTitle = $p->getTitle();
+               if ( !$contextTitle || !$pageTitle->equals( $contextTitle ) ) {
+                       $this->setTitle( $pageTitle );
+               }
+               // Defer this to the end since setTitle sets it to null.
                $this->wikipage = $p;
        }
 
@@ -172,7 +179,7 @@ class RequestContext implements IContextSource {
        /**
         * Get the OutputPage object
         *
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput() {
                if ( $this->output === null ) {
@@ -184,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;
@@ -205,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 ) {
@@ -215,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;
                }
@@ -227,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' );
@@ -237,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
         */
@@ -263,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;
@@ -314,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 );
                        }
 
@@ -322,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 );
@@ -348,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();
@@ -360,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;
@@ -380,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 ) {
@@ -395,5 +413,4 @@ class RequestContext implements IContextSource {
                $context->user = User::newFromName( '127.0.0.1', false );
                return $context;
        }
-
 }
diff --git a/includes/dao/DBAccessBase.php b/includes/dao/DBAccessBase.php
new file mode 100644 (file)
index 0000000..20cf5b4
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * Base class for objects that allow access to other wiki's databases using
+ * the foreign database access mechanism implemented by LBFactory_multi.
+ *
+ * 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 Database
+ *
+ * @licence GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+abstract class DBAccessBase implements IDBAccessObject {
+
+       /**
+        * @var String|bool $wiki The target wiki's name. This must be an ID
+        * that LBFactory can understand.
+        */
+       protected $wiki = false;
+
+       /**
+        * @param String|bool $wiki The target wiki's name. This must be an ID
+        * that LBFactory can understand.
+        */
+       public function __construct( $wiki = false ) {
+               $this->wiki = $wiki;
+       }
+
+       /**
+        * Returns a database connection.
+        *
+        * @see wfGetDB()
+        * @see LoadBalancer::getConnection()
+        *
+        * @since 1.21
+        *
+        * @param int $id Which connection to use
+        * @param array $groups Query groups
+        *
+        * @return DatabaseBase
+        */
+       protected function getConnection( $id, $groups = array() ) {
+               $loadBalancer = wfGetLB( $this->wiki );
+               return $loadBalancer->getConnection( $id, $groups, $this->wiki );
+       }
+
+       /**
+        * Releases a database connection and makes it available for recycling.
+        *
+        * @see LoadBalancer::reuseConnection()
+        *
+        * @since 1.21
+        *
+        * @param DatabaseBase  $db the database connection to release.
+        */
+       protected function releaseConnection( DatabaseBase $db ) {
+               if ( $this->wiki !== false ) {
+                       $loadBalancer = $this->getLoadBalancer();
+                       $loadBalancer->reuseConnection( $db );
+               }
+       }
+
+       /**
+        * Get the database type used for read operations.
+        *
+        * @see wfGetLB
+        *
+        * @since 1.21
+        *
+        * @return LoadBalancer The database load balancer object
+        */
+       public function getLoadBalancer() {
+               return wfGetLB( $this->wiki );
+       }
+}
index 264533c..62a3d87 100644 (file)
@@ -230,9 +230,9 @@ abstract class DatabaseBase implements DatabaseType {
 
        /**
         * @since 1.20
-        * @var array of callable
+        * @var array of Closure
         */
-       protected $trxIdleCallbacks = array();
+       protected $mTrxIdleCallbacks = array();
 
        protected $mTablePrefix;
        protected $mFlags;
@@ -274,6 +274,13 @@ abstract class DatabaseBase implements DatabaseType {
         */
        private $mTrxAutomatic = false;
 
+       /**
+        * @since 1.21
+        * @var file handle for upgrade
+        */
+       protected $fileHandle = null;
+
+
 # ------------------------------------------------------------------------------
 # Accessors
 # ------------------------------------------------------------------------------
@@ -386,6 +393,15 @@ abstract class DatabaseBase implements DatabaseType {
                return wfSetVar( $this->mTablePrefix, $prefix );
        }
 
+       /**
+        * Set the filehandle to copy write statements to.
+        *
+        * @param $fh filehandle
+        */
+       public function setFileHandle( $fh ) {
+               $this->fileHandle = $fh;
+       }
+
        /**
         * Get properties passed down from the server info array of the load
         * balancer.
@@ -534,6 +550,16 @@ abstract class DatabaseBase implements DatabaseType {
                return $this->mDoneWrites;
        }
 
+       /**
+        * Returns true if there is a transaction open with possible write
+        * queries or transaction idle callbacks waiting on it to finish.
+        *
+        * @return bool
+        */
+       public function writesOrCallbacksPending() {
+               return $this->mTrxLevel && ( $this->mTrxDoneWrites || $this->mTrxIdleCallbacks );
+       }
+
        /**
         * Is a connection to the database open?
         * @return Boolean
@@ -754,9 +780,13 @@ abstract class DatabaseBase implements DatabaseType {
         * Closes a database connection.
         * if it is open : commits any open transactions
         *
+        * @throws MWException
         * @return Bool operation success. true if already closed.
         */
        public function close() {
+               if ( count( $this->mTrxIdleCallbacks ) ) { // sanity
+                       throw new MWException( "Transaction idle callbacks still pending." );
+               }
                $this->mOpened = false;
                if ( $this->mConn ) {
                        if ( $this->trxLevel() ) {
@@ -875,7 +905,10 @@ abstract class DatabaseBase implements DatabaseType {
                } else {
                        $userName = '';
                }
-               $commentedSql = preg_replace( '/\s/', " /* $fname $userName */ ", $sql, 1 );
+
+               // Add trace comment to the begin of the sql string, right after the operator.
+               // Or, for one-word queries (like "BEGIN" or COMMIT") add it to the end (bug 42598)
+               $commentedSql = preg_replace( '/\s|$/', " /* $fname $userName */ ", $sql, 1 );
 
                # If DBO_TRX is set, start a transaction
                if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
@@ -926,7 +959,7 @@ abstract class DatabaseBase implements DatabaseType {
                if ( false === $ret && $this->wasErrorReissuable() ) {
                        # Transaction is gone, like it or not
                        $this->mTrxLevel = 0;
-                       $this->trxIdleCallbacks = array(); // cancel
+                       $this->mTrxIdleCallbacks = array(); // cancel
                        wfDebug( "Connection lost, reconnecting...\n" );
 
                        if ( $this->ping() ) {
@@ -1565,6 +1598,10 @@ abstract class DatabaseBase implements DatabaseType {
         * @return bool|null
         */
        public function indexExists( $table, $index, $fname = 'DatabaseBase::indexExists' ) {
+               if( !$this->tableExists( $table ) ) {
+                       return null;
+               }
+
                $info = $this->indexInfo( $table, $index, $fname );
                if ( is_null( $info ) ) {
                        return null;
@@ -1677,6 +1714,10 @@ abstract class DatabaseBase implements DatabaseType {
                        $options = array( $options );
                }
 
+               $fh = null;
+               if ( isset( $options['fileHandle'] ) ) {
+                       $fh = $options['fileHandle'];
+               }
                $options = $this->makeInsertOptions( $options );
 
                if ( isset( $a[0] ) && is_array( $a[0] ) ) {
@@ -1704,6 +1745,12 @@ abstract class DatabaseBase implements DatabaseType {
                        $sql .= '(' . $this->makeList( $a ) . ')';
                }
 
+               if ( $fh !== null && false === fwrite( $fh, $sql ) ) {
+                       return false;
+               } elseif ( $fh !== null ) {
+                       return true;
+               }
+
                return (bool)$this->query( $sql, $fname );
        }
 
@@ -2538,7 +2585,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 ) {
@@ -2891,7 +2938,7 @@ abstract class DatabaseBase implements DatabaseType {
         */
        final public function onTransactionIdle( Closure $callback ) {
                if ( $this->mTrxLevel ) {
-                       $this->trxIdleCallbacks[] = $callback;
+                       $this->mTrxIdleCallbacks[] = $callback;
                } else {
                        $callback();
                }
@@ -2903,16 +2950,20 @@ abstract class DatabaseBase implements DatabaseType {
         * @since 1.20
         */
        protected function runOnTransactionIdleCallbacks() {
+               $autoTrx = $this->getFlag( DBO_TRX ); // automatic begin() enabled?
+
                $e = null; // last exception
                do { // callbacks may add callbacks :)
-                       $callbacks = $this->trxIdleCallbacks;
-                       $this->trxIdleCallbacks = array(); // recursion guard
+                       $callbacks = $this->mTrxIdleCallbacks;
+                       $this->mTrxIdleCallbacks = array(); // recursion guard
                        foreach ( $callbacks as $callback ) {
                                try {
+                                       $this->clearFlag( DBO_TRX ); // make each query its own transaction
                                        $callback();
+                                       $this->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
                                } catch ( Exception $e ) {}
                        }
-               } while ( count( $this->trxIdleCallbacks ) );
+               } while ( count( $this->mTrxIdleCallbacks ) );
 
                if ( $e instanceof Exception ) {
                        throw $e; // re-throw any last exception
@@ -3029,7 +3080,7 @@ abstract class DatabaseBase implements DatabaseType {
                        wfWarn( "$fname: No transaction to rollback, something got out of sync!" );
                }
                $this->doRollback( $fname );
-               $this->trxIdleCallbacks = array(); // cancel
+               $this->mTrxIdleCallbacks = array(); // cancel
        }
 
        /**
@@ -3220,11 +3271,13 @@ abstract class DatabaseBase implements DatabaseType {
         * @param bool|callable $resultCallback Optional function called for each MySQL result
         * @param bool|string $fname Calling function name or false if name should be
         *      generated dynamically using $filename
+        * @param bool|callable $inputCallback Callback: Optional function called for each complete line sent
         * @throws MWException
+        * @throws Exception|MWException
         * @return bool|string
         */
        public function sourceFile(
-               $filename, $lineCallback = false, $resultCallback = false, $fname = false
+               $filename, $lineCallback = false, $resultCallback = false, $fname = false, $inputCallback = false
        ) {
                wfSuppressWarnings();
                $fp = fopen( $filename, 'r' );
@@ -3239,7 +3292,7 @@ abstract class DatabaseBase implements DatabaseType {
                }
 
                try {
-                       $error = $this->sourceStream( $fp, $lineCallback, $resultCallback, $fname );
+                       $error = $this->sourceStream( $fp, $lineCallback, $resultCallback, $fname, $inputCallback );
                }
                catch ( MWException $e ) {
                        fclose( $fp );
@@ -3288,10 +3341,10 @@ abstract class DatabaseBase implements DatabaseType {
         * on object's error ignore settings).
         *
         * @param $fp Resource: File handle
-        * @param $lineCallback Callback: Optional function called before reading each line
+        * @param $lineCallback Callback: Optional function called before reading each query
         * @param $resultCallback Callback: Optional function called for each MySQL result
         * @param $fname String: Calling function name
-        * @param $inputCallback Callback: Optional function called for each complete line (ended with ;) sent
+        * @param $inputCallback Callback: Optional function called for each complete query sent
         * @return bool|string
         */
        public function sourceStream( $fp, $lineCallback = false, $resultCallback = false,
@@ -3324,20 +3377,19 @@ abstract class DatabaseBase implements DatabaseType {
 
                        if ( $done || feof( $fp ) ) {
                                $cmd = $this->replaceVars( $cmd );
-                               if ( $inputCallback ) {
-                                       call_user_func( $inputCallback, $cmd );
-                               }
-                               $res = $this->query( $cmd, $fname );
 
-                               if ( $resultCallback ) {
-                                       call_user_func( $resultCallback, $res, $this );
-                               }
+                               if ( ( $inputCallback && call_user_func( $inputCallback, $cmd ) ) || !$inputCallback ) {
+                                       $res = $this->query( $cmd, $fname );
 
-                               if ( false === $res ) {
-                                       $err = $this->lastError();
-                                       return "Query \"{$cmd}\" failed with error code \"$err\".\n";
-                               }
+                                       if ( $resultCallback ) {
+                                               call_user_func( $resultCallback, $res, $this );
+                                       }
 
+                                       if ( false === $res ) {
+                                               $err = $this->lastError();
+                                               return "Query \"{$cmd}\" failed with error code \"$err\".\n";
+                                       }
+                               }
                                $cmd = '';
                        }
                }
@@ -3611,4 +3663,10 @@ abstract class DatabaseBase implements DatabaseType {
        public function __toString() {
                return (string)$this->mConn;
        }
+
+       public function __destruct() {
+               if ( count( $this->mTrxIdleCallbacks ) ) { // sanity
+                       trigger_error( "Transaction idle callbacks still pending." );
+               }
+       }
 }
index b509302..04c22f1 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" );
                        }
                }
 
@@ -414,6 +414,7 @@ class DatabaseMysql extends DatabaseBase {
                # http://dev.mysql.com/doc/mysql/en/SHOW_INDEX.html
                $table = $this->tableName( $table );
                $index = $this->indexName( $index );
+
                $sql = 'SHOW INDEX FROM ' . $table;
                $res = $this->query( $sql, $fname );
 
@@ -428,7 +429,6 @@ class DatabaseMysql extends DatabaseBase {
                                $result[] = $row;
                        }
                }
-
                return empty( $result ) ? false : $result;
        }
 
@@ -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;
        }
 
        /**
index aa4da0f..7e3c0ca 100644 (file)
@@ -318,7 +318,7 @@ class DatabaseOracle extends DatabaseBase {
 
        protected function doQuery( $sql ) {
                wfDebug( "SQL: [$sql]\n" );
-               if ( !mb_check_encoding( $sql ) ) {
+               if ( !StringUtils::isUtf8( $sql ) ) {
                        throw new MWException( "SQL encoding is invalid\n$sql" );
                }
 
@@ -1116,7 +1116,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( $col_type == 'CLOB' ) {
                        $col = 'TO_CHAR(' . $col . ')';
                        $val = $wgContLang->checkTitleEncoding( $val );
-               } elseif ( $col_type == 'VARCHAR2' && !mb_check_encoding( $val ) ) {
+               } elseif ( $col_type == 'VARCHAR2' ) {
                        $val = $wgContLang->checkTitleEncoding( $val );
                }
        }
@@ -1167,14 +1167,30 @@ class DatabaseOracle extends DatabaseBase {
                }
 
                if ( isset( $options['GROUP BY'] ) ) {
-                       $preLimitTail .= " GROUP BY {$options['GROUP BY']}";
+                       $gb = is_array( $options['GROUP BY'] )
+                               ? implode( ',', $options['GROUP BY'] )
+                               : $options['GROUP BY'];
+                       $preLimitTail .= " GROUP BY {$gb}";
                }
+
+               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'] ) ) {
-                       $preLimitTail .= " ORDER BY {$options['ORDER BY']}";
+                       $ob = is_array( $options['ORDER BY'] )
+                               ? implode( ',', $options['ORDER BY'] )
+                               : $options['ORDER BY'];
+                       $preLimitTail .= " ORDER BY {$ob}";
+               }
+
+               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';
                }
@@ -1187,7 +1203,7 @@ class DatabaseOracle extends DatabaseBase {
 
                return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail );
        }
-
+       
        public function delete( $table, $conds, $fname = 'DatabaseOracle::delete' ) {
                if ( is_array($conds) ) {
                        $conds = $this->wrapConditionsForWhere( $table, $conds );
index be4036e..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 );
@@ -229,6 +233,15 @@ interface IORMTable {
         */
        public function has( array $conditions = array() );
 
+       /**
+        * Checks if the table exists
+        *
+        * @since 1.21
+        *
+        * @return boolean
+        */
+       public function exists();
+
        /**
         * Returns the amount of matching records.
         * Condition field names get prefixed.
@@ -446,15 +459,6 @@ interface IORMTable {
         */
        public function unprefixFieldName( $fieldName );
 
-       /**
-        * Get an instance of this class.
-        *
-        * @since 1.20
-        *
-        * @return IORMTable
-        */
-       public static function singleton();
-
        /**
         * Get an array with fields from a database result,
         * that can be fed directly to the constructor or
index 46d24fc..2858cd9 100644 (file)
@@ -501,8 +501,7 @@ class LoadBalancer {
                        if ( $i === false ) {
                                $this->mLastError = 'No working slave server: ' . $this->mLastError;
                                wfProfileOut( __METHOD__ );
-                               $this->reportConnectionError( $this->mErrorConnection );
-                               return false;
+                               return $this->reportConnectionError( $this->mErrorConnection );
                        }
                }
 
@@ -510,7 +509,7 @@ class LoadBalancer {
                $conn = $this->openConnection( $i, $wiki );
                if ( !$conn ) {
                        wfProfileOut( __METHOD__ );
-                       $this->reportConnectionError( $this->mErrorConnection );
+                       return $this->reportConnectionError( $this->mErrorConnection );
                }
 
                wfProfileOut( __METHOD__ );
@@ -580,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] ) ) {
@@ -745,8 +744,9 @@ class LoadBalancer {
                } else {
                        $server = $conn->getProperty( 'mServer' );
                        wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
-                       $conn->reportConnectionError( "{$this->mLastError} ({$server})" );
+                       $conn->reportConnectionError( "{$this->mLastError} ({$server})" ); // throws DBConnectionError
                }
+               return false; /* not reached */
        }
 
        /**
@@ -926,7 +926,7 @@ class LoadBalancer {
                                continue;
                        }
                        foreach ( $conns2[$masterIndex] as $conn ) {
-                               if ( $conn->trxLevel() && $conn->doneWrites() ) {
+                               if ( $conn->trxLevel() && $conn->writesOrCallbacksPending() ) {
                                        $conn->commit( __METHOD__, 'flush' );
                                }
                        }
@@ -954,10 +954,11 @@ class LoadBalancer {
         * @return bool
         */
        function allowLagged( $mode = null ) {
-               if ( $mode === null) {
+               if ( $mode === null ) {
                        return $this->mAllowLagged;
                }
                $this->mAllowLagged = $mode;
+               return $this->mAllowLagged;
        }
 
        /**
index 1753afe..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.
@@ -120,7 +120,8 @@ abstract class ORMRow implements IORMRow {
                        $result = $this->table->rawSelectRow(
                                $this->table->getPrefixedFields( $fields ),
                                array( $this->table->getPrefixedField( 'id' ) => $this->getId() ),
-                               array( 'LIMIT' => 1 )
+                               array( 'LIMIT' => 1 ),
+                               __METHOD__
                        );
 
                        if ( $result !== false ) {
@@ -263,8 +264,10 @@ abstract class ORMRow implements IORMRow {
                                switch ( $type ) {
                                        case 'array':
                                                $value = (array)$value;
+                                               // fall-through!
                                        case 'blob':
                                                $value = serialize( $value );
+                                               // fall-through!
                                }
 
                                $values[$this->table->getPrefixedField( $name )] = $value;
@@ -356,6 +359,8 @@ abstract class ORMRow implements IORMRow {
                        is_null( $functionName ) ? __METHOD__ : $functionName
                );
 
+               $this->table->releaseConnection( $dbw );
+
                // DatabaseBase::update does not always return true for success as documented...
                return $success !== false;
        }
@@ -389,7 +394,7 @@ abstract class ORMRow implements IORMRow {
                        $this->table->getName(),
                        $this->getWriteValues(),
                        is_null( $functionName ) ? __METHOD__ : $functionName,
-                       is_null( $options ) ? array( 'IGNORE' ) : $options
+                       $options
                );
 
                // DatabaseBase::insert does not always return true for success as documented...
@@ -399,6 +404,8 @@ abstract class ORMRow implements IORMRow {
                        $this->setField( 'id', $dbw->insertId() );
                }
 
+               $this->table->releaseConnection( $dbw );
+
                return $success;
        }
 
@@ -412,7 +419,7 @@ abstract class ORMRow implements IORMRow {
        public function remove() {
                $this->beforeRemove();
 
-               $success = $this->table->delete( array( 'id' => $this->getId() ) );
+               $success = $this->table->delete( array( 'id' => $this->getId() ), __METHOD__ );
 
                // DatabaseBase::delete does not always return true for success as documented...
                $success = $success !== false;
@@ -447,8 +454,8 @@ abstract class ORMRow implements IORMRow {
        }
 
        /**
-        * Gets called after successfull removal.
-        * Can be overriden to get rid of linked data.
+        * Gets called after successful removal.
+        * Can be overridden to get rid of linked data.
         *
         * @since 1.20
         */
@@ -573,6 +580,8 @@ abstract class ORMRow implements IORMRow {
                        $this->setField( $field, $this->getField( $field ) + $amount );
                }
 
+               $this->table->releaseConnection( $dbw );
+
                return $success;
        }
 
index 0756ce8..8abfdb6 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 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;
 
        /**
-        * The ID of any foreign wiki to use as a target for database operations,
-        * or false to use the local wiki.
+        * 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
-        * @var String|bool
+        *
+        * @return string
         */
-       protected $wiki = false;
+       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.
@@ -73,7 +171,7 @@ abstract class ORMTable implements IORMTable {
         * @return array
         */
        public function getDefaults() {
-               return array();
+               return $this->defaults;
        }
 
        /**
@@ -104,7 +202,8 @@ abstract class ORMTable 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 );
        }
 
        /**
@@ -118,7 +217,8 @@ abstract class ORMTable 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 ) {
@@ -139,11 +239,12 @@ abstract class ORMTable 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 ) {
@@ -163,7 +264,29 @@ abstract class ORMTable 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;
        }
 
@@ -236,7 +359,7 @@ abstract class ORMTable implements IORMTable {
 
                $objects = $this->select( $fields, $conditions, $options, $functionName );
 
-               return $objects->isEmpty() ? false : $objects->current();
+               return ( !$objects || $objects->isEmpty() ) ? false : $objects->current();
        }
 
        /**
@@ -308,6 +431,21 @@ abstract class ORMTable implements IORMTable {
                return $this->selectRow( array( 'id' ), $conditions ) !== false;
        }
 
+       /**
+        * Checks if the table exists
+        *
+        * @since 1.21
+        *
+        * @return boolean
+        */
+       public function exists() {
+               $dbr = $this->getReadDbConnection();
+               $exists = $dbr->tableExists( $this->getName() );
+               $this->releaseConnection( $dbr );
+
+               return $exists;
+       }
+
        /**
         * Returns the amount of matching records.
         * Condition field names get prefixed.
@@ -326,7 +464,8 @@ abstract class ORMTable implements IORMTable {
                $res = $this->rawSelectRow(
                        array( 'rowcount' => 'COUNT(*)' ),
                        $this->getPrefixedValues( $conditions ),
-                       $options
+                       $options,
+                       __METHOD__
                );
 
                return $res->rowcount;
@@ -348,7 +487,7 @@ abstract class ORMTable implements IORMTable {
                $result = $dbw->delete(
                        $this->getName(),
                        $conditions === array() ? '*' : $this->getPrefixedValues( $conditions ),
-                       $functionName
+                       is_null( $functionName ) ? __METHOD__ : $functionName
                ) !== false; // DatabaseBase::delete does not always return true for success as documented...
 
                $this->releaseConnection( $dbw );
@@ -472,7 +611,7 @@ abstract class ORMTable implements IORMTable {
         * @return DatabaseBase The database object
         */
        public function getReadDbConnection() {
-               return $this->getLoadBalancer()->getConnection( $this->getReadDb(), array(), $this->getTargetWiki() );
+               return $this->getConnection( $this->getReadDb(), array() );
        }
 
        /**
@@ -486,20 +625,7 @@ abstract class ORMTable implements IORMTable {
         * @return DatabaseBase The database object
         */
        public function getWriteDbConnection() {
-               return $this->getLoadBalancer()->getConnection( DB_MASTER, array(), $this->getTargetWiki() );
-       }
-
-       /**
-        * Get the database type used for read operations.
-        *
-        * @see wfGetLB
-        *
-        * @since 1.20
-        *
-        * @return LoadBalancer The database load balancer object
-        */
-       public function getLoadBalancer() {
-               return wfGetLB( $this->getTargetWiki() );
+               return $this->getConnection( DB_MASTER, array() );
        }
 
        /**
@@ -513,10 +639,7 @@ abstract class ORMTable implements IORMTable {
         * @since 1.20
         */
        public function releaseConnection( DatabaseBase $db ) {
-               if ( $this->wiki !== false ) {
-                       // recycle connection to foreign wiki
-                       $this->getLoadBalancer()->reuseConnection( $db );
-               }
+               parent::releaseConnection( $db ); // just make it public
        }
 
        /**
@@ -664,6 +787,7 @@ abstract class ORMTable implements IORMTable {
         * Get an instance of this class.
         *
         * @since 1.20
+        * @deprecated since 1.21
         *
         * @return IORMTable
         */
@@ -777,4 +901,4 @@ abstract class ORMTable implements IORMTable {
                return array_key_exists( $name, $this->getFields() );
        }
 
-}
+}
\ No newline at end of file
index 05e2cd2..6a6f930 100644 (file)
@@ -5,6 +5,21 @@
  * Copyright © 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
  * You may copy this code freely under the conditions of the GPL.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup DifferenceEngine
  * @defgroup DifferenceEngine DifferenceEngine
index f3dc5a3..97553e6 100644 (file)
@@ -38,6 +38,9 @@ class DifferenceEngine extends ContextSource {
         * @private
         */
        var $mOldid, $mNewid;
+       /**
+        * @var Content
+        */
        var $mOldContent, $mNewContent;
        protected $mDiffLang;
 
@@ -291,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(
@@ -421,8 +427,8 @@ class DifferenceEngine extends ContextSource {
        /**
         * Get a link to mark the change as patrolled, or '' if there's either no
         * revision to patrol or the user is not allowed to to it.
-        * Side effect: this method will call OutputPage::preventClickjacking()
-        * when a link is builded.
+        * Side effect: When the patrol link is build, this method will call
+        * OutputPage::preventClickjacking() and load mediawiki.page.patrol.ajax.
         *
         * @return String
         */
@@ -463,6 +469,8 @@ class DifferenceEngine extends ContextSource {
                                // Build the link
                                if ( $rcid ) {
                                        $this->getOutput()->preventClickjacking();
+                                       $this->getOutput()->addModules( 'mediawiki.page.patrol.ajax' );
+
                                        $token = $this->getUser()->getEditToken( $rcid );
                                        $this->mMarkPatrolledLink = ' <span class="patrollink">[' . Linker::linkKnown(
                                                $this->mNewPage,
@@ -522,8 +530,10 @@ class DifferenceEngine extends ContextSource {
                                if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
                                        // NOTE: deprecated hook, B/C only
                                        // use the content object's own rendering
-                                       $po = $this->mNewRev->getContent()->getParserOutput( $this->mNewRev->getTitle(), $this->mNewRev->getId() );
-                                       $out->addHTML( $po->getText() );
+                                       $cnt = $this->mNewRev->getContent();
+                                       $po = $cnt ? $cnt->getParserOutput( $this->mNewRev->getTitle(), $this->mNewRev->getId() ) : null;
+                                       $txt = $po ? $po->getText() : '';
+                                       $out->addHTML( $txt );
                                }
                        } elseif( !wfRunHooks( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
                                // Handled by extension
@@ -545,7 +555,7 @@ class DifferenceEngine extends ContextSource {
                                $parserOutput = $this->getParserOutput( $wikiPage, $this->mNewRev );
 
                                # Also try to load it as a redirect
-                               $rt = $this->mNewContent->getRedirectTarget();
+                               $rt = $this->mNewContent ? $this->mNewContent->getRedirectTarget() : null;
 
                                if ( $rt ) {
                                        $article = Article::newFromTitle( $this->mNewPage, $this->getContext() );
@@ -606,8 +616,8 @@ class DifferenceEngine extends ContextSource {
        /**
         * Get complete diff table, including header
         *
-        * @param $otitle Title: old title
-        * @param $ntitle Title: new title
+        * @param string|bool $otitle Header for old text or false
+        * @param string|bool $ntitle Header for new text or false
         * @param $notice String: HTML between diff header and body
         * @return mixed
         */
@@ -1169,13 +1179,13 @@ class DifferenceEngine extends ContextSource {
                }
                if ( $this->mOldRev ) {
                        $this->mOldContent = $this->mOldRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
-                       if ( $this->mOldContent === false ) {
+                       if ( $this->mOldContent === null ) {
                                return false;
                        }
                }
                if ( $this->mNewRev ) {
                        $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
-                       if ( $this->mNewContent === false ) {
+                       if ( $this->mNewContent === null ) {
                                return false;
                        }
                }
diff --git a/includes/externalstore/ExternalStore.php b/includes/externalstore/ExternalStore.php
new file mode 100644 (file)
index 0000000..55c1acf
--- /dev/null
@@ -0,0 +1,174 @@
+<?php
+/**
+ * @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
+ * 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
+ */
+
+/**
+ * Constructor class for 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>". 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)
+ *
+ * @ingroup ExternalStorage
+ */
+class ExternalStore {
+       /**
+        * 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 parameters for the ExternalStore object.
+        * @return ExternalStore|bool ExternalStore class or false on error
+        */
+       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.
+        * @return string|bool The text stored or false on error
+        * @throws MWException
+        */
+       public static function fetchFromURL( $url, array $params = array() ) {
+               $parts = explode( '://', $url, 2 );
+               if ( count( $parts ) != 2 ) {
+                       return false; // invalid URL
+               }
+
+               list( $proto, $path ) = $parts;
+               if ( $path == '' ) { // bad URL
+                       return false;
+               }
+
+               $store = self::getStoreObject( $proto, $params );
+               if ( $store === false ) {
+                       return false;
+               }
+
+               return $store->fetchFromURL( $url );
+       }
+
+       /**
+        * 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
+        * @throws MWException
+        */
+       public static function insert( $url, $data, array $params = array() ) {
+               $parts = explode( '://', $url, 2 );
+               if ( count( $parts ) != 2 ) {
+                       return false; // invalid URL
+               }
+
+               list( $proto, $path ) = $parts;
+               if ( $path == '' ) { // bad URL
+                       return false;
+               }
+
+               $store = self::getStoreObject( $proto, $params );
+               if ( $store === false ) {
+                       return false;
+               } else {
+                       return $store->store( $path, $data );
+               }
+       }
+
+       /**
+        * Like insert() above, but does more of the work for us.
+        * 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 $params Array: associative array of parameters for the ExternalStore object.
+        * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
+        */
+       public static function insertToDefault( $data, array $params = array() ) {
+               global $wgDefaultExternalStore;
+
+               $error = false;
+               $tryStores = (array)$wgDefaultExternalStore;
+               while ( count( $tryStores ) > 0 ) {
+                       $index = mt_rand( 0, count( $tryStores ) - 1 );
+                       $storeUrl = $tryStores[$index];
+                       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( $path, $data ); // Try to save the object
+                       } catch ( MWException $error ) {
+                               $url = false;
+                       }
+                       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" );
+                       }
+               }
+               // All stores failed
+               if ( $error ) {
+                       throw $error; // rethrow the last error
+               } else {
+                       throw new MWException( "Unable to store text to external storage" );
+               }
+       }
+
+       /**
+        * @param $data
+        * @param $wiki
+        * @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 ) );
+       }
+}
diff --git a/includes/externalstore/ExternalStoreDB.php b/includes/externalstore/ExternalStoreDB.php
new file mode 100644 (file)
index 0000000..172e4f6
--- /dev/null
@@ -0,0 +1,189 @@
+<?php
+/**
+ * External storage in SQL database.
+ *
+ * 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
+ */
+
+/**
+ * DB accessable external objects
+ * @ingroup ExternalStorage
+ */
+class ExternalStoreDB {
+
+       /**
+        * @param $params array
+        */
+       function __construct( $params = array() ) {
+               $this->mParams = $params;
+       }
+
+       /**
+        * Get a LoadBalancer for the specified cluster
+        *
+        * @param $cluster String: cluster name
+        * @return LoadBalancer object
+        */
+       function &getLoadBalancer( $cluster ) {
+               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
+
+               return wfGetLBFactory()->getExternalLB( $cluster, $wiki );
+       }
+
+       /**
+        * Get a slave database connection for the specified cluster
+        *
+        * @param $cluster String: cluster name
+        * @return DatabaseBase object
+        */
+       function &getSlave( $cluster ) {
+               global $wgDefaultExternalStore;
+
+               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
+               $lb =& $this->getLoadBalancer( $cluster );
+
+               if ( !in_array( "DB://" . $cluster, (array)$wgDefaultExternalStore ) ) {
+                       wfDebug( "read only external store" );
+                       $lb->allowLagged(true);
+               } else {
+                       wfDebug( "writable external store" );
+               }
+
+               return $lb->getConnection( DB_SLAVE, array(), $wiki );
+       }
+
+       /**
+        * Get a master database connection for the specified cluster
+        *
+        * @param $cluster String: cluster name
+        * @return DatabaseBase object
+        */
+       function &getMaster( $cluster ) {
+               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
+               $lb =& $this->getLoadBalancer( $cluster );
+               return $lb->getConnection( DB_MASTER, array(), $wiki );
+       }
+
+       /**
+        * Get the 'blobs' table name for this database
+        *
+        * @param $db DatabaseBase
+        * @return String: table name ('blobs' by default)
+        */
+       function getTable( &$db ) {
+               $table = $db->getLBInfo( 'blobs table' );
+               if ( is_null( $table ) ) {
+                       $table = 'blobs';
+               }
+               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
+        * can avoid redundant database access and decompression.
+        * @param $cluster
+        * @param $id
+        * @param $itemID
+        * @return mixed
+        * @private
+        */
+       function &fetchBlob( $cluster, $id, $itemID ) {
+               /**
+                * One-step cache variable to hold base blobs; operations that
+                * pull multiple revisions may often pull multiple times from
+                * the same blob. By keeping the last-used one open, we avoid
+                * redundant unserialization and decompression overhead.
+                */
+               static $externalBlobCache = array();
+
+               $cacheID = ( $itemID === false ) ? "$cluster/$id" : "$cluster/$id/";
+               if( isset( $externalBlobCache[$cacheID] ) ) {
+                       wfDebugLog( 'ExternalStoreDB-cache', "ExternalStoreDB::fetchBlob cache hit on $cacheID\n" );
+                       return $externalBlobCache[$cacheID];
+               }
+
+               wfDebugLog( 'ExternalStoreDB-cache', "ExternalStoreDB::fetchBlob cache miss on $cacheID\n" );
+
+               $dbr =& $this->getSlave( $cluster );
+               $ret = $dbr->selectField( $this->getTable( $dbr ), 'blob_text', array( 'blob_id' => $id ), __METHOD__ );
+               if ( $ret === false ) {
+                       wfDebugLog( 'ExternalStoreDB', "ExternalStoreDB::fetchBlob master fallback on $cacheID\n" );
+                       // Try the master
+                       $dbw =& $this->getMaster( $cluster );
+                       $ret = $dbw->selectField( $this->getTable( $dbw ), 'blob_text', array( 'blob_id' => $id ), __METHOD__ );
+                       if( $ret === false) {
+                               wfDebugLog( 'ExternalStoreDB', "ExternalStoreDB::fetchBlob master failed to find $cacheID\n" );
+                       }
+               }
+               if( $itemID !== false && $ret !== false ) {
+                       // Unserialise object; caller extracts item
+                       $ret = unserialize( $ret );
+               }
+
+               $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";
+       }
+}
diff --git a/includes/externalstore/ExternalStoreHttp.php b/includes/externalstore/ExternalStoreHttp.php
new file mode 100644 (file)
index 0000000..311e32b
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * External storage using HTTP requests.
+ *
+ * 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
+ */
+
+/**
+ * Example class for HTTP accessable external objects.
+ * Only supports reading, not storing.
+ *
+ * @ingroup ExternalStorage
+ */
+class ExternalStoreHttp {
+
+       /**
+        * Fetch data from given URL
+        *
+        * @param $url String: the URL
+        * @return String: the content at $url
+        */
+       function fetchFromURL( $url ) {
+               $ret = Http::get( $url );
+               return $ret;
+       }
+
+       /* XXX: may require other methods, for store, delete,
+        * whatever, for initial ext storage
+        */
+}
index fda356e..5141ec5 100644 (file)
@@ -131,7 +131,7 @@ class FSFile {
                        # Height, width and metadata
                        $handler = MediaHandler::getHandler( $info['mime'] );
                        if ( $handler ) {
-                               $tempImage = (object)array();
+                               $tempImage = (object)array(); // XXX (hack for File object)
                                $info['metadata'] = $handler->getMetadata( $tempImage, $this->path );
                                $gis = $handler->getImageSize( $tempImage, $this->path, $info['metadata'] );
                                if ( is_array( $gis ) ) {
index 04cf29e..a4e6ef6 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();
 
        /**
@@ -178,10 +179,10 @@ class FSFileBackend extends FileBackendStore {
        }
 
        /**
-        * @see FileBackendStore::doStoreInternal()
+        * @see FileBackendStore::doCreateInternal()
         * @return Status
         */
-       protected function doStoreInternal( array $params ) {
+       protected function doCreateInternal( array $params ) {
                $status = Status::newGood();
 
                $dest = $this->resolveToFSPath( $params['dst'] );
@@ -190,22 +191,74 @@ class FSFileBackend extends FileBackendStore {
                        return $status;
                }
 
-               if ( file_exists( $dest ) ) {
-                       $ok = unlink( $dest );
-                       if ( !$ok ) {
-                               $status->fatal( 'backend-fail-delete', $params['dst'] );
+               if ( !empty( $params['async'] ) ) { // deferred
+                       $tempFile = TempFSFile::factory( 'create_', 'tmp' );
+                       if ( !$tempFile ) {
+                               $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;
                        }
+                       $cmd = implode( ' ', array(
+                               wfIsWindows() ? 'COPY /B /Y' : 'cp', // (binary, overwrite)
+                               wfEscapeShellArg( $this->cleanPathSlashes( $tempFile->getPath() ) ),
+                               wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
+                       ) );
+                       $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;
+                       }
+                       $this->chmod( $dest );
+               }
+
+               return $status;
+       }
+
+       /**
+        * @see FSFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseCreate( $errors, Status $status, array $params, $cmd ) {
+               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                       $status->fatal( 'backend-fail-create', $params['dst'] );
+                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+               }
+       }
+
+       /**
+        * @see FileBackendStore::doStoreInternal()
+        * @return Status
+        */
+       protected function doStoreInternal( array $params ) {
+               $status = Status::newGood();
+
+               $dest = $this->resolveToFSPath( $params['dst'] );
+               if ( $dest === null ) {
+                       $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+                       return $status;
                }
 
                if ( !empty( $params['async'] ) ) { // deferred
-                       $cmd = implode( ' ', array( wfIsWindows() ? 'COPY' : 'cp',
+                       $cmd = implode( ' ', array(
+                               wfIsWindows() ? 'COPY /B /Y' : 'cp', // (binary, overwrite)
                                wfEscapeShellArg( $this->cleanPathSlashes( $params['src'] ) ),
                                wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
                        ) );
                        $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
@@ -257,26 +310,23 @@ class FSFileBackend extends FileBackendStore {
                        return $status; // do nothing; either OK or bad status
                }
 
-               if ( file_exists( $dest ) ) {
-                       $ok = unlink( $dest );
-                       if ( !$ok ) {
-                               $status->fatal( 'backend-fail-delete', $params['dst'] );
-                               return $status;
-                       }
-               }
-
                if ( !empty( $params['async'] ) ) { // deferred
-                       $cmd = implode( ' ', array( wfIsWindows() ? 'COPY' : 'cp',
+                       $cmd = implode( ' ', array(
+                               wfIsWindows() ? 'COPY /B /Y' : 'cp', // (binary, overwrite)
                                wfEscapeShellArg( $this->cleanPathSlashes( $source ) ),
                                wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
                        ) );
                        $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'] );
@@ -324,25 +374,17 @@ class FSFileBackend extends FileBackendStore {
                        return $status; // do nothing; either OK or bad status
                }
 
-               if ( file_exists( $dest ) ) {
-                       // Windows does not support moving over existing files
-                       if ( wfIsWindows() ) {
-                               $ok = unlink( $dest );
-                               if ( !$ok ) {
-                                       $status->fatal( 'backend-fail-delete', $params['dst'] );
-                                       return $status;
-                               }
-                       }
-               }
-
                if ( !empty( $params['async'] ) ) { // deferred
-                       $cmd = implode( ' ', array( wfIsWindows() ? 'MOVE' : 'mv',
+                       $cmd = implode( ' ', array(
+                               wfIsWindows() ? 'MOVE /Y' : 'mv', // (overwrite)
                                wfEscapeShellArg( $this->cleanPathSlashes( $source ) ),
                                wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
                        ) );
                        $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'] );
@@ -384,12 +426,15 @@ class FSFileBackend extends FileBackendStore {
                }
 
                if ( !empty( $params['async'] ) ) { // deferred
-                       $cmd = implode( ' ', array( wfIsWindows() ? 'DEL' : 'unlink',
+                       $cmd = implode( ' ', array(
+                               wfIsWindows() ? 'DEL' : 'unlink',
                                wfEscapeShellArg( $this->cleanPathSlashes( $source ) )
                        ) );
                        $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;
@@ -409,66 +454,6 @@ class FSFileBackend extends FileBackendStore {
                }
        }
 
-       /**
-        * @see FileBackendStore::doCreateInternal()
-        * @return Status
-        */
-       protected function doCreateInternal( array $params ) {
-               $status = Status::newGood();
-
-               $dest = $this->resolveToFSPath( $params['dst'] );
-               if ( $dest === null ) {
-                       $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
-                       return $status;
-               }
-
-               if ( file_exists( $dest ) ) {
-                       $ok = unlink( $dest );
-                       if ( !$ok ) {
-                               $status->fatal( 'backend-fail-delete', $params['dst'] );
-                               return $status;
-                       }
-               }
-
-               if ( !empty( $params['async'] ) ) { // deferred
-                       $tempFile = TempFSFile::factory( 'create_', 'tmp' );
-                       if ( !$tempFile ) {
-                               $status->fatal( 'backend-fail-create', $params['dst'] );
-                               return $status;
-                       }
-                       $bytes = file_put_contents( $tempFile->getPath(), $params['content'] );
-                       if ( $bytes === false ) {
-                               $status->fatal( 'backend-fail-create', $params['dst'] );
-                               return $status;
-                       }
-                       $cmd = implode( ' ', array( wfIsWindows() ? 'COPY' : 'cp',
-                               wfEscapeShellArg( $this->cleanPathSlashes( $tempFile->getPath() ) ),
-                               wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
-                       ) );
-                       $status->value = new FSFileOpHandle( $this, $params, 'Create', $cmd, $dest );
-                       $tempFile->bind( $status->value );
-               } else { // immediate write
-                       $bytes = file_put_contents( $dest, $params['content'] );
-                       if ( $bytes === false ) {
-                               $status->fatal( 'backend-fail-create', $params['dst'] );
-                               return $status;
-                       }
-                       $this->chmod( $dest );
-               }
-
-               return $status;
-       }
-
-       /**
-        * @see FSFileBackend::doExecuteOpHandlesInternal()
-        */
-       protected function _getResponseCreate( $errors, Status $status, array $params, $cmd ) {
-               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
-                       $status->fatal( 'backend-fail-create', $params['dst'] );
-                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
-               }
-       }
-
        /**
         * @see FileBackendStore::doPrepareInternal()
         * @return Status
@@ -479,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;
@@ -504,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;
@@ -534,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;
        }
@@ -560,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;
        }
 
@@ -694,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 {
@@ -759,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;
        }
@@ -797,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
        }
 
        /**
@@ -816,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
        }
index e01bfc2..65caf10 100644 (file)
@@ -172,6 +172,7 @@ abstract class FileBackend {
         *  - copy
         *  - move
         *  - delete
+        *  - describe (since 1.21)
         *  - null
         *
         * a) Create a new file in storage with the contents of a string
@@ -182,7 +183,8 @@ abstract class FileBackend {
         *         'content'             => <string of new file contents>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     );
         * @endcode
         *
@@ -194,7 +196,8 @@ abstract class FileBackend {
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
         *
@@ -233,7 +236,17 @@ abstract class FileBackend {
         *     )
         * @endcode
         *
-        * f) Do nothing (no-op)
+        * f) Update metadata for a file within storage
+        * @code
+        *     array(
+        *         'op'                  => 'describe',
+        *         'src'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map>
+        *     )
+        * @endcode
+        *
+        * g) Do nothing (no-op)
         * @code
         *     array(
         *         'op'                  => 'null',
@@ -247,10 +260,17 @@ abstract class FileBackend {
         *   - overwriteSame       : An error will not be given if a file already
         *                           exists at the destination that has the same
         *                           contents as the new contents to be written there.
-        *   - disposition         : When supplied, the backend will add a Content-Disposition
+        *   - disposition         : If supplied, the backend will return a Content-Disposition
         *                           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).
+        *                           Backends that don't support metadata 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.
+        *                           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.
+        *                           Backends that don't support metadata ignore this. (since 1.21)
         *
         * $opts is an associative of boolean flags, including:
         *   - force               : Operation precondition errors no longer trigger an abort.
@@ -259,16 +279,13 @@ abstract class FileBackend {
         *   - nonLocking          : No locks are acquired for the operations.
         *                           This can increase performance for non-critical writes.
         *                           This has no effect unless the 'force' flag is set.
-        *   - allowStale          : Don't require the latest available data.
-        *                           This can increase performance for non-critical writes.
-        *                           This has no effect unless the 'force' flag is set.
         *   - nonJournaled        : Don't log this operation batch in the file journal.
         *                           This limits the ability of recovery scripts.
         *   - parallelize         : Try to do operations in parallel when possible.
-        *   - bypassReadOnly      : Allow writes in read-only mode (since 1.20).
+        *   - bypassReadOnly      : Allow writes in read-only mode. (since 1.20)
         *   - preserveCache       : Don't clear the process cache before checking files.
         *                           This should only be used if all entries in the process
-        *                           cache were added after the files were already locked (since 1.20).
+        *                           cache were added after the files were already locked. (since 1.20)
         *
         * @remarks Remarks on locking:
         * File system paths given to operations should refer to files that are
@@ -295,7 +312,6 @@ abstract class FileBackend {
                }
                if ( empty( $opts['force'] ) ) { // sanity
                        unset( $opts['nonLocking'] );
-                       unset( $opts['allowStale'] );
                }
                return $this->doOperationsInternal( $ops, $opts );
        }
@@ -390,6 +406,21 @@ abstract class FileBackend {
                return $this->doOperation( array( 'op' => 'delete' ) + $params, $opts );
        }
 
+       /**
+        * Performs a single describe operation.
+        * This sets $params['op'] to 'describe' and passes it to doOperation().
+        *
+        * @see FileBackend::doOperation()
+        *
+        * @param $params Array Operation parameters
+        * @param $opts Array Operation options
+        * @return Status
+        * @since 1.21
+        */
+       final public function describe( array $params, array $opts = array() ) {
+               return $this->doOperation( array( 'op' => 'describe' ) + $params, $opts );
+       }
+
        /**
         * Perform a set of independent file operations on some files.
         *
@@ -403,6 +434,7 @@ abstract class FileBackend {
         *  - copy
         *  - move
         *  - delete
+        *  - describe (since 1.21)
         *  - null
         *
         * a) Create a new file in storage with the contents of a string
@@ -411,18 +443,22 @@ abstract class FileBackend {
         *         'op'                  => 'create',
         *         'dst'                 => <storage path>,
         *         'content'             => <string of new file contents>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
+        *
         * b) Copy a file system file into storage
         * @code
         *     array(
         *         'op'                  => 'store',
         *         'src'                 => <file system path>,
         *         'dst'                 => <storage path>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
+        *
         * c) Copy a file within storage
         * @code
         *     array(
@@ -433,6 +469,7 @@ abstract class FileBackend {
         *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
+        *
         * d) Move a file within storage
         * @code
         *     array(
@@ -443,6 +480,7 @@ abstract class FileBackend {
         *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
+        *
         * e) Delete a file within storage
         * @code
         *     array(
@@ -451,7 +489,18 @@ abstract class FileBackend {
         *         'ignoreMissingSource' => <boolean>
         *     )
         * @endcode
-        * f) Do nothing (no-op)
+        *
+        * f) Update metadata for a file within storage
+        * @code
+        *     array(
+        *         'op'                  => 'describe',
+        *         'src'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map>
+        *     )
+        * @endcode
+        *
+        * g) Do nothing (no-op)
         * @code
         *     array(
         *         'op'                  => 'null',
@@ -465,6 +514,13 @@ 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 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.
+        *                           Backends that don't support metadata ignore this. (since 1.21)
         *
         * $opts is an associative of boolean flags, including:
         *   - bypassReadOnly      : Allow writes in read-only mode (since 1.20)
@@ -580,6 +636,20 @@ abstract class FileBackend {
                return $this->doQuickOperation( array( 'op' => 'delete' ) + $params );
        }
 
+       /**
+        * Performs a single quick describe operation.
+        * This sets $params['op'] to 'describe' and passes it to doQuickOperation().
+        *
+        * @see FileBackend::doQuickOperation()
+        *
+        * @param $params Array Operation parameters
+        * @return Status
+        * @since 1.21
+        */
+       final public function quickDescribe( array $params ) {
+               return $this->doQuickOperation( array( 'op' => 'describe' ) + $params );
+       }
+
        /**
         * Concatenate a list of storage files into a single file system file.
         * The target path should refer to a file that is already locked or
@@ -800,13 +870,13 @@ abstract class FileBackend {
 
        /**
         * Get the properties of the file at a storage path in the backend.
-        * Returns FSFile::placeholderProps() on failure.
+        * This gives the result of FSFile::getProps() on a local copy of the file.
         *
         * @param $params Array
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return Array
+        * @return Array Returns FSFile::placeholderProps() on failure
         */
        abstract public function getFileProps( array $params );
 
@@ -904,6 +974,24 @@ abstract class FileBackend {
         */
        abstract public function getLocalCopyMulti( array $params );
 
+       /**
+        * Return an HTTP URL to a given file that requires no authentication to use.
+        * The URL may be pre-authenticated (via some token in the URL) and temporary.
+        * This will return null if the backend cannot make an HTTP URL for the file.
+        *
+        * This is useful for key/value stores when using scripts that seek around
+        * large files and those scripts (and the backend) support HTTP Range headers.
+        * Otherwise, one would need to use getLocalReference(), which involves loading
+        * the entire file on to local disk.
+        *
+        * @param $params Array
+        * $params include:
+        *   - src : source storage path
+        * @return string|null
+        * @since 1.21
+        */
+       abstract public function getFileHttpUrl( array $params );
+
        /**
         * Check if a directory exists at a given storage path.
         * Backends using key/value stores will check if the path is a
index 90292ee..a443a3a 100644 (file)
@@ -651,6 +651,15 @@ class FileBackendMultiWrite extends FileBackend {
                return $tempFiles;
        }
 
+       /**
+        * @see FileBackend::getFileHttpUrl()
+        * @return string|null
+        */
+       public function getFileHttpUrl( array $params ) {
+               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               return $this->backends[$this->masterIndex]->getFileHttpUrl( $realParams );
+       }
+
        /**
         * @see FileBackend::directoryExists()
         * @param $params array
index 7e91949..b906af5 100644 (file)
@@ -48,6 +48,8 @@ abstract class FileBackendStore extends FileBackend {
 
        protected $maxFileSize = 4294967296; // integer bytes (4GiB)
 
+       const CACHE_TTL = 10; // integer; TTL in seconds for process cache entries
+
        /**
         * @see FileBackend::__construct()
         *
@@ -88,12 +90,15 @@ abstract class FileBackendStore extends FileBackend {
         * Do not call this function from places outside FileBackend and FileOp.
         *
         * $params include:
-        *   - content       : the raw file contents
-        *   - dst           : destination storage path
-        *   - disposition   : Content-Disposition header value for the destination
-        *   - async         : Status will be returned immediately if supported.
-        *                     If the status is OK, then its value field will be
-        *                     set to a FileBackendStoreOpHandle object.
+        *   - content     : the raw file contents
+        *   - dst         : destination storage path
+        *   - disposition : Content-Disposition header value for the destination
+        *   - headers     : HTTP header name/value map
+        *   - async       : Status will be returned immediately if supported.
+        *                   If the status is OK, then its value field will be
+        *                   set to a FileBackendStoreOpHandle object.
+        *   - dstExists   : Whether a file exists at the destination (optimization).
+        *                   Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -107,7 +112,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doCreateInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -116,6 +123,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::createInternal()
+        * @return Status
         */
        abstract protected function doCreateInternal( array $params );
 
@@ -125,12 +133,15 @@ abstract class FileBackendStore extends FileBackend {
         * Do not call this function from places outside FileBackend and FileOp.
         *
         * $params include:
-        *   - src           : source path on disk
-        *   - dst           : destination storage path
-        *   - disposition   : Content-Disposition header value for the destination
-        *   - async         : Status will be returned immediately if supported.
-        *                     If the status is OK, then its value field will be
-        *                     set to a FileBackendStoreOpHandle object.
+        *   - src         : source path on disk
+        *   - dst         : destination storage path
+        *   - disposition : Content-Disposition header value for the destination
+        *   - headers     : HTTP header name/value map
+        *   - async       : Status will be returned immediately if supported.
+        *                   If the status is OK, then its value field will be
+        *                   set to a FileBackendStoreOpHandle object.
+        *   - dstExists   : Whether a file exists at the destination (optimization).
+        *                   Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -144,7 +155,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doStoreInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -153,6 +166,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::storeInternal()
+        * @return Status
         */
        abstract protected function doStoreInternal( array $params );
 
@@ -169,6 +183,8 @@ abstract class FileBackendStore extends FileBackend {
         *   - async               : Status will be returned immediately if supported.
         *                           If the status is OK, then its value field will be
         *                           set to a FileBackendStoreOpHandle object.
+        *   - dstExists           : Whether a file exists at the destination (optimization).
+        *                           Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -178,7 +194,9 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = $this->doCopyInternal( $params );
                $this->clearCache( array( $params['dst'] ) );
-               $this->deleteFileCache( $params['dst'] ); // persistent cache
+               if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -186,6 +204,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::copyInternal()
+        * @return Status
         */
        abstract protected function doCopyInternal( array $params );
 
@@ -216,6 +235,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::deleteInternal()
+        * @return Status
         */
        abstract protected function doDeleteInternal( array $params );
 
@@ -232,6 +252,8 @@ abstract class FileBackendStore extends FileBackend {
         *   - async               : Status will be returned immediately if supported.
         *                           If the status is OK, then its value field will be
         *                           set to a FileBackendStoreOpHandle object.
+        *   - dstExists           : Whether a file exists at the destination (optimization).
+        *                           Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -242,7 +264,9 @@ abstract class FileBackendStore extends FileBackend {
                $status = $this->doMoveInternal( $params );
                $this->clearCache( array( $params['src'], $params['dst'] ) );
                $this->deleteFileCache( $params['src'] ); // persistent cache
-               $this->deleteFileCache( $params['dst'] ); // persistent cache
+               if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -264,6 +288,40 @@ abstract class FileBackendStore extends FileBackend {
                return $status;
        }
 
+       /**
+        * Alter metadata for a file at the storage path.
+        * Do not call this function from places outside FileBackend and FileOp.
+        *
+        * $params include:
+        *   - src           : source storage path
+        *   - disposition   : Content-Disposition header value for the destination
+        *   - headers       : HTTP header name/value map
+        *   - async         : Status will be returned immediately if supported.
+        *                     If the status is OK, then its value field will be
+        *                     set to a FileBackendStoreOpHandle object.
+        *
+        * @param $params Array
+        * @return Status
+        */
+       final public function describeInternal( array $params ) {
+               wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
+               $status = $this->doDescribeInternal( $params );
+               $this->clearCache( array( $params['src'] ) );
+               $this->deleteFileCache( $params['src'] ); // persistent cache
+               wfProfileOut( __METHOD__ . '-' . $this->name );
+               wfProfileOut( __METHOD__ );
+               return $status;
+       }
+
+       /**
+        * @see FileBackendStore::describeInternal()
+        * @return Status
+        */
+       protected function doDescribeInternal( array $params ) {
+               return Status::newGood();
+       }
+
        /**
         * No-op file operation that does nothing.
         * Do not call this function from places outside FileBackend and FileOp.
@@ -505,6 +563,7 @@ abstract class FileBackendStore extends FileBackend {
                                        $subDir = $params['dir'] . "/{$subDirRel}"; // full path
                                        $status->merge( $this->doClean( array( 'dir' => $subDir ) + $params ) );
                                }
+                               unset( $subDirsRel ); // free directory for rmdir() on Windows (for FS backends)
                        }
                }
 
@@ -601,17 +660,25 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $latest = !empty( $params['latest'] ); // use latest data?
-               if ( !$this->cheapCache->has( $path, 'stat' ) ) {
+               if ( !$this->cheapCache->has( $path, 'stat', self::CACHE_TTL ) ) {
                        $this->primeFileCache( array( $path ) ); // check persistent cache
                }
-               if ( $this->cheapCache->has( $path, 'stat' ) ) {
+               if ( $this->cheapCache->has( $path, 'stat', self::CACHE_TTL ) ) {
                        $stat = $this->cheapCache->get( $path, 'stat' );
                        // If we want the latest data, check that this cached
                        // value was in fact fetched with the latest available data.
-                       if ( !$latest || $stat['latest'] ) {
-                               wfProfileOut( __METHOD__ . '-' . $this->name );
-                               wfProfileOut( __METHOD__ );
-                               return $stat;
+                       if ( is_array( $stat ) ) {
+                               if ( !$latest || $stat['latest'] ) {
+                                       wfProfileOut( __METHOD__ . '-' . $this->name );
+                                       wfProfileOut( __METHOD__ );
+                                       return $stat;
+                               }
+                       } elseif ( in_array( $stat, array( 'NOT_EXIST', 'NOT_EXIST_LATEST' ) ) ) {
+                               if ( !$latest || $stat === 'NOT_EXIST_LATEST' ) {
+                                       wfProfileOut( __METHOD__ . '-' . $this->name );
+                                       wfProfileOut( __METHOD__ );
+                                       return false;
+                               }
                        }
                }
                wfProfileIn( __METHOD__ . '-miss' );
@@ -619,7 +686,7 @@ abstract class FileBackendStore extends FileBackend {
                $stat = $this->doGetFileStat( $params );
                wfProfileOut( __METHOD__ . '-miss-' . $this->name );
                wfProfileOut( __METHOD__ . '-miss' );
-               if ( is_array( $stat ) ) { // don't cache negatives
+               if ( is_array( $stat ) ) { // file exists
                        $stat['latest'] = $latest;
                        $this->cheapCache->set( $path, 'stat', $stat );
                        $this->setFileCache( $path, $stat ); // update persistent cache
@@ -627,8 +694,11 @@ abstract class FileBackendStore extends FileBackend {
                                $this->cheapCache->set( $path, 'sha1',
                                        array( 'hash' => $stat['sha1'], 'latest' => $latest ) );
                        }
-               } else {
+               } elseif ( $stat === false ) { // file does not exist
+                       $this->cheapCache->set( $path, 'stat', $latest ? 'NOT_EXIST_LATEST' : 'NOT_EXIST' );
                        wfDebug( __METHOD__ . ": File $path does not exist.\n" );
+               } else { // an error occurred
+                       wfDebug( __METHOD__ . ": Could not stat file $path.\n" );
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -682,7 +752,7 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $latest = !empty( $params['latest'] ); // use latest data?
-               if ( $this->cheapCache->has( $path, 'sha1' ) ) {
+               if ( $this->cheapCache->has( $path, 'sha1', self::CACHE_TTL ) ) {
                        $stat = $this->cheapCache->get( $path, 'sha1' );
                        // If we want the latest data, check that this cached
                        // value was in fact fetched with the latest available data.
@@ -804,6 +874,14 @@ abstract class FileBackendStore extends FileBackend {
         */
        abstract protected function doGetLocalCopyMulti( array $params );
 
+       /**
+        * @see FileBackend::getFileHttpUrl()
+        * @return string|null
+        */
+       public function getFileHttpUrl( array $params ) {
+               return null; // not supported
+       }
+
        /**
         * @see FileBackend::streamFile()
         * @return Status
@@ -980,12 +1058,13 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function getOperationsInternal( array $ops ) {
                $supportedOps = array(
-                       'store'       => 'StoreFileOp',
-                       'copy'        => 'CopyFileOp',
-                       'move'        => 'MoveFileOp',
-                       'delete'      => 'DeleteFileOp',
-                       'create'      => 'CreateFileOp',
-                       'null'        => 'NullFileOp'
+                       'store'    => 'StoreFileOp',
+                       'copy'     => 'CopyFileOp',
+                       'move'     => 'MoveFileOp',
+                       'delete'   => 'DeleteFileOp',
+                       'create'   => 'CreateFileOp',
+                       'describe' => 'DescribeFileOp',
+                       'null'     => 'NullFileOp'
                );
 
                $performOps = array(); // array of FileOp objects
@@ -1051,6 +1130,9 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
+               // Fix up custom header name/value pairs...
+               $ops = array_map( array( $this, 'stripInvalidHeadersFromOp' ), $ops );
+
                // Build up a list of FileOps...
                $performOps = $this->getOperationsInternal( $ops );
 
@@ -1100,6 +1182,12 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
+               // Fix up custom header name/value pairs...
+               $ops = array_map( array( $this, 'stripInvalidHeadersFromOp' ), $ops );
+
+               // Clear any file cache entries
+               $this->clearCache();
+
                $supportedOps = array( 'create', 'store', 'copy', 'move', 'delete', 'null' );
                $async = ( $this->parallelize === 'implicit' );
                $maxConcurrency = $this->concurrency; // throttle
@@ -1191,6 +1279,26 @@ abstract class FileBackendStore extends FileBackend {
                return array();
        }
 
+       /**
+        * Strip long HTTP headers from a file operation
+        *
+        * @param $op array Same format as doOperation()
+        * @return Array
+        */
+       protected function stripInvalidHeadersFromOp( array $op ) {
+               if ( isset( $op['headers'] ) ) {
+                       foreach ( $op['headers'] as $name => $value ) {
+                               if ( strlen( $name ) > 255 || strlen( $value ) > 255 ) {
+                                       trigger_error( "Header '$name: $value' is too long." );
+                                       unset( $op['headers'][$name] );
+                               } elseif ( !strlen( $value ) ) {
+                                       $op['headers'][$name] = ''; // null/false => ""
+                               }
+                       }
+               }
+               return $op;
+       }
+
        /**
         * @see FileBackend::preloadCache()
         */
@@ -1562,6 +1670,8 @@ abstract class FileBackendStore extends FileBackend {
        /**
         * Delete the cached stat info for a file path.
         * The cache key is salted for a while to prevent race conditions.
+        * Since negatives (404s) are not cached, this does not need to be called when
+        * a file is created at a path were there was none before.
         *
         * @param $path string Storage path
         */
index ff1b604..7952bcb 100644 (file)
@@ -42,12 +42,12 @@ abstract class FileOp {
        protected $state = self::STATE_NEW; // integer
        protected $failed = false; // boolean
        protected $async = false; // boolean
-       protected $useLatest = true; // boolean
        protected $batchId; // string
 
        protected $doOperation = true; // boolean; operation is not a no-op
        protected $sourceSha1; // string
        protected $destSameAsSource; // boolean
+       protected $destExists; // boolean
 
        /* Object life-cycle */
        const STATE_NEW = 1;
@@ -123,16 +123,6 @@ abstract class FileOp {
                $this->batchId = $batchId;
        }
 
-       /**
-        * Whether to allow stale data for file reads and stat checks
-        *
-        * @param $allowStale bool
-        * @return void
-        */
-       final public function allowStaleReads( $allowStale ) {
-               $this->useLatest = !$allowStale;
-       }
-
        /**
         * Get the value of the parameter with the given name
         *
@@ -351,7 +341,7 @@ abstract class FileOp {
 
        /**
         * Check for errors with regards to the destination file already existing.
-        * This also updates the destSameAsSource and sourceSha1 member variables.
+        * Also set the destExists, destSameAsSource and sourceSha1 member variables.
         * A bad status will be returned if there is no chance it can be overwritten.
         *
         * @param $predicates Array
@@ -365,7 +355,8 @@ abstract class FileOp {
                        $this->sourceSha1 = $this->fileSha1( $this->params['src'], $predicates );
                }
                $this->destSameAsSource = false;
-               if ( $this->fileExists( $this->params['dst'], $predicates ) ) {
+               $this->destExists = $this->fileExists( $this->params['dst'], $predicates );
+               if ( $this->destExists ) {
                        if ( $this->getParam( 'overwrite' ) ) {
                                return $status; // OK
                        } elseif ( $this->getParam( 'overwriteSame' ) ) {
@@ -409,7 +400,7 @@ abstract class FileOp {
                if ( isset( $predicates['exists'][$source] ) ) {
                        return $predicates['exists'][$source]; // previous op assures this
                } else {
-                       $params = array( 'src' => $source, 'latest' => $this->useLatest );
+                       $params = array( 'src' => $source, 'latest' => true );
                        return $this->backend->fileExists( $params );
                }
        }
@@ -427,7 +418,7 @@ abstract class FileOp {
                } elseif ( isset( $predicates['exists'][$source] ) && !$predicates['exists'][$source] ) {
                        return false; // previous op assures this
                } else {
-                       $params = array( 'src' => $source, 'latest' => $this->useLatest );
+                       $params = array( 'src' => $source, 'latest' => true );
                        return $this->backend->getFileSha1Base36( $params );
                }
        }
@@ -460,42 +451,32 @@ abstract class FileOp {
 }
 
 /**
- * Store a file into the backend from a file on the file system.
+ * Create a file in the backend with the given content.
  * Parameters for this operation are outlined in FileBackend::doOperations().
  */
-class StoreFileOp extends FileOp {
-       /**
-        * @return array
-        */
+class CreateFileOp extends FileOp {
        protected function allowedParams() {
-               return array( array( 'src', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
+               return array( array( 'content', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition', 'headers' ) );
        }
 
-       /**
-        * @param $predicates array
-        * @return Status
-        */
        protected function doPrecheck( array &$predicates ) {
                $status = Status::newGood();
-               // Check if the source file exists on the file system
-               if ( !is_file( $this->params['src'] ) ) {
-                       $status->fatal( 'backend-fail-notexists', $this->params['src'] );
-                       return $status;
-               // Check if the source file is too big
-               } elseif ( filesize( $this->params['src'] ) > $this->backend->maxFileSizeInternal() ) {
+               // Check if the source data is too big
+               if ( strlen( $this->getParam( 'content' ) ) > $this->backend->maxFileSizeInternal() ) {
                        $status->fatal( 'backend-fail-maxsize',
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
-                       $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+                       $status->fatal( 'backend-fail-create', $this->params['dst'] );
                        return $status;
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
-                       $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+                       $status->fatal( 'backend-fail-create', $this->params['dst'] );
                        return $status;
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['dst']] = true;
@@ -508,57 +489,66 @@ class StoreFileOp extends FileOp {
         * @return Status
         */
        protected function doAttempt() {
-               // Store the file at the destination
                if ( !$this->destSameAsSource ) {
-                       return $this->backend->storeInternal( $this->setFlags( $this->params ) );
+                       // Create the file at the destination
+                       return $this->backend->createInternal( $this->setFlags( $this->params ) );
                }
                return Status::newGood();
        }
 
        /**
-        * @return bool|string
+        * @return bool|String
         */
        protected function getSourceSha1Base36() {
-               wfSuppressWarnings();
-               $hash = sha1_file( $this->params['src'] );
-               wfRestoreWarnings();
-               if ( $hash !== false ) {
-                       $hash = wfBaseConvert( $hash, 16, 36, 31 );
-               }
-               return $hash;
+               return wfBaseConvert( sha1( $this->params['content'] ), 16, 36, 31 );
        }
 
+       /**
+        * @return array
+        */
        public function storagePathsChanged() {
                return array( $this->params['dst'] );
        }
 }
 
 /**
- * Create a file in the backend with the given content.
+ * Store a file into the backend from a file on the file system.
  * Parameters for this operation are outlined in FileBackend::doOperations().
  */
-class CreateFileOp extends FileOp {
+class StoreFileOp extends FileOp {
+       /**
+        * @return array
+        */
        protected function allowedParams() {
-               return array( array( 'content', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
+               return array( array( 'src', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition', 'headers' ) );
        }
 
+       /**
+        * @param $predicates array
+        * @return Status
+        */
        protected function doPrecheck( array &$predicates ) {
                $status = Status::newGood();
-               // Check if the source data is too big
-               if ( strlen( $this->getParam( 'content' ) ) > $this->backend->maxFileSizeInternal() ) {
+               // Check if the source file exists on the file system
+               if ( !is_file( $this->params['src'] ) ) {
+                       $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+                       return $status;
+               // Check if the source file is too big
+               } elseif ( filesize( $this->params['src'] ) > $this->backend->maxFileSizeInternal() ) {
                        $status->fatal( 'backend-fail-maxsize',
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
-                       $status->fatal( 'backend-fail-create', $this->params['dst'] );
+                       $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
                        return $status;
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
-                       $status->fatal( 'backend-fail-create', $this->params['dst'] );
+                       $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
                        return $status;
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['dst']] = true;
@@ -571,23 +561,26 @@ class CreateFileOp extends FileOp {
         * @return Status
         */
        protected function doAttempt() {
+               // Store the file at the destination
                if ( !$this->destSameAsSource ) {
-                       // Create the file at the destination
-                       return $this->backend->createInternal( $this->setFlags( $this->params ) );
+                       return $this->backend->storeInternal( $this->setFlags( $this->params ) );
                }
                return Status::newGood();
        }
 
        /**
-        * @return bool|String
+        * @return bool|string
         */
        protected function getSourceSha1Base36() {
-               return wfBaseConvert( sha1( $this->params['content'] ), 16, 36, 31 );
+               wfSuppressWarnings();
+               $hash = sha1_file( $this->params['src'] );
+               wfRestoreWarnings();
+               if ( $hash !== false ) {
+                       $hash = wfBaseConvert( $hash, 16, 36, 31 );
+               }
+               return $hash;
        }
 
-       /**
-        * @return array
-        */
        public function storagePathsChanged() {
                return array( $this->params['dst'] );
        }
@@ -632,6 +625,7 @@ class CopyFileOp extends FileOp {
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['dst']] = true;
@@ -708,6 +702,7 @@ class MoveFileOp extends FileOp {
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['src']] = false;
@@ -809,6 +804,58 @@ class DeleteFileOp extends FileOp {
        }
 }
 
+/**
+ * Change metadata for a file at the given storage path in the backend.
+ * Parameters for this operation are outlined in FileBackend::doOperations().
+ */
+class DescribeFileOp extends FileOp {
+       /**
+        * @return array
+        */
+       protected function allowedParams() {
+               return array( array( 'src' ), array( 'disposition', 'headers' ) );
+       }
+
+       /**
+        * @param $predicates array
+        * @return Status
+        */
+       protected function doPrecheck( array &$predicates ) {
+               $status = Status::newGood();
+               // Check if the source file exists
+               if ( !$this->fileExists( $this->params['src'], $predicates ) ) {
+                       $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+                       return $status;
+               // Check if a file can be placed/changed at the source
+               } elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
+                       $status->fatal( 'backend-fail-usable', $this->params['src'] );
+                       $status->fatal( 'backend-fail-describe', $this->params['src'] );
+                       return $status;
+               }
+               // Update file existence predicates
+               $predicates['exists'][$this->params['src']] =
+                       $this->fileExists( $this->params['src'], $predicates );
+               $predicates['sha1'][$this->params['src']] =
+                       $this->fileSha1( $this->params['src'], $predicates );
+               return $status; // safe to call attempt()
+       }
+
+       /**
+        * @return Status
+        */
+       protected function doAttempt() {
+               // Update the source file's metadata
+               return $this->backend->describeInternal( $this->setFlags( $this->params ) );
+       }
+
+       /**
+        * @return array
+        */
+       public function storagePathsChanged() {
+               return array( $this->params['src'] );
+       }
+}
+
 /**
  * Placeholder operation that has no params and does nothing
  */
index 736393a..6e103ec 100644 (file)
@@ -42,9 +42,6 @@ class FileOpBatch {
         * $opts is an array of options, including:
         *   - force        : Errors that would normally cause a rollback do not.
         *                    The remaining operations are still attempted if any fail.
-        *   - allowStale   : Don't require the latest available data.
-        *                    This can increase performance for non-critical writes.
-        *                    This has no effect unless the 'force' flag is set.
         *   - nonJournaled : Don't log this operation batch in the file journal.
         *   - concurrency  : Try to do this many operations in parallel when possible.
         *
@@ -69,7 +66,6 @@ class FileOpBatch {
                }
 
                $batchId = $journal->getTimestampedUUID();
-               $allowStale = !empty( $opts['allowStale'] );
                $ignoreErrors = !empty( $opts['force'] );
                $journaled = empty( $opts['nonJournaled'] );
                $maxConcurrency = isset( $opts['concurrency'] ) ? $opts['concurrency'] : 1;
@@ -84,7 +80,6 @@ class FileOpBatch {
                foreach ( $performOps as $index => $fileOp ) {
                        $backendName = $fileOp->getBackend()->getName();
                        $fileOp->setBatchId( $batchId ); // transaction ID
-                       $fileOp->allowStaleReads( $allowStale ); // consistency level
                        // Decide if this op can be done concurrently within this sub-batch
                        // or if a new concurrent sub-batch must be started after this one...
                        if ( $fileOp->dependsOn( $curBatchDeps )
index 8441f8f..02c0c9a 100644 (file)
@@ -40,11 +40,16 @@ class SwiftFileBackend extends FileBackendStore {
        /** @var CF_Authentication */
        protected $auth; // Swift authentication handler
        protected $authTTL; // integer seconds
+       protected $swiftTempUrlKey; // string; shared secret value for making temp urls
        protected $swiftAnonUser; // string; username to handle unauthenticated requests
        protected $swiftUseCDN; // boolean; whether CloudFiles CDN is enabled
        protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
        protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
 
+       // 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
@@ -66,6 +71,8 @@ class SwiftFileBackend extends FileBackendStore {
         *   - swiftUser          : Swift user used by MediaWiki (account:username)
         *   - swiftKey           : Swift authentication key for the above user
         *   - swiftAuthTTL       : Swift authentication TTL (seconds)
+        *   - swiftTempUrlKey    : Swift "X-Account-Meta-Temp-URL-Key" value on the account.
+        *                          Do not set this until it has been set in the backend.
         *   - swiftAnonUser      : Swift user used for end-user requests (account:username).
         *                          If set, then views of public containers are assumed to go
         *                          through this user. If not set, then public containers are
@@ -84,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 );
@@ -104,6 +121,9 @@ class SwiftFileBackend extends FileBackendStore {
                $this->swiftAnonUser = isset( $config['swiftAnonUser'] )
                        ? $config['swiftAnonUser']
                        : '';
+               $this->swiftTempUrlKey = isset( $config['swiftTempUrlKey'] )
+                       ? $config['swiftTempUrlKey']
+                       : '';
                $this->shardViaHashLevels = isset( $config['shardViaHashLevels'] )
                        ? $config['shardViaHashLevels']
                        : '';
@@ -116,6 +136,12 @@ 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
@@ -230,6 +256,10 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( isset( $params['disposition'] ) ) {
                                $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
+                       // Set any other custom headers if requested
+                       if ( isset( $params['headers'] ) ) {
+                               $obj->headers += $params['headers'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $obj->write_async( $params['content'] );
                                $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $op );
@@ -309,6 +339,10 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( isset( $params['disposition'] ) ) {
                                $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
+                       // Set any other custom headers if requested
+                       if ( isset( $params['headers'] ) ) {
+                               $obj->headers += $params['headers'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                wfSuppressWarnings();
                                $fp = fopen( $params['src'], 'rb' );
@@ -548,6 +582,47 @@ class SwiftFileBackend extends FileBackendStore {
                }
        }
 
+       /**
+        * @see FileBackendStore::doDescribeInternal()
+        * @return Status
+        */
+       protected function doDescribeInternal( array $params ) {
+               $status = Status::newGood();
+
+               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
+               if ( $srcRel === null ) {
+                       $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+                       return $status;
+               }
+
+               $hdrs = isset( $params['headers'] ) ? $params['headers'] : array();
+               // Set the Content-Disposition header if requested
+               if ( isset( $params['disposition'] ) ) {
+                       $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+               }
+
+               try {
+                       $sContObj = $this->getContainer( $srcCont );
+                       // Get the latest version of the current metadata
+                       $srcObj = $sContObj->get_object( $srcRel,
+                               $this->headersFromParams( array( 'latest' => true ) ) );
+                       // Merge in the metadata updates...
+                       $srcObj->headers = $hdrs + $srcObj->headers;
+                       $srcObj->sync_metadata(); // save to Swift
+                       $this->purgeCDNCache( array( $srcObj ) );
+               } catch ( CDNNotEnabledException $e ) {
+                       // CDN not enabled; nothing to see here
+               } catch ( NoSuchContainerException $e ) {
+                       $status->fatal( 'backend-fail-describe', $params['src'] );
+               } catch ( NoSuchObjectException $e ) {
+                       $status->fatal( 'backend-fail-describe', $params['src'] );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
+               }
+
+               return $status;
+       }
+
        /**
         * @see FileBackendStore::doPrepareInternal()
         * @return Status
@@ -763,6 +838,7 @@ class SwiftFileBackend extends FileBackendStore {
                                }
                        }
                }
+               trigger_error( "Unable to set SHA-1 metadata for $path", E_USER_WARNING );
                $obj->setMetadataValues( array( 'Sha1base36' => false ) );
                wfProfileOut( __METHOD__ );
                return false; // failed
@@ -1119,6 +1195,54 @@ class SwiftFileBackend extends FileBackendStore {
                return $tmpFiles;
        }
 
+       /**
+        * @see FileBackendStore::getFileHttpUrl()
+        * @return string|null
+        */
+       public function getFileHttpUrl( array $params ) {
+               if ( $this->swiftTempUrlKey != '' ||
+                       ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' ) )
+               {
+                       list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
+                       if ( $srcRel === null ) {
+                               return null; // invalid path
+                       }
+                       try {
+                               $sContObj = $this->getContainer( $srcCont );
+                               $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
+                               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 );
+                       }
+               }
+               return null;
+       }
+
        /**
         * @see FileBackendStore::directoriesAreVirtual()
         * @return bool
@@ -1159,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?
@@ -1178,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:
@@ -1240,8 +1364,9 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * Get an authenticated connection handle to the Swift proxy
         *
-        * @return CF_Connection|bool False on failure
         * @throws CloudFilesException
+        * @throws CloudFilesException|Exception
+        * @return CF_Connection|bool False on failure
         */
        protected function getConnection() {
                if ( $this->connException instanceof CloudFilesException ) {
@@ -1292,6 +1417,7 @@ class SwiftFileBackend extends FileBackendStore {
        protected function closeConnection() {
                if ( $this->conn ) {
                        $this->conn->close(); // close active cURL handles in CF_Http object
+                       $this->conn = null;
                        $this->sessionStarted = 0;
                        $this->connContainerCache->clear();
                }
index 34f3e53..44c6567 100644 (file)
@@ -75,6 +75,9 @@ class DBFileJournal extends FileJournal {
 
                try {
                        $dbw->insert( 'filejournal', $data, __METHOD__ );
+                       if ( mt_rand( 0, 99 ) == 0 ) {
+                               $this->purgeOldLogs(); // occasionally delete old logs
+                       }
                } catch ( DBError $e ) {
                        $status->fatal( 'filejournal-fail-dbquery', $this->backend );
                        return $status;
index 8942818..3de6183 100644 (file)
@@ -169,7 +169,7 @@ class LSLockManager extends QuorumLockManager {
                $authKey = $this->lockServers[$lockSrv]['authKey'];
                // Build of the command as a flat string...
                $values = implode( '|', $values );
-               $key = sha1( $this->session . $action . $type . $values . $authKey );
+               $key = hash_hmac( 'sha1', "{$this->session}\n{$action}\n{$type}\n{$values}", $authKey );
                // Send out the command...
                if ( fwrite( $conn, "{$this->session}:$key:$action:$type:$values\n" ) === false ) {
                        return false;
index 07853f8..51454a4 100644 (file)
@@ -122,72 +122,6 @@ abstract class LockManager {
        abstract protected function doUnlock( array $paths, $type );
 }
 
-/**
- * Self-releasing locks
- *
- * LockManager helper class to handle scoped locks, which
- * release when an object is destroyed or goes out of scope.
- *
- * @ingroup LockManager
- * @since 1.19
- */
-class ScopedLock {
-       /** @var LockManager */
-       protected $manager;
-       /** @var Status */
-       protected $status;
-       /** @var Array List of resource paths*/
-       protected $paths;
-
-       protected $type; // integer lock type
-
-       /**
-        * @param $manager LockManager
-        * @param $paths Array List of storage paths
-        * @param $type integer LockManager::LOCK_* constant
-        * @param $status Status
-        */
-       protected function __construct(
-               LockManager $manager, array $paths, $type, Status $status
-       ) {
-               $this->manager = $manager;
-               $this->paths = $paths;
-               $this->status = $status;
-               $this->type = $type;
-       }
-
-       /**
-        * Get a ScopedLock object representing a lock on resource paths.
-        * Any locks are released once this object goes out of scope.
-        * The status object is updated with any errors or warnings.
-        *
-        * @param $manager LockManager
-        * @param $paths Array List of storage paths
-        * @param $type integer LockManager::LOCK_* constant
-        * @param $status Status
-        * @return ScopedLock|null Returns null on failure
-        */
-       public static function factory(
-               LockManager $manager, array $paths, $type, Status $status
-       ) {
-               $lockStatus = $manager->lock( $paths, $type );
-               $status->merge( $lockStatus );
-               if ( $lockStatus->isOK() ) {
-                       return new self( $manager, $paths, $type, $status );
-               }
-               return null;
-       }
-
-       function __destruct() {
-               $wasOk = $this->status->isOK();
-               $this->status->merge( $this->manager->unlock( $this->paths, $this->type ) );
-               if ( $wasOk ) {
-                       // Make sure status is OK, despite any unlockFiles() fatals
-                       $this->status->setResult( true, $this->status->value );
-               }
-       }
-}
-
 /**
  * Version of LockManager that uses a quorum from peer servers for locks.
  * The resource space can also be sharded into separate peer groups.
index 26a5e2d..610fc47 100644 (file)
@@ -111,7 +111,7 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-acquirelock', $path );
                        }
-                       return;
+                       return $status;
                }
 
                // Fetch all the existing lock records...
diff --git a/includes/filebackend/lockmanager/ScopedLock.php b/includes/filebackend/lockmanager/ScopedLock.php
new file mode 100644 (file)
index 0000000..5a80bee
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Resource locking 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
+ *
+ * @file
+ * @ingroup LockManager
+ * @author Aaron Schulz
+ */
+
+/**
+ * Self-releasing locks
+ *
+ * LockManager helper class to handle scoped locks, which
+ * release when an object is destroyed or goes out of scope.
+ *
+ * @ingroup LockManager
+ * @since 1.19
+ */
+class ScopedLock {
+       /** @var LockManager */
+       protected $manager;
+       /** @var Status */
+       protected $status;
+       /** @var Array List of resource paths*/
+       protected $paths;
+
+       protected $type; // integer lock type
+
+       /**
+        * @param $manager LockManager
+        * @param $paths Array List of storage paths
+        * @param $type integer LockManager::LOCK_* constant
+        * @param $status Status
+        */
+       protected function __construct(
+               LockManager $manager, array $paths, $type, Status $status
+       ) {
+               $this->manager = $manager;
+               $this->paths = $paths;
+               $this->status = $status;
+               $this->type = $type;
+       }
+
+       /**
+        * Get a ScopedLock object representing a lock on resource paths.
+        * Any locks are released once this object goes out of scope.
+        * The status object is updated with any errors or warnings.
+        *
+        * @param $manager LockManager
+        * @param $paths Array List of storage paths
+        * @param $type integer LockManager::LOCK_* constant
+        * @param $status Status
+        * @return ScopedLock|null Returns null on failure
+        */
+       public static function factory(
+               LockManager $manager, array $paths, $type, Status $status
+       ) {
+               $lockStatus = $manager->lock( $paths, $type );
+               $status->merge( $lockStatus );
+               if ( $lockStatus->isOK() ) {
+                       return new self( $manager, $paths, $type, $status );
+               }
+               return null;
+       }
+
+       function __destruct() {
+               $wasOk = $this->status->isOK();
+               $this->status->merge( $this->manager->unlock( $this->paths, $this->type ) );
+               if ( $wasOk ) {
+                       // Make sure status is OK, despite any unlockFiles() fatals
+                       $this->status->setResult( true, $this->status->value );
+               }
+       }
+}
index 6cd93cc..82f7b49 100644 (file)
@@ -127,6 +127,9 @@ class FileRepo {
                        if ( !isset( $this->zones[$zone]['directory'] ) ) {
                                $this->zones[$zone]['directory'] = '';
                        }
+                       if ( !isset( $this->zones[$zone]['urlsByExt'] ) ) {
+                               $this->zones[$zone]['urlsByExt'] = array();
+                       }
                }
        }
 
@@ -196,14 +199,17 @@ class FileRepo {
        /**
         * Get the URL corresponding to one of the four basic zones
         *
-        * @param $zone String: one of: public, deleted, temp, thumb
+        * @param $zone String One of: public, deleted, temp, thumb
+        * @param $ext String|null Optional file extension
         * @return String or false
         */
-       public function getZoneUrl( $zone ) {
-               if ( isset( $this->zones[$zone]['url'] )
-                       && in_array( $zone, array( 'public', 'temp', 'thumb' ) ) )
-               {
-                       return $this->zones[$zone]['url']; // custom URL
+       public function getZoneUrl( $zone, $ext = null ) {
+               if ( in_array( $zone, array( 'public', 'temp', 'thumb' ) ) ) { // 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'] ) ) {
+                               return $this->zones[$zone]['url']; // custom URL for zone
+                       }
                }
                switch ( $zone ) {
                        case 'public':
@@ -1021,18 +1027,25 @@ class FileRepo {
         * Returns a FileRepoStatus object. On success, the value contains "new" or
         * "archived", to indicate whether the file was new with that name.
         *
+        * Options to $options include:
+        *   - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
+        *
         * @param $srcPath String: the source file system path, storage path, or URL
         * @param $dstRel String: the destination relative path
         * @param $archiveRel String: the relative path where the existing file is to
         *        be archived, if there is one. Relative to the public zone root.
         * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate
         *        that the source file should be deleted if possible
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus
         */
-       public function publish( $srcPath, $dstRel, $archiveRel, $flags = 0 ) {
+       public function publish(
+               $srcPath, $dstRel, $archiveRel, $flags = 0, array $options = array()
+       ) {
                $this->assertWritableRepo(); // fail out if read-only
 
-               $status = $this->publishBatch( array( array( $srcPath, $dstRel, $archiveRel ) ), $flags );
+               $status = $this->publishBatch(
+                       array( array( $srcPath, $dstRel, $archiveRel, $options ) ), $flags );
                if ( $status->successCount == 0 ) {
                        $status->ok = false;
                }
@@ -1048,13 +1061,14 @@ class FileRepo {
        /**
         * Publish a batch of files
         *
-        * @param $triplets Array: (source, dest, archive) triplets as per publish()
+        * @param $ntuples Array: (source, dest, archive) triplets or
+        *        (source, dest, archive, options) 4-tuples as per publish().
         * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate
         *        that the source files should be deleted if possible
         * @throws MWException
         * @return FileRepoStatus
         */
-       public function publishBatch( array $triplets, $flags = 0 ) {
+       public function publishBatch( array $ntuples, $flags = 0 ) {
                $this->assertWritableRepo(); // fail out if read-only
 
                $backend = $this->backend; // convenience
@@ -1069,8 +1083,9 @@ class FileRepo {
                $operations = array();
                $sourceFSFilesToDelete = array(); // cleanup for disk source files
                // Validate each triplet and get the store operation...
-               foreach ( $triplets as $i => $triplet ) {
-                       list( $srcPath, $dstRel, $archiveRel ) = $triplet;
+               foreach ( $ntuples as $i => $ntuple ) {
+                       list( $srcPath, $dstRel, $archiveRel ) = $ntuple;
+                       $options = isset( $ntuple[3] ) ? $ntuple[3] : array();
                        // Resolve source to a storage path if virtual
                        $srcPath = $this->resolveToStoragePath( $srcPath );
                        if ( !$this->validateFilename( $dstRel ) ) {
@@ -1094,6 +1109,9 @@ class FileRepo {
                                return $this->newFatal( 'directorycreateerror', $archiveDir );
                        }
 
+                       // Set any desired headers to be use in GET/HEAD responses
+                       $headers = isset( $options['headers'] ) ? $options['headers'] : array();
+
                        // Archive destination file if it exists.
                        // This will check if the archive file also exists and fail if does.
                        // This is a sanity check to avoid data loss. On Windows and Linux,
@@ -1111,25 +1129,28 @@ class FileRepo {
                        if ( FileBackend::isStoragePath( $srcPath ) ) {
                                if ( $flags & self::DELETE_SOURCE ) {
                                        $operations[] = array(
-                                               'op'           => 'move',
-                                               'src'          => $srcPath,
-                                               'dst'          => $dstPath,
-                                               'overwrite'    => true // replace current
+                                               'op'        => 'move',
+                                               'src'       => $srcPath,
+                                               'dst'       => $dstPath,
+                                               'overwrite' => true, // replace current
+                                               'headers'   => $headers
                                        );
                                } else {
                                        $operations[] = array(
-                                               'op'           => 'copy',
-                                               'src'          => $srcPath,
-                                               'dst'          => $dstPath,
-                                               'overwrite'    => true // replace current
+                                               'op'        => 'copy',
+                                               'src'       => $srcPath,
+                                               'dst'       => $dstPath,
+                                               'overwrite' => true, // replace current
+                                               'headers'   => $headers
                                        );
                                }
                        } else { // FS source path
                                $operations[] = array(
-                                       'op'           => 'store',
-                                       'src'          => $srcPath,
-                                       'dst'          => $dstPath,
-                                       'overwrite'    => true // replace current
+                                       'op'        => 'store',
+                                       'src'       => $srcPath,
+                                       'dst'       => $dstPath,
+                                       'overwrite' => true, // replace current
+                                       'headers'   => $headers
                                );
                                if ( $flags & self::DELETE_SOURCE ) {
                                        $sourceFSFilesToDelete[] = $srcPath;
@@ -1140,8 +1161,8 @@ class FileRepo {
                // Execute the operations for each triplet
                $status->merge( $backend->doOperations( $operations ) );
                // Find out which files were archived...
-               foreach ( $triplets as $i => $triplet ) {
-                       list( $srcPath, $dstRel, $archiveRel ) = $triplet;
+               foreach ( $ntuples as $i => $ntuple ) {
+                       list( $srcPath, $dstRel, $archiveRel ) = $ntuple;
                        $archivePath = $this->getZonePath( 'public' ) . "/$archiveRel";
                        if ( $this->fileExists( $archivePath ) ) {
                                $status->value[$i] = 'archived';
@@ -1399,6 +1420,17 @@ class FileRepo {
                return $this->backend->getFileTimestamp( array( 'src' => $path ) );
        }
 
+       /**
+        * Get the size of a file with a given virtual URL/storage path
+        *
+        * @param $virtualUrl string
+        * @return integer|bool False on failure
+        */
+       public function getFileSize( $virtualUrl ) {
+               $path = $this->resolveToStoragePath( $virtualUrl );
+               return $this->backend->getFileSize( array( 'src' => $path ) );
+       }
+
        /**
         * Get the sha1 (base 36) of a file with a given virtual URL/storage path
         *
@@ -1649,10 +1681,11 @@ class FileRepo {
        /**
         * Get an UploadStash associated with this repo.
         *
+        * @param $user User
         * @return UploadStash
         */
-       public function getUploadStash() {
-               return new UploadStash( $this );
+       public function getUploadStash( User $user = null ) {
+               return new UploadStash( $this, $user );
        }
 
        /**
index 13de9e6..7697e4e 100644 (file)
@@ -337,16 +337,17 @@ class ForeignAPIRepo extends FileRepo {
        /**
         * @see FileRepo::getZoneUrl()
         * @param $zone String
+        * @param $ext String|null Optional file extension
         * @return String
         */
-       function getZoneUrl( $zone ) {
+       function getZoneUrl( $zone, $ext = null ) {
                switch ( $zone ) {
                        case 'public':
                                return $this->url;
                        case 'thumb':
                                return $this->thumbUrl;
                        default:
-                               return parent::getZoneUrl( $zone );
+                               return parent::getZoneUrl( $zone, $ext );
                }
        }
 
index 694623b..e1a8547 100644 (file)
@@ -135,8 +135,9 @@ class ArchivedFile {
                }
 
                if( !$this->title || $this->title->getNamespace() == NS_FILE ) {
+                       $this->dataLoaded = true; // set it here, to have also true on miss
                        $dbr = wfGetDB( DB_SLAVE );
-                       $res = $dbr->select( 'filearchive',
+                       $row = $dbr->selectRow( 'filearchive',
                                array(
                                        'fa_id',
                                        'fa_name',
@@ -159,20 +160,18 @@ class ArchivedFile {
                                        'fa_sha1' ),
                                $conds,
                                __METHOD__,
-                               array( 'ORDER BY' => 'fa_timestamp DESC' ) );
-                       if ( $res == false || $dbr->numRows( $res ) == 0 ) {
-                       // this revision does not exist?
+                               array( 'ORDER BY' => 'fa_timestamp DESC')
+                       );
+                       if ( !$row ) {
+                               // this revision does not exist?
                                return null;
                        }
-                       $ret = $dbr->resultObject( $res );
-                       $row = $ret->fetchObject();
 
                        // initialize fields for filestore image object
                        $this->loadFromRow( $row );
                } else {
                        throw new MWException( 'This title does not correspond to an image page.' );
                }
-               $this->dataLoaded = true;
                $this->exists = true;
 
                return true;
index 557609d..bfb9197 100644 (file)
@@ -316,7 +316,8 @@ abstract class File {
        public function getUrl() {
                if ( !isset( $this->url ) ) {
                        $this->assertRepoDefined();
-                       $this->url = $this->repo->getZoneUrl( 'public' ) . '/' . $this->getUrlRel();
+                       $ext = $this->getExtension();
+                       $this->url = $this->repo->getZoneUrl( 'public', $ext ) . '/' . $this->getUrlRel();
                }
                return $this->url;
        }
@@ -902,13 +903,14 @@ abstract class File {
                                $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 ) ) {
+                               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 = $this->handler->getTransform(
+                                                       $this, $thumbPath, $thumbUrl, $params );
                                                $thumb->setStoragePath( $thumbPath );
                                                break;
                                        }
@@ -1253,7 +1255,8 @@ abstract class File {
         */
        function getArchiveUrl( $suffix = false ) {
                $this->assertRepoDefined();
-               $path = $this->repo->getZoneUrl( 'public' ) . '/archive/' . $this->getHashPath();
+               $ext = $this->getExtension();
+               $path = $this->repo->getZoneUrl( 'public', $ext ) . '/archive/' . $this->getHashPath();
                if ( $suffix === false ) {
                        $path = substr( $path, 0, -1 );
                } else {
@@ -1272,7 +1275,8 @@ abstract class File {
         */
        function getArchiveThumbUrl( $archiveName, $suffix = false ) {
                $this->assertRepoDefined();
-               $path = $this->repo->getZoneUrl( 'thumb' ) . '/archive/' .
+               $ext = $this->getExtension();
+               $path = $this->repo->getZoneUrl( 'thumb', $ext ) . '/archive/' .
                        $this->getHashPath() . rawurlencode( $archiveName ) . "/";
                if ( $suffix === false ) {
                        $path = substr( $path, 0, -1 );
@@ -1291,7 +1295,8 @@ abstract class File {
         */
        function getThumbUrl( $suffix = false ) {
                $this->assertRepoDefined();
-               $path = $this->repo->getZoneUrl( 'thumb' ) . '/' . $this->getUrlRel();
+               $ext = $this->getExtension();
+               $path = $this->repo->getZoneUrl( 'thumb', $ext ) . '/' . $this->getUrlRel();
                if ( $suffix !== false ) {
                        $path .= '/' . rawurlencode( $suffix );
                }
@@ -1386,17 +1391,21 @@ abstract class File {
         * The archive name should be passed through to recordUpload for database
         * registration.
         *
+        * Options to $options include:
+        *   - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
+        *
         * @param $srcPath String: local filesystem path to the source image
         * @param $flags Integer: a bitwise combination of:
         *     File::DELETE_SOURCE    Delete the source file, i.e. move
         *         rather than copy
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         *
         * STUB
         * Overridden by LocalFile
         */
-       function publish( $srcPath, $flags = 0 ) {
+       function publish( $srcPath, $flags = 0, array $options = array() ) {
                $this->readOnlyError();
        }
 
@@ -1736,6 +1745,18 @@ abstract class File {
                return $fsFile->getSha1Base36();
        }
 
+       /**
+        * @return Array HTTP header name/value map to use for HEAD/GET request responses
+        */
+       function getStreamHeaders() {
+               $handler = $this->getHandler();
+               if ( $handler ) {
+                       return $handler->getStreamHeaders( $this->getMetadata() );
+               } else {
+                       return array();
+               }
+       }
+
        /**
         * @return string
         */
@@ -1780,7 +1801,7 @@ abstract class File {
        }
 
        /**
-        * @return Title
+        * @return Title|null
         */
        function getRedirectedTitle() {
                if ( $this->redirected ) {
@@ -1789,6 +1810,7 @@ abstract class File {
                        }
                        return $this->redirectTitle;
                }
+               return null;
        }
 
        /**
index 91f6cb6..a03df85 100644 (file)
@@ -57,9 +57,10 @@ class ForeignDBFile extends LocalFile {
        /**
         * @param $srcPath String
         * @param $flags int
+        * @param $options Array
         * @throws MWException
         */
-       function publish( $srcPath, $flags = 0 ) {
+       function publish( $srcPath, $flags = 0, array $options = array() ) {
                $this->readOnlyError();
        }
 
index f0a3c15..9babe5a 100644 (file)
@@ -771,8 +771,16 @@ class LocalFile extends File {
 
                // Delete thumbnails
                $files = $this->getThumbnails();
+               // Always purge all files from squid regardless of handler filters
+               if ( $wgUseSquid ) {
+                       $urls = array();
+                       foreach( $files as $file ) {
+                               $urls[] = $this->getThumbUrl( $file );
+                       }
+                       array_shift( $urls ); // don't purge directory
+               }
 
-               // Give media handler a chance to filter the purge list
+               // Give media handler a chance to filter the file purge list
                if ( !empty( $options['forThumbRefresh'] ) ) {
                        $handler = $this->getHandler();
                        if ( $handler ) {
@@ -788,10 +796,6 @@ class LocalFile extends File {
 
                // Purge the squid
                if ( $wgUseSquid ) {
-                       $urls = array();
-                       foreach( $files as $file ) {
-                               $urls[] = $this->getThumbUrl( $file );
-                       }
                        SquidUpdate::purge( $urls );
                }
 
@@ -951,7 +955,7 @@ class LocalFile extends File {
 
        /**
         * Upload a file and record it in the DB
-        * @param $srcPath String: source storage path or virtual URL
+        * @param $srcPath String: source storage path, virtual URL, or filesystem path
         * @param $comment String: upload description
         * @param $pageText String: text to use for the new description page,
         *                  if a new description page is created
@@ -972,11 +976,34 @@ class LocalFile extends File {
                        return $this->readOnlyFatalStatus();
                }
 
+               if ( !$props ) {
+                       wfProfileIn( __METHOD__ . '-getProps' );
+                       if ( $this->repo->isVirtualUrl( $srcPath )
+                               || FileBackend::isStoragePath( $srcPath ) )
+                       {
+                               $props = $this->repo->getFileProps( $srcPath );
+                       } else {
+                               $props = FSFile::getPropsFromPath( $srcPath );
+                       }
+                       wfProfileOut( __METHOD__ . '-getProps' );
+               }
+
+               $options = array();
+               $handler = MediaHandler::getHandler( $props['mime'] );
+               if ( $handler ) {
+                       $options['headers'] = $handler->getStreamHeaders( $props['metadata'] );
+               } else {
+                       $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 );
                $this->lock(); // begin
-               $status = $this->publish( $srcPath, $flags );
+               $status = $this->publish( $srcPath, $flags, $options );
 
                if ( $status->successCount > 0 ) {
                        # Essentially we are displacing any existing current file and saving
@@ -1193,13 +1220,13 @@ class LocalFile extends File {
                        $status = $wikiPage->doEditContent( $content, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
 
                        if ( isset( $status->value['revision'] ) ) { // XXX; doEdit() uses a transaction
-                               $dbw->begin();
+                               $dbw->begin( __METHOD__ );
                                $dbw->update( 'logging',
                                        array( 'log_page' => $status->value['revision']->getPage() ),
                                        array( 'log_id' => $logId ),
                                        __METHOD__
                                );
-                               $dbw->commit(); // commit before anything bad can happen
+                               $dbw->commit( __METHOD__ ); // commit before anything bad can happen
                        }
                }
                wfProfileOut( __METHOD__ . '-edit' );
@@ -1252,11 +1279,12 @@ class LocalFile extends File {
         * @param $srcPath String: local filesystem path to the source image
         * @param $flags Integer: a bitwise combination of:
         *     File::DELETE_SOURCE      Delete the source file, i.e. move rather than copy
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function publish( $srcPath, $flags = 0 ) {
-               return $this->publishTo( $srcPath, $this->getRel(), $flags );
+       function publish( $srcPath, $flags = 0, array $options = array() ) {
+               return $this->publishTo( $srcPath, $this->getRel(), $flags, $options );
        }
 
        /**
@@ -1270,10 +1298,11 @@ class LocalFile extends File {
         * @param $dstRel String: target relative path
         * @param $flags Integer: a bitwise combination of:
         *     File::DELETE_SOURCE      Delete the source file, i.e. move rather than copy
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function publishTo( $srcPath, $dstRel, $flags = 0 ) {
+       function publishTo( $srcPath, $dstRel, $flags = 0, array $options = array() ) {
                if ( $this->getRepo()->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
                }
@@ -1283,7 +1312,7 @@ class LocalFile extends File {
                $archiveName = wfTimestamp( TS_MW ) . '!'. $this->getName();
                $archiveRel = 'archive/' . $this->getHashPath() . $archiveName;
                $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0;
-               $status = $this->repo->publish( $srcPath, $dstRel, $archiveRel, $flags );
+               $status = $this->repo->publish( $srcPath, $dstRel, $archiveRel, $flags, $options );
 
                if ( $status->value == 'new' ) {
                        $status->value = '';
@@ -1475,7 +1504,6 @@ class LocalFile extends File {
         * @return bool|mixed
         */
        function getDescriptionText() {
-               global $wgParser;
                $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
                if ( !$revision ) return false;
                $content = $revision->getContent();
index 8d4a3f8..698d1eb 100644 (file)
@@ -179,10 +179,18 @@ class UnregisteredLocalFile extends File {
         */
        function getSize() {
                $this->assertRepoDefined();
-               $props = $this->repo->getFileProps( $this->path );
-               if ( isset( $props['size'] ) ) {
-                       return $props['size'];
-               }
-               return false; // doesn't exist
+               return $this->repo->getFileSize( $this->path );
+       }
+
+       /**
+        * Optimize getLocalRefPath() by using an existing local reference.
+        * The file at the path of $fsFile should not be deleted (or at least
+        * not until the end of the request). This is mostly a performance hack.
+        *
+        * @param $fsFile FSFile
+        * @return void
+        */
+       public function setLocalReference( FSFile $fsFile ) {
+               $this->fsFile = $fsFile;
        }
 }
index 740ead5..ac3f7b6 100644 (file)
@@ -39,6 +39,13 @@ abstract class DatabaseUpdater {
         */
        protected $updates = array();
 
+       /**
+        * Array of updates that were skipped
+        *
+        * @var array
+        */
+       protected $updatesSkipped = array();
+
        /**
         * List of extension-provided database updates
         * @var array
@@ -67,6 +74,20 @@ abstract class DatabaseUpdater {
                'PopulateFilearchiveSha1',
        );
 
+       /**
+        * File handle for SQL output.
+        *
+        * @var Filehandle
+        */
+       protected $fileHandle = null;
+
+       /**
+        * Flag specifying whether or not to skip schema (e.g. SQL-only) updates.
+        *
+        * @var bool
+        */
+       protected $skipSchema = false;
+
        /**
         * Constructor
         *
@@ -80,6 +101,7 @@ abstract class DatabaseUpdater {
                $this->shared = $shared;
                if ( $maintenance ) {
                        $this->maintenance = $maintenance;
+                       $this->fileHandle = $maintenance->fileHandle;
                } else {
                        $this->maintenance = new FakeMaintenance;
                }
@@ -234,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
@@ -245,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
@@ -287,16 +348,36 @@ abstract class DatabaseUpdater {
                return $this->postDatabaseUpdateMaintenance;
        }
 
+       /**
+        * @since 1.21
+        *
+        * Writes the schema updates desired to a file for the DB Admin to run.
+        */
+       private function writeSchemaUpdateFile( $schemaUpdate = array() ) {
+               $updates = $this->updatesSkipped;
+               $this->updatesSkipped = array();
+
+               foreach( $updates as $funcList ) {
+                       $func = $funcList[0];
+                       $arg = $funcList[1];
+                       $origParams = $funcList[2];
+                       $ret = call_user_func_array( $func, $arg );
+                       flush();
+                       $this->updatesSkipped[] = $origParams;
+               }
+       }
+
        /**
         * Do all the updates
         *
         * @param $what Array: what updates to perform
         */
        public function doUpdates( $what = array( 'core', 'extensions', 'stats' ) ) {
-               global $wgVersion;
+               global $wgVersion, $wgLocalisationCacheConf;
 
                $this->db->begin( __METHOD__ );
                $what = array_flip( $what );
+               $this->skipSchema = isset( $what['noschema'] ) || $this->fileHandle !== null;
                if ( isset( $what['core'] ) ) {
                        $this->runUpdates( $this->getCoreUpdateList(), false );
                }
@@ -305,11 +386,26 @@ abstract class DatabaseUpdater {
                        $this->runUpdates( $this->getExtensionUpdates(), true );
                }
 
-               $this->setAppliedUpdates( $wgVersion, $this->updates );
-
                if ( isset( $what['stats'] ) ) {
                        $this->checkStats();
                }
+
+               if ( isset( $what['purge'] ) ) {
+                       $this->purgeCache();
+
+                       if ( $wgLocalisationCacheConf['manualRecache'] ) {
+                               $this->rebuildLocalisationCache();
+                       }
+               }
+
+               $this->setAppliedUpdates( $wgVersion, $this->updates );
+
+               if( $this->fileHandle ) {
+                       $this->skipSchema = false;
+                       $this->writeSchemaUpdateFile( );
+                       $this->setAppliedUpdates( "$wgVersion-schema", $this->updatesSkipped );
+               }
+
                $this->db->commit( __METHOD__ );
        }
 
@@ -321,17 +417,26 @@ abstract class DatabaseUpdater {
         *                  functions
         */
        private function runUpdates( array $updates, $passSelf ) {
+               $updatesDone = array();
+               $updatesSkipped = array();
                foreach ( $updates as $params ) {
+                       $origParams = $params;
                        $func = array_shift( $params );
                        if( !is_array( $func ) && method_exists( $this, $func ) ) {
                                $func = array( $this, $func );
                        } elseif ( $passSelf ) {
                                array_unshift( $params, $this );
                        }
-                       call_user_func_array( $func, $params );
+                       $ret = call_user_func_array( $func, $params );
                        flush();
+                       if( $ret !== false ) {
+                               $updatesDone[] = $origParams;
+                       } else {
+                               $updatesSkipped[] = array( $func, $params, $origParams );
+                       }
                }
-               $this->updates = array_merge( $this->updates, $updates );
+               $this->updatesSkipped = array_merge( $this->updatesSkipped, $updatesSkipped );
+               $this->updates = array_merge( $this->updates, $updatesDone );
        }
 
        /**
@@ -398,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
@@ -408,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();
 
@@ -423,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 ) {
@@ -458,70 +577,133 @@ abstract class DatabaseUpdater {
         */
        protected abstract function getCoreUpdateList();
 
+       /**
+        * Append an SQL fragment to the open file handle.
+        *
+        * @param $filename String: File name to open
+        */
+       public function copyFile( $filename ) {
+               $this->db->sourceFile( $filename, false, false, false,
+                       array( $this, 'appendLine' )
+               );
+       }
+
+       /**
+        * Append a line to the open filehandle.  The line is assumed to
+        * be a complete SQL statement.
+        *
+        * This is used as a callback for for sourceLine().
+        *
+        * @param $line String text to append to the file
+        * @return Boolean false to skip actually executing the file
+        * @throws MWException
+        */
+       public function appendLine( $line ) {
+               $line = rtrim( $line ) . ";\n";
+               if( fwrite( $this->fileHandle, $line ) === false ) {
+                       throw new MWException( "trouble writing file" );
+               }
+               return false;
+       }
+
        /**
         * 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
+        * @return boolean false if patch is skipped.
         */
        protected function applyPatch( $path, $isFullPath = false, $msg = null ) {
                if ( $msg === null ) {
                        $msg = "Applying $path patch";
                }
+               if ( $this->skipSchema ) {
+                       $this->output( "...skipping schema change ($msg).\n" );
+                       return false;
+               }
+
+               $this->output( "$msg ..." );
 
                if ( !$isFullPath ) {
                        $path = $this->db->patchPath( $path );
                }
-
-               $this->output( "$msg ..." );
-               $this->db->sourceFile( $path );
-               $this->output( "done.\n" );
+               if( $this->fileHandle !== null ) {
+                       $this->copyFile( $path );
+               } else {
+                       $this->db->sourceFile( $path );
+               }
+               $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 {
-                       $this->applyPatch( $patch, $fullpath, "Creating $name table" );
+                       return $this->applyPatch( $patch, $fullpath, "Creating $name table" );
                }
+               return true;
        }
 
        /**
         * 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
         * @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 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__ ) ) {
                        $this->output( "...have $field field in $table table.\n" );
                } else {
-                       $this->applyPatch( $patch, $fullpath, "Adding $field field to table $table" );
+                       return $this->applyPatch( $patch, $fullpath, "Adding $field field to table $table" );
                }
+               return true;
        }
 
        /**
         * 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
         * @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 addIndex( $table, $index, $patch, $fullpath = false ) {
-               if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
+               if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
+                       $this->output( "...skipping: '$table' table doesn't exist yet.\n" );
+               } else if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
                        $this->output( "...index $index already set on $table table.\n" );
                } else {
-                       $this->applyPatch( $patch, $fullpath, "Adding index $index to table $table" );
+                       return $this->applyPatch( $patch, $fullpath, "Adding index $index to table $table" );
                }
+               return true;
        }
 
        /**
@@ -531,29 +713,83 @@ abstract class DatabaseUpdater {
         * @param $field String Name of the old field
         * @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 dropField( $table, $field, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                if ( $this->db->fieldExists( $table, $field, __METHOD__ ) ) {
-                       $this->applyPatch( $patch, $fullpath, "Table $table contains $field field. Dropping" );
+                       return $this->applyPatch( $patch, $fullpath, "Table $table contains $field field. Dropping" );
                } else {
                        $this->output( "...$table table does not contain $field field.\n" );
                }
+               return true;
        }
 
        /**
         * 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__ ) ) {
-                       $this->applyPatch( $patch, $fullpath, "Dropping $index index from table $table" );
+                       return $this->applyPatch( $patch, $fullpath, "Dropping $index index from table $table" );
                } else {
                        $this->output( "...$index key doesn't exist.\n" );
                }
+               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" );
        }
 
        /**
@@ -565,8 +801,13 @@ abstract class DatabaseUpdater {
         * @param $table string
         * @param $patch string|false
         * @param $fullpath bool
+        * @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";
 
@@ -576,12 +817,12 @@ abstract class DatabaseUpdater {
                                $this->output( "done.\n" );
                        }
                        else {
-                               $this->applyPatch( $patch, $fullpath, $msg );
+                               return $this->applyPatch( $patch, $fullpath, $msg );
                        }
-
                } else {
                        $this->output( "...$table doesn't exist.\n" );
                }
+               return true;
        }
 
        /**
@@ -591,8 +832,13 @@ abstract class DatabaseUpdater {
         * @param $field String: name of the field to modify
         * @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
         */
        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" );
@@ -601,9 +847,10 @@ abstract class DatabaseUpdater {
                } elseif( $this->updateRowExists( $updateKey ) ) {
                        $this->output( "...$field in table $table already modified by patch $patch.\n" );
                } else {
-                       $this->applyPatch( $patch, $fullpath, "Modifying $field field of table $table" );
                        $this->insertUpdateRow( $updateKey );
+                       return $this->applyPatch( $patch, $fullpath, "Modifying $field field of table $table" );
                }
+               return true;
        }
 
        /**
@@ -696,10 +943,11 @@ abstract class DatabaseUpdater {
        protected function doUpdateTranscacheField() {
                if ( $this->updateRowExists( 'convert transcache field' ) ) {
                        $this->output( "...transcache tc_time already converted.\n" );
-                       return;
+                       return true;
                }
 
-               $this->applyPatch( 'patch-tc-timestamp.sql', false, "Converting tc_time from UNIX epoch to MediaWiki timestamp" );
+               return $this->applyPatch( 'patch-tc-timestamp.sql', false,
+                       "Converting tc_time from UNIX epoch to MediaWiki timestamp" );
        }
 
        /**
@@ -707,29 +955,33 @@ abstract class DatabaseUpdater {
         */
        protected function doCollationUpdate() {
                global $wgCategoryCollation;
-               if ( $this->db->selectField(
-                       'categorylinks',
-                       'COUNT(*)',
-                       'cl_collation != ' . $this->db->addQuotes( $wgCategoryCollation ),
-                       __METHOD__
-               ) == 0 ) {
-                       $this->output( "...collations up-to-date.\n" );
-                       return;
-               }
+               if ( $this->db->fieldExists( 'categorylinks', 'cl_collation', __METHOD__ ) ) {
+                       if ( $this->db->selectField(
+                               'categorylinks',
+                               'COUNT(*)',
+                               'cl_collation != ' . $this->db->addQuotes( $wgCategoryCollation ),
+                               __METHOD__
+                               ) == 0 ) {
+                                       $this->output( "...collations up-to-date.\n" );
+                                       return;
+                       }
 
-               $this->output( "Updating category collations..." );
-               $task = $this->maintenance->runChild( 'UpdateCollation' );
-               $task->execute();
-               $this->output( "...done.\n" );
+                       $this->output( "Updating category collations..." );
+                       $task = $this->maintenance->runChild( 'UpdateCollation' );
+                       $task->execute();
+                       $this->output( "...done.\n" );
+               }
        }
 
        /**
         * Migrates user options from the user table blob to user_properties
         */
        protected function doMigrateUserOptions() {
-               $cl = $this->maintenance->runChild( 'ConvertUserOptions', 'convertUserOptions.php' );
-               $cl->execute();
-               $this->output( "done.\n" );
+               if( $this->db->tableExists( 'user_properties' ) ) {
+                       $cl = $this->maintenance->runChild( 'ConvertUserOptions', 'convertUserOptions.php' );
+                       $cl->execute();
+                       $this->output( "done.\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 7d8bda0..6ed8dd3 100644 (file)
@@ -359,7 +359,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 +391,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 +401,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 +492,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',
@@ -557,7 +557,8 @@ When that has been done, you can '''[$2 enter your wiki]'''.",
 == Getting started ==
 * [//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]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]",
 );
 
 /** Message documentation (Message documentation)
@@ -625,10 +626,13 @@ Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
 * $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-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}}',
@@ -779,8 +783,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.',
 );
 
@@ -2296,6 +2300,7 @@ $3
 Когато файлът вече е в основната директория, '''[$2 уикито ще е достъпно на този адрес]'''.",
        'config-download-localsettings' => 'Изтегляне на LocalSettings.php',
        'config-help' => 'помощ',
+       'config-nofile' => 'Файлът „$1“ не може да бъде открит. Да не е бил изтрит?',
        'mainpagetext' => "'''Уикито беше успешно инсталирано.'''",
        'mainpagedocfooter' => 'Разгледайте [//meta.wikimedia.org/wiki/Help:Contents ръководството] за подробна информация относно използването на софтуера.
 
@@ -2966,15 +2971,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)
@@ -3614,6 +3621,7 @@ $messages['da'] = array(
  * @author LWChris
  * @author Metalhead64
  * @author Purodha
+ * @author Rillke
  * @author The Evil IP address
  * @author Umherirrender
  */
@@ -3930,10 +3938,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.",
@@ -4001,7 +4009,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].",
@@ -4089,7 +4097,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',
@@ -4155,7 +4163,8 @@ Sobald alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''. Wi
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokalisiere MediaWiki für deine Sprache]',
 );
 
 /** German (formal address) (Deutsch (Sie-Form)‎)
@@ -4175,6 +4184,8 @@ $messages['de-formal'] = array(
  * @author Mirzali
  */
 $messages['diq'] = array(
+       'config-title' => 'MediaWiki $1 sazkerdış',
+       'config-information' => 'Melumat',
        'config-your-language' => 'Zıwanê şıma:',
        'config-wiki-language' => 'Wiki zıwan:',
        'config-back' => '← Peyser',
@@ -4185,7 +4196,10 @@ $messages['diq'] = array(
        'config-page-name' => 'Name',
        'config-page-options' => 'Weçinegi',
        'config-page-install' => 'Barine',
+       'config-page-complete' => 'Temamyayo',
        'config-page-readme' => 'Mı bıwane',
+       'config-page-copying' => 'Kopyayeno',
+       'config-page-upgradedoc' => 'Berzkerdış',
        'config-restart' => 'E, fına dest pekê',
        'config-sidebar' => "* [//www.mediawiki.org MediaWiki keye]
 * [//www.mediawiki.org/wiki/Help:Contents User's Şınasiye]
@@ -4214,11 +4228,14 @@ $messages['diq'] = array(
        'config-admin-name' => 'Namey şıma:',
        'config-admin-password' => 'Parola:',
        'config-admin-password-confirm' => 'Fına parola:',
+       'config-admin-email' => 'Adresa e-postey:',
+       'config-profile-private' => 'Bexse wiki',
        '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-pd' => 'Malê Şari',
        'config-extensions' => 'Olekeni',
+       'config-help' => 'peşti',
        'mainpagetext' => "'''MediaWiki vıst ra ser, vıraziya.'''",
        'mainpagedocfooter' => 'Seba gurenayış u eyarkerdışê Wiki-Softwarey [//meta.wikimedia.org/wiki/Help:Contents İdarê karberi] de mıracaet ke.
 
@@ -4256,10 +4273,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)
@@ -4830,12 +4908,13 @@ Cuando lo haya hecho, usted puede '''[$2  entrar en su wiki]'''.",
        'config-help' => 'Ayuda',
        'config-nofile' => 'El archivo "$1" no se pudo encontrar. ¿Se ha eliminado?',
        'mainpagetext' => "'''MediaWiki ha sido instalado con éxito.'''",
-       'mainpagedocfooter' => 'Consulta la [//meta.wikimedia.org/wiki/Ayuda:Contenido Guía de usuario] para obtener información sobre el uso del software wiki.
+       'mainpagedocfooter' => 'Consulta la [//meta.wikimedia.org/wiki/Ayuda:Guía del usuario de contenidos] para obtener información sobre el uso del software wiki.
 
 == Empezando ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]
 * [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Regionalizar MediaWiki para tu idioma]',
 );
 
 /** español (formal) (español (formal))
@@ -4852,26 +4931,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)
@@ -4983,18 +5110,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 صفحهٔ اصلی مدیاویکی]
@@ -5013,13 +5144,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' => 'دوباره کلمه عبور:',
@@ -5032,6 +5170,7 @@ $messages['fa'] = array(
        'config-email-settings' => 'تنظیمات پست الکترونیکی',
        'config-upload-enable' => 'فعال سازی بارگذاری پرونده',
        'config-logo' => 'نشانی نامواره:',
+       'config-extensions' => 'افزونه‌ها',
        'config-install-step-done' => 'انجام شد',
        'config-install-step-failed' => 'ناموفق بود',
        'config-help' => 'راهنما',
@@ -5043,7 +5182,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)
@@ -5053,6 +5192,7 @@ $messages['fa'] = array(
  * @author Nike
  * @author Olli
  * @author Str4nd
+ * @author VezonThunder
  */
 $messages['fi'] = array(
        'config-desc' => 'MediaWiki-asennin',
@@ -5065,14 +5205,23 @@ Löydät sen LocalSettings.php-tiedostosta.',
 Päivitä asennus suorittamalla update.php.',
        'config-localsettings-key' => 'Päivitysavain',
        'config-localsettings-badkey' => 'Antamasi avain on virheellinen.',
+       'config-upgrade-key-missing' => 'Havaittiin aiempi MediaWiki-asennus.
+Päivittääksesi tämän asennuksen lisää LocalSettings.php-tiedostosi loppuun seuraava rivi:
+
+$1',
        'config-localsettings-incomplete' => 'Nykyinen LocalSettings.php-tiedosto näyttää olevan puutteellinen.
 Muuttujaa $1 ei ole asetettu.
 Muuta LocalSettings.php-tiedostoa siten, että muuttuja on asetettu ja napsauta »Jatka».',
+       'config-localsettings-connection-error' => 'Virhe yhdistettäessä tietokantaan käyttäen tiedostossa LocalSettings.php tai AdminSettings.php 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',
@@ -5623,7 +5772,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é',
@@ -5633,7 +5782,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.
@@ -5722,8 +5871,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',
@@ -5780,12 +5929,13 @@ Lorsque c'est fait, vous pouvez '''[$2 accéder à votre wiki]'''.",
        '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)
@@ -6440,7 +6590,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',
@@ -6449,7 +6599,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.
@@ -6540,7 +6690,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',
@@ -6605,7 +6755,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)
@@ -9383,7 +9534,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',
@@ -9404,14 +9556,15 @@ $3
 Setelah melakukannya, Anda dapat '''[$2 memasuki wiki Anda]'''.",
        'config-download-localsettings' => 'Unduh LocalSettings.php',
        '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)
@@ -9424,6 +9577,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.'''",
@@ -9432,7 +9591,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)
@@ -9471,6 +9630,7 @@ $messages['is'] = array(
  * @author Beta16
  * @author Darth Kule
  * @author F. Cosoleto
+ * @author Gianfranco
  * @author Karika
  */
 $messages['it'] = array(
@@ -9526,6 +9686,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.
@@ -9564,10 +9733,14 @@ Installazione interrotta.",
        'config-using-server' => 'Nome server in uso "<nowiki>$1</nowiki>".',
        'config-using-uri' => 'URL del server in uso "<nowiki>$1$2</nowiki>".',
        'config-db-type' => 'Tipo di database:',
+       'config-db-wiki-settings' => 'Identifica questo wiki',
        'config-db-name' => 'Nome del database:',
+       'config-db-name-oracle' => 'Schema del database:',
+       'config-db-username' => 'Nome utente del database:',
        'config-db-password-empty' => 'Inserire una password per il nuovo utente del database: $1.
 Anche se può essere possibile creare utenti senza password, questo non è sicuro.',
        'config-db-install-help' => "Inserire il nome utente e la password che verranno usate per la connessione al database durante il processo d'installazione.",
+       'config-db-prefix' => 'Prefisso tabella del database:',
        'config-db-charset' => 'Set di caratteri del database',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
        'config-charset-mysql4' => 'MySQL 4.0 con compatibilità UTF-8',
@@ -9585,15 +9758,19 @@ 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:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
        'config-mysql-charset' => 'Set di caratteri del database:',
+       'config-mysql-binary' => 'Binario',
        'config-mysql-utf8' => 'UTF-8',
        'config-ibm_db2-low-db-pagesize' => "Il database DB2 in uso ha una tablespace predefinita con un insufficiente pagesize, che dovrebbe essere '''32K''' o maggiore.",
        'config-ns-generic' => 'Progetto',
        'config-ns-site-name' => 'Stesso nome wiki: $1',
+       'config-ns-other-default' => 'MyWiki',
        'config-admin-box' => 'Account amministratore',
        'config-admin-name' => 'Tuo nome:',
        'config-admin-password' => 'Password:',
@@ -9614,26 +9791,47 @@ Specificare un nome utente diverso.',
 Inserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing list.",
        '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', # Fuzzy
+       'config-profile-no-anon' => 'Creazione utenza obbligatoria',
+       'config-profile-fishbowl' => 'Solo editori autorizzati',
+       'config-profile-private' => 'Wiki privata',
        'config-license' => 'Copyright e licenza:',
+       'config-license-none' => 'Nessun piè di pagina per la licenza',
        'config-license-cc-by-sa' => 'Creative Commons Attribuzione-Condividi allo stesso modo',
        'config-license-cc-by' => 'Creative Commons Attribuzione',
        'config-license-cc-by-nc-sa' => 'Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo',
        'config-license-cc-0' => 'Creative Commons Zero (pubblico dominio)',
        'config-license-gfdl' => 'GNU Free Documentation License 1.3 o versioni successive',
        'config-license-pd' => 'Pubblico dominio',
+       'config-license-cc-choose' => 'Seleziona una delle licenze Creative Commons',
+       'config-license-help' => "Molti wiki pubblici rilasciano i loro contributi con una [http://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.
+
+Se vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere '''Creative Commons Attribution Share Alike'''.
+
+In precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.",
        'config-email-settings' => 'Impostazioni email',
+       'config-email-user' => 'Abilita invio email fra utenti',
        'config-email-auth' => 'Abilita autenticazione via email',
+       'config-upload-enable' => 'Consentire il caricamento di file',
        'config-upload-deleted' => 'Directory per i file cancellati:',
        'config-logo' => 'URL del logo:',
+       'config-instantcommons' => 'Abilita Instant Commons',
        'config-cc-again' => 'Seleziona di nuovo...',
        'config-cc-not-chosen' => 'Scegliere quale licenza Creative Commons si desidera e cliccare su "procedi".',
        'config-advanced-settings' => 'Configurazione avanzata',
+       'config-memcache-needservers' => 'È stato selezionato il tipo di caching Memcached, ma non è stato impostato alcun server.',
        'config-memcache-badip' => 'È stato inserito un indirizzo IP non valido per Memcached: $1.',
        'config-extensions' => 'Estensioni',
+       'config-install-step-done' => 'fatto',
+       'config-install-step-failed' => 'non riuscito',
+       'config-install-schema' => 'Creazione dello schema',
+       'config-install-user' => 'Creazione di utente del database',
        'config-install-user-alreadyexists' => 'L\'utente "$1" è già presente',
        'config-install-user-create-failed' => 'Creazione dell\'utente "$1" non riuscita: $2',
        'config-install-user-missing' => 'L\'utente indicato "$1" non esiste.',
        'config-install-tables-failed' => "'''Errore''': La creazione della tabella non è riuscita: $1",
+       'config-install-interwiki' => 'Riempimento della tabella interwiki predefinita',
        'config-install-interwiki-list' => 'Impossibile leggere il file <code>interwiki.list</code>.',
        'config-install-stats' => 'Inizializzazione delle statistiche',
        'config-install-keys' => 'Generazione delle chiavi segrete',
@@ -9653,7 +9851,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 (日本語)
@@ -9690,8 +9889,8 @@ LocalSettings.php 内でこの変数を設定して、「{{int:Config-continue}}
 セッションの有効期間は$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' => 'ウィキの言語:',
@@ -9745,17 +9944,17 @@ MediaWikiのインストールはできません。',
 しかし、MediaWikiには PHP $2 以上が必要です。',
        'config-unicode-using-utf8' => 'Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。',
        '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-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-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-no-fts3' => "'''警告''': SQLite は [//sqlite.org/fts3.html FTS3] モジュールなしでコンパイルされており、このバックエンドでは検索機能は利用できなくなります。",
        'config-register-globals' => "'''警告:PHPの<code>[http://php.net/register_globals register_globals]</code>オプションが有効になっています。'''
 '''可能なら無効化してください。'''
 MediaWikiは動作しますが、サーバーは、潜在的なセキュリティ脆弱性を露呈します。",
@@ -9771,8 +9970,8 @@ MediaWikiは動作しますが、サーバーは、潜在的なセキュリテ
        'config-ze1' => "'''致命的エラー:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]が動作しています!'''
 このオプションは、MediaWikiにおいて深刻なバグを引き起こします。
 このオプションが無効化されないかぎり、MediaWikiをインストールし利用することはできません。",
-       '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§があります。",
+       '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パッケージをインストールしてください。',
@@ -9781,13 +9980,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>。
@@ -9796,11 +9995,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でのバグ情報])。
@@ -9831,9 +10031,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' => 'インストール作業終了後の利用者アカウント',
@@ -9859,6 +10061,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 は単一のファイル内にすべてのデータを格納しています。
 
@@ -9904,7 +10107,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 です。',
@@ -9952,7 +10155,7 @@ chmod a+w $3</pre>',
 
 [$1 ウィキの使用を開始]することができます。',
        'config-regenerate' => 'LocalSettings.phpを再生成→',
-       'config-show-table-status' => 'SHOW TABLE STATUSクエリーが失敗しました!',
+       'config-show-table-status' => 'SHOW TABLE STATUS クエリが失敗しました!',
        'config-unknown-collation' => "'''警告:''' データベースは認識されない照合を使用しています。",
        'config-db-web-account' => 'ウェブアクセスのためのデータベースアカウント',
        'config-db-web-help' => 'ウィキの通常の操作の際に、ウェブ サーバーがデータベース サーバーに接続できるように、ユーザー名とパスワードを指定してください。',
@@ -9984,8 +10187,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' => '管理アカウント',
@@ -9994,11 +10197,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' => 'メールアドレスを入力してください。他の利用者からのメールの受け取り、パスワードのリセット、ウォッチリストに登録したページの更新通知に使用します。空欄のままにすることもできます。',
@@ -10007,26 +10210,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' => '著作権とライセンス:',
@@ -10037,23 +10240,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' => 'メールの認証を有効にする',
@@ -10107,7 +10310,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' => '拡張機能を含む',
@@ -10125,42 +10328,44 @@ 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 ウィキに入る]'''ことができます。",
+上記の作業が完了すると、'''[$2 ウィキに入る]'''ことができます。",
        'config-download-localsettings' => 'LocalSettings.php をダウンロード',
        'config-help' => 'ヘルプ',
+       'config-nofile' => 'ファイル「$1」が見つかりませんでした。削除された可能性があります。',
        'mainpagetext' => "'''MediaWiki のインストールに成功しました。'''",
        'mainpagedocfooter' => 'ウィキソフトウェアの使い方に関する情報は[//meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。
 
 == はじめましょう ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings/ja 設定の一覧]
 * [//www.mediawiki.org/wiki/Manual:FAQ/ja MediaWiki よくある質問と回答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiリリース情報メーリングリスト]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]
+* [//www.mediawiki.org/wiki/Localisation/ja MediaWiki のあなたの言語へのローカライズ]',
 );
 
 /** Jamaican Creole English (Patois)
@@ -10277,6 +10482,7 @@ $messages['ka'] = array(
        'config-install-step-done' => 'შესრულდა',
        'config-install-step-failed' => 'ვერ მოხერხდა',
        'config-install-tables' => 'ცხრილების შექმნა',
+       'config-install-interwiki-list' => 'ვერ მოიძებნა ფაილი <code>interwiki.list</code>.',
        'config-download-localsettings' => 'LocalSettings.php-ის გადმოწერა',
        'config-help' => 'დახმარება',
        'mainpagetext' => "'''მედიავიკი წარმატებით ჩაიტვირთა.'''",
@@ -10286,7 +10492,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)
@@ -10550,11 +10757,11 @@ Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
 [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>.",
@@ -10633,10 +10840,10 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
 
 제공하는 디렉토리는 설치하는 동안 웹 서버에 의해 쓸 수 있어야 합니다.
 
-PHP 파일이 있는 곳을 우리가 이를 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
+PHP 파일이 있는 곳을 우리가 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
 
 설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원본 데이터베이스에 접근하는 데 실패합니다.
-원시 사용자 데이터(이메일 주소, 암호 해시) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
+원본 사용자 데이터(이메일 주소, 해시한 비밀번호) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
 
 <code>/var/lib/mediawiki/yourwiki</code>와 같이 모두 다른 곳에서 데이터베이스를 넣어보도록 하세요.',
        'config-oracle-def-ts' => '기본 테이블공간:',
@@ -10715,7 +10922,7 @@ 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 위키를 시작]할 수 있습니다.',
@@ -10792,7 +10999,7 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
        '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' => '비공개 위키',
@@ -10808,7 +11015,7 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
 '''{{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' => '크리에이티브 커먼즈 저작자표시-동일조건변경허락',
@@ -10893,7 +11100,7 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-install-alreadydone' => "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.
 다음 페이지에서 진행하세요.",
        'config-install-begin' => '"{{int:config-continue}}"을 누르면 미디어위키의 설치를 시작합니다.
-그래도 바꾸는 것을 원한다면 뒤로를 누릅니다.',
+그래도 바꾸는 것을 원한다면 뒤로를 누릅니다.', # Fuzzy
        'config-install-step-done' => '완료',
        'config-install-step-failed' => '실패',
        'config-install-extensions' => '확장 기능을 포함하는 중',
        '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 (къарачай-малкъар)
@@ -11833,8 +12041,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].
 
@@ -11842,7 +12107,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)
@@ -12380,7 +12645,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' => 'Приватно вики',
@@ -12390,7 +12655,7 @@ chmod a+w $3</pre>',
 Многумина имаат најдено најразлични полезни примени за МедијаВики, но понекогаш не е лесно да убедите некого во предностите на вики-концептот.
 Значи имате избор.
 
-'''{{int:config-profile-wiki}}''' — секој може да го уредува, дури и без најавување.
+'''{{int:config-profile-wiki}}''' — модел според кој секој може да уредува, дури и без најавување.
 Ако имате вики со '''задолжително отворање на сметка''', тогаш добивате повеќе контрола, но ова може даги одврати спонтаните учесници.
 
 '''{{int:config-profile-fishbowl}}''' — може да уредуваат само уредници што имаат добиено дозвола за тоа, но јавноста може да ги гледа страниците, вклучувајќи ја нивната историја.
@@ -12399,13 +12664,13 @@ chmod a+w $3</pre>',
 По инсталацијата имате на избор и посложени кориснички права и поставки. Погледајте во [//www.mediawiki.org/wiki/Manual:User_rights прирачникот].",
        'config-license' => 'Авторски права и лиценца:',
        'config-license-none' => 'Без подножје за лиценца',
-       'config-license-cc-by-sa' => 'Creative Commons НаведиИзвор СподелиПодИстиУслови',
+       'config-license-cc-by-sa' => 'Криејтив комонс НаведиИзвор СподелиПодИстиУслови',
        'config-license-cc-by' => 'Криејтив комонс НаведиИзвор',
-       'config-license-cc-by-nc-sa' => 'Creative Commons НаведиИзвор-Некомерцијално-СподелиПодИстиУслови',
+       'config-license-cc-by-nc-sa' => 'Криејтив комонс НаведиИзвор-Некомерцијално-СподелиПодИстиУслови',
        'config-license-cc-0' => 'Криејтив комонс Нула (јавна сопственост)',
        'config-license-gfdl' => 'ГНУ-ова лиценца за слободна документација 1.3 или понова',
        'config-license-pd' => 'Јавна сопственост',
-       'config-license-cc-choose' => 'Одберете друга Creative Commons лиценца по ваш избор',
+       'config-license-cc-choose' => 'Одберете друга лиценца на Криејтив комонс по ваш избор',
        'config-license-help' => "Многу јавни викија ги ставаат сите придонеси под [http://freedomdefined.org/Definition слободна лиценца].
 Со ова се создава атмосфера на општа сопственост и поттикнува долгорочно учество.
 Ова не е неопходно за викија на поединечни физички или правни лица.
@@ -12453,10 +12718,10 @@ chmod a+w $3</pre>',
 За да може ова да работи, МедијаВики бара пристап до интернет.
 
 За повеќе информации за оваа функција и напатствија за нејзино поставување на вики (сите други освен Ризницата), коносултирајте го [//mediawiki.org/wiki/Manual:$wgForeignFileRepos прирачникот].',
-       'config-cc-error' => 'Изборникот на Creative Commons лиценца не даде резултати.
+       'config-cc-error' => 'Изборникот на лиценци од Криејтив комонс не даде резултати.
 Внесете го името на лиценцата рачно.',
        'config-cc-again' => 'Одберете повторно...',
-       'config-cc-not-chosen' => 'Одберете ја саканата Creative Commons лиценца и кликнете на „продолжи“.',
+       'config-cc-not-chosen' => 'Одберете ја саканата лиценца од Криејтив комонс и стиснете на „продолжи“.',
        'config-advanced-settings' => 'Напредни нагодувања',
        'config-cache-options' => 'Нагодувања за кеширање на објекти:',
        'config-cache-help' => 'Кеширањето на објекти се користи за зголемување на брзината на МедијаВики со кеширање на често употребуваните податоци.
@@ -12481,7 +12746,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' => 'Вклучувам додатоци',
@@ -12546,7 +12811,8 @@ $3
 ==Од каде да почнете==
 * [//meta.wikimedia.org/wiki/Manual:Configuration_settings Список на нагодувања]
 * [//meta.wikimedia.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 Локализирајте го МедијаВики на вашиот јазик]',
 );
 
 /** Malayalam (മലയാളം)
@@ -12734,8 +13000,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',
@@ -12746,6 +13023,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.',
@@ -12753,6 +13037,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',
@@ -12767,19 +13059,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.
@@ -12788,13 +13087,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',
@@ -12807,13 +13116,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',
+       '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 LocalSettings.php',
+       '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 (မြန်မာဘာသာ)
@@ -13450,9 +13823,9 @@ U kunt MediaWiki niet installeren.',
 MediaWiki heeft PHP $2 of hoger nodig om correct te kunnen werken.',
        'config-unicode-using-utf8' => 'Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.',
        'config-unicode-using-intl' => 'Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.',
-       'config-unicode-pure-php-warning' => "'''Waarschuwing''': De [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicode-normalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.
-Als u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-normalisatie].",
-       'config-unicode-update-warning' => "'''Waarschuwing''': De geïnstalleerde versie van de Unicode-normalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].
+       '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 u MediaWiki voor een website met veel verkeer installeert, lees u 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].
 U moet [//www.mediawiki.org/wiki/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.",
        'config-no-db' => 'Het was niet mogelijk een geschikte databasedriver te vinden voor PHP.
 U moet een databasedriver installeren voor PHP.
@@ -13463,7 +13836,7 @@ Als u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databased
 Als u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.',
        'config-outdated-sqlite' => "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
        'config-no-fts3' => "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; er zijn geen zoekfuncties niet beschikbaar.",
-       'config-register-globals' => "'''Waarschuwing: De PHP-optie <code>[http://php.net/register_globals register_globals]</code> is ingeschakeld.'''
+       '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 uw 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!'''
@@ -13496,7 +13869,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.",
@@ -13510,13 +13883,14 @@ 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.',
@@ -13554,7 +13928,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.
@@ -13581,12 +13955,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:',
@@ -13623,7 +13997,7 @@ Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en st
 Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).',
        'config-connection-error' => '$1.
 
-Controleer de host, gebruikersnaam en wachtwoord hieronder in en probeer het opnieuw.',
+Controleer de host, gebruikersnaam en wachtwoord en probeer het opnieuw.',
        'config-invalid-schema' => 'Ongeldig schema voor MediaWiki "$1".
 Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_).',
        'config-db-sys-create-oracle' => 'Het installatieprogramma biedt alleen de mogelijkheid een nieuwe gebruiker aan te maken met de SYSDBA-gebruiker.',
@@ -13632,7 +14006,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.
@@ -13652,14 +14026,14 @@ Voer op een Linux-systeem de volgende opdrachten uit:
 <pre>cd $2
 mkdir $3
 chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Er is een fout opgetreden bij het aanmaken van de gegevensmap "$1".
+       'config-sqlite-mkdir-error' => 'Er is een fout opgetreden tijdens het aanmaken van de gegevensmap "$1".
 Controleer de locatie en probeer het opnieuw.',
        'config-sqlite-dir-unwritable' => 'Het was niet mogelijk in de map "$1" te schrijven.
 Wijzig de rechten zodat de webserver erin kan schrijven en probeer het opnieuw.',
        'config-sqlite-connection-error' => '$1.
 
 Controleer de map voor gegevens en de databasenaam hieronder en probeer het opnieuw.',
-       'config-sqlite-readonly' => 'Het bestand <code>$1</code> kan niet geschreven worden.',
+       'config-sqlite-readonly' => 'Er kan niet naar bestand <code>$1</code> worden geschreven.',
        'config-sqlite-cant-create-db' => 'Het was niet mogelijk het databasebestand <code>$1</code> aan te maken.',
        'config-sqlite-fts3-downgrade' => 'PHP heeft geen ondersteuning voor FTS3.
 De tabellen worden gedowngrade.',
@@ -13673,7 +14047,7 @@ 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].',
+U kunt nu [$1 uw wiki gebruiken].',
        'config-regenerate' => 'LocalSettings.php opnieuw aanmaken →',
        'config-show-table-status' => 'Het uitvoeren van SHOW TABLE STATUS is mislukt!',
        'config-unknown-collation' => "'''Waarschuwing:''' de database gebruikt een collatie die niet wordt herkend.",
@@ -13686,7 +14060,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.
@@ -13701,7 +14075,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.",
@@ -13742,13 +14116,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',
@@ -13764,7 +14138,7 @@ Een wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkhei
 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].",
+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' => 'Auteursrechten en licentie:',
        'config-license-none' => 'Geen licentie in de voettekst',
        'config-license-cc-by-sa' => 'Creative Commons Naamsvermelding-Gelijk delen',
@@ -13785,25 +14159,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' => 'Gebruikersoverlegnotificatie 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' => 'Gebruikersoverlegmeldingen inschakelen',
+       '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.
@@ -13824,13 +14198,13 @@ Meer informatie over deze functie en hoe deze in te stellen voor andere wiki\'s
        'config-cc-error' => 'De licentiekiezer van Creative Commons heeft geen resultaat opgeleverd.
 Voer de licentie handmatig in.',
        'config-cc-again' => 'Opnieuw kiezen...',
-       'config-cc-not-chosen' => 'Kies alstublieft de Creative Commons-licentie die u wilt gebruiken en klik op "doorgaan".',
+       'config-cc-not-chosen' => 'Kies alstublieft de Creative Commonslicentie die u wilt gebruiken en klik op "doorgaan".',
        'config-advanced-settings' => 'Gevorderde instellingen',
        'config-cache-options' => 'Instellingen voor het cachen van objecten:',
        'config-cache-help' => 'Het cachen van objecten wordt gebruikt om de snelheid van MediaWiki te verbeteren door vaak gebruikte gegevens te bewaren.
 Middelgrote tot grote websites wordt geadviseerd dit in te schakelen en ook kleine sites merken de voordelen.',
        'config-cache-none' => 'Niets cachen.
-Er gaat geen functionaliteit verloren, maar dit kan invloed hebben op de snelheid.',
+Er gaat geen functionaliteit verloren, maar dit kan invloed hebben op de prestaties.',
        'config-cache-accel' => 'Cachen van objecten via PHP (APC, XCache of WinCache)',
        'config-cache-memcached' => 'Memcached gebruiken (dit vereist aanvullende instellingen)',
        'config-memcached-servers' => 'Memcachedservers:',
@@ -13851,9 +14225,9 @@ 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".',
-       'config-install-step-done' => 'Afgerond',
-       'config-install-step-failed' => 'Mislukt',
+Als u nog wijzigingen wilt maken, klik dan op "Terug".', # Fuzzy
+       'config-install-step-done' => 'afgerond',
+       'config-install-step-failed' => 'mislukt',
        'config-install-extensions' => 'Inclusief uitbreidingen',
        'config-install-database' => 'Database inrichten',
        'config-install-schema' => 'Het schema wordt aangemaakt',
@@ -13874,9 +14248,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',
@@ -13901,7 +14275,7 @@ 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
 
@@ -13918,7 +14292,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]',
+* [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 LocalSettings.php 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].",
+       '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".',
+       '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)‎)
@@ -14613,6 +15234,16 @@ A la trovrà an LocalSetting.php.",
 Për agiorné sta instalassion, për piasì fà anvece giré update.php",
        '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ò LocalSettings.php:
+
+$1",
+       'config-localsettings-incomplete' => "L'esistent LocalSettings.php a smija esse ancomplet.
+La variàbil $1 a l'é nen ampostà.
+Për piasì, ch'a modìfica LocalSettings.php ëd fasson che costa variàbil a sia ampostà, e ch'a sgnaca «Anans».",
+       'config-localsettings-connection-error' => "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an LocalSettings.php o AdminSettings.php. 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.
@@ -14640,6 +15271,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 ===
@@ -14668,13 +15300,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.'''
@@ -14698,14 +15338,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.",
@@ -14715,27 +15360,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 php.ini, e amposté $wgResourceLoaderMaxQueryLength al midem valor an LocalSettings.php .',
        '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",
@@ -14743,9 +15413,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',
@@ -14758,8 +15428,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.
 
@@ -14773,33 +15444,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.",
        '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.
@@ -14839,6 +15516,9 @@ 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-upgrade-done-no-regenerate' => 'Agiornament complet.
+
+It peule adess [$1 ancaminé a dovré toa wiki].',
        'config-regenerate' => 'Generé torna LocalSettings.php →',
        'config-show-table-status' => 'Arcesta SHOW TABLE STATUS falìa!',
        'config-unknown-collation' => "'''Avis:''' La base ëd dàit a deuvra na classificassion pa arconossùa.",
@@ -14851,6 +15531,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.
@@ -14862,6 +15549,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.",
@@ -14874,6 +15562,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:',
@@ -14888,18 +15578,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à',
@@ -14909,7 +15602,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.
@@ -14919,7 +15612,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à.
@@ -14927,8 +15623,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.
@@ -14958,10 +15655,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à.
@@ -14980,21 +15677,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.",
@@ -15003,26 +15724,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é LocalSettings.php',
        '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 (Ποντιακά)
@@ -15777,10 +16513,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.',
@@ -15796,46 +16538,152 @@ $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 LocalSettings.php →',
+       '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' => 'Profilul drepturilor de utilizator:',
        'config-profile-wiki' => 'Wiki tradițional',
+       '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ă LocalSettings.php',
+       '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-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.
@@ -15843,7 +16691,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 (русский)
@@ -16396,7 +17245,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 (русиньскый)
@@ -16516,62 +17366,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' => 'නැවත ජනිත කරන්න LocalSettings.php →',
+       '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-admin-error-bademail' => 'ඔබ විසින් වලංගු නොවන විද්‍යුත්-ලිපිනයක් යොදා ඇත.',
+       'config-optional-continue' => 'මගෙන් තව ප්‍රශ්ණ අහන්න.',
+       'config-optional-skip' => 'මම දැනටමත් කම්මැලි වී ඇත, විකිය ස්ථාපනය කරන්න.',
+       'config-profile' => 'පරිශීලක හිමිකම් පැතිකඩ:',
        'config-profile-wiki' => 'සාම්ප්‍රදායික විකිය',
        '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' => 'LocalSettings.php බාගන්න',
        '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)
@@ -17029,12 +17963,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',
@@ -17063,10 +17999,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:',
@@ -17076,26 +18021,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-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 LocalSettings.php',
        '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)
@@ -17981,7 +18978,9 @@ $messages['ug-arab'] = array(
  * @author AS
  * @author Ahonc
  * @author Alex Khimich
+ * @author Base
  * @author Diemon.ukr
+ * @author Ата
  * @author Тест
  */
 $messages['uk'] = array(
@@ -17997,8 +18996,20 @@ $messages['uk'] = array(
        'config-localsettings-badkey' => 'Ви вказали неправильний ключ.',
        'config-upgrade-key-missing' => 'Виявлено наявну установку MediaWiki.
 Для оновлення цієї установки, будь ласка, вставте такий рядок в кінець вашого LocalSettings.php:
+$1',
+       'config-localsettings-incomplete' => 'Існуючий файл LocalSettings.php виявився неповним.
+Не вказано змінну $1.
+Будь ласка, змініть LocalSettings.php так, щоб цю змінну було задано, і натисніть "Продовжити".',
+       'config-localsettings-connection-error' => 'Сталася помилка при підключення до бази даних з допомогою налаштувань на сторінці LocalSettings.php чи AdminSettings.php. Будь ласка, виплавте ці налаштування і спробуйте знову.
+
 $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' => 'Мова для вікі:',
@@ -18019,73 +19030,491 @@ $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 буде обходити це обмеження, однак це зменшить продуктивність. Якщо це можливо, Вам варто встановити значення suhosin.get.max_value_length 1024 і більше у php.ini і встановити таке ж значення $wgResourceLoaderMaxQueryLength у LocalSettings.php .',
        '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 — комерційна база даних масштабу підприємства.',
+       '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-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' => 'Повторно згенерувати LocalSettings.php →',
+       'config-show-table-status' => 'Запит SHOW TABLE STATUS не виконано!',
+       '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' => 'Традиційна вікі',
+       '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 відповідний розділ посібника].",
        '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.
+Якщо Ви все ще хочете внести зміни, натисніть "Назад".',
        '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' => 'Завантажити LocalSettings.php',
        '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 (اردو)
@@ -18273,6 +19702,7 @@ $messages['yi'] = array(
        'config-page-language' => 'שפראַך',
        'config-page-name' => 'נאָמען',
        'config-page-options' => 'ברירות',
+       'config-ns-generic' => 'פראיעקט',
        'config-admin-name' => 'אײַער נאָמען:',
        'config-admin-password' => 'פאַסווארט:',
        'config-admin-email' => 'בליצפּאָסט אַדרעס:',
@@ -18325,6 +19755,7 @@ $messages['zea'] = array(
 );
 
 /** Simplified Chinese (中文(简体)‎)
+ * @author Anthony Fok
  * @author Hydra
  * @author Hzy980512
  * @author Liangent
@@ -18400,7 +19831,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。
 
 == 入门 ==
 * [//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发布邮件列表]', # Fuzzy
 );
 
 /** Traditional Chinese (中文(繁體)‎)
+ * @author Anthony Fok
  * @author Hzy980512
  * @author Liangent
  * @author Mark85296341
+ * @author Simon Shek
  */
 $messages['zh-hant'] = array(
        'config-desc' => 'MediaWiki安裝程序',
@@ -18836,11 +20270,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。
 
@@ -19056,7 +20490,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>',
@@ -19204,7 +20638,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 3f1dad9..da638de 100644 (file)
@@ -155,8 +155,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        // 1.15
                        array( 'doUniquePlTlIl' ),
                        array( 'addTable', 'change_tag',                        'patch-change_tag.sql' ),
-                       array( 'addTable', 'tag_summary',                       'patch-change_tag.sql' ),
-                       array( 'addTable', 'valid_tag',                         'patch-change_tag.sql' ),
+                       /* array( 'addTable', 'tag_summary',                       'patch-change_tag.sql' ), */
+                       /* array( 'addTable', 'valid_tag',                         'patch-change_tag.sql' ), */
 
                        // 1.16
                        array( 'addTable', 'user_properties',                   'patch-user_properties.sql' ),
@@ -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' ),
@@ -225,6 +223,11 @@ class MysqlUpdater extends DatabaseUpdater {
                        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( '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' ),
                );
        }
 
@@ -237,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 ) );
@@ -257,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 ) {
@@ -276,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;
@@ -564,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" );
@@ -577,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' ) {
@@ -639,6 +662,9 @@ class MysqlUpdater extends DatabaseUpdater {
         */
        protected function doWatchlistNull() {
                $info = $this->db->fieldInfo( 'watchlist', 'wl_notificationtimestamp' );
+               if ( !$info ) {
+                       return;
+               }
                if ( $info->isNullable() ) {
                        $this->output( "...wl_notificationtimestamp is already nullable.\n" );
                        return;
@@ -771,14 +797,30 @@ 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__ ) ) {
-                       // Simply ignore
+                       return true;
                } elseif ( $this->db->fieldExists( 'profiling', 'pf_memory', __METHOD__ ) ) {
                        $this->output( "...profiling table has pf_memory field.\n" );
-               } else {
-                       $this->applyPatch( 'patch-profiling-memory.sql', false, "Adding pf_memory field to table profiling" );
+                       return true;
                }
+               return $this->applyPatch( 'patch-profiling-memory.sql', false, "Adding pf_memory field to table profiling" );
        }
 
        protected function doFilearchiveIndicesUpdate() {
@@ -786,16 +828,21 @@ class MysqlUpdater extends DatabaseUpdater {
                if ( !$info ) {
                        $this->applyPatch( 'patch-filearchive-user-index.sql', false, "Updating filearchive indices" );
                }
+               return true;
        }
 
        protected function doUniquePlTlIl() {
                $info = $this->db->indexInfo( 'pagelinks', 'pl_namespace' );
                if ( is_array( $info ) && !$info[0]->Non_unique ) {
                        $this->output( "...pl_namespace, tl_namespace, il_to indices are already UNIQUE.\n" );
-                       return;
+                       return true;
+               }
+               if ( $this->skipSchema ) {
+                       $this->output( "...skipping schema change (making pl_namespace, tl_namespace and il_to indices UNIQUE).\n" );
+                       return false;
                }
 
-               $this->applyPatch( 'patch-pl-tl-il-unique.sql', false, "Making pl_namespace, tl_namespace and il_to indices UNIQUE" );
+               return $this->applyPatch( 'patch-pl-tl-il-unique.sql', false, "Making pl_namespace, tl_namespace and il_to indices UNIQUE" );
        }
 
        protected function renameEuWikiId() {
@@ -838,7 +885,14 @@ 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;
+               }
                if ( $info->isNullable() ) {
                        $this->output( "...user_last_timestamp is already nullable.\n" );
                        return;
index 5523470..8f43a6d 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' ),
@@ -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 6e1a74f..d8fa724 100644 (file)
@@ -113,6 +113,8 @@ class SqliteInstaller extends DatabaseInstaller {
                        $dir = self::realpath( $dir );
                        $this->setVar( 'wgSQLiteDataDir', $dir );
                }
+               # Table prefix is not used on SQLite, keep it empty
+               $this->setVar( 'wgDBprefix', '' );
                return $result;
        }
 
index 2fa3f31..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' ),
@@ -105,6 +103,11 @@ class SqliteUpdater extends DatabaseUpdater {
                        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( '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' ),
                );
        }
 
@@ -128,4 +131,11 @@ class SqliteUpdater extends DatabaseUpdater {
                        $this->output( "...fulltext search table appears to be in order.\n" );
                }
        }
+
+       protected function doEnableProfiling() {
+               global $wgProfileToDatabase;
+               if ( $wgProfileToDatabase === true && ! $this->db->tableExists( 'profiling', __METHOD__ ) ) {
+                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
+               }
+       }
 }
index a193afb..f1340d7 100644 (file)
@@ -422,6 +422,7 @@ class WebInstaller_Welcome extends WebInstallerPage {
                } else {
                        $this->parent->showStatusMessage( $status );
                }
+               return '';
        }
 
 }
index eacf9a8..849eb86 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,8 +47,8 @@ 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 ) {
                $result = self::fetch( $prefix );
@@ -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 ) {
                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 0d2803e..927ca4e 100644 (file)
@@ -178,6 +178,51 @@ abstract class Job {
                return $this->removeDuplicates;
        }
 
+       /**
+        * Subclasses may need to override this to make duplication detection work
+        *
+        * @return Array Map of key/values
+        */
+       public function getDeduplicationInfo() {
+               $info = array(
+                       'type'      => $this->getType(),
+                       'namespace' => $this->getTitle()->getNamespace(),
+                       'title'     => $this->getTitle()->getDBkey(),
+                       'params'    => $this->getParams()
+               );
+               // Identical jobs with different "root" jobs should count as duplicates
+               if ( is_array( $info['params'] ) ) {
+                       unset( $info['params']['rootJobSignature'] );
+                       unset( $info['params']['rootJobTimestamp'] );
+               }
+               return $info;
+       }
+
+       /**
+        * @param $key string A key that identifies the task
+        * @return Array
+        */
+       public static function newRootJobParams( $key ) {
+               return array(
+                       'rootJobSignature' => sha1( $key ),
+                       'rootJobTimestamp' => wfTimestampNow()
+               );
+       }
+
+       /**
+        * @return Array
+        */
+       public function getRootJobParams() {
+               return array(
+                       'rootJobSignature' => isset( $this->params['rootJobSignature'] )
+                               ? $this->params['rootJobSignature']
+                               : null,
+                       'rootJobTimestamp' => isset( $this->params['rootJobTimestamp'] )
+                               ? $this->params['rootJobTimestamp']
+                               : null
+               );
+       }
+
        /**
         * Insert a single job into the queue.
         * @return bool true on success
index dc5bdbd..17f6648 100644 (file)
@@ -32,6 +32,7 @@ abstract class JobQueue {
        protected $wiki; // string; wiki ID
        protected $type; // string; job type
        protected $order; // string; job priority for pop()
+       protected $claimTTL; // integer; seconds
 
        const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions
 
@@ -39,23 +40,30 @@ abstract class JobQueue {
         * @param $params array
         */
        protected function __construct( array $params ) {
-               $this->wiki  = $params['wiki'];
-               $this->type  = $params['type'];
-               $this->order = isset( $params['order'] ) ? $params['order'] : 'random';
+               $this->wiki     = $params['wiki'];
+               $this->type     = $params['type'];
+               $this->order    = isset( $params['order'] ) ? $params['order'] : 'random';
+               $this->claimTTL = isset( $params['claimTTL'] ) ? $params['claimTTL'] : 0;
        }
 
        /**
         * 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, either "timestamp" or "random".
-        *             If "timestamp" is used, the queue will effectively be FIFO. Note that
-        *             pop() will not be exactly FIFO, and even if it was, job completion would
-        *             not appear to be exactly FIFO since jobs can take different times to finish.
-        *             If "random" is used, pop() will pick jobs in random order. This might be
-        *             useful for improving concurrency depending on the queue storage medium.
+        *   - 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.
+        *
+        * Queue classes should throw an exception if they do not support the options given.
         *
         * @param $params array
         * @return JobQueue
@@ -88,7 +96,10 @@ abstract class JobQueue {
        }
 
        /**
-        * @return bool 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
         */
        final public function isEmpty() {
                wfProfileIn( __METHOD__ );
@@ -104,11 +115,66 @@ 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
+        */
+       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
+        */
+       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)
+        * @throws MWException
+        * @return bool Returns false on failure
+        */
+       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
+        * @throws MWException
+        * @return bool Returns false on failure
         */
        final public function batchPush( array $jobs, $flags = 0 ) {
                foreach ( $jobs as $job ) {
@@ -118,9 +184,6 @@ abstract class JobQueue {
                }
                wfProfileIn( __METHOD__ );
                $ok = $this->doBatchPush( $jobs, $flags );
-               if ( $ok ) {
-                       wfIncrStats( 'job-insert', count( $jobs ) );
-               }
                wfProfileOut( __METHOD__ );
                return $ok;
        }
@@ -132,16 +195,14 @@ 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
         */
        final public function pop() {
                wfProfileIn( __METHOD__ );
                $job = $this->doPop();
-               if ( $job ) {
-                       wfIncrStats( 'job-pop' );
-               }
                wfProfileOut( __METHOD__ );
                return $job;
        }
@@ -153,9 +214,12 @@ 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
         */
        final public function ack( Job $job ) {
@@ -175,7 +239,59 @@ abstract class JobQueue {
        abstract protected function doAck( Job $job );
 
        /**
-        * Wait for any slaves or backup servers to catch up
+        * Register the "root job" of a given job into the queue for de-duplication.
+        * This should only be called right *after* all the new jobs have been inserted.
+        * This is used to turn older, duplicate, job entries into no-ops. The root job
+        * information will remain in the registry until it simply falls out of cache.
+        *
+        * This requires that $job has two special fields in the "params" array:
+        *   - rootJobSignature : hash (e.g. SHA1) that identifies the task
+        *   - rootJobTimestamp : TS_MW timestamp of this instance of the task
+        *
+        * A "root job" is a conceptual job that consist of potentially many smaller jobs
+        * that are actually inserted into the queue. For example, "refreshLinks" jobs are
+        * spawned when a template is edited. One can think of the task as "update links
+        * of pages that use template X" and an instance of that task as a "root job".
+        * However, what actually goes into the queue are potentially many refreshLinks2 jobs.
+        * Since these jobs include things like page ID ranges and DB master positions, and morph
+        * into smaller refreshLinks2 jobs recursively, simple duplicate detection (like job_sha1)
+        * for individual jobs being identical is not useful.
+        *
+        * In the case of "refreshLinks", if these jobs are still in the queue when the template
+        * is edited again, we want all of these old refreshLinks jobs for that template to become
+        * no-ops. This can greatly reduce server load, since refreshLinks jobs involves parsing.
+        * 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
+        */
+       final public function deduplicateRootJob( Job $job ) {
+               if ( $job->getType() !== $this->type ) {
+                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+               }
+               wfProfileIn( __METHOD__ );
+               $ok = $this->doDeduplicateRootJob( $job );
+               wfProfileOut( __METHOD__ );
+               return $ok;
+       }
+
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @param $job Job
+        * @return bool
+        */
+       protected function doDeduplicateRootJob( Job $job ) {
+               return true;
+       }
+
+       /**
+        * Wait for any slaves or backup servers to catch up.
+        *
+        * This does nothing for certain queue classes.
         *
         * @return void
         */
index a8a2e89..1c9c8a7 100644 (file)
  * @since 1.21
  */
 class JobQueueDB extends JobQueue {
-       const CACHE_TTL      = 30; // integer; seconds
-       const MAX_JOB_RANDOM = 2147483647; // 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_ATTEMPTS    = 3; // integer; number of times to try a job
+       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()
@@ -38,7 +57,7 @@ class JobQueueDB extends JobQueue {
        protected function doIsEmpty() {
                global $wgMemc;
 
-               $key = $this->getEmptinessCacheKey();
+               $key = $this->getCacheKey( 'empty' );
 
                $isEmpty = $wgMemc->get( $key );
                if ( $isEmpty === 'true' ) {
@@ -47,57 +66,134 @@ class JobQueueDB extends JobQueue {
                        return false;
                }
 
-               $found = $this->getSlaveDB()->selectField(
-                       'job', '1', array( 'job_cmd' => $this->type ), __METHOD__
+               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_LONG );
 
-               $wgMemc->add( $key, $found ? 'false' : 'true', self::CACHE_TTL );
+               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
+        * @param $flags
+        * @throws DBError|Exception
         * @return bool
         */
        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
 
-                       $rows = array();
                        foreach ( $jobs as $job ) {
-                               $rows[] = $this->insertFields( $job );
+                               $row = $this->insertFields( $job );
+                               if ( $job->ignoreDuplicates() ) {
+                                       $rowSet[$row['job_sha1']] = $row;
+                               } else {
+                                       $rowList[] = $row;
+                               }
                        }
+
                        $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, $rows, $atomic, $key, $ttl ) {
+                       $dbw->onTransactionIdle(
+                               function() use ( $dbw, $rowSet, $rowList, $atomic, $key, $ttl, $scope
+                       ) {
                                global $wgMemc;
 
-                               $autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
                                if ( $atomic ) {
-                                       $dbw->begin(); // wrap all the job additions in one transaction
-                               } else {
-                                       $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
+                                       $dbw->begin( __METHOD__ ); // wrap all the job additions in one transaction
                                }
                                try {
-                                       foreach ( array_chunk( $rows, 50 ) as $rowBatch ) { // avoid slave lag
+                                       // Strip out any duplicate jobs that are already in the queue...
+                                       if ( count( $rowSet ) ) {
+                                               $res = $dbw->select( 'job', 'job_sha1',
+                                                       array(
+                                                               // No job_type condition since it's part of the job_sha1 hash
+                                                               'job_sha1'  => array_keys( $rowSet ),
+                                                               'job_token' => '' // unclaimed
+                                                       ),
+                                                       __METHOD__
+                                               );
+                                               foreach ( $res as $row ) {
+                                                       wfDebug( "Job with hash '{$row->job_sha1}' is a duplicate." );
+                                                       unset( $rowSet[$row->job_sha1] ); // already enqueued
+                                               }
+                                       }
+                                       // Build the full list of job rows to insert
+                                       $rows = array_merge( $rowList, array_values( $rowSet ) );
+                                       // Insert the job rows in chunks to avoid slave lag...
+                                       foreach ( array_chunk( $rows, 50 ) as $rowBatch ) {
                                                $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();
-                                       } else {
-                                               $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+                                               $dbw->rollback( __METHOD__ );
                                        }
                                        throw $e;
                                }
                                if ( $atomic ) {
-                                       $dbw->commit();
-                               } else {
-                                       $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+                                       $dbw->commit( __METHOD__ );
                                }
 
-                               $wgMemc->set( $key, 'false', $ttl );
+                               $wgMemc->set( $key, 'false', $ttl ); // queue is not empty
                        } );
                }
 
@@ -111,61 +207,51 @@ 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
                $job = false; // job popped off
-               $autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
-               $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
-               try {
-                       do { // retry when our row is invalid or deleted as a duplicate
-                               // Try to reserve a row in the DB...
-                               if ( $this->order === 'timestamp' ) { // oldest first
-                                       $row = $this->claimOldest( $uuid );
-                               } else { // random first
-                                       $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 );
-                                       break; // nothing to do
-                               }
-                               // Get the job object from the row...
-                               $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
-                               if ( !$title ) {
-                                       $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
-                                       wfIncrStats( 'job-pop' );
-                                       wfDebugLog( 'JobQueueDB', "Row has invalid title '{$row->job_title}'." );
-                                       continue; // try again
-                               }
-                               $job = Job::factory( $row->job_cmd, $title,
-                                       self::extractBlob( $row->job_params ), $row->job_id );
-                               // Delete any *other* duplicate jobs in the queue...
-                               if ( $job->ignoreDuplicates() && strlen( $row->job_sha1 ) ) {
-                                       $dbw->delete( 'job',
-                                               array( 'job_sha1' => $row->job_sha1,
-                                                       "job_id != {$dbw->addQuotes( $row->job_id )}" ),
-                                               __METHOD__
-                                       );
-                                       wfIncrStats( 'job-pop', $dbw->affectedRows() );
-                               }
-                               break; // done
-                       } while( true );
-               } catch ( DBError $e ) {
-                       $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
-                       throw $e;
+               // Occasionally recycle jobs back into the queue that have been claimed too long
+               if ( mt_rand( 0, 99 ) == 0 ) {
+                       $this->recycleStaleJobs();
                }
-               $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+               do { // retry when our row is invalid or deleted as a duplicate
+                       // Try to reserve a row in the DB...
+                       if ( in_array( $this->order, array( 'fifo', 'timestamp' ) ) ) {
+                               $row = $this->claimOldest( $uuid );
+                       } else { // random first
+                               $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 );
+                       }
+                       // Check if we found a row to reserve...
+                       if ( !$row ) {
+                               $wgMemc->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
+                               break; // nothing to do
+                       }
+                       wfIncrStats( 'job-pop' );
+                       // Get the job object from the row...
+                       $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
+                       if ( !$title ) {
+                               $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
+                               wfDebugLog( 'JobQueueDB', "Row has invalid title '{$row->job_title}'." );
+                               continue; // try again
+                       }
+                       $job = Job::factory( $row->job_cmd, $title,
+                               self::extractBlob( $row->job_params ), $row->job_id );
+                       $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
+               } while( true );
 
                return $job;
        }
@@ -179,27 +265,61 @@ class JobQueueDB extends JobQueue {
         * @return Row|false
         */
        protected function claimRandom( $uuid, $rand, $gte ) {
-               $dbw  = $this->getMasterDB();
-               $dir  = $gte ? 'ASC' : 'DESC';
-               $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__,
-                               array( 'ORDER BY' => "job_random {$dir}" )
-                       );
+                       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( 'job_token' => $uuid, 'job_token_timestamp' => $dbw->timestamp() ),
+                                       array(
+                                               'job_token'           => $uuid,
+                                               'job_token_timestamp' => $dbw->timestamp(),
+                                               'job_attempts = job_attempts+1' ),
                                        array( 'job_cmd' => $this->type, 'job_id' => $row->job_id, 'job_token' => '' ),
                                        __METHOD__
                                );
@@ -223,7 +343,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 {
@@ -232,26 +352,30 @@ class JobQueueDB extends JobQueue {
                                // same table being changed in an UPDATE query in MySQL (gives Error: 1093).
                                // Oracle and Postgre have no such limitation. However, MySQL offers an
                                // alternative here by supporting ORDER BY + LIMIT for UPDATE queries.
-                               $dbw->query( "UPDATE {$dbw->tableName( 'job' )}
-                                       SET
-                                               job_token = {$dbw->addQuotes( $uuid ) },
-                                               job_token_timestamp = {$dbw->addQuotes( $dbw->timestamp() )}
-                                       WHERE (
-                                               job_cmd = {$dbw->addQuotes( $this->type )}
-                                               AND job_token = {$dbw->addQuotes( '' )}
-                                       ) ORDER BY job_random ASC LIMIT 1",
+                               $dbw->query( "UPDATE {$dbw->tableName( 'job' )} " .
+                                       "SET " .
+                                               "job_token = {$dbw->addQuotes( $uuid ) }, " .
+                                               "job_token_timestamp = {$dbw->addQuotes( $dbw->timestamp() )}, " .
+                                               "job_attempts = job_attempts+1 " .
+                                       "WHERE ( " .
+                                               "job_cmd = {$dbw->addQuotes( $this->type )} " .
+                                               "AND job_token = {$dbw->addQuotes( '' )} " .
+                                       ") ORDER BY job_id ASC LIMIT 1",
                                        __METHOD__
                                );
                        } else {
                                // Use a subquery to find the job, within an UPDATE to claim it.
                                // This uses as much of the DB wrapper functions as possible.
                                $dbw->update( 'job',
-                                       array( 'job_token' => $uuid, 'job_token_timestamp' => $dbw->timestamp() ),
+                                       array(
+                                               'job_token'           => $uuid,
+                                               'job_token_timestamp' => $dbw->timestamp(),
+                                               'job_attempts = job_attempts+1' ),
                                        array( 'job_id = (' .
                                                $dbw->selectSQLText( 'job', 'job_id',
                                                        array( 'job_cmd' => $this->type, 'job_token' => '' ),
                                                        __METHOD__,
-                                                       array( 'ORDER BY' => 'job_random ASC', 'LIMIT' => 1 ) ) .
+                                                       array( 'ORDER BY' => 'job_id ASC', 'LIMIT' => 1 ) ) .
                                                ')'
                                        ),
                                        __METHOD__
@@ -273,28 +397,156 @@ class JobQueueDB extends JobQueue {
                return $row;
        }
 
+       /**
+        * Recycle or destroy any jobs that have been claimed for too long
+        *
+        * @return integer Number of jobs recycled/deleted
+        */
+       protected function recycleStaleJobs() {
+               $now   = time();
+               list( $dbw, $scope ) = $this->getMasterDB();
+               $count = 0; // affected rows
+
+               if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
+                       return $count; // already in progress
+               }
+
+               // Remove claims on jobs acquired for too long if enabled...
+               if ( $this->claimTTL > 0 ) {
+                       $claimCutoff = $dbw->timestamp( $now - $this->claimTTL );
+                       // Get the IDs of jobs that have be claimed but not finished after too long.
+                       // These jobs can be recycled into the queue by expiring the claim. Selecting
+                       // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
+                       $res = $dbw->select( 'job', 'job_id',
+                               array(
+                                       'job_cmd' => $this->type,
+                                       "job_token != {$dbw->addQuotes( '' )}", // was acquired
+                                       "job_token_timestamp < {$dbw->addQuotes( $claimCutoff )}", // stale
+                                       "job_attempts < {$dbw->addQuotes( self::MAX_ATTEMPTS )}" ), // retries left
+                               __METHOD__
+                       );
+                       $ids = array_map( function( $o ) { return $o->job_id; }, iterator_to_array( $res ) );
+                       if ( count( $ids ) ) {
+                               // Reset job_token for these jobs so that other runners will pick them up.
+                               // Set the timestamp to the current time, as it is useful to now that the job
+                               // was already tried before (the timestamp becomes the "released" time).
+                               $dbw->update( 'job',
+                                       array(
+                                               'job_token' => '',
+                                               'job_token_timestamp' => $dbw->timestamp( $now ) ), // time of release
+                                       array(
+                                               'job_id' => $ids ),
+                                       __METHOD__
+                               );
+                               $count += $dbw->affectedRows();
+                               wfIncrStats( 'job-recycle', $dbw->affectedRows() );
+                       }
+               }
+
+               // Just destroy any stale jobs...
+               $pruneCutoff = $dbw->timestamp( $now - self::MAX_AGE_PRUNE );
+               $conds = array(
+                       'job_cmd' => $this->type,
+                       "job_token != {$dbw->addQuotes( '' )}", // was acquired
+                       "job_token_timestamp < {$dbw->addQuotes( $pruneCutoff )}" // stale
+               );
+               if ( $this->claimTTL > 0 ) { // only prune jobs attempted too many times...
+                       $conds[] = "job_attempts >= {$dbw->addQuotes( self::MAX_ATTEMPTS )}";
+               }
+               // Get the IDs of jobs that are considered stale and should be removed. Selecting
+               // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
+               $res = $dbw->select( 'job', 'job_id', $conds, __METHOD__ );
+               $ids = array_map( function( $o ) { return $o->job_id; }, iterator_to_array( $res ) );
+               if ( count( $ids ) ) {
+                       $dbw->delete( 'job', array( 'job_id' => $ids ), __METHOD__ );
+                       $count += $dbw->affectedRows();
+               }
+
+               $dbw->unlock( "jobqueue-recycle-{$this->type}", __METHOD__ );
+
+               return $count;
+       }
+
        /**
         * @see JobQueue::doAck()
+        * @param Job $job
+        * @throws MWException
         * @return Job|bool
         */
        protected function doAck( Job $job ) {
-               $dbw = $this->getMasterDB();
+               if ( !$job->getId() ) {
+                       throw new MWException( "Job of type '{$job->getType()}' has no ID." );
+               }
+
+               list( $dbw, $scope ) = $this->getMasterDB();
                $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
 
-               $autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
-               $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
-               try {
-                       // Delete a row with a single DELETE without holding row locks over RTTs...
-                       $dbw->delete( 'job', array( 'job_cmd' => $this->type, 'job_id' => $job->getId() ) );
-               } catch ( Exception $e ) {
-                       $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
-                       throw $e;
+               // Delete a row with a single DELETE without holding row locks over RTTs...
+               $dbw->delete( 'job',
+                       array( 'job_cmd' => $this->type, 'job_id' => $job->getId() ), __METHOD__ );
+
+               return true;
+       }
+
+       /**
+        * @see JobQueue::doDeduplicateRootJob()
+        * @param Job $job
+        * @throws MWException
+        * @return bool
+        */
+       protected function doDeduplicateRootJob( Job $job ) {
+               $params = $job->getParams();
+               if ( !isset( $params['rootJobSignature'] ) ) {
+                       throw new MWException( "Cannot register root job; missing 'rootJobSignature'." );
+               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
+                       throw new MWException( "Cannot register root job; missing 'rootJobTimestamp'." );
                }
-               $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+               $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 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.
+               list( $dbw, $scope ) = $this->getMasterDB();
+               $dbw->onTransactionIdle( function() use ( $params, $key, $scope ) {
+                       global $wgMemc;
+
+                       $timestamp = $wgMemc->get( $key ); // current last timestamp of this job
+                       if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
+                               return true; // a newer version of this root job was enqueued
+                       }
+
+                       // Update the timestamp of the last root job started at the location...
+                       return $wgMemc->set( $key, $params['rootJobTimestamp'], 14*86400 ); // 2 weeks
+               } );
 
                return true;
        }
 
+       /**
+        * Check if the "root" job of a given job has been superseded by a newer one
+        *
+        * @param $job Job
+        * @return bool
+        */
+       protected function isRootJobOldDuplicate( Job $job ) {
+               global $wgMemc;
+
+               $params = $job->getParams();
+               if ( !isset( $params['rootJobSignature'] ) ) {
+                       return false; // job has no de-deplication info
+               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
+                       trigger_error( "Cannot check root job; missing 'rootJobTimestamp'." );
+                       return false;
+               }
+
+               // Get the last time this root job was enqueued
+               $timestamp = $wgMemc->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
+
+               // Check if a new root job was started at the location after this one's...
+               return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
+       }
+
        /**
         * @see JobQueue::doWaitForBackups()
         * @return void
@@ -304,17 +556,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 );
+                       } )
+               );
        }
 
        /**
@@ -322,35 +591,39 @@ class JobQueueDB extends JobQueue {
         * @return array
         */
        protected function insertFields( Job $job ) {
-               // Rows that describe the nature of the job
-               $descFields = array(
+               list( $dbw, $scope ) = $this->getMasterDB();
+               return array(
+                       // Fields that describe the nature of the job
                        'job_cmd'       => $job->getType(),
                        'job_namespace' => $job->getTitle()->getNamespace(),
                        'job_title'     => $job->getTitle()->getDBkey(),
                        'job_params'    => self::makeBlob( $job->getParams() ),
-               );
-               // Additional job metadata
-               if ( $this->order === 'timestamp' ) { // oldest first
-                       $random = time() - 1325376000; // seconds since "January 1, 2012"
-               } else { // random first
-                       $random = mt_rand( 0, self::MAX_JOB_RANDOM );
-               }
-               $dbw = $this->getMasterDB();
-               $metaFields = array(
+                       // Additional job metadata
                        'job_id'        => $dbw->nextSequenceValue( 'job_job_id_seq' ),
                        'job_timestamp' => $dbw->timestamp(),
-                       'job_sha1'      => wfBaseConvert( sha1( serialize( $descFields ) ), 16, 36, 32 ),
-                       'job_random'    => $random
+                       'job_sha1'      => wfBaseConvert(
+                               sha1( serialize( $job->getDeduplicationInfo() ) ),
+                               16, 36, 31
+                       ),
+                       'job_random'    => mt_rand( 0, self::MAX_JOB_RANDOM )
                );
-               return ( $descFields + $metaFields );
        }
 
        /**
         * @return string
         */
-       private function getEmptinessCacheKey() {
+       private function getCacheKey( $property ) {
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
+       }
+
+       /**
+        * @param string $signature Hash identifier of the root job
+        * @return string
+        */
+       private function getRootJobCacheKey( $signature ) {
                list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'isempty' );
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'rootjob', $signature );
        }
 
        /**
index 44db516..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,9 +90,11 @@ 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
         * @return bool
         */
        public function push( $jobs ) {
@@ -92,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' );
                        }
                }
 
@@ -132,6 +170,17 @@ class JobQueueGroup {
                return $this->get( $job->getType() )->ack( $job );
        }
 
+       /**
+        * Register the "root job" of a given job into the queue for de-duplication.
+        * This should only be called right *after* all the new jobs have been inserted.
+        *
+        * @param $job Job
+        * @return bool
+        */
+       public function deduplicateRootJob( Job $job ) {
+               return $this->get( $job->getType() )->deduplicateRootJob( $job );
+       }
+
        /**
         * Get the list of queue types
         *
@@ -153,4 +202,30 @@ class JobQueueGroup {
 
                return array_diff( $this->getQueueTypes(), $wgJobTypesExcludedFromDefaultQueue );
        }
+
+       /**
+        * @return Array List of job types that have non-empty queues
+        */
+       public function getQueuesWithJobs() {
+               $types = array();
+               foreach ( $this->getQueueTypes() as $type ) {
+                       if ( !$this->get( $type )->isEmpty() ) {
+                               $types[] = $type;
+                       }
+               }
+               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 b1b96b6..fb73bf1 100644 (file)
@@ -66,11 +66,11 @@ class DoubleRedirectJob extends Job {
                                'redirTitle' => $redirTitle->getPrefixedDBkey() ) );
                        # Avoid excessive memory usage
                        if ( count( $jobs ) > 10000 ) {
-                               Job::batchInsert( $jobs );
+                               JobQueueGroup::singleton()->push( $jobs );
                                $jobs = array();
                        }
                }
-               Job::batchInsert( $jobs );
+               JobQueueGroup::singleton()->push( $jobs );
        }
 
        function __construct( $title, $params = false, $id = 0 ) {
@@ -94,7 +94,7 @@ class DoubleRedirectJob extends Job {
                        return true;
                }
                $content = $targetRev->getContent();
-               $currentDest = $content->getRedirectTarget();
+               $currentDest = $content ? $content->getRedirectTarget() : null;
                if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
                        wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" );
                        return true;
diff --git a/includes/job/jobs/DuplicateJob.php b/includes/job/jobs/DuplicateJob.php
new file mode 100644 (file)
index 0000000..23418e3
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * No-op job that does nothing.
+ *
+ * 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 Cache
+ */
+
+/**
+ * No-op job that does nothing. Used to represent duplicates.
+ *
+ * @ingroup JobQueue
+ */
+final class DuplicateJob extends Job {
+       /**
+        * Callers should use DuplicateJob::newFromJob() instead
+        *
+        * @param $title Title
+        * @param $params Array: job parameters
+        * @param $id Integer: job id
+        */
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'duplicate', $title, $params, $id );
+       }
+
+       /**
+        * Get a duplicate no-op version of a job
+        *
+        * @param Job $job
+        * @return Job
+        */
+       public static function newFromJob( Job $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() {
+               return true;
+       }
+}
index b4c925e..2be05b6 100644 (file)
@@ -49,7 +49,8 @@ class EnotifNotifyJob extends Job {
                        $this->params['summary'],
                        $this->params['minorEdit'],
                        $this->params['oldid'],
-                       $this->params['watchers']
+                       $this->params['watchers'],
+                       $this->params['pageStatus']
                );
                return true;
        }
index 4e6fd6c..20245b3 100644 (file)
  * Job wrapper for HTMLCacheUpdate. Gets run whenever a related
  * job gets called from the queue.
  *
+ * This class is designed to work efficiently with small numbers of links, and
+ * to work reasonably well with up to ~10^5 links. Above ~10^6 links, the memory
+ * and time requirements of loading all backlinked IDs in doUpdate() might become
+ * prohibitive. The requirements measured at Wikimedia are approximately:
+ *
+ *   memory: 48 bytes per row
+ *   time: 16us per row for the query plus processing
+ *
+ * The reason this query is done is to support partitioning of the job
+ * by backlinked ID. The memory issue could be allieviated by doing this query in
+ * batches, but of course LIMIT with an offset is inefficient on the DB side.
+ *
+ * The class is nevertheless a vast improvement on the previous method of using
+ * File::getLinksTo() and Title::touchArray(), which uses about 2KB of memory per
+ * link.
+ *
  * @ingroup JobQueue
  */
 class HTMLCacheUpdateJob extends Job {
-       var $table, $start, $end;
+       /** @var BacklinkCache */
+       protected $blCache;
+
+       protected $rowsPerJob, $rowsPerQuery;
 
        /**
         * Construct a job
@@ -37,15 +56,199 @@ class HTMLCacheUpdateJob extends Job {
         * @param $id Integer: job id
         */
        function __construct( $title, $params, $id = 0 ) {
+               global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery;
+
                parent::__construct( 'htmlCacheUpdate', $title, $params, $id );
-               $this->table = $params['table'];
-               $this->start = $params['start'];
-               $this->end = $params['end'];
+
+               $this->rowsPerJob   = $wgUpdateRowsPerJob;
+               $this->rowsPerQuery = $wgUpdateRowsPerQuery;
+               $this->blCache      = $title->getBacklinkCache();
        }
 
        public function run() {
-               $update = new HTMLCacheUpdate( $this->title, $this->table, $this->start, $this->end );
-               $update->doUpdate();
+               if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
+                       # This is hit when a job is actually performed
+                       return $this->doPartialUpdate();
+               } else {
+                       # This is hit when the jobs have to be inserted
+                       return $this->doFullUpdate();
+               }
+       }
+
+       /**
+        * Update all of the backlinks
+        */
+       protected function doFullUpdate() {
+               # Get an estimate of the number of rows from the BacklinkCache
+               $numRows = $this->blCache->getNumLinks( $this->params['table'] );
+               if ( $numRows > $this->rowsPerJob * 2 ) {
+                       # Do fast cached partition
+                       $this->insertPartitionJobs();
+               } else {
+                       # Get the links from the DB
+                       $titleArray = $this->blCache->getLinks( $this->params['table'] );
+                       # Check if the row count estimate was correct
+                       if ( $titleArray->count() > $this->rowsPerJob * 2 ) {
+                               # Not correct, do accurate partition
+                               wfDebug( __METHOD__.": row count estimate was incorrect, repartitioning\n" );
+                               $this->insertJobsFromTitles( $titleArray );
+                       } else {
+                               $this->invalidateTitles( $titleArray ); // just do the query
+                       }
+               }
+               return true;
+       }
+
+       /**
+        * Update some of the backlinks, defined by a page ID range
+        */
+       protected function doPartialUpdate() {
+               $titleArray = $this->blCache->getLinks(
+                       $this->params['table'], $this->params['start'], $this->params['end'] );
+               if ( $titleArray->count() <= $this->rowsPerJob * 2 ) {
+                       # This partition is small enough, do the update
+                       $this->invalidateTitles( $titleArray );
+               } else {
+                       # Partitioning was excessively inaccurate. Divide the job further.
+                       # This can occur when a large number of links are added in a short
+                       # period of time, say by updating a heavily-used template.
+                       $this->insertJobsFromTitles( $titleArray );
+               }
                return true;
        }
+
+       /**
+        * Partition the current range given by $this->params['start'] and $this->params['end'],
+        * using a pre-calculated title array which gives the links in that range.
+        * Queue the resulting jobs.
+        *
+        * @param $titleArray array
+        * @param $rootJobParams array
+        * @rerturn void
+        */
+       protected function insertJobsFromTitles( $titleArray, $rootJobParams = array() ) {
+               // Carry over any "root job" information
+               $rootJobParams = $this->getRootJobParams();
+               # We make subpartitions in the sense that the start of the first job
+               # will be the start of the parent partition, and the end of the last
+               # job will be the end of the parent partition.
+               $jobs = array();
+               $start = $this->params['start']; # start of the current job
+               $numTitles = 0;
+               foreach ( $titleArray as $title ) {
+                       $id = $title->getArticleID();
+                       # $numTitles is now the number of titles in the current job not
+                       # including the current ID
+                       if ( $numTitles >= $this->rowsPerJob ) {
+                               # Add a job up to but not including the current ID
+                               $jobs[] = new HTMLCacheUpdateJob( $this->title,
+                                       array(
+                                               'table' => $this->params['table'],
+                                               'start' => $start,
+                                               'end'   => $id - 1
+                                       ) + $rootJobParams // carry over information for de-duplication
+                               );
+                               $start = $id;
+                               $numTitles = 0;
+                       }
+                       $numTitles++;
+               }
+               # Last job
+               $jobs[] = new HTMLCacheUpdateJob( $this->title,
+                       array(
+                               'table' => $this->params['table'],
+                               'start' => $start,
+                               'end'   => $this->params['end']
+                       ) + $rootJobParams // carry over information for de-duplication
+               );
+               wfDebug( __METHOD__.": repartitioning into " . count( $jobs ) . " jobs\n" );
+
+               if ( count( $jobs ) < 2 ) {
+                       # I don't think this is possible at present, but handling this case
+                       # makes the code a bit more robust against future code updates and
+                       # avoids a potential infinite loop of repartitioning
+                       wfDebug( __METHOD__.": repartitioning failed!\n" );
+                       $this->invalidateTitles( $titleArray );
+               } else {
+                       JobQueueGroup::singleton()->push( $jobs );
+               }
+       }
+
+       /**
+        * @param $rootJobParams array
+        * @return void
+        */
+       protected function insertPartitionJobs( $rootJobParams = array() ) {
+               // Carry over any "root job" information
+               $rootJobParams = $this->getRootJobParams();
+
+               $batches = $this->blCache->partition( $this->params['table'], $this->rowsPerJob );
+               if ( !count( $batches ) ) {
+                       return; // no jobs to insert
+               }
+
+               $jobs = array();
+               foreach ( $batches as $batch ) {
+                       list( $start, $end ) = $batch;
+                       $jobs[] = new HTMLCacheUpdateJob( $this->title,
+                               array(
+                                       'table' => $this->params['table'],
+                                       'start' => $start,
+                                       'end'   => $end,
+                               ) + $rootJobParams // carry over information for de-duplication
+                       );
+               }
+
+               JobQueueGroup::singleton()->push( $jobs );
+       }
+
+       /**
+        * Invalidate an array (or iterator) of Title objects, right now
+        * @param $titleArray array
+        */
+       protected function invalidateTitles( $titleArray ) {
+               global $wgUseFileCache, $wgUseSquid;
+
+               $dbw = wfGetDB( DB_MASTER );
+               $timestamp = $dbw->timestamp();
+
+               # Get all IDs in this query into an array
+               $ids = array();
+               foreach ( $titleArray as $title ) {
+                       $ids[] = $title->getArticleID();
+               }
+
+               if ( !$ids ) {
+                       return;
+               }
+
+               # Don't invalidated pages that were already invalidated
+               $touchedCond = isset( $this->params['rootJobTimestamp'] )
+                       ? array( "page_touched < " .
+                               $dbw->addQuotes( $dbw->timestamp( $this->params['rootJobTimestamp'] ) ) )
+                       : array();
+
+               # Update page_touched
+               $batches = array_chunk( $ids, $this->rowsPerQuery );
+               foreach ( $batches as $batch ) {
+                       $dbw->update( 'page',
+                               array( 'page_touched' => $timestamp ),
+                               array( 'page_id' => $batch ) + $touchedCond,
+                               __METHOD__
+                       );
+               }
+
+               # Update squid
+               if ( $wgUseSquid ) {
+                       $u = SquidUpdate::newFromTitles( $titleArray );
+                       $u->doUpdate();
+               }
+
+               # Update file cache
+               if  ( $wgUseFileCache ) {
+                       foreach ( $titleArray as $title ) {
+                               HTMLFileCache::clearFileCache( $title );
+                       }
+               }
+       }
 }
index eef3bf7..b4ea27d 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Degenerate job that just replaces itself in the queue.
+ * Degenerate job that does nothing.
  *
  * 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
@@ -22,8 +22,9 @@
  */
 
 /**
- * Degenerate job that just replace itself in the queue.
- * Useful for lock contention and performance testing.
+ * Degenerate job that does nothing, but can optionally replace itself
+ * in the queue and/or sleep for a brief time period. These can be used
+ * to represent "no-op" jobs or test lock contention and performance.
  *
  * @ingroup JobQueue
  */
@@ -41,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() {
@@ -51,7 +53,7 @@ class NullJob extends Job {
                        $params = $this->params;
                        $params['lives']--;
                        $job = new self( $this->title, $params );
-                       $job->insert();
+                       JobQueueGroup::singleton()->push( $job );
                }
                return true;
        }
index a29f29f..20e4f16 100644 (file)
@@ -69,19 +69,39 @@ class RefreshLinksJob extends Job {
                return true;
        }
 
+       /**
+        * @return Array
+        */
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               // Don't let highly unique "masterPos" values ruin duplicate detection
+               if ( is_array( $info['params'] ) ) {
+                       unset( $info['params']['masterPos'] );
+               }
+               return $info;
+       }
+
+       /**
+        * @param $title Title
+        * @param $revision Revision
+        * @param $fname string
+        * @return void
+        */
        public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
-               global $wgContLang;
+               wfProfileIn( $fname );
+               $content = $revision->getContent( Revision::RAW );
+
+               if ( !$content ) {
+                       // if there is no content, pretend the content is empty
+                       $content = $revision->getContentHandler()->makeEmptyContent();
+               }
 
-               wfProfileIn( $fname . '-parse' );
-               $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
-               $content = $revision->getContent();
-               $parserOutput = $content->getParserOutput( $title, $revision->getId(), $options, false );
-               wfProfileOut( $fname . '-parse' );
+               // Revision ID must be passed to the parser output to get revision variables correct
+               $parserOutput = $content->getParserOutput( $title, $revision->getId(), null, false );
 
-               wfProfileIn( $fname . '-update' );
-               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput  );
+               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
                DataUpdate::runUpdates( $updates );
-               wfProfileOut( $fname . '-update' );
+               wfProfileOut( $fname );
        }
 }
 
@@ -92,8 +112,6 @@ class RefreshLinksJob extends Job {
  * @ingroup JobQueue
  */
 class RefreshLinksJob2 extends Job {
-       const MAX_TITLES_RUN = 10;
-
        function __construct( $title, $params, $id = 0 ) {
                parent::__construct( 'refreshLinks2', $title, $params, $id );
        }
@@ -103,6 +121,8 @@ class RefreshLinksJob2 extends Job {
         * @return boolean success
         */
        function run() {
+               global $wgUpdateRowsPerJob;
+
                wfProfileIn( __METHOD__ );
 
                $linkCache = LinkCache::singleton();
@@ -112,16 +132,16 @@ class RefreshLinksJob2 extends Job {
                        $this->error = "refreshLinks2: Invalid title";
                        wfProfileOut( __METHOD__ );
                        return false;
-               } elseif ( !isset( $this->params['start'] ) || !isset( $this->params['end'] ) ) {
-                       $this->error = "refreshLinks2: Invalid params";
-                       wfProfileOut( __METHOD__ );
-                       return false;
                }
 
                // Back compat for pre-r94435 jobs
                $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
 
-               // Avoid slave lag when fetching templates
+               // Avoid slave lag when fetching templates.
+               // When the outermost job is run, we know that the caller that enqueued it must have
+               // committed the relevant changes to the DB by now. At that point, record the master
+               // position and pass it along as the job recursively breaks into smaller range jobs.
+               // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
                if ( isset( $this->params['masterPos'] ) ) {
                        $masterPos = $this->params['masterPos'];
                } elseif ( wfGetLB()->getServerCount() > 1  ) {
@@ -130,73 +150,77 @@ class RefreshLinksJob2 extends Job {
                        $masterPos = false;
                }
 
-               $titles = $this->title->getBacklinkCache()->getLinks(
-                       $table, $this->params['start'], $this->params['end'] );
-
-               if ( $titles->count() > self::MAX_TITLES_RUN ) {
-                       # We don't want to parse too many pages per job as it can starve other jobs.
-                       # If there are too many pages to parse, break this up into smaller jobs. By passing
-                       # in the master position here we can cut down on the time spent waiting for slaves to
-                       # catch up by the runners handling these jobs since time will have passed between now
-                       # and when they pop these jobs off the queue.
-                       $start = 0; // batch start
-                       $end   = 0; // batch end
-                       $bsize = 0; // batch size
-                       $first = true; // first of batch
-                       $jobs  = array();
-                       foreach ( $titles as $title ) {
-                               $start = $first ? $title->getArticleId() : $start;
-                               $end   = $title->getArticleId();
-                               $first = false;
-                               if ( ++$bsize >= self::MAX_TITLES_RUN ) {
-                                       $jobs[] = new RefreshLinksJob2( $this->title, array(
-                                               'table'     => $table,
-                                               'start'     => $start,
-                                               'end'       => $end,
-                                               'masterPos' => $masterPos
-                                       ) );
-                                       $first = true;
-                                       $start = $end = $bsize = 0;
-                               }
-                       }
-                       if ( $bsize > 0 ) { // group remaining pages into a job
-                               $jobs[] = new RefreshLinksJob2( $this->title, array(
-                                       'table'     => $table,
-                                       'start'     => $start,
-                                       'end'       => $end,
-                                       'masterPos' => $masterPos
-                               ) );
-                       }
-                       Job::batchInsert( $jobs );
-               } elseif ( php_sapi_name() != 'cli' ) {
-                       # Not suitable for page load triggered job running!
-                       # Gracefully switch to refreshLinks jobs if this happens.
-                       $jobs = array();
-                       foreach ( $titles as $title ) {
-                               $jobs[] = new RefreshLinksJob( $title, array( 'masterPos' => $masterPos ) );
-                       }
-                       Job::batchInsert( $jobs );
+               $tbc  = $this->title->getBacklinkCache();
+
+               $jobs = array(); // jobs to insert
+               if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
+                       # This is a partition job to trigger the insertion of leaf jobs...
+                       $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
                } else {
-                       # Wait for the DB of the current/next slave DB handle to catch up to the master.
-                       # This way, we get the correct page_latest for templates or files that just changed
-                       # milliseconds ago, having triggered this job to begin with.
-                       if ( $masterPos ) {
-                               wfGetLB()->waitFor( $masterPos );
-                       }
-                       # Re-parse each page that transcludes this page and update their tracking links...
-                       foreach ( $titles as $title ) {
-                               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
-                               if ( !$revision ) {
-                                       $this->error = 'refreshLinks: Article not found "' .
-                                               $title->getPrefixedDBkey() . '"';
-                                       continue; // skip this page
+                       # This is a base job to trigger the insertion of partitioned jobs...
+                       if ( $tbc->getNumLinks( $table ) <= $wgUpdateRowsPerJob ) {
+                               # Just directly insert the single per-title jobs
+                               $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
+                       } else {
+                               # Insert the partition jobs to make per-title jobs
+                               foreach ( $tbc->partition( $table, $wgUpdateRowsPerJob ) as $batch ) {
+                                       list( $start, $end ) = $batch;
+                                       $jobs[] = new RefreshLinksJob2( $this->title,
+                                               array(
+                                                       'table'            => $table,
+                                                       'start'            => $start,
+                                                       'end'              => $end,
+                                                       'masterPos'        => $masterPos,
+                                               ) + $this->getRootJobParams() // carry over information for de-duplication
+                                       );
                                }
-                               RefreshLinksJob::runForTitleInternal( $title, $revision, __METHOD__ );
-                               wfWaitForSlaves();
                        }
                }
 
+               if ( count( $jobs ) ) {
+                       JobQueueGroup::singleton()->push( $jobs );
+               }
+
                wfProfileOut( __METHOD__ );
                return true;
        }
+
+       /**
+        * @param $table string
+        * @param $masterPos mixed
+        * @return Array
+        */
+       protected function getSingleTitleJobs( $table, $masterPos ) {
+               # The "start"/"end" fields are not set for the base jobs
+               $start  = isset( $this->params['start'] ) ? $this->params['start'] : false;
+               $end    = isset( $this->params['end'] ) ? $this->params['end'] : false;
+               $titles = $this->title->getBacklinkCache()->getLinks( $table, $start, $end );
+               # Convert into single page refresh links jobs.
+               # This handles well when in sapi mode and is useful in any case for job
+               # de-duplication. If many pages use template A, and that template itself
+               # uses template B, then an edit to both will create many duplicate jobs.
+               # Roughly speaking, for each page, one of the "RefreshLinksJob" jobs will
+               # get run first, and when it does, it will remove the duplicates. Of course,
+               # one page could have its job popped when the other page's job is still
+               # buried within the logic of a refreshLinks2 job.
+               $jobs = array();
+               foreach ( $titles as $title ) {
+                       $jobs[] = new RefreshLinksJob( $title,
+                               array( 'masterPos' => $masterPos ) + $this->getRootJobParams()
+                       ); // carry over information for de-duplication
+               }
+               return $jobs;
+       }
+
+       /**
+        * @return Array
+        */
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               // Don't let highly unique "masterPos" values ruin duplicate detection
+               if ( is_array( $info['params'] ) ) {
+                       unset( $info['params']['masterPos'] );
+               }
+               return $info;
+       }
 }
index f67700c..75da5c7 100644 (file)
@@ -31,21 +31,16 @@ class FormatJson {
         * Returns the JSON representation of a value.
         *
         * @param $value Mixed: the value being encoded. Can be any type except a resource.
-        * @param $isHtml Boolean
-        *
-        * @todo FIXME: "$isHtml" parameter's purpose is not documented. It appears to
-        *        map to a parameter labeled "pretty-print output with indents and
-        *        newlines" in Services_JSON::encode(), which has no string relation
-        *        to HTML output.
+        * @param $pretty Boolean: If true, adds non-significant whitespace to improve readability.
         *
         * @return string
         */
-       public static function encode( $value, $isHtml = false ) {
-               if ( !function_exists( 'json_encode' ) || ( $isHtml && version_compare( PHP_VERSION, '5.4.0', '<' ) ) ) {
+       public static function encode( $value, $pretty = false ) {
+               if ( !function_exists( 'json_encode' ) || ( $pretty && version_compare( PHP_VERSION, '5.4.0', '<' ) ) ) {
                        $json = new Services_JSON();
-                       return $json->encode( $value, $isHtml );
+                       return $json->encode( $value, $pretty );
                } else {
-                       return json_encode( $value, $isHtml ? JSON_PRETTY_PRINT : 0 );
+                       return json_encode( $value, $pretty ? JSON_PRETTY_PRINT : 0 );
                }
        }
 
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..1110249 100644 (file)
@@ -575,23 +575,30 @@ 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 8c1e294..4f699f1 100644 (file)
@@ -403,7 +403,7 @@ class LogFormatter {
                foreach ( $entry->getParameters() as $key => $value ) {
                        if ( strpos( $key, ':' ) === false ) continue;
                        list( $index, $type, $name ) = explode( ':', $key, 3 );
-                       $params[$index - 1] = $value;
+                       $params[$index - 1] = $this->formatParameterValue( $type, $value );
                }
 
                /* Message class doesn't like non consecutive numbering.
@@ -446,6 +446,78 @@ class LogFormatter {
                return $this->parsedParameters = $params;
        }
 
+       /**
+        * Formats parameters values dependent to their type
+        * @param $type string The type of the value.
+        *   Valid are currently:
+        *     * - (empty) or plain: The value is returned as-is
+        *     * raw: The value will be added to the log message
+        *            as raw parameter (e.g. no escaping)
+        *            Use this only if there is no other working
+        *            type like user-link or title-link
+        *     * msg: The value is a message-key, the output is
+        *            the message in user language
+        *     * msg-content: The value is a message-key, the output
+        *                    is the message in content language
+        *     * user: The value is a user name, e.g. for GENDER
+        *     * user-link: The value is a user name, returns a
+        *                  link for the user
+        *     * title: The value is a page title,
+        *              returns name of page
+        *     * title-link: The value is a page title,
+        *                   returns link to this page
+        *     * number: Format value as number
+        * @param $value string The parameter value that should
+        *                      be formated
+        * @return string or Message::numParam or Message::rawParam
+        *         Formated value
+        * @since 1.21
+        */
+       protected function formatParameterValue( $type, $value ) {
+               $saveLinkFlood = $this->linkFlood;
+
+               switch( strtolower( trim( $type ) ) ) {
+                       case 'raw':
+                               $value = Message::rawParam( $value );
+                               break;
+                       case 'msg':
+                               $value = $this->msg( $value )->text();
+                               break;
+                       case 'msg-content':
+                               $value = $this->msg( $value )->inContentLanguage()->text();
+                               break;
+                       case 'number':
+                               $value = Message::numParam( $value );
+                               break;
+                       case 'user':
+                               $user = User::newFromName( $value );
+                               $value = $user->getName();
+                               break;
+                       case 'user-link':
+                               $this->setShowUserToolLinks( false );
+
+                               $user = User::newFromName( $value );
+                               $value = Message::rawParam( $this->makeUserLink( $user ) );
+
+                               $this->setShowUserToolLinks( $saveLinkFlood );
+                               break;
+                       case 'title':
+                               $title = Title::newFromText( $value );
+                               $value = $title->getPrefixedText();
+                               break;
+                       case 'title-link':
+                               $title = Title::newFromText( $value );
+                               $value = Message::rawParam( $this->makePageLink( $title ) );
+                               break;
+                       case 'plain':
+                               // Plain text, nothing to do
+                       default:
+                               // Catch other types and use the old behavior (return as-is)
+               }
+
+               return $value;
+       }
+
        /**
         * Helper to make a link to the page, taking the plaintext
         * value in consideration.
@@ -570,6 +642,16 @@ class LogFormatter {
                return array();
        }
 
+       /**
+        * @return Output of getMessageParameters() for testing
+        */
+       public function getMessageParametersForTesting() {
+               // This function was added because getMessageParameters() is
+               // protected and a change from protected to public caused
+               // problems with extensions
+               return $this->getMessageParameters();
+       }
+
 }
 
 /**
@@ -809,9 +891,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;
 
@@ -1108,7 +1192,9 @@ class RightsLogFormatter extends LogFormatter {
                        $params[3] = $this->msg( 'rightsnone' )->text();
                }
                if ( count( $newGroups ) ) {
-                       $params[4] = $lang->listToText( $newGroups );
+                       // Array_values is used here because of bug 42211
+                       // see use of array_unique in UserrightsPage::doSaveUserGroups on $newGroups.
+                       $params[4] = $lang->listToText( array_values( $newGroups ) );
                } else {
                        $params[4] = $this->msg( 'rightsnone' )->text();
                }
index 07238a0..5854e99 100644 (file)
@@ -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..af62ce3 100644 (file)
@@ -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,7 +118,7 @@ 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;
                }
index 84672e0..124db32 100644 (file)
@@ -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 e2fcaa9..cad9c1b 100644 (file)
  * @ingroup Media
  */
 class DjVuImage {
+       /**
+        * Constructor
+        *
+        * @param string $filename The DjVu file name.
+        */
        function __construct( $filename ) {
                $this->mFilename = $filename;
        }
 
+        /**
+         * @const DJVUTXT_MEMORY_LIMIT Memory limit for the DjVu description software
+         */
+       const DJVUTXT_MEMORY_LIMIT = 300000;
+
        /**
         * Check if the given file is indeed a valid DjVu image file
         * @return bool
@@ -252,7 +262,7 @@ class DjVuImage {
                        $cmd = wfEscapeShellArg( $wgDjvuTxt ) . ' --detail=page ' . wfEscapeShellArg( $this->mFilename ) ;
                        wfDebug( __METHOD__.": $cmd\n" );
                        $retval = '';
-                       $txt = wfShellExec( $cmd, $retval );
+                       $txt = wfShellExec( $cmd, $retval, array(), array( 'memory' => self::DJVUTXT_MEMORY_LIMIT ) );
                        wfProfileOut( 'djvutxt' );
                        if( $retval == 0) {
                                # Strip some control characters
index 965099f..dd764e9 100644 (file)
@@ -243,6 +243,15 @@ abstract class MediaHandler {
                return array( $ext, $mime );
        }
 
+       /**
+        * Get useful response headers for GET/HEAD requests for a file with the given metadata
+        * @param $metadata mixed Result of the getMetadata() function of this handler for a file
+        * @return Array
+        */
+       public function getStreamHeaders( $metadata ) {
+               return array();
+       }
+
        /**
         * True if the handled types can be transformed
         * @return bool
index 97a2d1d..7301df6 100644 (file)
@@ -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 ) );
        }
 
index 53716df..f7e988f 100644 (file)
@@ -120,6 +120,12 @@ class SvgHandler extends ImageHandler {
                        return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
 
+               $metadata = $this->unpackMetadata( $image->getMetadata() );
+               if ( isset( $metadata['error'] ) ) { // sanity check
+                       $err = wfMessage( 'svg-long-error', $metadata['error']['message'] )->text();
+                       return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $err );
+               }
+
                if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) {
                        return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight,
                                wfMessage( 'thumbnail_dest_directory' )->text() );
@@ -127,7 +133,7 @@ class SvgHandler extends ImageHandler {
 
                $srcPath = $image->getLocalRefPath();
                $status = $this->rasterize( $srcPath, $dstPath, $physicalWidth, $physicalHeight );
-               if( $status === true ) {
+               if ( $status === true ) {
                        return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                } else {
                        return $status; // MediaTransformError
@@ -214,6 +220,8 @@ class SvgHandler extends ImageHandler {
                if ( isset( $metadata['width'] ) && isset( $metadata['height'] ) ) {
                        return array( $metadata['width'], $metadata['height'], 'SVG',
                                        "width=\"{$metadata['width']}\" height=\"{$metadata['height']}\"" );
+               } else { // error
+                       return array( 0, 0, 'SVG', "width=\"0\" height=\"0\"" );
                }
        }
 
@@ -232,6 +240,12 @@ class SvgHandler extends ImageHandler {
         */
        function getLongDesc( $file ) {
                global $wgLang;
+
+               $metadata = $this->unpackMetadata( $file->getMetadata() );
+               if ( isset( $metadata['error'] ) ) {
+                       return wfMessage( 'svg-long-error', $metadata['error']['message'] )->text();
+               }
+
                $size = $wgLang->formatSize( $file->getSize() );
 
                if ( $this->isAnimatedImage( $file ) ) {
@@ -240,23 +254,23 @@ class SvgHandler extends ImageHandler {
                        $msg = wfMessage( 'svg-long-desc' );
                }
 
-               $msg->numParams(
-                       $file->getWidth(),
-                       $file->getHeight()
-               );
-               $msg->Params( $size );
+               $msg->numParams( $file->getWidth(), $file->getHeight() )->params( $size );
+
                return $msg->parse();
        }
 
        function getMetadata( $file, $filename ) {
+               $metadata = array( 'version' => self::SVG_METADATA_VERSION );
                try {
-                       $metadata = SVGMetadataExtractor::getMetadata( $filename );
-               } catch( Exception $e ) {
-                       // Broken file?
+                       $metadata += SVGMetadataExtractor::getMetadata( $filename );
+               } catch( MWException $e ) { // @TODO: SVG specific exceptions
+                       // File not found, broken, etc.
+                       $metadata['error'] = array(
+                               'message' => $e->getMessage(),
+                               'code'    => $e->getCode()
+                       );
                        wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" );
-                       return '0';
                }
-               $metadata['version'] = self::SVG_METADATA_VERSION;
                return serialize( $metadata );
        }
 
@@ -306,7 +320,7 @@ class SvgHandler extends ImageHandler {
                        return false;
                }
                $metadata = $this->unpackMetadata( $metadata );
-               if ( !$metadata ) {
+               if ( !$metadata || isset( $metadata['error'] ) ) {
                        return false;
                }
 
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
diff --git a/includes/mobile/DeviceDetection.php b/includes/mobile/DeviceDetection.php
deleted file mode 100644 (file)
index 262665b..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-<?php
-/**
- * Mobile device detection code
- *
- * Copyright © 2011 Patrick Reilly
- * http://www.mediawiki.org/
- *
- * 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
- */
-
-/**
- * Base for classes describing devices and their capabilities
- * @since 1.20
- */
-interface IDeviceProperties {
-       /**
-        * @return string: 'html' or 'wml'
-        */
-       function format();
-
-       /**
-        * @return bool
-        */
-       function supportsJavaScript();
-
-       /**
-        * @return bool
-        */
-       function supportsJQuery();
-
-       /**
-        * @return bool
-        */
-       function disableZoom();
-}
-
-/**
- * @since 1.20
- */
-interface IDeviceDetector {
-       /**
-        * @param $userAgent
-        * @param string $acceptHeader
-        * @return IDeviceProperties
-        */
-       function detectDeviceProperties( $userAgent, $acceptHeader = '' );
-
-       /**
-        * @param $deviceName
-        * @return IDeviceProperties
-        */
-       function getDeviceProperties( $deviceName );
-
-       /**
-        * @param $userAgent string
-        * @param $acceptHeader string
-        * @return string
-        */
-       function detectDeviceName( $userAgent, $acceptHeader = '' );
-}
-
-/**
- * MediaWiki's default IDeviceProperties implementation
- */
-final class DeviceProperties implements IDeviceProperties {
-       private $device;
-
-       public function __construct( array $deviceCapabilities ) {
-               $this->device = $deviceCapabilities;
-       }
-
-       /**
-        * @return string
-        */
-       function format() {
-               return $this->device['view_format'];
-       }
-
-       /**
-        * @return bool
-        */
-       function supportsJavaScript() {
-               return $this->device['supports_javascript'];
-       }
-
-       /**
-        * @return bool
-        */
-       function supportsJQuery() {
-               return $this->device['supports_jquery'];
-       }
-
-       /**
-        * @return bool
-        */
-       function disableZoom() {
-               return $this->device['disable_zoom'];
-       }
-}
-
-/**
- * Provides abstraction for a device.
- * A device can select which format a request should receive and
- * may be extended to provide access to particular device functionality.
- * @since 1.20
- */
-class DeviceDetection implements IDeviceDetector {
-
-       private static $formats = array (
-                       'html' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'default',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'capable' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'default',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => true,
-                       ),
-                       'webkit' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'webkit',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => false,
-                       ),
-                       'ie' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'default',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => false,
-                       ),
-                       'android' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'android',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => false,
-                       ),
-                       'iphone' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'iphone',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => false,
-                       ),
-                       'iphone2' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'iphone2',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => true,
-                       ),
-                       'native_iphone' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'default',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => false,
-                       ),
-                       'palm_pre' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'palm_pre',
-                               'supports_javascript' => true,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'kindle' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'kindle',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'kindle2' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'kindle',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'blackberry' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'blackberry',
-                               'supports_javascript' => true,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'blackberry-lt5' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'blackberry',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'netfront' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'simple',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'wap2' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'simple',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'psp' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'psp',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'ps3' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'simple',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'wii' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'wii',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => true,
-                       ),
-                       'operamini' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'operamini',
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'operamobile' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'operamobile',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => true,
-                       ),
-                       'nokia' => array (
-                               'view_format' => 'html',
-                               'css_file_name' => 'nokia',
-                               'supports_javascript' => true,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-                       'wml' => array (
-                               'view_format' => 'wml',
-                               'css_file_name' => null,
-                               'supports_javascript' => false,
-                               'supports_jquery' => false,
-                               'disable_zoom' => true,
-                       ),
-               );
-
-       /**
-        * Returns an instance of detection class, overridable by extensions
-        * @return IDeviceDetector
-        */
-       public static function factory() {
-               global $wgDeviceDetectionClass;
-
-               static $instance = null;
-               if ( !$instance ) {
-                       $instance = new $wgDeviceDetectionClass();
-               }
-               return $instance;
-       }
-
-       /**
-        * @deprecated: Deprecated, will be removed once detectDeviceProperties() will be deployed everywhere on WMF
-        * @param $userAgent
-        * @param string $acceptHeader
-        * @return array
-        */
-       public function detectDevice( $userAgent, $acceptHeader = '' ) {
-               $formatName = $this->detectFormatName( $userAgent, $acceptHeader );
-               return $this->getDevice( $formatName );
-       }
-
-       /**
-        * @param $userAgent
-        * @param string $acceptHeader
-        * @return IDeviceProperties
-        */
-       public function detectDeviceProperties( $userAgent, $acceptHeader = '' ) {
-               $deviceName = $this->detectDeviceName( $userAgent, $acceptHeader );
-               return $this->getDeviceProperties( $deviceName );
-       }
-
-       /**
-        * @deprecated: Deprecated, will be removed once detectDeviceProperties() will be deployed everywhere on WMF
-        * @param $formatName
-        * @return array
-        */
-       public function getDevice( $formatName ) {
-               return ( isset( self::$formats[$formatName] ) ) ? self::$formats[$formatName] : array();
-       }
-
-       /**
-        * @param $deviceName
-        * @return IDeviceProperties
-        */
-       public function getDeviceProperties( $deviceName ) {
-               if ( isset( self::$formats[$deviceName] ) ) {
-                       return new DeviceProperties( self::$formats[$deviceName] );
-               } else {
-                       return new DeviceProperties( array(
-                               'view_format' => 'html',
-                               'css_file_name' => 'default',
-                               'supports_javascript' => true,
-                               'supports_jquery' => true,
-                               'disable_zoom' => true,
-                       ) );
-               }
-       }
-
-       /**
-        * @deprecated: Renamed to detectDeviceName()
-        * @param $userAgent string
-        * @param $acceptHeader string
-        * @return string
-        */
-       public function detectFormatName( $userAgent, $acceptHeader = '' ) {
-               return $this->detectDeviceName( $userAgent, $acceptHeader );
-       }
-
-       /**
-        * @param $userAgent string
-        * @param $acceptHeader string
-        * @return string
-        */
-       public function detectDeviceName( $userAgent, $acceptHeader = '' ) {
-               wfProfileIn( __METHOD__ );
-
-               $deviceName = '';
-               if ( preg_match( '/Android/', $userAgent ) ) {
-                       $deviceName = 'android';
-                       if ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
-                               $deviceName = 'operamini';
-                       } elseif ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
-                               $deviceName = 'operamobile';
-                       }
-               } elseif ( preg_match( '/MSIE 9.0/', $userAgent ) ||
-                               preg_match( '/MSIE 8.0/', $userAgent ) ) {
-                       $deviceName = 'ie';
-               } elseif( preg_match( '/MSIE/', $userAgent ) ) {
-                       $deviceName = 'html';
-               } elseif ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
-                       $deviceName = 'operamobile';
-               } elseif ( preg_match( '/iPad.* Safari/', $userAgent ) ) {
-                       $deviceName = 'iphone';
-               } elseif ( preg_match( '/iPhone.* Safari/', $userAgent ) ) {
-                       if ( strpos( $userAgent, 'iPhone OS 2' ) !== false ) {
-                               $deviceName = 'iphone2';
-                       } else {
-                               $deviceName = 'iphone';
-                       }
-               } elseif ( preg_match( '/iPhone/', $userAgent ) ) {
-                       if ( strpos( $userAgent, 'Opera' ) !== false ) {
-                               $deviceName = 'operamini';
-                       } else {
-                               $deviceName = 'native_iphone';
-                       }
-               } elseif ( preg_match( '/WebKit/', $userAgent ) ) {
-                       if ( preg_match( '/Series60/', $userAgent ) ) {
-                               $deviceName = 'nokia';
-                       } elseif ( preg_match( '/webOS/', $userAgent ) ) {
-                               $deviceName = 'palm_pre';
-                       } else {
-                               $deviceName = 'webkit';
-                       }
-               } elseif ( preg_match( '/Opera/', $userAgent ) ) {
-                       if ( strpos( $userAgent, 'Nintendo Wii' ) !== false ) {
-                               $deviceName = 'wii';
-                       } elseif ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
-                               $deviceName = 'operamini';
-                       } else {
-                               $deviceName = 'operamobile';
-                       }
-               } elseif ( preg_match( '/Kindle\/1.0/', $userAgent ) ) {
-                       $deviceName = 'kindle';
-               } elseif ( preg_match( '/Kindle\/2.0/', $userAgent ) ) {
-                       $deviceName = 'kindle2';
-               } elseif ( preg_match( '/Firefox/', $userAgent ) ) {
-                       $deviceName = 'capable';
-               } elseif ( preg_match( '/NetFront/', $userAgent ) ) {
-                       $deviceName = 'netfront';
-               } elseif ( preg_match( '/SEMC-Browser/', $userAgent ) ) {
-                       $deviceName = 'wap2';
-               } elseif ( preg_match( '/Series60/', $userAgent ) ) {
-                       $deviceName = 'wap2';
-               } elseif ( preg_match( '/PlayStation Portable/', $userAgent ) ) {
-                       $deviceName = 'psp';
-               } elseif ( preg_match( '/PLAYSTATION 3/', $userAgent ) ) {
-                       $deviceName = 'ps3';
-               } elseif ( preg_match( '/SAMSUNG/', $userAgent ) ) {
-                       $deviceName = 'capable';
-               } elseif ( preg_match( '/BlackBerry/', $userAgent ) ) {
-                       if( preg_match( '/BlackBerry[^\/]*\/[1-4]\./', $userAgent ) ) {
-                               $deviceName = 'blackberry-lt5';
-                       } else {
-                               $deviceName = 'blackberry';
-                       }
-               }
-
-               if ( $deviceName === '' ) {
-                       if ( strpos( $acceptHeader, 'application/vnd.wap.xhtml+xml' ) !== false ) {
-                               // Should be wap2
-                               $deviceName = 'html';
-                       } elseif ( strpos( $acceptHeader, 'vnd.wap.wml' ) !== false ) {
-                               $deviceName = 'wml';
-                       } else {
-                               $deviceName = 'html';
-                       }
-               }
-               wfProfileOut( __METHOD__ );
-               return $deviceName;
-       }
-
-       /**
-        * @return array: List of all device-specific stylesheets
-        */
-       public function getCssFiles() {
-               $files = array();
-
-               foreach ( self::$formats as $dev ) {
-                       if ( isset( $dev['css_file_name'] ) ) {
-                               $files[] = $dev['css_file_name'];
-                       }
-               }
-               return array_unique( $files );
-       }
-}
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..03b0d5b 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,113 @@ abstract class BagOStuff {
        abstract public function delete( $key, $time = 0 );
 
        /**
+        * Merge changes into the existing cache value (possibly creating a new one)
+        *
         * @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..b8a1bc2 100644 (file)
@@ -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 ) {
@@ -97,6 +98,8 @@ class EhcacheBagOStuff extends BagOStuff {
                        return false;
                }
 
+               $casToken = $body;
+
                wfProfileOut( __METHOD__ );
                return $data;
        }
@@ -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
@@ -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
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..d3f3583 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,5 @@ class HashBagOStuff extends BagOStuff {
 
                return true;
        }
-
-       /**
-        * @return array
-        */
-       function keys() {
-               return array_keys( $this->bag );
-       }
 }
 
index 643d2e9..aebcbe7 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,11 +179,6 @@ 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";
                }
index 72f6a9f..faa676d 100644 (file)
@@ -277,7 +277,7 @@ class MWMemcached {
         * @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
+        * is safe to use timestamps in all cases, regardless of expiration
         * eg: strtotime("+3 hour")
         *
         * @return Boolean
@@ -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;
                }
@@ -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 76886eb..9f06fa0 100644 (file)
@@ -104,11 +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)" );
-               return $this->checkResult( $key, parent::get( $key ) );
+               $result = $this->client->get( $this->encodeKey( $key ), null, $casToken );
+               $result = $this->checkResult( $key, $result );
+               wfProfileOut( __METHOD__ );
+               return $result;
        }
 
        /**
@@ -122,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
@@ -224,9 +241,11 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
         * @return Array
         */
        public function getMulti( array $keys ) {
+               wfProfileIn( __METHOD__ );
                $this->debugLog( 'getMulti(' . implode( ', ', $keys ) . ')' );
                $callback = array( $this, 'encodeKey' );
                $result = $this->client->getMulti( array_map( $callback, $keys ) );
+               wfProfileOut( __METHOD__ );
                return $this->checkResult( false, $result );
        }
 
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 83b6016..e4af262 100644 (file)
@@ -141,7 +141,7 @@ class ObjectCache {
         *
         * This always uses the PHP client, since the PECL client has a different
         * hashing scheme and a different interpretation of the flags bitfield, so
-        * switching between the two clients randomly would be disasterous.
+        * switching between the two clients randomly would be disastrous.
         *
         * @param $params array
         *
index 40784f5..bd5b354 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 );
                        }
                }
 
index 54051dc..80c670e 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,26 +99,37 @@ class SqlBagOStuff extends BagOStuff {
        }
 
        /**
+        * 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
@@ -114,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 ) );
        }
 
        /**
@@ -147,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 .
@@ -159,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;
        }
 
        /**
@@ -173,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;
        }
@@ -237,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 ) {
@@ -246,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();
@@ -258,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,
@@ -267,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;
                }
 
@@ -302,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(
@@ -320,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__ );
 
@@ -342,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 );
                }
        }
 
@@ -418,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;
        }
 
@@ -544,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__ );
+                       }
                }
        }
 }
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 8917b6d..b77309b 100644 (file)
@@ -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, ',' );
index 9f1fff2..083bd29 100644 (file)
@@ -254,12 +254,12 @@ class LinkHolderArray {
         * @todo FIXME: Update documentation. makeLinkObj() is deprecated.
         * Replace <!--LINK--> link placeholders with actual links, in the buffer
         * Placeholders created in Skin::makeLinkObj()
-        * Returns an array of link CSS classes, indexed by PDBK.
+        * @return array of link CSS classes, indexed by PDBK.
         */
        function replace( &$text ) {
                wfProfileIn( __METHOD__ );
 
-               $colours = $this->replaceInternal( $text );
+               $colours = $this->replaceInternal( $text ); // FIXME: replaceInternal doesn't return a value
                $this->replaceInterwiki( $text );
 
                wfProfileOut( __METHOD__ );
@@ -497,14 +497,18 @@ 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 );
                                }
                        }
                }
@@ -556,10 +560,11 @@ 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 ) );
index b31288f..d47ccb9 100644 (file)
@@ -246,6 +246,13 @@ class Parser {
                }
        }
 
+       /**
+        * Allow extensions to clean up when the parser is cloned
+        */
+       function __clone() {
+               wfRunHooks( 'ParserCloned', array( $this ) );
+       }
+
        /**
         * Do various kinds of initialisation on the first call of the parser
         */
@@ -405,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.
@@ -542,7 +547,7 @@ class Parser {
         * Also removes comments.
         * @return mixed|string
         */
-       function preprocess( $text, Title $title, ParserOptions $options, $revid = null ) {
+       function preprocess( $text, Title $title = null, ParserOptions $options, $revid = null ) {
                wfProfileIn( __METHOD__ );
                $this->startParse( $title, $options, self::OT_PREPROCESS, true );
                if ( $revid !== null ) {
@@ -774,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();
        }
 
        /**
@@ -1307,7 +1307,8 @@ class Parser {
                if ( $text === false ) {
                        # Not an image, make a link
                        $text = Linker::makeExternalLink( $url,
-                               $this->getConverterLanguage()->markNoConversion($url), true, 'free',
+                               $this->getConverterLanguage()->markNoConversion( $url, true ),
+                               true, 'free',
                                $this->getExternalLinkAttribs( $url ) );
                        # Register it in the output object...
                        # Replace unnecessary URL escape codes with their equivalent characters
@@ -1606,7 +1607,25 @@ class Parser {
                wfProfileOut( __METHOD__ );
                return $s;
        }
-
+       /**
+        * Get the rel attribute for a particular external link.
+        *
+        * @since 1.21
+        * @param $url String|bool optional URL, to extract the domain from for rel =>
+        *   nofollow if appropriate
+        * @param $title Title optional Title, for wgNoFollowNsExceptions lookups
+        * @return string|null rel attribute for $url
+        */
+       public static function getExternalLinkRel( $url = false, $title = null ) {
+               global $wgNoFollowLinks, $wgNoFollowNsExceptions, $wgNoFollowDomainExceptions;
+               $ns = $title ? $title->getNamespace() : false;
+               if ( $wgNoFollowLinks && !in_array( $ns, $wgNoFollowNsExceptions ) &&
+                               !wfMatchesDomainList( $url, $wgNoFollowDomainExceptions ) )
+               {
+                       return 'nofollow';
+               }
+               return null;
+       }
        /**
         * Get an associative array of additional HTML attributes appropriate for a
         * particular external link.  This currently may include rel => nofollow
@@ -1619,13 +1638,8 @@ class Parser {
         */
        function getExternalLinkAttribs( $url = false ) {
                $attribs = array();
-               global $wgNoFollowLinks, $wgNoFollowNsExceptions, $wgNoFollowDomainExceptions;
-               $ns = $this->mTitle->getNamespace();
-               if ( $wgNoFollowLinks && !in_array( $ns, $wgNoFollowNsExceptions ) &&
-                               !wfMatchesDomainList( $url, $wgNoFollowDomainExceptions ) )
-               {
-                       $attribs['rel'] = 'nofollow';
-               }
+               $attribs['rel'] = self::getExternalLinkRel( $url, $this->mTitle );
+
                if ( $this->mOptions->getExternalLinkTarget() ) {
                        $attribs['target'] = $this->mOptions->getExternalLinkTarget();
                }
@@ -3617,7 +3631,7 @@ class Parser {
 
                        if ( $rev ) {
                                $content = $rev->getContent();
-                               $text = $content->getWikitextForTransclusion();
+                               $text = $content ? $content->getWikitextForTransclusion() : null;
 
                                if ( $text === false || $text === null ) {
                                        $text = false;
@@ -4478,14 +4492,14 @@ class Parser {
                        '~~~' => $sigText
                ) );
 
-               # Context links: [[|name]] and [[name (context)|]]
+               # Context links ("pipe trick"): [[|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)|]]
-               $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|]]
+               $p2 = "/\[\[\\|($tc+)]]/";                                             # [[|page]]
 
                # try $p1 first, to turn "[[A, B (C)|]]" into "[[A, B (C)|A, B]]"
                $text = preg_replace( $p1, '[[\\1\\2\\3|\\2]]', $text );
@@ -4675,11 +4689,7 @@ class Parser {
                        global $wgTitle;
                        $title = $wgTitle;
                }
-               if ( !$title ) {
-                       # It's not uncommon having a null $wgTitle in scripts. See r80898
-                       # Create a ghost title in such case
-                       $title = Title::newFromText( 'Dwimmerlaik' );
-               }
+
                $text = $this->preprocess( $text, $title, $options );
 
                $executing = false;
index e4f5d12..d1ca8aa 100644 (file)
@@ -149,8 +149,8 @@ class Parser_LinkHooks extends Parser {
                $holders = new LinkHolderArray( $this );
 
                if( is_null( $this->mTitle ) ) {
-                       wfProfileOut( __METHOD__ );
                        wfProfileOut( __METHOD__.'-setup' );
+                       wfProfileOut( __METHOD__ );
                        throw new MWException( __METHOD__.": \$this->mTitle is null\n" );
                }
 
@@ -224,10 +224,12 @@ class Parser_LinkHooks extends Parser {
                wfProfileIn( __METHOD__ );
                $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) ) {
+                       wfProfileOut( __METHOD__."-misc" );
                        wfProfileOut( __METHOD__ );
                        return $wt;
                }
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 ed2d436..dd7e965 100644 (file)
@@ -59,9 +59,15 @@ class MWTidyWrapper {
                        dechex( mt_rand( 0, 0x7fffffff ) ) . dechex( mt_rand( 0, 0x7fffffff ) );
                $this->mMarkerIndex = 0;
 
+               // Replace <mw:editsection> elements with placeholders
                $wrappedtext = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
                        array( &$this, 'replaceEditSectionLinksCallback' ), $text );
 
+               // Modify inline Microdata <link> and <meta> elements so they say <html-link> and <html-meta> so
+               // we can trick Tidy into not stripping them out by including them in tidy's new-empty-tags config
+               $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>';
@@ -86,7 +92,13 @@ class MWTidyWrapper {
         * @return string
         */
        public function postprocess( $text ) {
-               return $this->mTokens->replace( $text );
+               // Revert <html-{link,meta}> back to <{link,meta}>
+               $text = preg_replace( '!<html-(link|meta)([^>]*?)(/{0,1}>)!', '<$1$2$3', $text );
+
+               // Restore the contents of placeholder tokens
+               $text = $this->mTokens->replace( $text );
+
+               return $text;
        }
 
 }
@@ -248,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 62be39e..baffcd8 100644 (file)
@@ -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,52 +524,50 @@ class Profiler {
                        return;
                }
 
-               $errorState = $dbw->ignoreErrors( true );
-
                if( $wgProfilePerHost ){
                        $pfhost = wfHostname();
                } else {
                        $pfhost = '';
                }
 
-               $this->collateData();
-
-               foreach( $this->mCollated as $name => $elapsed ){
-                       $eventCount = $this->mCalls[$name];
-                       $timeSum = (float) ($elapsed * 1000);
-                       $memorySum = (float)$this->mMemory[$name];
-                       $name = substr($name, 0, 255);
-
-                       // Kludge
-                       $timeSum = ($timeSum >= 0) ? $timeSum : 0;
-                       $memorySum = ($memorySum >= 0) ? $memorySum : 0;
-
-                       $dbw->update( 'profiling',
-                               array(
-                                       "pf_count=pf_count+{$eventCount}",
-                                       "pf_time=pf_time+{$timeSum}",
-                                       "pf_memory=pf_memory+{$memorySum}",
-                               ),
-                               array(
-                                       'pf_name' => $name,
-                                       'pf_server' => $pfhost,
-                               ),
-                               __METHOD__ );
-
-                       $rc = $dbw->affectedRows();
-                       if ( $rc == 0 ) {
-                               $dbw->insert('profiling', array ('pf_name' => $name, 'pf_count' => $eventCount,
-                                       'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ),
-                                       __METHOD__, array ('IGNORE'));
+               try {
+                       $this->collateData();
+
+                       foreach( $this->mCollated as $name => $elapsed ){
+                               $eventCount = $this->mCalls[$name];
+                               $timeSum = (float) ($elapsed * 1000);
+                               $memorySum = (float)$this->mMemory[$name];
+                               $name = substr($name, 0, 255);
+
+                               // Kludge
+                               $timeSum = ($timeSum >= 0) ? $timeSum : 0;
+                               $memorySum = ($memorySum >= 0) ? $memorySum : 0;
+
+                               $dbw->update( 'profiling',
+                                       array(
+                                               "pf_count=pf_count+{$eventCount}",
+                                               "pf_time=pf_time+{$timeSum}",
+                                               "pf_memory=pf_memory+{$memorySum}",
+                                       ),
+                                       array(
+                                               'pf_name' => $name,
+                                               'pf_server' => $pfhost,
+                                       ),
+                                       __METHOD__ );
+
+                               $rc = $dbw->affectedRows();
+                               if ( $rc == 0 ) {
+                                       $dbw->insert('profiling', array ('pf_name' => $name, 'pf_count' => $eventCount,
+                                               'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ),
+                                               __METHOD__, array ('IGNORE'));
+                               }
+                               // When we upgrade to mysql 4.1, the insert+update
+                               // can be merged into just a insert with this construct added:
+                               //     "ON DUPLICATE KEY UPDATE ".
+                               //     "pf_count=pf_count + VALUES(pf_count), ".
+                               //     "pf_time=pf_time + VALUES(pf_time)";
                        }
-                       // When we upgrade to mysql 4.1, the insert+update
-                       // can be merged into just a insert with this construct added:
-                       //     "ON DUPLICATE KEY UPDATE ".
-                       //     "pf_count=pf_count + VALUES(pf_count), ".
-                       //     "pf_time=pf_time + VALUES(pf_time)";
-               }
-
-               $dbw->ignoreErrors( $errorState );
+               } catch ( DBError $e ) {}
        }
 
        /**
@@ -591,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 3e7d6fa..e62622f 100644 (file)
@@ -50,10 +50,18 @@ class ProfilerSimpleText extends ProfilerSimple {
                                : 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 {
+                       if ( php_sapi_name() === '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..017e135 100644 (file)
@@ -69,6 +69,14 @@ class ProfilerSimpleTrace extends ProfilerSimple {
        }
 
        function logData() {
-               print "<!-- \n {$this->trace} \n -->";
+               if ( php_sapi_name() === '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 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..fad0027 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;
        }
@@ -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 8fec0d6..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();
@@ -77,7 +78,7 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * Set this module's name. This is called by ResourceLodaer::register()
+        * Set this module's name. This is called by ResourceLoader::register()
         * when registering the module. Other code should not call this.
         *
         * @param $name String: Name
@@ -91,7 +92,7 @@ abstract class ResourceLoaderModule {
         * with ResourceLoader::register()
         *
         * @return Int ResourceLoaderModule class constant, the subclass default
-        *     if not set manuall
+        *     if not set manually
         */
        public function getOrigin() {
                return $this->origin;
@@ -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 d90e8c4..bdb240e 100644 (file)
@@ -81,7 +81,10 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
                                $rules[] = ".editsection { display: none; }\n";
                        }
                        if ( $options['editfont'] !== 'default' ) {
-                               $rules[] = "textarea { font-family: {$options['editfont']}; }\n";
+                               // Double-check that $options['editfont'] consists of safe characters only
+                               if ( preg_match( '/^[a-zA-Z0-9_, -]+$/', $options['editfont'] ) ) {
+                                       $rules[] = "textarea { font-family: {$options['editfont']}; }\n";
+                               }
                        }
                        $style = implode( "\n", $rules );
                        if ( $this->getFlip( $context ) ) {
index 62d096a..6d787c5 100644 (file)
@@ -43,7 +43,8 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
 
                return array(
                        'editToken' => $wgUser->getEditToken(),
-                       'watchToken' => ApiQueryInfo::getWatchToken(null, null),
+                       'patrolToken' => ApiQueryRecentChanges::getPatrolToken( null, null ),
+                       'watchToken' => ApiQueryInfo::getWatchToken( null, null ),
                );
        }
 
index 28c3426..b85da16 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 );
 
@@ -77,10 +90,16 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                }
 
                $content = $revision->getContent( Revision::RAW );
+
+               if ( !$content ) {
+                       wfDebug( __METHOD__ . "failed to load content of JS/CSS page!\n" );
+                       return null;
+               }
+
                $model = $content->getModel();
 
                if ( $model !== CONTENT_MODEL_CSS && $model !== CONTENT_MODEL_JAVASCRIPT ) {
-                       wfDebug( __METHOD__ . "bad content model #$model for JS/CSS page!\n" );
+                       wfDebug( __METHOD__ . "bad content model $model for JS/CSS page!\n" );
                        return null;
                }
 
index f8f5fa5..0199edb 100644 (file)
@@ -187,6 +187,11 @@ class SearchEngine {
                                return null;
                        }
 
+                       # Try files if searching in the Media: namespace
+                       if ( $title->getNamespace() == NS_MEDIA ) {
+                               $title = Title::makeTitle( NS_FILE, $title->getText() );
+                       }
+
                        if ( $title->isSpecialPage() || $title->isExternal() || $title->exists() ) {
                                return $title;
                        }
@@ -197,22 +202,23 @@ class SearchEngine {
                                return $title;
                        }
 
+                       if ( !wfRunHooks( 'SearchAfterNoDirectMatch', array( $term, &$title ) ) ) {
+                               return $title;
+                       }
+
                        # Now try all lower case (i.e. first letter capitalized)
-                       #
                        $title = Title::newFromText( $wgContLang->lc( $term ) );
                        if ( $title && $title->exists() ) {
                                return $title;
                        }
 
                        # Now try capitalized string
-                       #
                        $title = Title::newFromText( $wgContLang->ucwords( $term ) );
                        if ( $title && $title->exists() ) {
                                return $title;
                        }
 
                        # Now try all upper case
-                       #
                        $title = Title::newFromText( $wgContLang->uc( $term ) );
                        if ( $title && $title->exists() ) {
                                return $title;
@@ -795,7 +801,7 @@ class SearchResult {
                                //TODO: if we could plug in some code that knows about special content models *and* about
                                //      special features of the search engine, the search could benefit.
                                $content = $this->mRevision->getContent();
-                               $this->mText = $content->getTextForSearchIndex();
+                               $this->mText = $content ? $content->getTextForSearchIndex() : '';
                        } else { // TODO: can we fetch raw wikitext for commons images?
                                $this->mText = '';
                        }
index 40dd36c..389c317 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;
index 0d5db11..b2e2e71 100644 (file)
@@ -1,18 +1,37 @@
 <?php
-
 /**
  * Class representing a MediaWiki site.
  *
- * @since 1.21
+ * 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 Site
- *
  * @license GNU GPL v2+
  * @author John Erling Blad < jeblad@gmail.com >
  * @author Daniel Kinzler
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
+
+/**
+ * Class representing a MediaWiki site.
+ *
+ * @since 1.21
+ *
+ * @ingroup Site
+ */
 class MediaWikiSite extends SiteObject {
 
        const PATH_FILE = 'file_path';
index 141629e..5d2c86b 100644 (file)
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class SiteArray extends GenericArrayObject implements SiteList {
+       /**
+        * Update this version number when the SiteArray format
+        * changes in an incompatible way
+        *
+        * @since 1.21
+        *
+        * @var integer
+        */
+       const CACHE_VERSION = 1;
+
+       /**
+        * Version number of the SiteArray format of the currently used object
+        *
+        * @since 1.21
+        *
+        * @var integer
+        */
+       public $cacheVersion = self::CACHE_VERSION;
 
        /**
         * Internal site identifiers pointing to their sites offset value.
@@ -86,12 +104,12 @@ class SiteArray extends GenericArrayObject implements SiteList {
         * @param mixed $index
         */
        public function offsetUnset( $index ) {
-               /**
-                * @var Site $site
-                */
-               $site = $this->offsetGet( $index );
+               if ( $this->offsetExists( $index ) ) {
+                       /**
+                        * @var Site $site
+                        */
+                       $site = $this->offsetGet( $index );
 
-               if ( $site !== false ) {
                        unset( $this->byGlobalId[$site->getGlobalId()] );
                        unset( $this->byInternalId[$site->getInternalId()] );
                }
@@ -202,4 +220,41 @@ class SiteArray extends GenericArrayObject implements SiteList {
                $this[] = $site;
        }
 
+       /**
+        * @see GenericArrayObject::getSerializationData
+        *
+        * @since 1.21
+        *
+        * @return array
+        */
+       protected function getSerializationData() {
+               return array_merge(
+                       parent::getSerializationData(),
+                       array(
+                               'cacheVersion' => self::CACHE_VERSION,
+                               '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->cacheVersion = $serializationData['cacheVersion'];
+               $this->byInternalId = $serializationData['internalIds'];
+               $this->byGlobalId = $serializationData['globalIds'];
+
+               return $serializationData;
+       }
+
 }
index 0c6aeb3..217f860 100644 (file)
@@ -151,6 +151,7 @@ class SiteObject extends ORMRow implements Site {
         *
         * @since 1.21
         *
+        * @throws MWException
         * @return string|false
         */
        public function getProtocol() {
@@ -439,7 +440,7 @@ class SiteObject extends ORMRow implements Site {
        }
 
        /**
-        * @see ORMRow::save
+        * @see IORMRow::save
         * @see Site::save
         *
         * @since 1.21
@@ -449,7 +450,7 @@ class SiteObject extends ORMRow implements Site {
         * @return boolean Success indicator
         */
        public function save( $functionName = null ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->table->getWriteDbConnection();
 
                $trx = $dbw->trxLevel();
 
@@ -495,6 +496,25 @@ class SiteObject extends ORMRow implements Site {
                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
         *
index 56d567e..a67d474 100644 (file)
@@ -32,9 +32,9 @@ class Sites {
 
        /**
         * @since 1.21
-        * @var SiteList|false
+        * @var SiteList|null
         */
-       protected $sites = false;
+       protected $sites = null;
 
        /**
         * Constructor.
@@ -65,7 +65,7 @@ class Sites {
         *
         * @since 1.21
         *
-        * @param string|false $globalId
+        * @param string|boolean false $globalId
         *
         * @return Site
         */
@@ -95,14 +95,13 @@ class Sites {
         */
        public function getSites( $source = 'cache' ) {
                if ( $source === 'cache' ) {
-                       if ( $this->sites === false ) {
+                       if ( $this->sites === null ) {
                                $cache = wfGetMainCache();
-                               $sites = $cache->get( 'sites-cache' );
+                               $sites = $cache->get( wfMemcKey( 'SiteList' ) );
 
-                               if ( is_object( $sites ) ) {
+                               if ( is_object( $sites ) && isset( $sites->cacheVersion ) && $sites->cacheVersion === SiteArray::CACHE_VERSION ) {
                                        $this->sites = $sites;
-                               }
-                               else {
+                               } else {
                                        $this->loadSites();
                                }
                        }
@@ -170,7 +169,7 @@ class Sites {
                }
 
                $cache = wfGetMainCache();
-               $cache->set( 'sites-cache', $this->sites );
+               $cache->set( wfMemcKey( 'SiteList' ), $this->sites );
        }
 
        /**
@@ -184,11 +183,9 @@ class Sites {
         * @return Site|false
         */
        public function getSite( $globalId, $source = 'cache' ) {
-               if ( $source === 'cache' && $this->sites !== false ) {
-                       return $this->sites->hasSite( $globalId ) ? $this->sites->getSite( $globalId ) : false;
-               }
+               $sites = $this->getSites( $source );
 
-               return SitesTable::singleton()->selectRow( null, array( 'global_key' => $globalId ) );
+               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : false;
        }
 
 }
index a03c598..bb12740 100644 (file)
@@ -95,6 +95,7 @@ class SitesTable extends ORMTable {
 
                        'forward' => false,
                        'config' => array(),
+                       'language' => 'en', // XXX: can we default to '' instead?
                );
        }
 
index 1d6656a..ec026e8 100644 (file)
@@ -507,53 +507,74 @@ class SpecialBlock extends FormSpecialPage {
         * @return Message
         */
        public static function validateTargetField( $value, $alldata, $form ) {
+               $status = self::validateTarget( $value, $form->getUser() );
+               if ( !$status->isOK() ) {
+                       $errors = $status->getErrorsArray();
+                       return call_user_func_array( array( $form, 'msg' ), $errors[0] );
+               } else {
+                       return true;
+               }
+       }
+
+       /**
+        * Validate a block target.
+        *
+        * @since 1.21
+        * @param String $value Block target to check
+        * @param User $user Performer of the block
+        * @return Status
+        */
+       public static function validateTarget( $value, User $user ) {
                global $wgBlockCIDRLimit;
 
                list( $target, $type ) = self::getTargetAndType( $value );
+               $status = Status::newGood( $target );
 
                if ( $type == Block::TYPE_USER ) {
-                       # TODO: why do we not have a User->exists() method?
-                       if ( !$target->getId() ) {
-                               return $form->msg( 'nosuchusershort',
-                                       wfEscapeWikiText( $target->getName() ) );
+                       if ( $target->isAnon() ) {
+                               $status->fatal(
+                                       'nosuchusershort',
+                                       wfEscapeWikiText( $target->getName() )
+                               );
                        }
 
-                       $status = self::checkUnblockSelf( $target, $form->getUser() );
-                       if ( $status !== true ) {
-                               return $form->msg( 'badaccess', $status );
+                       $unblockStatus = self::checkUnblockSelf( $target, $user );
+                       if ( $unblockStatus !== true ) {
+                               $status->fatal( 'badaccess', $unblockStatus );
                        }
-
                } elseif ( $type == Block::TYPE_RANGE ) {
                        list( $ip, $range ) = explode( '/', $target, 2 );
 
-                       if ( ( IP::isIPv4( $ip ) && $wgBlockCIDRLimit['IPv4'] == 32 )
-                               || ( IP::isIPv6( $ip ) && $wgBlockCIDRLimit['IPv6'] == 128 ) )
-                       {
-                               # Range block effectively disabled
-                               return $form->msg( 'range_block_disabled' );
+                       if (
+                               ( IP::isIPv4( $ip ) && $wgBlockCIDRLimit['IPv4'] == 32 ) ||
+                               ( IP::isIPv6( $ip ) && $wgBlockCIDRLimit['IPv6'] == 128 )
+                       ) {
+                               // Range block effectively disabled
+                               $status->fatal( 'range_block_disabled' );
                        }
 
-                       if ( ( IP::isIPv4( $ip ) && $range > 32 )
-                               || ( IP::isIPv6( $ip ) && $range > 128 ) )
-                       {
-                               # Dodgy range
-                               return $form->msg( 'ip_range_invalid' );
+                       if (
+                               ( IP::isIPv4( $ip ) && $range > 32 ) ||
+                               ( IP::isIPv6( $ip ) && $range > 128 )
+                       ) {
+                               // Dodgy range
+                               $status->fatal( 'ip_range_invalid' );
                        }
 
                        if ( IP::isIPv4( $ip ) && $range < $wgBlockCIDRLimit['IPv4'] ) {
-                               return $form->msg( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv4'] );
+                               $status->fatal( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv4'] );
                        }
 
                        if ( IP::isIPv6( $ip ) && $range < $wgBlockCIDRLimit['IPv6'] ) {
-                               return $form->msg( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv6'] );
+                               $status->fatal( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv6'] );
                        }
                } elseif ( $type == Block::TYPE_IP ) {
                        # All is well
                } else {
-                       return $form->msg( 'badipaddress' );
+                       $status->fatal( 'badipaddress' );
                }
 
-               return true;
+               return $status;
        }
 
        /**
@@ -672,10 +693,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 {
index faaab72..d740082 100644 (file)
@@ -329,7 +329,7 @@ class BlockListPager extends TablePager {
                                break;
 
                        case 'ipb_reason':
-                               $formatted = Linker::commentBlock( $value );
+                               $formatted = Linker::formatComment( $value );
                                break;
 
                        case 'ipb_params':
index 8e528dc..6d27c1b 100644 (file)
@@ -130,6 +130,7 @@ class SpecialBookSources extends SpecialPage {
         * Determine where to get the list of book sources from,
         * format and output them
         *
+        * @throws MWException
         * @return string
         */
        private function showList() {
index 0996de3..eae8e3a 100644 (file)
@@ -154,7 +154,7 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                        array( 'wpNewEmail', 'changeemail-newemail', 'email', $this->mNewEmail ),
                );
                if ( $wgRequirePasswordforEmailChange ) {
-                       $items[] = array( 'wpPassword', 'yourpassword', 'password', $this->mPassword );
+                       $items[] = array( 'wpPassword', 'changeemail-password', 'password', $this->mPassword );
                }
 
                $this->getOutput()->addHTML(
@@ -213,6 +213,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
         * @return bool|string true or string on success, false on failure
         */
        protected function attemptChange( User $user, $pass, $newaddr ) {
+               global $wgAuth;
+
                if ( $newaddr != '' && !Sanitizer::validateEmail( $newaddr ) ) {
                        $this->error( 'invalidemailaddress' );
                        return false;
@@ -248,6 +250,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
 
                $user->saveSettings();
 
+               $wgAuth->updateExternalDB( $user );
+
                return $status->value;
        }
 }
index 41b3b25..54a2771 100644 (file)
@@ -27,6 +27,9 @@
  * @ingroup SpecialPage
  */
 class SpecialChangePassword extends UnlistedSpecialPage {
+
+       protected $mUserName, $mOldpass, $mNewpass, $mRetype, $mDomain;
+
        public function __construct() {
                parent::__construct( 'ChangePassword' );
        }
@@ -105,6 +108,9 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                $this->getOutput()->redirect( $titleObj->getFullURL() );
        }
 
+       /**
+        * @param $msg string
+        */
        function error( $msg ) {
                $this->getOutput()->addHTML( Xml::element('p', array( 'class' => 'error' ), $msg ) );
        }
@@ -170,6 +176,10 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                );
        }
 
+       /**
+        * @param $fields array
+        * @return string
+        */
        function pretty( $fields ) {
                $out = '';
                foreach ( $fields as $list ) {
@@ -234,7 +244,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                try {
                        $user->setPassword( $this->mNewpass );
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'success' ) );
-                       $this->mNewpass = $this->mOldpass = $this->mRetypePass = '';
+                       $this->mNewpass = $this->mOldpass = $this->mRetype = '';
                } catch( PasswordError $e ) {
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'error' ) );
                        throw new PasswordError( $e->getMessage() );
index 689e096..f7e316b 100644 (file)
@@ -534,8 +534,8 @@ class SpecialContributions extends SpecialPage {
                        );
 
                $explain = $this->msg( 'sp-contributions-explain' );
-               if ( $explain->exists() ) {
-                       $form .= "<p id='mw-sp-contributions-explain'>{$explain}</p>";
+               if ( !$explain->isBlank() ) {
+                       $form .= "<p id='mw-sp-contributions-explain'>{$explain->parse()}</p>";
                }
                $form .= Xml::closeElement( 'fieldset' ) .
                        Xml::closeElement( 'form' );
@@ -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 23cd9aa..ae7657c 100644 (file)
@@ -393,13 +393,13 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        if( $title instanceof Title ) {
                                $rows[] = array(
                                        'wl_user' => $this->getUser()->getId(),
-                                       'wl_namespace' => ( $title->getNamespace() & ~1 ),
+                                       'wl_namespace' => MWNamespace::getSubject( $title->getNamespace() ),
                                        'wl_title' => $title->getDBkey(),
                                        'wl_notificationtimestamp' => null,
                                );
                                $rows[] = array(
                                        'wl_user' => $this->getUser()->getId(),
-                                       'wl_namespace' => ( $title->getNamespace() | 1 ),
+                                       'wl_namespace' => MWNamespace::getTalk( $title->getNamespace() ),
                                        'wl_title' => $title->getDBkey(),
                                        'wl_notificationtimestamp' => null,
                                );
@@ -427,7 +427,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                                        'watchlist',
                                        array(
                                                'wl_user' => $this->getUser()->getId(),
-                                               'wl_namespace' => ( $title->getNamespace() & ~1 ),
+                                               'wl_namespace' => MWNamespace::getSubject( $title->getNamespace() ),
                                                'wl_title' => $title->getDBkey(),
                                        ),
                                        __METHOD__
@@ -436,7 +436,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                                        'watchlist',
                                        array(
                                                'wl_user' => $this->getUser()->getId(),
-                                               'wl_namespace' => ( $title->getNamespace() | 1 ),
+                                               'wl_namespace' => MWNamespace::getTalk( $title->getNamespace() ),
                                                'wl_title' => $title->getDBkey(),
                                        ),
                                        __METHOD__
@@ -489,7 +489,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                                $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++;
                                }
                        }
index 362fc5c..1ae201b 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' ) ) ) {
@@ -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>
index 5de6076..9a224b6 100644 (file)
@@ -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>' .
index cc05522..d459ac6 100644 (file)
@@ -223,7 +223,7 @@ class ImageListPager extends TablePager {
                        case 'img_size':
                                return htmlspecialchars( $this->getLanguage()->formatSize( $value ) );
                        case 'img_description':
-                               return Linker::commentBlock( $value );
+                               return Linker::formatComment( $value );
                        case 'count':
                                return intval( $value ) + 1;
                }
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 8b44828..ea598c3 100644 (file)
@@ -153,7 +153,7 @@ class UsersPager extends AlphabeticPager {
                $userName = $row->user_name;
 
                $ulinks = Linker::userLink( $row->user_id, $userName );
-               $ulinks .= Linker::userToolLinks( $row->user_id, $userName );
+               $ulinks .= Linker::userToolLinksRedContribs( $row->user_id, $userName, intval( $row->edits ) );
 
                $lang = $this->getLanguage();
 
index af3dbf3..66fd918 100644 (file)
@@ -254,6 +254,8 @@ 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' ) .
@@ -309,7 +311,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        );
                }
 
-               if ( $user->isAllowed( 'suppressredirect' ) ) {
+               if ( $user->isAllowed( 'suppressredirect' ) && $handler->supportsRedirects() ) {
                        $out->addHTML( "
                                <tr>
                                        <td></td>
@@ -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;
@@ -464,8 +470,6 @@ class MovePageForm extends UnlistedSpecialPage {
                        DoubleRedirectJob::fixRedirects( 'move', $ot, $nt );
                }
 
-               wfRunHooks( 'SpecialMovepageAfterMove', array( &$this, &$ot, &$nt ) );
-
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'pagemovedsub' ) );
 
@@ -479,11 +483,24 @@ 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 );
 
+               wfRunHooks( 'SpecialMovepageAfterMove', array( &$this, &$ot, &$nt ) );
+
                # Now we move extra pages we've been asked to move: subpages and talk
                # pages.  First, if the old page or the new page is a talk page, we
                # can't move any talk pages: cancel that.
index 08d1517..85b9cf8 100644 (file)
@@ -140,7 +140,8 @@ class SpecialNewpages extends IncludableSpecialPage {
 
                        $feedType = $this->opts->getValue( 'feed' );
                        if( $feedType ) {
-                               return $this->feed( $feedType );
+                               $this->feed( $feedType );
+                               return;
                        }
 
                        $allValues = $this->opts->getAllValues();
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 74ed537..db3f012 100644 (file)
@@ -343,11 +343,10 @@ class ProtectedPagesPager extends AlphabeticPager {
                }
 
                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 )
@@ -356,7 +355,8 @@ class ProtectedPagesPager extends AlphabeticPager {
                        $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..cf1e2b4 100644 (file)
@@ -238,7 +238,8 @@ class ProtectedTitlesPager extends AlphabeticPager {
                        $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
                );
        }
index 2bd8b0a..a8166db 100644 (file)
@@ -109,8 +109,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        public function feedSetup() {
                global $wgFeedLimit;
                $opts = $this->getDefaultOptions();
-               # Feed is cached on limit,hideminor,namespace; other params would randomly not work
-               $opts->fetchValuesFromRequest( $this->getRequest(), array( 'limit', 'hideminor', 'namespace' ) );
+               $opts->fetchValuesFromRequest( $this->getRequest() );
                $opts->validateIntBounds( 'limit', 0, $wgFeedLimit );
                return $opts;
        }
@@ -382,14 +381,17 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $invert = $opts['invert'];
                $associated = $opts['associated'];
 
-               $fields = array( $dbr->tableName( 'recentchanges' ) . '.*' ); // all rc columns
+               $fields = RecentChange::selectFields();
                // JOIN on watchlist for users
                if ( $uid ) {
                        $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';
@@ -481,7 +483,12 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                }
 
                // And now for the content
-               $this->getOutput()->setFeedAppendQuery( $this->getFeedQuery() );
+               $feedQuery = $this->getFeedQuery();
+               if ( $feedQuery !== '' ) {
+                       $this->getOutput()->setFeedAppendQuery( $feedQuery );
+               } else {
+                       $this->getOutput()->setFeedAppendQuery( false );
+               }
 
                if( $wgAllowCategorizedRecentChanges ) {
                        $this->filterByCategories( $rows, $opts );
@@ -525,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 );
@@ -534,11 +545,24 @@ class SpecialRecentChanges extends IncludableSpecialPage {
 
        /**
         * Get the query string to append to feed link URLs.
-        * This is overridden by RCL to add the target parameter
-        * @return bool
+        * 
+        * @return string
         */
        public function getFeedQuery() {
-               return false;
+               global $wgFeedLimit;
+
+               $this->getOptions()->validateIntBounds( 'limit', 0, $wgFeedLimit );
+               $options = $this->getOptions()->getChangedValues();
+
+               // wfArrayToCgi() omits options set to null or false
+               foreach ( $options as &$value ) {
+                       if ( $value === false ) {
+                               $value = '0';
+                       }
+               }
+               unset( $value );
+
+               return wfArrayToCgi( $options );
        }
 
        /**
index 40ebc2f..4d57bc7 100644 (file)
@@ -93,7 +93,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                $dbkey = $title->getDBkey();
 
                $tables = array( 'recentchanges' );
-               $select = array( $dbr->tableName( 'recentchanges' ) . '.*' );
+               $select = RecentChange::selectFields();
                $join_conds = array();
                $query_options = array();
 
@@ -102,7 +102,11 @@ 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';
@@ -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" );
                                }
                        }
 
@@ -261,15 +265,6 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                }
        }
 
-       public function getFeedQuery() {
-               $target = $this->getTargetTitle();
-               if( $target ) {
-                       return "target=" . urlencode( $target->getPrefixedDBkey() );
-               } else {
-                       return false;
-               }
-       }
-
        function setBottomText( FormOptions $opts ) {
                if( isset( $this->mResultEmpty ) && $this->mResultEmpty ) {
                        $this->getOutput()->addWikiMsg( 'recentchangeslinked-noresult' );
index 7856e54..eaf0d52 100644 (file)
@@ -147,6 +147,19 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                } else {
                        $this->typeName = $request->getVal( 'type' );
                        $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
+                       if ( $this->targetObj && $this->targetObj->isSpecial( 'Log' ) ) {
+                               $result = wfGetDB( DB_SLAVE )->select( 'logging',
+                                       'log_type',
+                                       array( 'log_id' => $this->ids ),
+                                       __METHOD__,
+                                       array( 'DISTINCT' )
+                               );
+
+                               if ( $result->numRows() == 1 ) {
+                                       // If there's only one type, the target can be set to include it.
+                                       $this->targetObj = SpecialPage::getTitleFor( 'Log', $result->current()->log_type );
+                               }
+                       }
                }
 
                # For reviewing deleted files...
index 6c33bb8..bc90d2b 100644 (file)
@@ -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(
@@ -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__ );
        }
 
@@ -684,11 +692,21 @@ class SpecialSearch extends SpecialPage {
                        }
                }
 
-               wfProfileOut( __METHOD__ );
-               return "<li><div class='mw-search-result-heading'>{$link} {$redirect} {$section}</div> {$extract}\n" .
-                       "<div class='mw-search-result-data'>{$score}{$size} - {$date}{$related}</div>" .
-                       "</li>\n";
+               $html = null;
+
+               if ( wfRunHooks( 'ShowSearchHit', array (
+                       $this, $result, $terms,
+                       &$link, &$redirect, &$section, &$extract,
+                       &$score, &$size, &$date, &$related,
+                       &$html
+               ) ) ) {
+                       $html = "<li><div class='mw-search-result-heading'>{$link} {$redirect} {$section}</div> {$extract}\n" .
+                               "<div class='mw-search-result-data'>{$score}{$size} - {$date}{$related}</div>" .
+                               "</li>\n";
+               }
 
+               wfProfileOut( __METHOD__ );
+               return $html;
        }
 
        /**
index e973ddc..1e7c8bb 100644 (file)
@@ -66,7 +66,11 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                                if( !isset( $groups[$group] ) ) {
                                        $groups[$group] = array();
                                }
-                               $groups[$group][$page->getDescription()] = array( $page->getTitle(), $page->isRestricted(), $page->isExpensive() );
+                               $groups[$group][$page->getDescription()] = array(
+                                       $page->getTitle(),
+                                       $page->isRestricted(),
+                                       $page->isCached()
+                               );
                        }
                }
 
@@ -88,15 +92,14 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
        }
 
        private function outputPageList( $groups ) {
-               global $wgMiserMode;
                $out = $this->getOutput();
 
                $includesRestrictedPages = false;
                $includesCachedPages = false;
 
                foreach ( $groups as $group => $sortedPages ) {
-                       $middle = ceil( count( $sortedPages )/2 );
                        $total = count( $sortedPages );
+                       $middle = ceil( $total / 2 );
                        $count = 0;
 
                        $out->wrapWikiMsg( "<h2 class=\"mw-specialpagesgroup\" id=\"mw-specialpagesgroup-$group\">$1</h2>\n", "specialpages-group-$group" );
@@ -107,10 +110,10 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                                Html::openElement( 'ul' ) . "\n"
                        );
                        foreach( $sortedPages as $desc => $specialpage ) {
-                               list( $title, $restricted, $expensive) = $specialpage;
+                               list( $title, $restricted, $cached ) = $specialpage;
 
                                $pageClasses = array();
-                               if ( $expensive && $wgMiserMode ){
+                               if ( $cached ) {
                                        $includesCachedPages = true;
                                        $pageClasses[] = 'mw-specialpagecached';
                                }
index 70d98df..d2d91bd 100644 (file)
@@ -31,4 +31,17 @@ class UncategorizedCategoriesPage extends UncategorizedPagesPage {
                parent::__construct( $name );
                $this->requestedNamespace = NS_CATEGORY;
        }
+
+       /**
+        * Formats the result
+        * @param $skin The current skin
+        * @param $result The query result
+        * @return string The category link
+        */
+       function formatResult ( $skin, $result ) {
+               $title = Title::makeTitle( NS_CATEGORY, $result->title );
+               $text = $title->getText();
+
+               return Linker::linkKnown( $title, htmlspecialchars( $text ) );
+        }
 }
index c0420e5..1ea6e46 100644 (file)
@@ -417,6 +417,9 @@ class PageArchive {
                $logEntry->setPerformer( $user );
                $logEntry->setTarget( $this->title );
                $logEntry->setComment( $reason );
+
+               wfRunHooks( 'ArticleUndeleteLogEntry', array( $this, &$logEntry, $user ) );
+
                $logid = $logEntry->insert();
                $logEntry->publish( $logid );
 
@@ -429,9 +432,10 @@ class PageArchive {
         * be stuffed into old, otherwise the most recent will go into cur.
         *
         * @param $timestamps Array: pass an empty array to restore all revisions, otherwise list the ones to undelete.
-        * @param $comment String
         * @param $unsuppress Boolean: remove all ar_deleted/fa_deleted restrictions of seletected revs
         *
+        * @param $comment String
+        * @throws ReadOnlyError
         * @return Status, containing the number of revisions restored on success
         */
        private function undeleteRevisions( $timestamps, $unsuppress = false, $comment = '' ) {
@@ -823,7 +827,7 @@ class SpecialUndelete extends SpecialPage {
 
                if( $result->numRows() == 0 ) {
                        $out->addWikiMsg( 'undelete-no-results' );
-                       return;
+                       return false;
                }
 
                $out->addWikiMsg( 'undeletepagetext', $this->getLanguage()->formatNum( $result->numRows() ) );
index f80e7da..7817b96 100644 (file)
@@ -197,19 +197,22 @@ class LoginForm extends SpecialPage {
                        return;
                }
 
-               $u = $this->addNewaccountInternal();
-
-               if ( $u == null ) {
-                       return;
+               $status = $this->addNewaccountInternal();
+               if( !$status->isGood() ) {
+                       $error = $this->getOutput()->parse( $status->getWikiText() );
+                       $this->mainLoginForm( $error );
+                       return false;
                }
 
+               $u = $status->getValue();
+
                // Wipe the initial password and mail a temporary one
                $u->setPassword( null );
                $u->saveSettings();
                $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' ) );
@@ -230,11 +233,15 @@ class LoginForm extends SpecialPage {
                global $wgUser, $wgEmailAuthentication, $wgLoginLanguageSelector;
 
                # Create the account and abort if there's a problem doing so
-               $u = $this->addNewAccountInternal();
-               if( $u == null ) {
+               $status = $this->addNewAccountInternal();
+               if( !$status->isGood() ) {
+                       $error = $this->getOutput()->parse( $status->getWikiText() );
+                       $this->mainLoginForm( $error );
                        return false;
                }
 
+               $u = $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
                if( $wgLoginLanguageSelector && $this->mLanguage ) {
@@ -267,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 {
@@ -279,24 +286,24 @@ 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;
        }
 
        /**
+        * Make a new user account using the loaded data.
         * @private
         * @throws PermissionsError|ReadOnlyError
-        * @return bool|User
+        * @return Status
         */
-       function addNewAccountInternal() {
+       public function addNewAccountInternal() {
                global $wgAuth, $wgMemc, $wgAccountCreationThrottle,
                        $wgMinimalPasswordLength, $wgEmailConfirmToEdit;
 
                // If the user passes an invalid domain, something is fishy
                if( !$wgAuth->validDomain( $this->mDomain ) ) {
-                       $this->mainLoginForm( $this->msg( 'wrongpassword' )->text() );
-                       return false;
+                       return Status::newFatal( 'wrongpassword' );
                }
 
                // If we are not allowing users to login locally, we should be checking
@@ -305,10 +312,12 @@ class LoginForm extends SpecialPage {
                // create a local account and login as any domain user). We only need
                // to check this for domains that aren't local.
                if( 'local' != $this->mDomain && $this->mDomain != '' ) {
-                       if( !$wgAuth->canCreateAccounts() && ( !$wgAuth->userExists( $this->mUsername )
-                               || !$wgAuth->authenticate( $this->mUsername, $this->mPassword ) ) ) {
-                               $this->mainLoginForm( $this->msg( 'wrongpassword' )->text() );
-                               return false;
+                       if(
+                               !$wgAuth->canCreateAccounts() &&
+                               ( !$wgAuth->userExists( $this->mUsername ||
+                                 !$wgAuth->authenticate( $this->mUsername, $this->mPassword ) ) )
+                       ) {
+                               return Status::newFatal( 'wrongpassword' );
                        }
                }
 
@@ -319,28 +328,28 @@ class LoginForm extends SpecialPage {
                # Request forgery checks.
                if ( !self::getCreateaccountToken() ) {
                        self::setCreateaccountToken();
-                       $this->mainLoginForm( $this->msg( 'nocookiesfornew' )->parse() );
-                       return false;
+                       return Status::newFatal( 'nocookiesfornew' );
                }
 
                # The user didn't pass a createaccount token
                if ( !$this->mToken ) {
-                       $this->mainLoginForm( $this->msg( 'sessionfailure' )->text() );
-                       return false;
+                       return Status::newFatal( 'sessionfailure' );
                }
 
                # Validate the createaccount token
                if ( $this->mToken !== self::getCreateaccountToken() ) {
-                       $this->mainLoginForm( $this->msg( 'sessionfailure' )->text() );
-                       return false;
+                       return Status::newFatal( 'sessionfailure' );
                }
 
                # Check permissions
                $currentUser = $this->getUser();
+               $creationBlock = $currentUser->isBlockedFromCreateAccount();
                if ( !$currentUser->isAllowed( 'createaccount' ) ) {
                        throw new PermissionsError( 'createaccount' );
-               } elseif ( $currentUser->isBlockedFromCreateAccount() ) {
-                       $this->userBlockedMessage( $currentUser->isBlockedFromCreateAccount() );
+               } elseif ( $creationBlock instanceof Block ) {
+                       // Throws an ErrorPageError.
+                       $this->userBlockedMessage( $creationBlock );
+                       // This should never be reached.
                        return false;
                }
 
@@ -352,41 +361,28 @@ class LoginForm extends SpecialPage {
 
                $ip = $this->getRequest()->getIP();
                if ( $currentUser->isDnsBlacklisted( $ip, true /* check $wgProxyWhitelist */ ) ) {
-                       $this->mainLoginForm( $this->msg( 'sorbs_create_account_reason' )->text() . ' ' . $this->msg( 'parentheses', $ip )->escaped() );
-                       return false;
+                       return Status::newFatal( 'sorbs_create_account_reason' );
                }
 
                # Now create a dummy user ($u) and check if it is valid
                $name = trim( $this->mUsername );
                $u = User::newFromName( $name, 'creatable' );
                if ( !is_object( $u ) ) {
-                       $this->mainLoginForm( $this->msg( 'noname' )->text() );
-                       return false;
-               }
-
-               if ( 0 != $u->idForName() ) {
-                       $this->mainLoginForm( $this->msg( 'userexists' )->text() );
-                       return false;
-               }
-
-               if ( 0 != strcmp( $this->mPassword, $this->mRetype ) ) {
-                       $this->mainLoginForm( $this->msg( 'badretype' )->text() );
-                       return false;
+                       return Status::newFatal( 'noname' );
+               } elseif ( 0 != $u->idForName() ) {
+                       return Status::newFatal( 'userexists' );
+               } elseif ( 0 != strcmp( $this->mPassword, $this->mRetype ) ) {
+                       return Status::newFatal( 'badretype' );
                }
 
                # check for minimal password length
                $valid = $u->getPasswordValidity( $this->mPassword );
                if ( $valid !== true ) {
                        if ( !$this->mCreateaccountMail ) {
-                               if ( is_array( $valid ) ) {
-                                       $message = array_shift( $valid );
-                                       $params = $valid;
-                               } else {
-                                       $message = $valid;
-                                       $params = array( $wgMinimalPasswordLength );
+                               if ( !is_array( $valid ) ) {
+                                       $valid = array( $valid, $wgMinimalPasswordLength );
                                }
-                               $this->mainLoginForm( $this->msg( $message, $params )->text() );
-                               return false;
+                               return call_user_func_array( 'Status::newFatal', $valid );
                        } else {
                                # do not force a password for account creation by email
                                # set invalid password, it will be replaced later by a random generated password
@@ -397,13 +393,11 @@ class LoginForm extends SpecialPage {
                # if you need a confirmed email address to edit, then obviously you
                # need an email address.
                if ( $wgEmailConfirmToEdit && empty( $this->mEmail ) ) {
-                       $this->mainLoginForm( $this->msg( 'noemailtitle' )->text() );
-                       return false;
+                       return Status::newFatal( 'noemailtitle' );
                }
 
                if( !empty( $this->mEmail ) && !Sanitizer::validateEmail( $this->mEmail ) ) {
-                       $this->mainLoginForm( $this->msg( 'invalidemailaddress' )->text() );
-                       return false;
+                       return Status::newFatal( 'invalidemailaddress' );
                }
 
                # Set some additional data so the AbortNewAccount hook can be used for
@@ -415,8 +409,7 @@ class LoginForm extends SpecialPage {
                if( !wfRunHooks( 'AbortNewAccount', array( $u, &$abortError ) ) ) {
                        // Hook point to add extra creation throttles and blocks
                        wfDebug( "LoginForm::addNewAccountInternal: a hook blocked creation\n" );
-                       $this->mainLoginForm( $abortError );
-                       return false;
+                       return Status::newFatal( new RawMessage( $abortError ) );
                }
 
                // Hook point to check for exempt from account creation throttle
@@ -430,26 +423,18 @@ class LoginForm extends SpecialPage {
                                        $wgMemc->set( $key, 0, 86400 );
                                }
                                if ( $value >= $wgAccountCreationThrottle ) {
-                                       $this->throttleHit( $wgAccountCreationThrottle );
-                                       return false;
+                                       return Status::newFatal( 'acct_creation_throttle_hit', $wgAccountCreationThrottle );
                                }
                                $wgMemc->incr( $key );
                        }
                }
 
                if( !$wgAuth->addUser( $u, $this->mPassword, $this->mEmail, $this->mRealName ) ) {
-                       $this->mainLoginForm( $this->msg( 'externaldberror' )->text() );
-                       return false;
+                       return Status::newFatal( 'externaldberror' );
                }
 
                self::clearCreateaccountToken();
-
-               $status = $this->initUser( $u, false );
-               if ( !$status->isOK() ) {
-                       $this->mainLoginForm( $status->getHTML() );
-                       return false;
-               }
-               return $status->value;
+               return $this->initUser( $u, false );
        }
 
        /**
@@ -559,7 +544,7 @@ class LoginForm extends SpecialPage {
                }
 
                $isAutoCreated = false;
-               if ( 0 == $u->getID() ) {
+               if ( $u->getID() == 0 ) {
                        $status = $this->attemptAutoCreate( $u );
                        if ( $status !== self::SUCCESS ) {
                                return $status;
@@ -569,8 +554,9 @@ class LoginForm extends SpecialPage {
                } else {
                        global $wgExternalAuthType, $wgAutocreatePolicy;
                        if ( $wgExternalAuthType && $wgAutocreatePolicy != 'never'
-                       && is_object( $this->mExtUser )
-                       && $this->mExtUser->authenticate( $this->mPassword ) ) {
+                               && is_object( $this->mExtUser )
+                               && $this->mExtUser->authenticate( $this->mPassword )
+                       ) {
                                # The external user and local user have the same name and
                                # password, so we assume they're the same.
                                $this->mExtUser->linkToLocal( $u->getID() );
@@ -751,11 +737,10 @@ class LoginForm extends SpecialPage {
        }
 
        function processLogin() {
-               global $wgMemc, $wgLang;
+               global $wgMemc, $wgLang, $wgSecureLogin;
 
                switch ( $this->authenticateUserData() ) {
                        case self::SUCCESS:
-                               global $wgSecureLogin;
                                # We've verified now, update the real record
                                $user = $this->getUser();
                                if( (bool)$this->mRemember != (bool)$user->getOption( 'rememberpassword' ) ) {
@@ -785,6 +770,8 @@ class LoginForm extends SpecialPage {
                                        $userLang = Language::factory( $code );
                                        $wgLang = $userLang;
                                        $this->getContext()->setLanguage( $userLang );
+                                       // Reset SessionID on Successful login (bug 40995)
+                                       $this->renewSessionId();
                                        $this->successfulLogin();
                                } else {
                                        $this->cookieRedirectCheck( 'login' );
@@ -855,7 +842,7 @@ class LoginForm extends SpecialPage {
         * @return Status object
         */
        function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle', $emailText = 'passwordremindertext' ) {
-               global $wgServer, $wgScript, $wgNewPasswordExpiry;
+               global $wgCanonicalServer, $wgScript, $wgNewPasswordExpiry;
 
                if ( $u->getEmail() == '' ) {
                        return Status::newFatal( 'noemail', $u->getName() );
@@ -872,7 +859,7 @@ class LoginForm extends SpecialPage {
                $u->setNewpassword( $np, $throttle );
                $u->saveSettings();
                $userLanguage = $u->getOption( 'language' );
-               $m = $this->msg( $emailText, $ip, $u->getName(), $np, '<' . $wgServer . $wgScript . '>',
+               $m = $this->msg( $emailText, $ip, $u->getName(), $np, '<' . $wgCanonicalServer . $wgScript . '>',
                        round( $wgNewPasswordExpiry / 86400 ) )->inLanguage( $userLanguage )->text();
                $result = $u->sendMail( $this->msg( $emailTitle )->inLanguage( $userLanguage )->text(), $m );
 
@@ -897,7 +884,8 @@ class LoginForm extends SpecialPage {
                wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
 
                if( $injected_html !== '' ) {
-                       $this->displaySuccessfulLogin( 'loginsuccess', $injected_html );
+                       $this->displaySuccessfulAction( $this->msg( 'loginsuccesstitle' ),
+                               'loginsuccess', $injected_html );
                } else {
                        $this->executeReturnTo( 'successredirect' );
                }
@@ -913,7 +901,7 @@ class LoginForm extends SpecialPage {
                # Run any hooks; display injected HTML
                $currentUser = $this->getUser();
                $injected_html = '';
-               $welcome_creation_msg = 'welcomecreation';
+               $welcome_creation_msg = 'welcomecreation-msg';
 
                wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
 
@@ -924,18 +912,21 @@ class LoginForm extends SpecialPage {
                 */
                wfRunHooks( 'BeforeWelcomeCreation', array( &$welcome_creation_msg, &$injected_html ) );
 
-               $this->displaySuccessfulLogin( $welcome_creation_msg, $injected_html );
+               $this->displaySuccessfulAction( $this->msg( 'welcomeuser', $this->getUser()->getName() ),
+                       $welcome_creation_msg, $injected_html );
        }
 
        /**
-        * Display a "login successful" page.
+        * Display an "successful action" page.
+        *
+        * @param $title string|Message page's title
         * @param $msgname string
         * @param $injected_html string
         */
-       private function displaySuccessfulLogin( $msgname, $injected_html ) {
+       private function displaySuccessfulAction( $title, $msgname, $injected_html ) {
                $out = $this->getOutput();
-               $out->setPageTitle( $this->msg( 'loginsuccesstitle' ) );
-               if( $msgname ){
+               $out->setPageTitle( $title );
+               if ( $msgname ) {
                        $out->addWikiMsg( $msgname, wfEscapeWikiText( $this->getUser()->getName() ) );
                }
 
@@ -959,23 +950,15 @@ class LoginForm extends SpecialPage {
                # haven't bothered to log out before trying to create an account to
                # evade it, but we'll leave that to their guilty conscience to figure
                # out.
-
-               $out = $this->getOutput();
-               $out->setPageTitle( $this->msg( 'cantcreateaccounttitle' ) );
-
-               $block_reason = $block->mReason;
-               if ( strval( $block_reason ) === '' ) {
-                       $block_reason = $this->msg( 'blockednoreason' )->text();
-               }
-
-               $out->addWikiMsg(
+               throw new ErrorPageError(
+                       'cantcreateaccounttitle',
                        'cantcreateaccount-text',
-                       $block->getTarget(),
-                       $block_reason,
-                       $block->getByName()
+                       array(
+                               $block->getTarget(),
+                               $block->mReason ? $block->mReason : $this->msg( 'blockednoreason' )->text(),
+                               $block->getByName()
+                       )
                );
-
-               $this->executeReturnTo( 'error' );
        }
 
        /**
@@ -1254,6 +1237,29 @@ class LoginForm extends SpecialPage {
                $wgRequest->setSessionData( 'wsCreateaccountToken', null );
        }
 
+       /**
+        * Renew the user's session id, using strong entropy
+        */
+       private function renewSessionId() {
+               global $wgSecureLogin, $wgCookieSecure;
+               if( $wgSecureLogin && !$this->mStickHTTPS ) {
+                       $wgCookieSecure = false;
+               }
+
+               // If either we don't trust PHP's entropy, or if we need
+               // to change cookie settings when logging in because of
+               // wpStickHTTPS, then change the session ID manually.
+               $cookieParams = session_get_cookie_params();
+               if ( wfCheckEntropy() && $wgCookieSecure == $cookieParams['secure'] ) {
+                       session_regenerate_id( false );
+               } else {
+                       $tmp = $_SESSION;
+                       session_destroy();
+                       wfSetupSession( MWCryptRand::generateHex( 32 ) );
+                       $_SESSION = $tmp;
+               }
+       }
+
        /**
         * @private
         */
@@ -1287,13 +1293,6 @@ class LoginForm extends SpecialPage {
                }
        }
 
-       /**
-        * @private
-        */
-       function throttleHit( $limit ) {
-               $this->mainLoginForm( $this->msg( 'acct_creation_throttle_hit' )->numParams( $limit )->parse() );
-       }
-
        /**
         * Produce a bar of links which allow the user to select another language
         * during login/registration but retain "returnto"
index 7ace5f8..01a12c0 100644 (file)
@@ -263,9 +263,13 @@ class SpecialVersion extends SpecialPage {
         */
        private static function getwgVersionLinked() {
                global $wgVersion;
-               $versionParts = array();
-               preg_match( "/^(\d+\.\d+)/", $wgVersion, $versionParts );
-               return "[https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]} $wgVersion]";
+               $versionUrl = "";
+               if( wfRunHooks( 'SpecialVersionVersionUrl', array( $wgVersion, &$versionUrl ) ) ) {
+                       $versionParts = array();
+                       preg_match( "/^(\d+\.\d+)/", $wgVersion, $versionParts );
+                       $versionUrl = "https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]}";
+               }
+               return "[$versionUrl $wgVersion]";
        }
 
        /**
@@ -771,15 +775,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' ),
index 5dfc113..afa9c78 100644 (file)
@@ -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;
@@ -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
@@ -272,7 +272,7 @@ class SpecialWatchlist extends SpecialPage {
                $form .= '<hr />';
 
                $tables = array( 'recentchanges', 'watchlist' );
-               $fields = array( $dbr->tableName( 'recentchanges' ) . '.*' );
+               $fields = RecentChange::selectFields();
                $join_conds = array(
                        'watchlist' => array(
                                'INNER JOIN',
@@ -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..85876e9 100644 (file)
@@ -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() );
 
index aa333fc..6c94729 100644 (file)
@@ -16,4 +16,7 @@ quiet: yes
 quote-nbsp: yes
 fix-backslash: no
 fix-uri: no
-new-inline-tags: video,audio,source,track,bdi
+# Don't strip html5 elements we support
+# html-{meta,link} is a hack we use to prevent Tidy from stripping <meta> and <link> used in the body for Microdata
+new-empty-tags: html-meta, html-link
+new-inline-tags: video, audio, source, track, bdi, data, time, mark
diff --git a/includes/upload/AssembleUploadChunks.php b/includes/upload/AssembleUploadChunks.php
new file mode 100644 (file)
index 0000000..54ef840
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Assemble the segments of a chunked upload.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+require_once( __DIR__ . '/../../maintenance/Maintenance.php' );
+set_time_limit( 3600 ); // 1 hour
+
+/**
+ * Assemble the segments of a chunked upload.
+ *
+ * @ingroup Maintenance
+ */
+class AssembleUploadChunks extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Re-assemble the segments of a chunked upload into a single file";
+               $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( 'sessionid', "Upload owner session ID", true, true );
+       }
+
+       public function execute() {
+               $e = null;
+               wfDebug( "Started assembly for file {$this->getOption( 'filename' )}\n" );
+               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' => 'assembling', 'status' => Status::newGood() )
+                       );
+
+                       $upload = new UploadFromChunks( $user );
+                       $upload->continueChunks(
+                               $this->getOption( 'filename' ),
+                               $this->getOption( 'filekey' ),
+                               // @TODO: set User?
+                               RequestContext::getMain()->getRequest() // dummy request
+                       );
+
+                       // Combine all of the chunks into a local file and upload that to a new stash file
+                       $status = $upload->concatenateChunks();
+                       if ( !$status->isGood() ) {
+                               UploadBase::setSessionStatus(
+                                       $this->getOption( 'filekey' ),
+                                       array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
+                               );
+                               session_write_close();
+                               $this->error( $status->getWikiText() . "\n", 1 ); // die
+                       }
+
+                       // We have a new filekey for the fully concatenated file
+                       $newFileKey = $upload->getLocalFile()->getFileKey();
+
+                       // Remove the old stash file row and first chunk file
+                       $upload->stash->removeFileNoAuth( $this->getOption( 'filekey' ) );
+
+                       // 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'     => 'assembling',
+                                       'filekey'   => $newFileKey,
+                                       'imageinfo' => $imageInfo,
+                                       'status'    => Status::newGood()
+                               )
+                       );
+               } catch ( MWException $e ) {
+                       UploadBase::setSessionStatus(
+                               $this->getOption( 'filekey' ),
+                               array(
+                                       'result' => 'Failure',
+                                       'stage'  => 'assembling',
+                                       'status' => Status::newFatal( 'api-error-stashfailed' )
+                               )
+                       );
+               }
+               session_write_close();
+               if ( $e ) {
+                       throw $e;
+               }
+               wfDebug( "Finished assembly for file {$this->getOption( 'filename' )}\n" );
+       }
+}
+
+$maintClass = "AssembleUploadChunks";
+require_once( RUN_MAINTENANCE_IF_MAIN );
diff --git a/includes/upload/PublishStashedFile.php b/includes/upload/PublishStashedFile.php
new file mode 100644 (file)
index 0000000..fec3c73
--- /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-stashfailed' )
+                               )
+                       );
+                       throw $e;
+               }
+               session_write_close();
+       }
+}
+
+$maintClass = "PublishStashedFile";
+require_once( RUN_MAINTENANCE_IF_MAIN );
index d40b53d..b5c65e5 100644 (file)
@@ -63,6 +63,8 @@ abstract class UploadBase {
        const WINDOWS_NONASCII_FILENAME = 13;
        const FILENAME_TOO_LONG = 14;
 
+       const SESSION_STATUS_KEY = 'wsUploadStatusData';
+
        /**
         * @param $error int
         * @return string
@@ -233,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
@@ -244,7 +254,7 @@ abstract class UploadBase {
                        // @TODO: just make uploads work with storage paths
                        // UploadFromStash loads files via virtuals URLs
                        $tmpFile = $repo->getLocalCopy( $srcPath );
-                       $tmpFile->bind( $this ); // keep alive with $thumb
+                       $tmpFile->bind( $this ); // keep alive with $this
                        wfProfileOut( __METHOD__ );
                        return $tmpFile->getPath();
                }
@@ -544,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
         */
@@ -579,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 ) {
@@ -592,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
@@ -785,13 +797,14 @@ abstract class UploadBase {
         * This method returns the file object, which also has a 'fileKey' property which can be passed through a form or
         * API request to find this stashed file again.
         *
+        * @param $user User
         * @return UploadStashFile stashed file
         */
-       public function stashFile() {
+       public function stashFile( User $user = null ) {
                // was stashSessionFile
                wfProfileIn( __METHOD__ );
 
-               $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
+               $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $user );
                $file = $stash->stashFile( $this->mTempPath, $this->getSourceType() );
                $this->mLocalFile = $file;
 
@@ -1221,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 );
 
@@ -1257,9 +1265,10 @@ abstract class UploadBase {
                        }
 
                        wfDebug( __METHOD__ . ": FOUND VIRUS! scanner feedback: $output \n" );
-                       wfProfileOut( __METHOD__ );
-                       return $output;
                }
+
+               wfProfileOut( __METHOD__ );
+               return $output;
        }
 
        /**
@@ -1494,6 +1503,32 @@ abstract class UploadBase {
                } else {
                        return intval( $wgMaxUploadSize );
                }
+       }
 
+       /**
+        * Get the current status of a chunked upload (used for polling).
+        * The status will be read from the *current* user session.
+        * @param $statusKey string
+        * @return Array|bool
+        */
+       public static function getSessionStatus( $statusKey ) {
+               return isset( $_SESSION[self::SESSION_STATUS_KEY][$statusKey] )
+                       ? $_SESSION[self::SESSION_STATUS_KEY][$statusKey]
+                       : false;
+       }
+
+       /**
+        * Set the current status of a chunked upload (used for polling).
+        * The status will be stored in the *current* user session.
+        * @param $statusKey string
+        * @param $value array|false
+        * @return void
+        */
+       public static function setSessionStatus( $statusKey, $value ) {
+               if ( $value === false ) {
+                       unset( $_SESSION[self::SESSION_STATUS_KEY][$statusKey] );
+               } else {
+                       $_SESSION[self::SESSION_STATUS_KEY][$statusKey] = $value;
+               }
        }
 }
index b0e5fb6..821f482 100644 (file)
@@ -37,7 +37,7 @@ class UploadFromChunks extends UploadFromFile {
         * @param $stash UploadStash
         * @param $repo FileRepo
         */
-       public function __construct( $user = false, $stash = false, $repo = false ) {
+       public function __construct( $user = null, $stash = false, $repo = false ) {
                // user object. sometimes this won't exist, as when running from cron.
                $this->user = $user;
 
@@ -60,6 +60,7 @@ class UploadFromChunks extends UploadFromFile {
 
                return true;
        }
+
        /**
         * Calls the parent stashFile and updates the uploadsession table to handle "chunks"
         *
@@ -120,17 +121,24 @@ class UploadFromChunks extends UploadFromFile {
                // Get a 0-byte temp file to perform the concatenation at
                $tmpFile = TempFSFile::factory( 'chunkedupload_', $ext );
                $tmpPath = $tmpFile
-                       ? $tmpFile->getPath()
+                       ? $tmpFile->bind( $this )->getPath() // keep alive with $this
                        : false; // fail in concatenate()
                // Concatenate the chunks at the temp file
+               $tStart = microtime( true );
                $status = $this->repo->concatenate( $fileList, $tmpPath, FileRepo::DELETE_SOURCE );
+               $tAmount = microtime( true ) - $tStart;
                if( !$status->isOk() ){
                        return $status;
                }
+               wfDebugLog( 'fileconcatenate', "Combined $i chunks in $tAmount seconds.\n" );
                // Update the mTempPath and mLocalFile
                // ( for FileUpload or normal Stash to take over )
                $this->mTempPath = $tmpPath; // file system path
-               $this->mLocalFile = parent::stashFile();
+               $tStart = microtime( true );
+               $this->mLocalFile = parent::stashFile( $this->user );
+               $tAmount = microtime( true ) - $tStart;
+               $this->mLocalFile->setLocalReference( $tmpFile ); // reuse (e.g. for getImageInfo())
+               wfDebugLog( 'fileconcatenate', "Stashed combined file ($i chunks) in $tAmount seconds.\n" );
 
                return $status;
        }
@@ -153,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(
@@ -198,11 +206,14 @@ 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" );
 
                $dbw = $this->repo->getMasterDb();
+               // Use a quick transaction since we will upload the full temp file into shared
+               // storage, which takes time for large files. We don't want to hold locks then.
+               $dbw->begin( __METHOD__ );
                $dbw->update(
                        'uploadstash',
                        array(
@@ -213,12 +224,13 @@ class UploadFromChunks extends UploadFromFile {
                        array( 'us_key' => $this->mFileKey ),
                        __METHOD__
                );
+               $dbw->commit( __METHOD__ );
        }
 
        /**
         * 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();
@@ -244,7 +256,7 @@ class UploadFromChunks extends UploadFromFile {
         * Get the current Chunk index
         * @return Integer index of the current chunk
         */
-       private function getChunkIndex(){
+       private function getChunkIndex() {
                if( $this->mChunkIndex !== null ){
                        return $this->mChunkIndex;
                }
@@ -255,7 +267,7 @@ 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(){
+       private function getOffset() {
                if ( $this->mOffset !== null ){
                        return $this->mOffset;
                }
@@ -269,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();
 
@@ -294,7 +306,7 @@ class UploadFromChunks extends UploadFromFile {
                return $storeStatus;
        }
 
-       private function getChunkFileKey( $index = null ){
+       private function getChunkFileKey( $index = null ) {
                if( $index === null ){
                        $index = $this->getChunkIndex();
                }
index 607965f..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.
         *
@@ -141,12 +149,13 @@ class UploadFromStash extends UploadBase {
        /**
         * Stash the file.
         *
+        * @param $user User
         * @return UploadStashFile
         */
-       public function stashFile() {
+       public function stashFile( User $user = null ) {
                // replace mLocalFile with an instance of UploadStashFile, which adds some methods
                // that are useful for stashed files.
-               $this->mLocalFile = parent::stashFile();
+               $this->mLocalFile = parent::stashFile( $user );
                return $this->mLocalFile;
        }
 
index 7f430c5..70b6903 100644 (file)
@@ -332,7 +332,7 @@ class UploadFromUrl extends UploadBase {
                        'sessionKey' => $sessionKey,
                ) );
                $job->initializeSessionData();
-               $job->insert();
+               JobQueueGroup::singleton()->push( $job );
                return $sessionKey;
        }
 
index 733c686..d91649c 100644 (file)
@@ -106,15 +106,13 @@ class UploadStash {
         * @return UploadStashFile
         */
        public function getFile( $key, $noAuth = false ) {
-
                if ( ! preg_match( self::KEY_FORMAT_REGEX, $key ) ) {
                        throw new UploadStashBadPathException( "key '$key' is not in a proper format" );
                }
 
-               if ( !$noAuth ) {
-                       if ( !$this->isLoggedIn ) {
-                               throw new UploadStashNotLoggedInException( __METHOD__ . ' No user is logged in, files must belong to users' );
-                       }
+               if ( !$noAuth && !$this->isLoggedIn ) {
+                       throw new UploadStashNotLoggedInException( __METHOD__ .
+                               ' No user is logged in, files must belong to users' );
                }
 
                if ( !isset( $this->fileMetadata[$key] ) ) {
@@ -131,8 +129,13 @@ class UploadStash {
                        $this->initFile( $key );
 
                        // fetch fileprops
-                       $path = $this->fileMetadata[$key]['us_path'];
-                       $this->fileProps[$key] = $this->repo->getFileProps( $path );
+                       if ( strlen( $this->fileMetadata[$key]['us_props'] ) ) {
+                               $this->fileProps[$key] = unserialize( $this->fileMetadata[$key]['us_props'] );
+                       } else { // b/c for rows with no us_props
+                               wfDebug( __METHOD__ . " fetched props for $key from file\n" );
+                               $path = $this->fileMetadata[$key]['us_path'];
+                               $this->fileProps[$key] = $this->repo->getFileProps( $path );
+                       }
                }
 
                if ( ! $this->files[$key]->exists() ) {
@@ -182,7 +185,7 @@ class UploadStash {
         * @return UploadStashFile: file, or null on failure
         */
        public function stashFile( $path, $sourceType = null ) {
-               if ( ! file_exists( $path ) ) {
+               if ( !is_file( $path ) ) {
                        wfDebug( __METHOD__ . " tried to stash file at '$path', but it doesn't exist\n" );
                        throw new UploadStashBadPathException( "path doesn't exist" );
                }
@@ -192,12 +195,10 @@ class UploadStash {
                // we will be initializing from some tmpnam files that don't have extensions.
                // most of MediaWiki assumes all uploaded files have good extensions. So, we fix this.
                $extension = self::getExtensionForPath( $path );
-               if ( ! preg_match( "/\\.\\Q$extension\\E$/", $path ) ) {
+               if ( !preg_match( "/\\.\\Q$extension\\E$/", $path ) ) {
                        $pathWithGoodExtension = "$path.$extension";
-                       if ( ! rename( $path, $pathWithGoodExtension ) ) {
-                               throw new UploadStashFileException( "couldn't rename $path to have a better extension at $pathWithGoodExtension" );
-                       }
-                       $path = $pathWithGoodExtension;
+               } else {
+                       $pathWithGoodExtension = $path;
                }
 
                // If no key was supplied, make one.  a mysql insertid would be totally reasonable here, except
@@ -221,7 +222,7 @@ class UploadStash {
                wfDebug( __METHOD__ . " key for '$path': $key\n" );
 
                // if not already in a temporary area, put it there
-               $storeStatus = $this->repo->storeTemp( basename( $path ), $path );
+               $storeStatus = $this->repo->storeTemp( basename( $pathWithGoodExtension ), $path );
 
                if ( ! $storeStatus->isOK() ) {
                        // It is a convention in MediaWiki to only return one error per API exception, even if multiple errors
@@ -244,9 +245,6 @@ class UploadStash {
                }
                $stashPath = $storeStatus->value;
 
-               // we have renamed the file so we have to cleanup once done
-               unlink($path);
-
                // fetch the current user ID
                if ( !$this->isLoggedIn ) {
                        throw new UploadStashNotLoggedInException( __METHOD__ . ' No user is logged in, files must belong to users' );
@@ -262,6 +260,7 @@ class UploadStash {
                        'us_key' => $key,
                        'us_orig_path' => $path,
                        'us_path' => $stashPath, // virtual URL
+                       'us_props' => serialize( $fileProps ),
                        'us_size' => $fileProps['size'],
                        'us_sha1' => $fileProps['sha1'],
                        'us_mime' => $fileProps['mime'],
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 7c3ce10..0000000
+++ /dev/null
@@ -1,150 +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+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+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+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 c4807a6..7a62112 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,
@@ -172,19 +172,28 @@ class Language {
        );
 
        /**
-        * Get a cached language object for a given language code
+        * Get a cached or new language object for a given language code
         * @param $code String
         * @return Language
         */
        static function factory( $code ) {
-               if ( !isset( self::$mLangObjCache[$code] ) ) {
-                       if ( count( self::$mLangObjCache ) > 10 ) {
-                               // Don't keep a billion objects around, that's stupid.
-                               self::$mLangObjCache = array();
-                       }
-                       self::$mLangObjCache[$code] = self::newFromCode( $code );
+               global $wgDummyLanguageCodes, $wgLangObjCacheSize;
+
+               if ( isset( $wgDummyLanguageCodes[$code] ) ) {
+                       $code = $wgDummyLanguageCodes[$code];
                }
-               return self::$mLangObjCache[$code];
+
+               // get the language object to process
+               $langObj = isset( self::$mLangObjCache[$code] )
+                       ? self::$mLangObjCache[$code]
+                       : self::newFromCode( $code );
+
+               // merge the language object in to get it up front in the cache
+               self::$mLangObjCache = array_merge( array( $code => $langObj ), self::$mLangObjCache );
+               // get rid of the oldest ones in case we have an overflow
+               self::$mLangObjCache = array_slice( self::$mLangObjCache, 0, $wgLangObjCacheSize, true );
+
+               return $langObj;
        }
 
        /**
@@ -236,6 +245,18 @@ 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 is_readable( self::getMessagesFileName( $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
@@ -277,7 +298,7 @@ class Language {
                        throw new MWException( __METHOD__ . " must be passed a string, $type given$addmsg" );
                }
 
-               return preg_match( '/^[a-z0-9-]+$/i', $code );
+               return (bool)preg_match( '/^[a-z0-9-]+$/i', $code );
        }
 
        /**
@@ -468,9 +489,13 @@ class Language {
         * getNsText() except with '_' changed to ' ', useful for
         * producing output.
         *
-        * @param $index string
+        * <code>
+        * $mw_ns = $wgContLang->getFormattedNsText( NS_MEDIAWIKI_TALK );
+        * echo $mw_ns; // prints 'MediaWiki talk'
+        * </code>
         *
-        * @return array
+        * @param int $index The array key of the namespace to return
+        * @return string Namespace name without underscores (empty string if namespace does not exist)
         */
        function getFormattedNsText( $index ) {
                $ns = $this->getNsText( $index );
@@ -1976,7 +2001,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();
                }
 
@@ -2416,19 +2441,7 @@ class Language {
                if ( is_array( $s ) ) {
                        wfDebugDieBacktrace( 'Given array to checkTitleEncoding.' );
                }
-               # Check for non-UTF-8 URLs
-               $ishigh = preg_match( '/[\x80-\xff]/', $s );
-               if ( !$ishigh ) {
-                       return $s;
-               }
-
-               if ( function_exists( 'mb_check_encoding' ) ) {
-                       $isutf8 = mb_check_encoding( $s, 'UTF-8' );
-               } else {
-                       $isutf8 = preg_match( '/^(?>[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
-                                       '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
-               }
-               if ( $isutf8 ) {
+               if ( StringUtils::isUtf8( $s ) ) {
                        return $s;
                }
 
@@ -2866,30 +2879,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 ) {
@@ -2932,37 +2945,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 );
@@ -2970,7 +2983,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
@@ -2983,6 +2996,7 @@ class Language {
                        return $sign . $groupedNumber;
                }
        }
+
        /**
         * @return String
         */
@@ -3014,25 +3028,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;
        }
 
        /**
@@ -3482,8 +3497,22 @@ class Language {
                                }
                        }
                }
-               // If all else fails, return the original string.
-               return $str;
+
+               // If all else fails, return a standard duration or timestamp description.
+               $time = strtotime( $str, 0 );
+               if ( $time === false ) { // Unknown format. Return it as-is in case.
+                       return $str;
+               } elseif ( $time !== strtotime( $str, 1 ) ) { // It's a relative timestamp.
+                       // $time is relative to 0 so it's a duration length.
+                       return $this->formatDuration( $time );
+               } else { // It's an absolute timestamp.
+                       if ( $time === 0 ) {
+                               // wfTimestamp() handles 0 as current time instead of epoch.
+                               return $this->timeanddate( '19700101000000' );
+                       } else {
+                               return $this->timeanddate( $time );
+                       }
+               }
        }
 
        /**
@@ -3690,15 +3719,24 @@ class Language {
        }
 
        /**
-        * Enclose a string with the "no conversion" tag. This is used by
-        * various functions in the Parser
+        * Prepare external link text for conversion. When the text is
+        * a URL, it shouldn't be converted, and it'll be wrapped in
+        * the "raw" tag (-{R| }-) to prevent conversion.
         *
-        * @param $text String: text to be tagged for no conversion
-        * @param $noParse bool
+        * This function is called "markNoConversion" for historical
+        * reasons.
+        *
+        * @param $text String: text to be used for external link
+        * @param $noParse bool: wrap it without confirming it's a real URL first
         * @return string the tagged text
         */
        public function markNoConversion( $text, $noParse = false ) {
-               return $this->mConverter->markNoConversion( $text, $noParse );
+               // Excluding protocal-relative URLs may avoid many false positives.
+               if ( $noParse || preg_match( '/^(?:' . wfUrlProtocolsWithoutProtRel() . ')/', $text ) ) {
+                       return $this->mConverter->markNoConversion( $text );
+               } else {
+                       return $text;
+               }
        }
 
        /**
index 79783cc..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
@@ -618,6 +618,8 @@ class LanguageConverter {
                if ( $wgDisableLangConversion ) {
                        return $text;
                }
+               // Reset converter state for a new converter run.
+               $this->mConvRuleTitle = false;
                return $this->recursiveConvertTopLevel( $text, $variant );
        }
 
index da55c82..9944ef0 100644 (file)
@@ -55,6 +55,7 @@
        'avk' => 'Kotava', # Kotava
        'ay' => 'Aymar aru',    # Aymara
        'az' => 'azərbaycanca',        # Azerbaijani
+       'azb' => 'تورکجه',        # South Azerbaijani
        'ba' => 'башҡортса',   # Bashkir
        'bar' => 'Boarisch',    # Bavarian (Austro-Bavarian and South Tyrolean)
        'bat-smg' => 'žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 693-3 since 2010-06-30 )
        'nap' => 'Nnapulitano', # Neapolitan
        'nb' => "norsk (bokmål)\xE2\x80\x8E",          # Norwegian (Bokmal)
        'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
-       'nds-nl' => 'Nedersaksisch',    # Dutch Low Saxon
+       'nds-nl' => 'Nedersaksies',     # aka Nedersaksisch: Dutch Low Saxon
        'ne' => 'नेपाली',   # Nepali
        'new' => 'नेपाल भाषा',                # Newar / Nepal Bhasha
        'ng' => 'Oshiwambo',            # Ndonga
index 6482070..0d652d4 100644 (file)
@@ -66,20 +66,6 @@ class GanConverter extends LanguageConverter {
                );
        }
 
-       /**
-        * there shouldn't be any latin text in Chinese conversion, so no need
-        * to mark anything.
-        * $noParse is there for compatibility with LanguageConvert::markNoConversion
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               return $text;
-       }
-
        /**
         * @param $key string
         * @return String
index 48c0c05..0391988 100644 (file)
@@ -49,17 +49,17 @@ class LanguageHe extends Language {
                switch ( $case ) {
                        case 'prefixed':
                        case 'תחילית':
-                               # Duplicate the "Waw" if prefixed
-                               if ( substr( $word, 0, 2 ) == "ו" && substr( $word, 0, 4 ) != "וו" ) {
+                               # Duplicate the "Waw" if prefixed, but not if it is already double.
+                               if ( substr( $word, 0, 2 ) === "ו" && substr( $word, 0, 4 ) !== "וו" ) {
                                        $word = "ו" . $word;
                                }
 
-                               # Remove the "He" if prefixed
-                               if ( substr( $word, 0, 2 ) == "ה" ) {
+                               # Remove the "He" article if prefixed.
+                               if ( substr( $word, 0, 2 ) === "ה" ) {
                                        $word = substr( $word, 2 );
                                }
 
-                               # Add a hyphen (maqaf) if non-Hebrew letters
+                               # Add a hyphen (maqaf) before non-Hebrew letters.
                                if ( substr( $word, 0, 2 ) < "א" || substr( $word, 0, 2 ) > "ת" ) {
                                        $word = "־" . $word;
                                }
@@ -67,5 +67,4 @@ class LanguageHe extends Language {
 
                return $word;
        }
-
 }
index 79e5582..fe5cdf8 100644 (file)
@@ -157,21 +157,6 @@ class IuConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index bdaf2f4..6dd6959 100644 (file)
@@ -390,21 +390,6 @@ class KkConverter extends LanguageConverter {
                }
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse string|bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * @param $key string
         * @return String
index 0eac439..30d98ba 100644 (file)
@@ -177,21 +177,6 @@ class KuConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                   return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index 4833d1c..5ddcfde 100644 (file)
@@ -136,21 +136,6 @@ class ShiConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index b472743..3610c1e 100644 (file)
@@ -128,21 +128,6 @@ class SrConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index 8bf66a3..04767f2 100644 (file)
@@ -87,20 +87,6 @@ class ZhConverter extends LanguageConverter {
                $this->mTables['zh-tw']->merge( $this->mTables['zh-hant'] );
        }
 
-       /**
-        * there shouldn't be any latin text in Chinese conversion, so no need
-        * to mark anything.
-        * $noParse is there for compatibility with LanguageConvert::markNoConversion
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               return $text;
-       }
-
        /**
         * @param $key string
         * @return String
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 58c285f..abd4d1c 100644 (file)
@@ -496,9 +496,6 @@ Meunyo kön nyoë sababjih, Droëneuh kadang ka neuteumèë saboh bug lam softwa
 'viewsourcetext' => 'Droëneuh  jeuët neu’eu',
 
 # Login and logout pages
-'welcomecreation' => '== Seulamat trok teuka, $1! ==
-
-Nan Droeneuh ka teupeugot. Neuato laju [[Special:Preferences|peue nyang neugalak {{SITENAME}}]].',
 'yourname' => 'Ureuëng nguy:',
 'yourpassword' => 'Lageuëm:',
 'yourpasswordagain' => 'Pasoë lom lageuëm:',
@@ -587,9 +584,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!'''",
@@ -722,6 +719,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',
 
@@ -897,9 +897,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)',
 
@@ -972,10 +969,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)',
@@ -1009,7 +1007,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 f98b4bd..a4a0b31 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/**    زَوُن (   زَوُن)
+/** Tunisian Spoken Arabic (   زَوُن)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
  * @author Csisc
  */
 
+$fallback = 'ar';
+
+$rtl = true;
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ضع خطا تحت الوصلات:',
@@ -418,9 +422,6 @@ $2',
 
 تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو <span class='plainlinks'>[$1 الدخول مرة أخرى]</span> بنفس الاسم أو باسم آخر.
 من الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
-'welcomecreation' => '== مرحبا، $1! ==
-تم إنشاء حسابك.
-لا تنس أن تغير [[Special:Preferences|تفضيلاتك في {{SITENAME}}]].',
 'yourname' => 'اسم المستخدم:',
 'yourpassword' => 'كلمة السر:',
 'yourpasswordagain' => 'أعد كتابة كلمة السر:',
@@ -763,7 +764,6 @@ $2
 'template-protected' => '(حماية كاملة)',
 'template-semiprotected' => '(حماية جزئية)',
 'hiddencategories' => '{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:',
-'nocreatetitle' => 'تم تحديد إنشاء الصفحات',
 'nocreatetext' => 'قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.
 يمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].',
 'nocreate-loggedin' => 'أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.',
@@ -1039,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',
 
@@ -1147,9 +1150,6 @@ $1",
 # Special:LinkSearch
 'linksearch-line' => '$1 موصولة من $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل إنشاء المستخدمين',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(قائمة الأعضاء)',
 
index 3347bba..4404525 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,8 +340,9 @@ $messages = array(
 'newwindow' => '(verskyn in nuwe venster)',
 'cancel' => 'Kanselleer',
 'moredotdotdot' => 'Meer…',
-'mypage' => 'My bladsy',
-'mytalk' => 'My besprekings',
+'morenotlisted' => 'Meer nie gelys nie...',
+'mypage' => 'Gebruikersblad',
+'mytalk' => 'Bespreking',
 'anontalk' => 'Besprekingsblad vir hierdie IP',
 'navigation' => 'Navigasie',
 'and' => '&#32;en',
@@ -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',
@@ -373,6 +374,7 @@ $messages = array(
 'namespaces' => 'Naamruimtes',
 'variants' => 'Variante',
 
+'navigation-heading' => 'Navigasie-keuseskerm',
 'errorpagetitle' => 'Fout',
 'returnto' => 'Keer terug na $1.',
 'tagline' => 'Vanuit {{SITENAME}}',
@@ -538,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.
@@ -552,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.',
@@ -566,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.
@@ -585,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',
@@ -616,9 +617,9 @@ Die rede hiervoor is "\'\'$3\'\'".',
 
 U kan aanhou om {{SITENAME}} anoniem te gebruik; of u kan weer <span class='plainlinks'>[$1 inteken]</span> as dieselfde of 'n ander gebruiker.
 Dit is moontlik dat sommige bladsye nog sal aandui dat u aangeteken is totdat u u webblaaier se kas skoonmaak.",
-'welcomecreation' => '== Welkom, $1! ==
-U rekening is geskep;
-moenie vergeet om u [[Special:Preferences|persoonlike voorkeure vir {{SITENAME}}]] te stel nie.',
+'welcomeuser' => 'Welkom, $1!',
+'welcomecreation-msg' => 'U gebruiker is geskep.
+Moenie vergeet om u [[Special:Preferences|voorkeure vir {{SITENAME}}]] te stel nie.',
 'yourname' => 'Gebruikersnaam:',
 'yourpassword' => 'Wagwoord:',
 'yourpasswordagain' => 'Herhaal wagwoord',
@@ -626,7 +627,7 @@ moenie vergeet om u [[Special:Preferences|persoonlike voorkeure vir {{SITENAME}}
 '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.',
@@ -712,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',
@@ -772,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',
 
@@ -864,8 +867,9 @@ As u per ongeluk hier uitgekom het, gebruik u blaaier se '''terug'''-knoppie.",
 U kan [[Special:Search/{{PAGENAME}}|vir die bladsytitel in ander bladsye soek]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} die verwante logboeke deursoek]
 of [{{fullurl:{{FULLPAGENAME}}|action=edit}} hierdie bladsy wysig]</span>.',
-'noarticletext-nopermission' => 'Daar is tans geen teks in hierdie bladsy nie. U kan vir die bladsytitel [[Special:Search/{{PAGENAME}}|in ander bladsye soek]] of
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} die verwante logboeke deursoek]</span>.',
+'noarticletext-nopermission' => 'Hierdie bladsy bevat geen teks nie.
+U kan vir die term [[Special:Search/{{PAGENAME}}|in ander bladsye soek]] of
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} die verwante logboeke deursoek]</span>, maar u kan nie die bladsy skep nie.',
 'missing-revision' => 'Die weergawe #$1 van die bladsy "{{PAGENAME}} bestaan nie.
 
 Dit word meestal veroorsaak deur die volg van \'n verouderde verwysing na \'n bladsy wat verwyder is.
@@ -933,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:",
@@ -948,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.',
@@ -973,6 +976,15 @@ 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',
+'content-model-text' => 'eenvoudige teks',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Waarskuwing: Die bladsy gebruik te veel duur ontlederfunksies.
@@ -1128,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',
@@ -1261,7 +1275,7 @@ U kan ook 'n naamruimte as voorvoegsel gebruik.",
 
 # Preferences page
 'preferences' => 'Voorkeure',
-'mypreferences' => 'My voorkeure',
+'mypreferences' => 'Voorkeure',
 'prefs-edits' => 'Aantal wysigings:',
 'prefsnologin' => 'Nie ingeteken nie',
 'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aanteken]</span> om voorkeure te kan verander.',
@@ -1324,7 +1338,7 @@ Hier volg 'n lukraak gegenereerde waarde wat u kan gebruik: $1",
 'timezoneregion-indian' => 'Indiese Oseaan',
 'timezoneregion-pacific' => 'Stille Oseaan',
 'allowemail' => 'Laat e-pos van ander toe',
-'prefs-searchoptions' => 'Soekopsies',
+'prefs-searchoptions' => 'Soek',
 'prefs-namespaces' => 'Naamruimtes',
 'defaultns' => 'Anders soek in hierdie naamruimtes:',
 'default' => 'verstek',
@@ -1337,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:',
@@ -1489,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',
@@ -1555,7 +1570,7 @@ Die inligting is vir ander gebruikers sigbaar.',
 'rclinks' => 'Vertoon die laaste $1 wysigings in die afgelope $2 dae<br />$3',
 'diff' => 'verskil',
 'hist' => 'geskiedenis',
-'hide' => 'versteek',
+'hide' => 'Versteek',
 'show' => 'Wys',
 'minoreditletter' => 'k',
 'newpageletter' => 'N',
@@ -1738,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.',
@@ -1754,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.',
@@ -1890,6 +1906,7 @@ Miskien wil u eerder die beskrywing daar op die [$2 lêerbeskrywing] bywerk.',
 'uploadnewversion-linktext' => "Laai 'n nuwe weergawe van hierdie lêer",
 'shared-repo-from' => 'vanaf $1',
 'shared-repo' => "'n gedeelde lêerbank",
+'upload-disallowed-here' => 'U kan nie die lêer oorskryf nie.',
 
 # File reversion
 'filerevert' => 'Maak $1 ongedaan',
@@ -1996,6 +2013,7 @@ Elke ry bevat skakels na die eerste en die tweede aanstuur, asook die eerste re
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|greep|grepe}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorie|kategorieë}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwikiskakel|interwikiskakels}}',
 'nlinks' => '$1 {{PLURAL:$1|skakel|skakels}}',
 'nmembers' => '$1 {{PLURAL:$1|lid|lede}}',
 'nrevisions' => '$1 {{PLURAL:$1|weergawe|weergawes}}',
@@ -2024,6 +2042,7 @@ Elke ry bevat skakels na die eerste en die tweede aanstuur, asook die eerste re
 'mostlinkedtemplates' => 'Sjablone met die meeste skakels daarheen',
 'mostcategories' => 'Artikels met die meeste kategorieë',
 'mostimages' => 'Beelde met meeste skakels daarheen',
+'mostinterwikis' => 'Artikels met die meeste interwikiskakels',
 'mostrevisions' => 'Artikels met meeste wysigings',
 'prefixindex' => 'Alle bladsye (voorvoegselindeks)',
 'prefixindex-namespace' => 'Alle bladsye met die voorvoegsel (naamruimte $1)',
@@ -2125,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.',
 
@@ -2144,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.
@@ -2171,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.',
@@ -2203,7 +2220,7 @@ Daar kan [[{{MediaWiki:Listgrouprights-helppage}}|extra inligting]] oor individu
 
 # Watchlist
 'watchlist' => 'My dophoulys',
-'mywatchlist' => 'My dophoulys',
+'mywatchlist' => 'Dophoulys',
 'watchlistfor2' => 'Vir $1 $2',
 'nowatchlist' => 'U het geen items in u dophoulys nie.',
 'watchlistanontext' => '$1 is noodsaaklik om u dophoulys te sien of te wysig.',
@@ -2211,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',
@@ -2241,19 +2257,23 @@ 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_newpagetext' => "Dis 'n nuwe bladsy.",
 'enotif_impersonal_salutation' => '{{SITENAME}} gebruiker',
-'changed' => 'verander',
-'created' => 'geskep',
-'enotif_subject' => 'Bladsy $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED deur $PAGEEDITOR',
+'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
 
@@ -2262,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:
@@ -2278,6 +2298,8 @@ $UNWATCHURL
 
 Terugvoer en verdere bystand:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'geskep',
+'changed' => 'verander',
 
 # Delete
 'deletepage' => 'Skrap bladsy',
@@ -2349,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:',
@@ -2364,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',
@@ -2432,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.",
@@ -2464,9 +2489,9 @@ $1',
 'blanknamespace' => '(Hoof)',
 
 # Contributions
-'contributions' => 'Gebruikersbydraes',
+'contributions' => '{{GENDER:$1|Gebruikersbydraes}}',
 'contributions-title' => '$1 se bydraes',
-'mycontris' => 'My bydraes',
+'mycontris' => 'Bydraes',
 'contribsub2' => 'Vir $1 ($2)',
 'nocontribs' => 'Geen veranderinge wat by hierdie kriteria pas, is gevind nie.',
 'uctop' => ' (boontoe)',
@@ -2506,7 +2531,7 @@ Die laaste inskrywing uit die blokkeerlogboek word hier ter inligting weergegee:
 'whatlinkshere-hideredirs' => '$1 aansture',
 'whatlinkshere-hidetrans' => '$1 insluitings',
 'whatlinkshere-hidelinks' => '$1 skakels',
-'whatlinkshere-hideimages' => '$1 beeldskakels',
+'whatlinkshere-hideimages' => 'Lêerskakels $1',
 'whatlinkshere-filters' => 'Filters',
 
 # Block/unblock
@@ -2716,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',
@@ -2738,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',
@@ -2816,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.
@@ -2851,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',
@@ -2970,11 +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',
@@ -2991,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',
@@ -3018,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.',
@@ -3031,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',
@@ -3049,7 +3123,10 @@ $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',
 
 # Bad image list
 'bad_image_list' => "Die formaat is as volg:
@@ -3085,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',
@@ -3541,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
@@ -3658,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.
@@ -3683,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.',
@@ -3797,11 +3876,15 @@ Beelde word in hulle volle resolusie gewys. Ander lêertipes word direk met hull
 'logentry-move-move_redir-noredirect' => "$1 het bladsy $3 na $4 oor 'n bestaande aanstuur geskuif sonder om 'n aanstuur agter te laat",
 'logentry-patrol-patrol' => '$1 het weergawe $4 van bladsy $3 as gekontroleerd gemerk',
 'logentry-patrol-patrol-auto' => '$1 het weergawe $4 van bladsy $3 outomaties as gekontroleerd gemerk',
-'logentry-newusers-newusers' => "$1 het 'n gebruiker geskep",
-'logentry-newusers-create' => "$1 het 'n gebruiker geskep",
-'logentry-newusers-create2' => "$1 het 'n gebruiker $3 geskep",
+'logentry-newusers-newusers' => 'Gebruiker $1 is geskep',
+'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].
index e07da4f..88632af 100644 (file)
@@ -452,10 +452,6 @@ Arsyeja e dhânë âsht "\'\'$2\'\'".',
 
 Mundeni me vazhdue me shfrytëzue {{SITENAME}} në mënyrë anonime, apo mundeni <span class='plainlinks'>[$1 me u kyçë]</span> si përdoruesi i njêjtë apo si nji tjetër.
 Disa faqe mujnë me u paraqitë prap si t'kishit qenë t'kyçun, derisa ta pastroni memorizimin e shfletuesit.",
-'welcomecreation' => '== Mirësevini, $1! ==
-
-Llogaria juej âsht krijue.
-Mos harroni me i ndryshue [[Special:Preferences|parapëlqimet për {{SITENAME}}]].',
 'yourname' => 'Nofka:',
 'yourpassword' => 'Fjalëkalimi:',
 'yourpasswordagain' => 'Fjalëkalimi përsëdyti:',
@@ -737,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.',
@@ -1135,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',
@@ -1277,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)',
 
@@ -1617,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 3e59f1e..d3f815b 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,19 +409,19 @@ $2",
 
 አሁንም በቁጥር መታወቂያዎ ማዘጋጀት ይቻላል። ወይም ደግሞ እንደገና በብዕር ስምዎ መግባት ይችላሉ።
 በጥቂት ሴኮንድ ውስጥ ወደሚከተለው ገጽ በቀጥታ ይመለሳል፦",
-'welcomecreation' => '== ሰላምታ፣ $1! ==
-
-የብዕር ስምዎ ተፈጥሯል። ምርጫዎችዎን ለማስተካከል ይችላሉ።',
+'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' => 'አልገቡም',
@@ -409,10 +430,13 @@ $2",
 'createaccount' => 'አዲስ አባል ለመሆን',
 'gotaccount' => "(አባልነት አሁን ካለዎ፥ '''$1''' ይግቡ)",
 'gotaccountlink' => 'በዚህ',
+'userlogin-resetlink' => 'የመግቢያ ዝርዝርዎን ረተዋልን?',
 'createaccountmail' => 'በኢ-ሜል',
+'createaccountreason' => 'ምክንያት:',
 'badretype' => 'የጻፉት መግቢያ ቃሎች አይስማሙም።',
 'userexists' => 'ይህ ብዕር ስም አሁን ይኖራል። እባክዎ፣ ሌላ ብዕር ስም ይምረጡ።',
 'loginerror' => 'የመግባት ስኅተት',
+'createaccounterror' => 'ይህን አባልነት ለመፍጠር አልተቻለም፦ $1',
 'nocookiesnew' => 'ብዕር ስም ተፈጠረ፣ እርስዎ ግን ገና አልገቡም። በ{{SITENAME}} ተጠቃሚዎች ለመግባት የቃኚ-ማስታወሻ (cookie) ይጠቀማል። በርስዎ ኮምፒውተር ግን የቃኚ-ማስታወሻ እንዳይሠራ ተደርጓል። እባክዎ እንዲሠራ ያድርጉና በአዲስ ብዕር ስምና መግቢያ ቃልዎ ይግቡ።።',
 'nocookieslogin' => 'በ{{SITENAME}} ተጠቃሚዎች ለመግባት የቃኚ-ማስታወሻ (cookie) ይጠቀማል። በርስዎ ኮምፒውተር ግን የቃኚ-ማስታወሻ እንዳይሠራ ተደርጓል። እባክዎ እንዲሠራ ያድርጉና እንደገና ይሞክሩ።',
 'noname' => 'የተወሰነው ብዕር ስም ትክክለኛ አይደለም።',
@@ -421,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).
@@ -431,6 +458,7 @@ $2",
 
 ይህ ጥያቄ የእርስዎ ካልሆነ፣ ወይም መግቢያ ቃልዎን ያስታወሱ እንደ ሆነ፣ ይህንን መልእክት ቸል ማለት ይችላሉ። የቆየው መግቢያ ቃል ከዚህ በኋላ ተግባራዊ ሆኖ ይቀጥላል።',
 'noemail' => 'ለብዕር ስም «$1» የተመዘገበ ኢ-ሜል የለም።',
+'noemailcreate' => 'ትክክለኛ ኢ-ሜል ማቅረብ ያስፈልጋል።',
 'passwordsent' => 'አዲስ መግቢያ ቃል ለ«$1» ወደ ተመዘገበው ኢ-ሜል ተልኳል። እባክዎ ከተቀበሉት በኋላ ዳግመኛ ይግቡ።',
 'blocked-mailpassword' => 'የርስዎ ቁጥር አድራሻ ከማዘጋጀት ታግዷልና፣ እንግዲህ ተንኮል ለመከልከል የመግቢያ ቃል ማግኘት ዘዴ ለመጠቀም አይፈቀደም።',
 'eauthentsent' => 'የማረጋገጫ ኢ-ሜል ወዳቀረቡት አድራሻ ተልኳል። ያው አድራሻ በውነት የርስዎ እንደሆነ ለማረጋገጥ፣ እባክዎ በዚያ ደብዳቤ ውስጥ የተጻፈውን መያያዣ ይጫኑ። ከዚያ ቀጥሎ ኢ-ሜል ከሌሎች ተጠቃሚዎች መቀበል ይችላሉ።',
@@ -442,6 +470,8 @@ $2",
 'noemailprefs' => '(በ{{SITENAME}} በኩል ኢሜል ለመቀበል፣ የራስዎን አድራሻ አስቀድመው ማቅረብ ያስፈልጋል።)',
 'emailconfirmlink' => 'አድራሻዎን ለማረጋገጥ',
 'invalidemailaddress' => 'ያው ኢ-ሜል አድራሻ ትክክለኛ አይመስልምና ልንቀበለው አይቻልም። እባክዎ ትክክለኛ አድራሻ ያስግቡ ወይም አለዚያ ጥያቄው ባዶ ይሁን።',
+'cannotchangeemail' => 'በዚሁ ዊኪ ላይ፣ የተሠጠውን ኢ-ሜል አድራሻ ለመቀይር አይቻልም።',
+'emaildisabled' => 'በዚሁ ድረገጽ ኢ-ሜል መላክ አልተቻለም።',
 'accountcreated' => 'ብዕር ስም ተፈጠረ',
 'accountcreatedtext' => 'ለ$1 ብዕር ስም ተፈጥሯል።',
 'createaccount-title' => 'ለ{{SITENAME}} የብዕር ስም መፍጠር',
@@ -450,8 +480,12 @@ $2",
 ይህ ብዕር ስም በስህተት ከተፈጠረ፣ ይህን መልእክት ቸል ማለት ይችላሉ።',
 'login-throttled' => 'በዚሁ አባል ስም በጥቂት ግዜ ውስጥ ከመጠን በላይ ሙከራዎች አድርገዋል።
 እባክዎ እንደገና ሳይሞክሩ ለጥቂት ደቂቃ ይቆዩ።',
+'login-abort-generic' => 'መግባትዎ አልተከናወነም፤ ተሠርዟል።',
 'loginlanguagelabel' => 'ቋምቋ፦ $1',
 
+# E-mail sending
+'user-mail-no-addy' => 'እሚደርስበት ኢ-ሜል አድራሻ ሳይታወቅ መላክ አይቻልም።',
+
 # Change password dialog
 'resetpass' => 'የአባል መግቢያ ቃል ለመቀየር',
 'resetpass_announce' => 'በኢ-ሜል በተላከ ጊዜያዊ ኮድ ገብተዋል። መግባትዎን ለመጨርስ፣ አዲስ መግቢያ ቃል እዚህ መምረጥ አለብዎ።',
@@ -469,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' => 'በጉልህ ፊደላት ይጻፍ',
@@ -499,6 +557,7 @@ $2",
 'showdiff' => 'ማነጻጸሪያ',
 'anoneditwarning' => "'''ማስጠንቀቂያ:''' እርስዎ አሁን በአባል ስምዎ ያልገቡ ነዎት።
 ይህን ገፅ ማዘጋጀት፣ ማረምና ማስተካከል ይችላሉ፤ ነገር ግን ያደረጉት ለውጥ በአባልነት ስምዎ ሳይሆን በድህረ ገፅ የመለያ ቁጥር አድራሻዎ (IP address) በገፁ የለውጥ ታሪክ ላይ ይመዘገባሉ።",
+'anonpreviewwarning' => 'እርስዎ ገና ያልገቡ ነዎት። ይህን ገፅ በማቅረብ የመለያ ቁጥር አድራሻዎ (IP address) በገፁ የለውጥ ታሪክ ላይ ይመዘገባል።',
 'missingsummary' => "'''ማስታወሻ፦''' ማጠቃለያ ገና አላቀረቡም። እንደገና «ገጹን ለማቅረብ» ቢጫኑ፣ ያለ ማጠቃለያ ይላካል።",
 'missingcommenttext' => 'እባክዎ አስተያየት ከዚህ በታች ያስግቡ።',
 'missingcommentheader' => "'''ማስታወሻ፦''' ለዚሁ አስተያየት ምንም አርእስት አላቀረቡም። 'ለማቅረብ' እንደገና ቢጫኑ ለውጥዎ ያለ አርዕስት ይሆናል።",
@@ -542,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' => "'''ማሳሰቢያ፦'''",
@@ -554,6 +619,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'previewconflict' => 'ለማስቀምጥ የመረጡ እንደ ሆነ እንደሚታይ፣ ይህ ቅድመ-ዕይታ በላይኛ ጽሕፈት ማዘጋጀት ክፍል ያለውን ጽሕፈት ያንጸባርቃል።',
 'session_fail_preview' => "'''ይቅርታ! ገጹን ለማቅረብ ስንሂድ፣ አንድ ትንሽ ችግር በመረቡ መረጃ ውስጥ ድንገት ገብቶበታል። እባክዎ፣ እንደገና ገጹን ለማቅረብ አንዴ ይሞክሩ። ከዚያ ገና ካልሠራ፣ ምናልባት ከአባል ስምዎ መውጣትና እንደገና መግባት ይሞክሩ።'''",
 'editing' => '«$1» ማዘጋጀት / ማስተካከል',
+'creating' => '$1ን መፍጠር',
 'editingsection' => '«$1» (ክፍል) ማዘጋጀት / ማስተካከል',
 'editingcomment' => '$1 ማዘጋጀት (ውይይት መጨመር)',
 'editconflict' => 'ተቃራኒ ለውጥ፦ $1',
@@ -584,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' => 'የፈቃድ ስሕተቶች',
@@ -597,6 +662,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 *የገጹ መጥፋት ዝርዝር ከዚህ ታች ይታያል።",
 'moveddeleted-notice' => 'ይኸው ገጽ ከዚህ በፊት የጠፋ ነው።
 የገጹ መጥፋት ዝርዝር ከዚህ ታች ይታያል።',
+'log-fulllog' => 'ሙሉ መዝገቡን ለማየት',
 'edit-hook-aborted' => 'ለውጡ በሜንጦ ተቋረጠ።
 ምንም ምክንያት አልሰጠም።',
 'edit-gone-missing' => 'ገጹን ማሳደስ አልተቻለም።  እንደ ጠፋ ይመስላል።',
@@ -604,6 +670,10 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'edit-no-change' => 'በጽሕፈቱ አንዳችም አልተለወጠምና ለውጥዎ ቸል ተብሏል።',
 'edit-already-exists' => 'አዲስ ገጽ ለመፍጠር አልተቻለም፤
 ገና ይኖራልና።',
+'defaultmessagetext' => 'የቆየው ጽሕፈት',
+
+# Content models
+'content-model-javascript' => 'ጃቫ ስክሪፕት',
 
 # "Undo" feature
 'undo-success' => "ያ ለውጥ በቀጥታ ሊገለበጥ ይቻላል። እባክዎ ከታች ያለውን ማነጻጸርያ ተመልክተው ይህ እንደሚፈልጉ ያረጋግጡና ለውጡ እንዲገለበጥ '''ገጹን ለማቅረብ''' ይጫኑ።",
@@ -650,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' => 'የእትሙ ጽሕፈት ይደበቅ',
@@ -659,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' => 'የመከልከል መዝገብ',
@@ -686,6 +770,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'mergehistory-autocomment' => '[[:$1]] ወደ [[:$2]] አዋሐደ',
 'mergehistory-comment' => '[[:$1]] ወደ [[:$2]] አዋሐደ: $3',
 'mergehistory-same-destination' => 'መነሻና መድረሻ ገጾች አንድላይ ሊሆኑ አይቻልም',
+'mergehistory-reason' => 'ምክንያቱ፦',
 
 # Merge log
 'mergelog' => 'የመዋሐድ መዝገብ',
@@ -695,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' => 'ለውጡ ይገለበጥ',
@@ -713,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]]\" የሚባል መጣጥፍ በዚሁ ዊኪ ላይ አለ።'''",
@@ -722,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' => 'ለፋይሎች ለመፈለግ',
@@ -736,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> ውጤቶች ድረስ ከዚህ በታች ይታያሉ።',
@@ -771,6 +864,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'skin-preview' => 'ቅድመ-ዕይታ',
 'datedefault' => 'ግድ የለኝም',
 'prefs-datetime' => 'ዘመንና ሰዓት',
+'prefs-user-pages' => 'የአባል ገጾች',
 'prefs-personal' => 'ያባል ዶሴ',
 'prefs-rc' => 'የቅርቡ ለውጦች ዝርዝር',
 'prefs-watchlist' => 'የሚከታተሉ ገጾች',
@@ -780,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' => 'እንደ በፊቱ ይታደስ',
@@ -815,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 ፊደል በታች መሆን አለበት።',
@@ -835,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' => 'የአባል መብቶች ለማስተዳደር',
@@ -873,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}}:መጋቢዎች',
@@ -883,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' => 'ገጾችን ለማጥፋት',
@@ -905,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' => 'ይህን ገጽ ለማንበብ',
@@ -921,6 +1039,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'action-minoredit' => 'ይህን ለውጥ ጥቃቅን ሆኖ ለማመልከት',
 'action-move' => 'ይህንን ገጽ ለማዛወር',
 'action-move-subpages' => 'ይህንን ገጽ ከነንዑስ-ገጾቹ ለማዛወር',
+'action-movefile' => 'ይህን ፋይል ለማዛወር',
 'action-upload' => 'ይህንን ፋይል ለመላክ',
 'action-delete' => 'ይህን ገጽ ለማጥፋት',
 'action-deleterevision' => 'ይህን እትም ለማጥፋት',
@@ -936,6 +1055,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'action-autopatrol' => 'የራስዎ ለውጥ የተሣለፈ ሆኖ መመልከት',
 'action-mergehistory' => 'የዚሁን ገጽ ዕትሞች ታሪክ ለማዋሐድ',
 'action-userrights' => 'ያባላት ሁሉ መብቶች ለማስተካከል',
+'action-sendemail' => 'ኢ-ሜል መላክ',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ለውጥ|ለውጦች}}',
@@ -943,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 ጀምሮ አዲስ ለውጦቹን ለማየት)',
@@ -966,6 +1088,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'newsectionsummary' => '/* $1 */ አዲስ ክፍል',
 'rc-enhanced-expand' => 'ዝርዝሩን አሳይ (JavaScript ያስፈልጋል)',
 'rc-enhanced-hide' => 'ዝርዝሩን ደብቅ',
+'rc-old-title' => 'መጀመርያ እንደ «$1» ተፈጠረ።',
 
 # Recent changes linked
 'recentchangeslinked' => 'የተዛመዱ ለውጦች',
@@ -999,6 +1122,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'filename' => 'የፋይል ስም',
 'filedesc' => 'ማጠቃለያ',
 'fileuploadsummary' => 'ማጠቃለያ፦',
+'filereuploadsummary' => 'የፋይሉ ለውጦች፦',
 'filestatus' => 'የማብዛት መብት ሁኔታ፦',
 'filesource' => 'መነሻ፦',
 'uploadedfiles' => 'የተላኩ ፋይሎች',
@@ -1006,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' => 'የላኩት ፋይል ባዶ እንደ ሆነ ይመስላል። ይህ ምናልባት በፋይሉ ስም አንድ ግድፋት ስላለ ይሆናል። እባክዎ ይህን ፋይል በውኑ መላክ እንደ ፈለጉ ያረጋግጡ።',
@@ -1031,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ን መድረስ አልተቻለም',
@@ -1071,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' => 'ፋይል',
@@ -1099,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 ማገልበጥ',
@@ -1196,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}} ውስጥ ከሚገኙ ሌሎች ገጾች ጋር አልተያያዙም።',
@@ -1230,6 +1398,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'listusers' => 'አባላት',
 'listusers-editsonly' => 'ለውጦች ያላቸው ተጠቃሚዎች ብቻ ይታዩ',
 'usereditcount' => '$1 {{PLURAL:$1|ለውጥ|ለውጦች}}',
+'usercreated' => 'በ$1 በ$2 {{GENDER:$3|ተፈጠረ|ተፈጠረች}}።',
 'newpages' => 'አዳዲስ መጣጥፎች',
 'newpages-username' => 'በአቅራቢው፦',
 'ancientpages' => 'የቈዩ ፅሑፎች (በተለወጠበት ሰአት)',
@@ -1278,6 +1447,9 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'allpagesprefix' => 'በዚሁ ፊደል የጀመሩት ገጾች:',
 'allpages-bad-ns' => 'በ{{SITENAME}} «$1» የሚባል ክፍለዊኪ የለም።',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'መጨረሻውን ለማየት',
+
 # Special:Categories
 'categories' => 'ምድቦች',
 'categoriespagetext' => 'በዚሁ ሥራ ዕቅድ ውስጥ የሚከተሉ መደቦች ይኖራሉ።
@@ -1285,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' => 'የተጠቃሚ ስብስባ መብቶች',
@@ -1309,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' => 'ለ',
@@ -1330,6 +1522,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Watchlist
 'watchlist' => 'የምከታተላቸው ገጾች፤',
 'mywatchlist' => 'የምከታተላቸው ገጾች፤',
+'watchlistfor2' => 'ለ $1 $2',
 'nowatchlist' => 'ዝርዝርዎ ባዶ ነው። ምንም ገጽ ገና አልተጨመረም።',
 'watchlistanontext' => 'የሚከታተሉት ገጾች ዝርዝርዎን ለመመልከት ወይም ለማስተካከል እባክዎ $1።',
 'watchnologin' => 'ገና አልገቡም',
@@ -1361,11 +1554,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => 'የ{{SITENAME}} ኢሜል-ማስታወቂያ',
 'enotif_reset' => 'ገጾች ሁሉ የተጎበኙ ሆነው ለማመልከት',
-'enotif_newpagetext' => 'ይህ አዲስ ገጽ ነው።',
 'enotif_impersonal_salutation' => '{{SITENAME}} ተጠቃሚ',
-'changed' => 'ተለወጠ',
-'created' => 'ተፈጠረ',
-'enotif_subject' => 'የ{{SITENAME}} ገጽ $PAGETITLE  በ$PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => 'መጨረሻ ከጎበኙ ጀምሮ ለውጦችን ሁሉ ለመመልከት $1 ይዩ።',
 'enotif_lastdiff' => 'ይህን ለውጥ ለማመልከት $1 ይዩ።',
 'enotif_anon_editor' => 'ቁጥር አድራሻ $1',
@@ -1391,6 +1580,8 @@ $NEWPAGE
 
 በተጨማሪ ለመረዳት፦
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ተፈጠረ',
+'changed' => 'ተለወጠ',
 
 # Delete
 'deletepage' => 'ገጹ ይጥፋ',
@@ -1405,6 +1596,7 @@ $NEWPAGE
 'confirmdeletetext' => 'ይህን ገጽ ከነ ሙሉ የለውጥ ታሪኩ ሊያጠፉት ነው።
 እባክዎን ይህን የሚያደርጉት አስበውበት፣ በ[[{{MediaWiki:Policy-url}}|መተዳደሪያ ደንብም]] መሰረት መሆኑን ያረጋግጡ።',
 'actioncomplete' => 'ተፈጽሟል',
+'actionfailed' => 'ድርጊቱ አልተከናወነም።',
 'deletedtext' => '«$1» ጠፍቷል።
 
 (የጠፉትን ገጾች ሁሉ ለመመልከት $2 ይዩ።)',
@@ -1443,6 +1635,7 @@ $NEWPAGE
 'movedarticleprotection' => 'የመቆለፍ ደረጃ ከ"[[$2]]" ወደ "[[$1]]" ተቀየረ',
 'protect-title' => 'ለ«$1» የመቆለፍ ደረጃ ለማስተካከል',
 'prot_1movedto2' => '«$1» ወደ «[[$2]]» አዛወረ',
+'protect-badnamespace-text' => 'በዚሁ ክፍለ ዊኪ ያሉት ገጾች ሊቆለፉ አይችሉም።',
 'protect-legend' => 'የመቆለፍ ማረጋገጫ',
 'protectcomment' => 'ምክንያት:',
 'protectexpiry' => 'የሚያልቅበት ግዜ፦',
@@ -1460,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' => 'ይህንን ገጽ የማዘጋጀት ፈቃድ ስለሌለልዎ መቆለፍ አይቻሎትም።',
@@ -1498,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 ፋይሎች}} መለሰ',
@@ -1538,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
@@ -1560,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' => 'የቁ. አድራሻ ወይም የብዕር ስም፦',
@@ -1586,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' => 'ከብዕር ስም ወይም ከቁ. አድራሻ ማገጃ ለማንሣት',
@@ -1599,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' => 'ያልገቡት የቁ.# ብቻ',
@@ -1616,6 +1834,7 @@ $1',
 'unblocklink' => 'ማገጃ ለማንሣት',
 'change-blocklink' => 'እገዳውን ቀይር',
 'contribslink' => 'አስተዋጽኦች',
+'emaillink' => 'ኢ-ሜል መላክ',
 'blocklogpage' => 'የማገጃ መዝገብ',
 'blocklogentry' => 'እስከ $2 ድረስ [[$1]] አገዳ $3',
 'blocklogtext' => 'ይህ መዝገብ ተጠቃሚዎች መቸም ሲታገዱ ወይም ማገጃ ሲነሣ የሚዘረዝር ነው። ለአሁኑ የታገዱት ሰዎች [[Special:BlockList|በአሁኑ ማገጃዎች ዝርዝር]] ይታያሉ።',
@@ -1681,6 +1900,7 @@ $1',
 'movepagebtn' => 'ገጹ ይዛወር',
 'pagemovedsub' => 'መዛወሩ ተከናወነ',
 'movepage-moved' => "'''«$1» ወደ «$2» ተዛውሯል'''",
+'movepage-moved-redirect' => 'መምሪያ መንገድ ተፈጠረ።',
 'articleexists' => 'በዚያ አርዕሥት ሌላ ገጽ አሁን አለ። አለበለዚያ የመረጡት ስም ልክ አይደለም - ሌላ አርእስት ይምረጡ።',
 'cantmove-titleprotected' => 'አዲሱ አርዕስት ከመፈጠር ስለተጠበቀ፣ ገጽ ወደዚያው ሥፍራ ለማዛወር አይችሉም።',
 'talkexists' => "'''ገጹ ወደ አዲሱ አርዕስት ተዛወረ፤ እንጂ በአዲሱ አርዕስት የቆየ ውይይት ገጽ አስቀድሞ ስለ ኖረ የዚህ ውይይት ገጽ ሊዛወር አልተቻለም። እባክዎ፣ በእጅ ያጋጥሙአቸው።'''",
@@ -1692,6 +1912,7 @@ $1',
 'movepage-page-unmoved' => 'ገጹ $1 ወደ $2 ሊዛወር አልተቻለም።',
 'movelogpage' => 'የማዛወር መዝገብ',
 'movelogpagetext' => 'ይህ መዝገብ ገጽ ሲዛወር ይመዝገባል። <ይመለስ> ቢጫኑ ኖሮ መዛወሩን ይገለብጣል!',
+'movenosubpage' => 'ይህ ገጽ ምንም ንዑስ ገጽ የለውም።',
 'movereason' => 'ምክንያት:',
 'revertmove' => 'ይመለስ',
 'delete_and_move' => 'ማጥፋትና ማዛወር',
@@ -1716,6 +1937,7 @@ $1',
 'export-submit' => 'ለመላክ',
 'export-addcattext' => 'ከዚሁ መደብ ገጾች ይጨመሩ፦',
 'export-addcat' => 'ለመጨምር',
+'export-addns' => 'ለመጨምር',
 'export-download' => 'እንደ ፋይል ለመቆጠብ',
 'export-templates' => 'ከነመለጠፊያዎቹ',
 
@@ -1727,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' => 'አጎላ',
@@ -1858,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 አጠፋ',
@@ -1886,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' => 'ሥርዓቱ እንዲህ ነው፦
 
@@ -2009,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' => 'ያልተጨመቀ',
@@ -2111,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])',
@@ -2123,6 +2404,7 @@ $1',
 'watchlistall2' => 'ሁሉ',
 'namespacesall' => 'ሁሉ (all)',
 'monthsall' => 'ሁሉ',
+'limitall' => 'ሁሉ',
 
 # E-mail address confirmation
 'confirmemail' => 'ኢ-ሜልዎን ለማረጋገጥ',
@@ -2258,6 +2540,7 @@ $3
 'fileduplicatesearch-legend' => 'ለቅጂ ለመፈልግ',
 'fileduplicatesearch-filename' => 'የፋይል ስም:',
 'fileduplicatesearch-submit' => 'ፍለጋ',
+'fileduplicatesearch-noresults' => '«$1» የሚባል ፋይል አልተገኘም።',
 
 # Special:SpecialPages
 'specialpages' => 'ልዩ ገጾች',
@@ -2266,14 +2549,34 @@ $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
+'logentry-delete-delete' => '$1 ገጹን $3 አጠፋ',
 'newuserlog-byemail' => 'ማለፊያ-ቃል በኤ-መልዕክት ተልኳል',
+'rightsnone' => '(የለም)',
+
+# Feedback
+'feedback-cancel' => 'ይቅር',
 
 # Search suggestions
 'searchsuggest-search' => 'ፈልግ',
@@ -2304,6 +2607,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 6b2746a..3e81728 100644 (file)
@@ -522,9 +522,6 @@ A razón data ye ''$2''.",
 'logouttext' => "'''Ha rematato a sesión.'''
 
 Puede continar navegando por {{SITENAME}} anonimament, u puede <span class='plainlinks'>[$1 encetar]</span> una nueva sesión con o mesmo nombre d'usuario u bell atro diferent. Pare cuenta que, entre que se limpia a caché d'o navegador, puet estar que bellas pachinas s'amuestren como si encara continase en a sesión anterior.",
-'welcomecreation' => "== ¡Bienveniu(da), $1! ==
-S'ha creyato a suya cuenta.
-No xublide de presonalizar [[Special:Preferences|as suyas preferencias en {{SITENAME}}]].",
 'yourname' => "Nombre d'usuario:",
 'yourpassword' => "Clau d'acceso:",
 'yourpasswordagain' => 'Torne a escribir a clau:',
@@ -821,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',
@@ -1342,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',
@@ -1960,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.",
@@ -2054,11 +2047,7 @@ L\'adreza de correu-e que endicó en as suyas [[Special:Preferences|preferencias
 
 'enotif_mailer' => 'Sistema de notificación por correu de {{SITENAME}}',
 'enotif_reset' => 'Marcar todas as pachinas como vesitatas',
-'enotif_newpagetext' => 'Ista ye una nueva pachina.',
 'enotif_impersonal_salutation' => 'usuario de {{SITENAME}}',
-'changed' => 'editata',
-'created' => 'creyata',
-'enotif_subject' => 'A pachina $PAGETITLE de {{SITENAME}} ha estato $CHANGEDORCREATED por $PAGEEDITOR',
 'enotif_lastvisited' => 'Vaiga ta $1 ta veyer totz os cambeos dende a suya zaguer vesita.',
 'enotif_lastdiff' => 'Vaiga ta $1 ta veyer iste cambeo.',
 'enotif_anon_editor' => 'usuario anonimo $1',
@@ -2090,6 +2079,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',
@@ -3611,6 +3602,7 @@ As imachens s'amuestran en resolución completa, a resta de fichers fan encetar
 '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 c4272cc..87e3aaa 100644 (file)
@@ -360,9 +360,6 @@ Cȳþþuhord edƿende ƿōh "<tt>$3: $4</tt>"',
 
 Þū canst ætfeolan tō brūcenne {{SITENAME}} ungecūðe, oþþe þū canst <span class='plainlinks'>[$1 inmeldian eft]</span> tō ylcan oþþe ōðrum brūcende.
 Cnāw þæt sume sīdan cunnon gelǣstende ēowod wesan swā þū wǣre gīet inmeldod, oþ þæt þū clǣnsie þīnes sēcendtōles gemynd.",
-'welcomecreation' => '== Ƿilcumen, $1! ==
-
-Þīn hordcleofa ƿearþ ȝescapen.  Ne forȝiet tō hƿierfenne þīna [[Special:Preferences|{{SITENAME}} foreberunga]].',
 'yourname' => 'Þīn brūcendnama',
 'yourpassword' => 'Þafungƿord:',
 'yourpasswordagain' => 'Þafungƿord edƿrītan:',
@@ -479,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}}:',
@@ -635,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',
 
@@ -837,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',
@@ -877,13 +873,12 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watching' => 'Ƿæccende...',
 'unwatching' => 'Unƿæccende...',
 
-'enotif_newpagetext' => 'Þēos is nīƿu sīde.',
 'enotif_impersonal_salutation' => '{{SITENAME}} brūcend',
-'changed' => 'hƿorfen',
-'created' => 'ȝescapen',
 '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 543c10f..a162f09 100644 (file)
@@ -50,6 +50,7 @@
  * @author TTMTT
  * @author Tarawneh
  * @author TheEgyptian
+ * @author Tux-tn
  * @author Uwe a
  * @author Zack wadghiri
  * @author Zanatos
@@ -516,7 +517,7 @@ $messages = array(
 
 'underline-always' => 'دائما',
 'underline-never' => 'أبدا',
-'underline-default' => 'تبعا لإعدادات المتصفح',
+'underline-default' => 'تبعا Ù\84إعدادات Ø§Ù\84Ù\88اجÙ\87Ø© Ø£Ù\88 Ø§Ù\84Ù\85تصÙ\81Ø­',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'نمط خط منطقة التحرير:',
@@ -601,8 +602,8 @@ $messages = array(
 'newwindow' => '(تفتح في نافذة جديدة)',
 'cancel' => 'إلغاء',
 'moredotdotdot' => 'المزيد...',
-'mypage' => 'صÙ\81حتÙ\8a',
-'mytalk' => 'نقاشي',
+'mypage' => 'صÙ\81حة',
+'mytalk' => 'نقاش',
 'anontalk' => 'النقاش لعنوان الأيبي هذا',
 'navigation' => 'إبحار',
 'and' => '&#32;و',
@@ -634,6 +635,7 @@ $messages = array(
 'namespaces' => 'النطاقات',
 'variants' => 'المتغيرات',
 
+'navigation-heading' => 'قائمة التصفح',
 'errorpagetitle' => 'خطأ',
 'returnto' => 'ارجع إلى $1.',
 'tagline' => 'من {{SITENAME}}',
@@ -763,7 +765,7 @@ $1',
 'sort-ascending' => 'ترتيب تصاعدي',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'صفحة',
+'nstab-main' => 'اÙ\84صÙ\81حة',
 'nstab-user' => 'صفحة {{GENDER:{{BASEPAGENAME}}|مستخدم|مستخدمة}}',
 'nstab-media' => 'صفحة وسيط',
 'nstab-special' => 'صفحة خاصة',
@@ -846,7 +848,7 @@ $1',
 'actionthrottled' => 'لا يمكن عمل المزيد من هذا الفعل',
 'actionthrottledtext' => 'كإجراء ضد السبام، أنت ممنوع من إجراء هذا الفعل عدد كبير من المرات في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.
 من فضلك حاول مرة ثانية خلال عدة دقائق.',
-'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل.',
+'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل أو أية عمليات أخرى.',
 'viewsourcetext' => 'يمكنك رؤية ونسخ مصدر هذه الصفحة:',
 'viewyourtext' => "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
 'protectedinterface' => 'توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.
@@ -881,9 +883,9 @@ $2',
 
 تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو <span class='plainlinks'>[$1 الدخول مرة أخرى]</span> بنفس الاسم أو باسم آخر.
 من الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
-'welcomecreation' => '== مرحبا، $1! ==
-تم إنشاء حسابك.
\84ا ØªÙ\86س Ø£Ù\86 ØªØºÙ\8aر [[Special:Preferences|تفضيلاتك في {{SITENAME}}]].',
+'welcomeuser' => 'أهلاً بك يا $1!',
+'welcomecreation-msg' => 'تم إنشاء حسابك.
\84ا ØªÙ\86س ØªØ¹Ø¯Ù\8aÙ\84 [[Special:Preferences|تفضيلاتك في {{SITENAME}}]].',
 'yourname' => 'اسم المستخدم:',
 'yourpassword' => 'كلمة السر:',
 'yourpasswordagain' => 'أعد كتابة كلمة السر:',
@@ -898,7 +900,7 @@ $2',
 'userlogin' => 'دخول / إنشاء حساب',
 'userloginnocreate' => 'تسجيل الدخول',
 'logout' => 'تسجيل الخروج',
-'userlogout' => 'تسجÙ\8aÙ\84 Ø§Ù\84خرÙ\88ج',
+'userlogout' => 'اخرج',
 'notloggedin' => 'غير مسجل الدخول',
 'nologin' => "ليس لديك حساب؟ '''$1'''.",
 'nologinlink' => 'أنشئ حسابا',
@@ -985,6 +987,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
 'user-mail-no-addy' => 'لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.',
+'user-mail-no-body' => 'محاول ارسال بريد إلكتروني فارغ أو ذو نص قصير.',
 
 # Change password dialog
 'resetpass' => 'تغيير كلمة السر',
@@ -1045,6 +1048,7 @@ $2
 'changeemail-oldemail' => 'عنوان البريد الإلكتروني الحالي:',
 'changeemail-newemail' => 'عنوان البريد الإلكتروني الجديد:',
 'changeemail-none' => '(لا شيء)',
+'changeemail-password' => 'كلمة سر {{SITENAME}} الخاصة بك:',
 'changeemail-submit' => 'غيّر البريد الإلكتروني',
 'changeemail-cancel' => 'إلغاء',
 
@@ -1174,7 +1178,7 @@ $2
 'note' => "'''ملاحظة:'''",
 'previewnote' => "'''تذكر أن هذه مجرد معاينة أولية.'''
 لم تحفظ تغييراتك إلى الآن!",
-'continue-editing' => 'Ø£Ù\83Ù\85Ù\84 التحرير',
+'continue-editing' => 'اذÙ\87ب Ù\84صÙ\86دÙ\88Ù\82 التحرير',
 'previewconflict' => 'هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.',
 'session_fail_preview' => "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.
 من فضلك حاول مرة أخرى.
@@ -1234,7 +1238,6 @@ $2
 'template-semiprotected' => '(حماية جزئية)',
 'hiddencategories' => '{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:',
 'edittools' => '<!-- النص هنا سيظهر تحت صندوق التحرير واستمارة رفع الصور. -->',
-'nocreatetitle' => 'تم تحديد إنشاء الصفحات',
 'nocreatetext' => 'قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.
 يمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].',
 'nocreate-loggedin' => 'أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.',
@@ -1264,7 +1267,10 @@ $2
 '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' => "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.
@@ -1635,9 +1641,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' => 'اللغة:',
@@ -1657,7 +1663,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' => 'الترجمة',
@@ -1786,12 +1792,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' => 'قراءة هذه الصفحة',
@@ -1931,7 +1938,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' => 'خطأ غير معروف حدث.',
@@ -2037,6 +2044,7 @@ $1',
 'backend-fail-notsame' => 'يوجد بالفعل ملف غير متطابق في $1.',
 'backend-fail-invalidpath' => '$1 ليس مساراً صالحاً للتخزين.',
 'backend-fail-delete' => 'لم يمكن حذف الملف $1.',
+'backend-fail-describe' => 'لا يمكن تغيير البيانات التعريف (metadata) للملف " $1 ".',
 'backend-fail-alreadyexists' => 'الملف $1 موجود بالفعل.',
 'backend-fail-store' => 'لا يمكن تخزين الملف $1 في $2 .',
 'backend-fail-copy' => 'لا يمكن نسخ الملف  $1  إلى  $2 .',
@@ -2431,7 +2439,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' => 'الكروت الخاصة يمكن أن تظهر فقط في بداية اسم المضيف.',
 
@@ -2450,10 +2458,6 @@ $1',
 'activeusers-hidesysops' => 'أخف الإداريين',
 'activeusers-noresult' => 'لم يعثر على أي مستخدمين',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل إنشاء المستخدمين',
-'newuserlogpagetext' => 'هذا سجل بعمليات إنشاء المستخدمين.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'صلاحيات مجموعات المستخدمين',
 'listgrouprights-summary' => 'التالي قائمة بمجموعات المستخدمين المعرفة في هذا الويكي، بصلاحياتهم المصاحبة.
@@ -2480,7 +2484,7 @@ $1',
 'emailuser-title-target' => 'راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}',
 'emailuser-title-notarget' => 'مراسلة المستخدم',
 'emailpage' => 'إرسال رسالة للمستخدم',
-'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم.
+'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.
 سيظهر عنوان البريد الإلكتروني الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.',
 'usermailererror' => 'جسم البريد أرجع خطأ:',
 'defemailsubject' => 'رسالة {{SITENAME}} من المستخدم "$1"',
@@ -2519,8 +2523,8 @@ $1',
 'watchnologin' => 'غير مسجل الدخول',
 'watchnologintext' => 'يجب أن تكون [[Special:UserLogin|مسجل الدخول]] لتعدل قائمة مراقبتك.',
 'addwatch' => 'إضافة إلى قائمة المراقبة',
-'addedwatchtext' => "أضيفت الصفحة  \"[[:\$1]]\" إلى [[Special:Watchlist|قائمة مراقبتك]].
-التغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك، وسيتم إظهار اسم الصفحة بخط '''غليظ''' في صفحة [[Special:RecentChanges|أحدث التغييرات]] لتسهيل تحديدها واكتشافها.",
+'addedwatchtext' => 'أضيفت الصفحة  "[[:$1]]" إلى [[Special:Watchlist|قائمة مراقبتك]].
+التغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك.',
 'removewatch' => 'إزالة من قائمة المراقبة',
 'removedwatchtext' => 'أزيلت الصفحة "[[:$1]]" من [[Special:Watchlist|قائمة مراقبتك]].',
 'watch' => 'راقب',
@@ -2548,18 +2552,25 @@ $1',
 
 'enotif_mailer' => 'نظام {{SITENAME}} البريدي للإخطارات',
 'enotif_reset' => 'علم على كل الصفحات كمزارة',
-'enotif_newpagetext' => 'هذه صفحة جديدة.',
 'enotif_impersonal_salutation' => 'مستخدم {{SITENAME}}',
-'changed' => 'غيرت',
-'created' => 'أنشئت',
-'enotif_subject' => 'صفحة {{SITENAME}} $PAGETITLE $CHANGEDORCREATED بواسطة $PAGEEDITOR',
+'enotif_subject_deleted' => 'الصفحة {{SITENAME}} $1 حذفها {{الجنس: $2 | $2 }}',
+'enotif_subject_created' => 'الصفحة {{SITENAME}}  $1  أنشأها {{الجنس: $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
-صفحة  $PAGETITLE قد  $CHANGEDORCREATED في $PAGEEDITDATE بواسطة $PAGEEDITOR, انظر $PAGETITLE_URL للنسخة الحالية
-ملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT
 
+$PAGEINTRO $NEWPAGE
+
+ملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT
 
 الاتصال بالمحرر:
 البريد: $PAGEEDITOR_EMAIL
@@ -2568,7 +2579,7 @@ $1',
 لن يكون هناك إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة تلك الصفحة.
 يمكنك أيضاً إزالة العلامات عن جميع الصفحات في قائمة مراقبتك.
 
-                       نظام {{SITENAME}} للإعلام بالبريد الإلكتروني
+                   نظام {{SITENAME}} للإعلام بالبريد الإلكتروني
 
 --
 لتغيير إعدادات الإعلام بالبريد الإلكتروني الخاص بك، قم بزيارة
@@ -2580,8 +2591,10 @@ $1',
 لحذف الصفحة من قائمة مراقبتك، قم بزيارة
 $UNWATCHURL
 
-التغذية المرتدة، والحصول على مساعدة إضافية:
+للمقترحات والحصول على مساعدة إضافية:
 {{canonicalurl: {{MediaWiki:Helppage}}}}',
+'created' => 'أنشئت',
+'changed' => 'غيرت',
 
 # Delete
 'deletepage' => 'حذف الصفحة',
@@ -2655,6 +2668,8 @@ $UNWATCHURL
 'prot_1movedto2' => 'نُقلت [[$1]] إلى [[$2]]',
 'protect-badnamespace-title' => 'نطاق لا يحمى',
 'protect-badnamespace-text' => 'صفحات هذا النطاق لا يمكن حمايتها',
+'protect-norestrictiontypes-text' => 'لا يمكن حماية هذه الصفحة لعدم توافر أنواع المحددات المطلوبة.',
+'protect-norestrictiontypes-title' => 'صفحة غير قابلة للحماية',
 'protect-legend' => 'تأكيد الحماية',
 'protectcomment' => 'السبب:',
 'protectexpiry' => 'تنتهي في:',
@@ -2671,9 +2686,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',
@@ -2769,11 +2784,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)',
@@ -2816,7 +2831,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
@@ -2980,7 +2995,7 @@ $1',
 إذا اخترت أن تقوم بالتحديث يدوياً، فتأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]] وقم بتصحيحها.
 أنت المسؤول عن التأكد من أن الوصلات تصل إلى الصفحات التي يفترض أن تصل إليها.
 
-لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت فارغة أو صفحة تحويل، ولا تاريخ لها.
+لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت صفحة تحويل، ولا تاريخ لها.
 هذا يعني أنك تستطيع استرجاع الصفحة إلى مكانها لو قمت بخطأ، وأنك لا يمكنك نسخ هذه الصفحة فوق صفحة موجودة.
 
 '''تحذير!'''
@@ -3321,7 +3336,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'المعلومات عن «$1»',
-'pageinfo-not-current' => 'لا يمكن إظهار المعلومات إلا عن المراجعة الأخيرة للصفحة',
+'pageinfo-not-current' => 'عذرا، لا يمكن عرض تلك المعلومات للنسخ القديمة.',
 'pageinfo-header-basic' => 'المعلومات الأساسية',
 'pageinfo-header-edits' => 'التعديلات',
 'pageinfo-header-restrictions' => 'حماية الصفحة',
@@ -3350,6 +3365,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' => 'معلومات',
@@ -3358,6 +3374,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' => 'كلاسيك',
@@ -3380,6 +3400,7 @@ $1',
 'markedaspatrollederror' => 'لا يمكن التعليم بالمراجعة',
 'markedaspatrollederrortext' => 'يجب عليك اختيار المراجعة التي تريد أن تشير أنها مراجعة',
 'markedaspatrollederror-noautopatrol' => 'لا يجوز لك تعليم تغييراتك الشخصية بعلامة المراجعة.',
+'markedaspatrollednotify' => 'هذا التغيير لـ $1  تم تعليمه كمراقب.',
 
 # Patrol log
 'patrol-log-page' => 'سجل الخفر',
@@ -3412,6 +3433,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.',
@@ -3446,7 +3468,10 @@ $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' => 'الآن فقط',
 
 # Bad image list
 'bad_image_list' => 'الصيغة كالتالي:
@@ -4179,6 +4204,7 @@ $5
 'version-license' => 'الرخصة',
 'version-poweredby-credits' => "تدار هذه الويكي ب'''[//www.mediawiki.org/ ميدياويكي]''', حقوق النشر © 2001-$1 $2.",
 'version-poweredby-others' => 'آخرون',
+'version-credits-summary' => 'نود أن نعرف بالأشخاص التالية أسماؤهم لمساهمتهم في [[Special:Version|ميدياويكي]].',
 'version-license-info' => "ميدياويكي برنامج حر، يحق لك توزيعه و/أو تعديله وفقاً لبنود رخصة غنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، الإصدار الثاني أو (وفقا لاختيارك أنت) أي إصدار لاحق.
 
 هذا البرنامج يوزع على أمل أن يكون مفيداً، ولكن '''دون أية ضمانات'''، بما في ذلك ضمانات '''التسويق''' أو '''الملاءمة لغرض معين'''. انظر رخصة غنو العمومية لمزيد من التفاصيل.
@@ -4320,11 +4346,15 @@ $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 قدم تقريرا بالخلل].
index 67d38ab..6b71aa4 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author 334a
  * @author A2raya07
+ * @author Amire80
  * @author Basharh
  * @author Man2fly2002
  * @author Michaelovic
@@ -139,6 +140,7 @@ $messages = array(
 'tog-underline' => 'ܪܫܘܡ ܣܪܛܐ ܬܚܝܬ ܐܣܪܐ:',
 'tog-justify' => 'ܫܘܐ ܦܬܓܡ̈ܐ',
 'tog-hideminor' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
+'tog-extendwatchlist' => 'ܐܪܘܚ ܪ̈ܗܝܬܐ ܠܚܘܘܝܐ ܕܟܠܗܘܢ ܫܘܚܠܦ̈ܐ، ܠܐ ܚܕ̈ܬܐ ܒܠܚܘܕ',
 'tog-editondblclick' => 'ܫܚܠܦ ܦܐܬ̈ܐ ܬܪ ܢܩܪܐ ܙܘܓܢܝܐ (ܣܢܝܩ ܠ JavaScript)',
 'tog-editsection' => 'ܡܫܟܚ ܫܘܚܠܦܐ ܕܦܘܣܩ̈ܐ ܒܐܘܪܚܐ ܕܐܝܨܘܪ̈ܐ  [ܫܚܠܦ]',
 'tog-rememberpassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܡܦܐܬܢܐ ܗܢܐ (ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}})',
@@ -220,7 +222,7 @@ $messages = array(
 'hidden-category-category' => 'ܣܕܪ̈ܐ ܛܘܫܝ̈ܐ',
 'category-subcat-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܗܢܐ ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ ܒܠܚܘܕ.|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܕܐܬܝܢ}}، ܡܢ ܣܘܝܟܐ ܕ $2.}}',
 'category-subcat-count-limited' => 'ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܗܢܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܗܠܝܢ}}.',
-'category-article-count' => '{{PLURAL:$2|Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü\90Ü\9dܬ Ü\92Ü\97 Ü¦Ü\90ܬÜ\90 Ü\97Ü\95Ü\90 Ü\92Ü Ü\9aÜ\98Ü\95.|Ü\90Ü\9dܬ {{PLURAL:$1|ܦÜ\90ܬÜ\90 Ü\95Ü\90ܬÜ\9dÜ\90|$1 Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\95Ü\90ܬÜ\9dÜ¢}} Ü\92Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90, ܡܢ ܣܘܝܟܐ ܕ $2.}}',
+'category-article-count' => '{{PLURAL:$2|Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü Ü\9dܬ Ü\92Ü\97 Ü¦Ü\90ܬÜ\90.|{{PLURAL:$1||Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü\90Ü\9dܬ Ü\92Ü\97 Ü¦Ü\90ܬÜ\90 Ü\97Ü\95Ü\90 Ü\92Ü Ü\9aÜ\98Ü\95|Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü\90Ü\9dܬ Ü\92Ü\97 Ü\97Ü Ü\9dÜ¢ $1 Ü¦Ü\90ܬܬÌ\88Ü\90}} ܡܢ ܣܘܝܟܐ ܕ $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|ܦܐܬܐ ܗܕܐ|$1 ܦܐܬܬ̈ܐ ܗܠܝܢ}} ܒܣܕܪܐ ܗܢܐ.',
 'category-file-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܠܦܦܐ ܕܐܬܐ ܒܠܚܘܕ.|{{PLURAL:$1|ܠܦܦܐ ܕܐܬܐ ܐܝܬܘܗܝ|$1 ܠܦܦ̈ܐ ܕܐܬܝܢ ܐܝܬܝܗܘܢ}} ܒܣܕܪܐ ܗܢܐ، ܡܢ ܣܘܝܟܐ ܕ $2.}}',
 'category-file-count-limited' => 'ܐܝܬ {{PLURAL:$1|ܠܦܦܐ ܕܐܬܐ|$1 ܠܦܦ̈ܐ ܕܐܬܝܢ}} ܒܣܕܪܐ ܗܫܝܐ.',
@@ -230,9 +232,9 @@ $messages = array(
 'article' => 'ܡܓܠܬܐ',
 'newwindow' => '(ܦܬܚ ܒܟܘܬܐ ܚܕܬܐ)',
 'cancel' => 'ܒܛܘܠ',
-'moredotdotdot' => '...ܝܬܝܪ',
-'mypage' => 'ܦÜ\90ܬÜ\9d',
-'mytalk' => 'Ü¡Ü¡Ü Ü Ü\9d',
+'moredotdotdot' => 'ܝܬܝܪ...',
+'mypage' => 'ܦÜ\90ܬÜ\90',
+'mytalk' => 'Ü¡Ü¡Ü Ü Ü\90',
 'anontalk' => 'ܡܡܠܠܐ ܕܗܢܐ ܐܝ ܦܝ (IP)',
 'navigation' => 'ܐܠܦܪܘܬܐ',
 'and' => '&#32;ܘ',
@@ -251,7 +253,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' => 'ܒܪܝ',
@@ -263,6 +265,7 @@ $messages = array(
 'namespaces' => 'ܚܩܠܬ̈ܐ',
 'variants' => 'ܡܫܬܚܠܦܢܘ̈ܬܐ',
 
+'navigation-heading' => 'ܡܟܬܒܘܬܐ ܕܐܠܦܪܘܬܐ',
 'errorpagetitle' => 'ܦܘܕܐ',
 'returnto' => 'ܕܥܘܪ ܠ$1.',
 'tagline' => 'ܡܢ {{SITENAME}}',
@@ -286,9 +289,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' => 'ܦܐܬܐ ܚܕܬܐ',
@@ -368,12 +371,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' => 'ܦܐܬܐ',
@@ -414,16 +421,14 @@ $1',
 ܠܡܘܣܦ ܐܘ ܫܘܚܠܦ ܬܘܪ̈ܓܡܐ ܕܟܠܗܘܢ ܘܝܩܝ، ܐܦܠܚ [//translatewiki.net/ translatewiki.net]، ܬܪܡܝܬܐ ܕܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ.",
 'sqlhidden' => '(ܒܘܬܬܐ SQL ܛܫܝܐ)',
 'namespaceprotected' => "ܠܝܬ ܠܟ ܦܣܣܐ ܠܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܚܩܠܐ ܕ'''$1'''.",
+'exception-nologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
 
 # Login and logout pages
 'logouttext' => "'''ܗܫܐ ܦܠܛܠܟ ܡܢ ܚܘܫܒܢܟ.'''
 
-ܡܨÜ\90 Ü\90ܢܬ Ü\90ܦܠÜ\9aܬ {{SITENAME}} Ü\90Ü\9dÜ\9f Ü¡Ü¦Ü Ü\9aÜ¢Ü\90 Ü Ü\90 Ü\9dÜ\95Ü\9dÜ¥Ü\90 Ü\90Ü\98 Ü¡Ü¨Ü\90 Ü\90Ü¢ܬ ܕ<span class='plainlinks'>[$1 ܬܥܘܠ]</span> ܒܚܘܫܒܢܐ ܥܝܢܗ ܐܘ ܐܝܟ ܡܦܠܚܢܐ ܐܚܪܢܐ.
+ܡܨܬ Ü\90ܦܠÜ\9aܬ {{SITENAME}} Ü\90Ü\9dÜ\9f Ü¡Ü¦Ü Ü\9aÜ¢Ü\90 Ü Ü\90 Ü\9dÜ\95Ü\9dÜ¥Ü\90 Ü\90Ü\98 Ü¡Ü¨ܬ ܕ<span class='plainlinks'>[$1 ܬܥܘܠ]</span> ܒܚܘܫܒܢܐ ܥܝܢܗ ܐܘ ܐܝܟ ܡܦܠܚܢܐ ܐܚܪܢܐ.
 
-ܚܕ ܟܡܐ ܡܢ ܦܐܬܬ̈ܐ ܡܬܚܙܝܢ ܐܝܟ ܕܗܘ ܐܢܬ ܥܠܝܠܐ ܥܕܡܐ ܕܐܣܦܩܬ ܠܦܐܬܬ̈ܐ ܠܒܝܟܬ̈ܐ ܕܡܦܐܬܢܐ ܕܝܠܟ",
-'welcomecreation' => '== ܒܫܝܢܐ, $1! ==
-ܐܬܒܪܝ ܚܘܫܒܢܟ.
-ܠܐ ܢܫܐ ܐܢܬ ܠܫܚܠܦܬܐ ܕ[[Special:Preferences|ܨܒܝܢܝܘܬ̈ܐ ܒ {{SITENAME}}]].',
+ܚܕ ܟܡܐ ܡܢ ܦܐܬܬ̈ܐ ܡܬܚܙܝܢ ܐܝܟ ܕܗܘ ܐܢܬ ܥܠܝܠܐ ܐܝܬܝܟ ܥܕܡܐ ܕܐܣܦܩܬ ܠܦܐܬܬ̈ܐ ܠܒܝܟܬ̈ܐ ܕܡܦܐܬܢܐ ܕܝܠܟ.",
 'yourname' => 'ܫܡܐ ܕܡܦܠܚܢܐ:',
 'yourpassword' => 'ܡܠܬܐ ܕܥܠܠܐ:',
 'yourpasswordagain' => 'ܟܬܘܒ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:',
@@ -457,6 +462,7 @@ $1',
 ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ.',
 'wrongpasswordempty' => 'ܡܠܬܐ ܕܥܠܠܐ ܕܐܥܠܬ ܣܦܝܩܬܐ ܐܝܬܝܗ.
 ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ.',
+'passwordtooshort' => 'ܡܠܬܐ ܕܥܠܠܐ ܘܠܐ ܕܬܗܘܐ ܕܠܐ ܒܨܪ ܡܢ{{PLURAL:$1|ܐܬܘܬܐ ܚܕ|$1 ܐܬܘ̈ܬܐ}}.',
 'mailmypassword' => 'ܫܕܪ ܠܝ ܡܠܬܐ ܚܕܬܐ ܕܥܠܠܐ',
 'passwordremindertitle' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ ܚܕܬܐ ܠ{{SITENAME}}',
 'noemail' => 'ܠܝܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܠܡܦܠܚܢܐ "$1".',
@@ -473,6 +479,7 @@ $1',
 'oldpassword' => 'ܡܠܬܐ ܕܥܠܠܐ ܥܬܝܩܬܐ:',
 'newpassword' => 'ܡܠܬܐ ܕܥܠܠܐ ܚܕܬܐ:',
 'retypenew' => 'ܟܬܘܒ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:',
+'resetpass_submit' => 'ܛܝܒ ܡܠܬܐ ܕܥܠܠܐ ܘܥܘܠ',
 'resetpass-submit-loggedin' => 'ܫܚܠܦ ܡܠܬܐ ܕܥܠܠܐ',
 'resetpass-submit-cancel' => 'ܒܛܘܠ',
 'resetpass-temp-password' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ:',
@@ -481,6 +488,7 @@ $1',
 'passwordreset' => 'ܣܘܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ',
 'passwordreset-legend' => 'ܣܘܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ',
 'passwordreset-username' => 'ܫܡܐ ܕܡܦܠܚܢܐ:',
+'passwordreset-domain' => 'ܪܘܚܬܐ:',
 
 # Special:ChangeEmail
 'changeemail' => 'ܫܚܠܦ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
@@ -512,7 +520,7 @@ $1',
 'showdiff' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ',
 'anoneditwarning' => "'''ܙܘܗܪܐ:''' ܠܐ ܐܝܬܝܟ ܥܠܝܠܐ.
 ܐܝ ܦܝ (IP) ܕܝܠܟ ܢܬܟܬܒ ܒܬܫܥܝܬܐ ܕܦܐܬܐ.",
-'anonpreviewwarning' => '"Ü Ü\90 Ü\90Ü\9dܬÜ\9dÜ\9f Ü¥Ü Ü\9dÜ Ü\90. Ü\90Ü¢ Ü Ü\92Ü\9f Ü¦Ü\90ܬÜ\90 Ü\90ܢܬ Ü\90Ü\9d Ü¦Ü\9d (IP) Ü\95Ü\9dÜ Ü\9f Ü¢Ü¬Ü\9fܬÜ\92 ܒܬܫܥܝܬܐ ܕܫܘܚܠܦܐ ܕܦܐܬܐ."',
+'anonpreviewwarning' => '"Ü Ü\90 Ü\90Ü\9dܬÜ\9dÜ\9f Ü¥Ü Ü\9dÜ Ü\90. Ü Ü\92Ü\9fܬÜ\90 Ü\95ܦÜ\90ܬÜ\90 Ü¢Ü¬Ü\9fܬÜ\92 Ü\90Ü\9d Ü¦Ü\9d (IP) Ü\95Ü\9dÜ Ü\9f ܒܬܫܥܝܬܐ ܕܫܘܚܠܦܐ ܕܦܐܬܐ."',
 'summary-preview' => 'ܚܝܪܐ ܩܕܡܝܐ ܕܦܣܝܩܬ̈ܐ :',
 'blockedtitle' => 'ܡܦܠܚܢܐ ܗܘ ܡܚܪܡܐ',
 'blockednoreason' => 'ܠܝܬ ܥܠܬܐ ܝܗܝܒܬܐ',
@@ -691,7 +699,7 @@ $1',
 
 # Preferences page
 'preferences' => 'ܨܒܝܢܝܘܬ̈ܐ',
-'mypreferences' => 'ܨÜ\92Ü\9dÜ¢Ü\9dÜ\98ܬÌ\88Ü\9d',
+'mypreferences' => 'ܨÜ\92Ü\9dÜ¢Ü\9dÜ\98ܬÌ\88Ü\90',
 'prefs-edits' => 'ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ:',
 'prefsnologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
 'changepassword' => 'ܫܚܠܦ ܡܠܬܐ ܕܥܠܠܐ',
@@ -819,9 +827,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 +1010,21 @@ $1',
 'randomredirect-nopages' => 'ܠܝܬ ܨܘܝܒ̈ܐ ܒܚܩܠܐ ܕ"$1".',
 
 # Statistics
-'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,8 +1068,9 @@ $1',
 'mostlinked' => 'ܦܐܬܬ̈ܐ ܐܣܝܪ̈ܬܐ ܝܬܝܪ ܡܢ ܟܠ',
 'mostlinkedcategories' => 'ܣܕܪ̈ܐ ܐܣܝܪ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
 'mostlinkedtemplates' => 'ܩܠܒ̈ܐ ܐܣܝܪ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
-'mostcategories' => 'ܦܐܬܬ̈ܐ ܣܕܝܪܐ ܝܬܝܪ ܡܢ ܟܠ',
+'mostcategories' => 'ܦܐܬܬ̈ܐ ܣܕܝܪ̈ܬܐ ܝܬܝܪ ܡܢ ܟܠ',
 'mostimages' => 'ܠܦܦ̈ܐ ܐܣܝܪ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
+'mostinterwikis' => 'ܦܐܬܬ̈ܐ ܕܐܝܬܠܗܘܢ ܐܣܘܪ̈ܐ ܕܐܢܛܪܘܝܩܝ ܝܬܝܪ ܡܢ ܟܠ',
 'mostrevisions' => 'ܦܐܬܬ̈ܐ ܥܡ ܫܘܚܠܦ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
 'prefixindex' => 'ܟܠ ܦܐܬܬ̈ܐ ܥܡ ܫܪܘܝܐ',
 'prefixindex-namespace' => 'ܟܠ ܦܐܬܬ̈ܐ ܥܡ ܫܪܘܝܐ ($1 ܚܩܠܐ)',
@@ -1072,7 +1094,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
@@ -1115,9 +1137,9 @@ $1',
 'special-categories-sort-abc' => 'ܛܟܣ ܗܓܝܢܐܝܬ',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
-'deletedcontributions-title' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
-'sp-deletedcontributions-contribs' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'deletedcontributions' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
+'deletedcontributions-title' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
+'sp-deletedcontributions-contribs' => 'ܫܘܬܦܘ̈ܬܐ',
 
 # Special:LinkSearch
 'linksearch' => 'ܐܣܘܪ̈ܐ ܒܪ̈ܝܐ ܒܨܝܐ',
@@ -1140,10 +1162,6 @@ $1',
 'activeusers-hidesysops' => 'ܛܫܝ ܡܕܒܪ̈ܢܐ',
 'activeusers-noresult' => 'ܠܐ ܐܫܬܟܚ ܡܦܠܚܢ̈ܐ ܐܢܫ̈ܝܢ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ܣܓܠܐ ܕܒܪܝܬܐ ܕܡܦܠܚܢܐ',
-'newuserlogpagetext' => 'ܗܢܘ ܣܓܠܐ ܕܒܪܝܐ ܕܡܦܠܚܢ̈ܐ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ܙܕ̈ܩܐ ܕܟܢܘܫܬܐ ܕܡܦܠܚܢ̈ܐ',
 'listgrouprights-group' => 'ܟܢܘܫܬܐ',
@@ -1181,7 +1199,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'ܪ̈ܗܝܬܝ',
-'mywatchlist' => 'ܪÌ\88Ü\97Ü\9dܬÜ\9d',
+'mywatchlist' => 'ܪÌ\88Ü\97Ü\9dܬÜ\90',
 'watchlistfor2' => 'ܕ $1 $2',
 'nowatchlist' => 'ܠܝܬ ܠܟ ܡܕܡ ܒܪ̈ܗܝܬܐ ܕܝܠܟ',
 'watchlistanontext' => '$1 ܠܚܙܝܐ ܐܘ ܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܪ̈ܗܝܬܟ.',
@@ -1208,13 +1226,12 @@ $1',
 'unwatching' => 'ܠܚܝ ܪܗܝܐ...',
 
 'enotif_reset' => 'ܫܘܕܥ ܟܠ ܦܐܬܬ̈ܐ ܐܝܟ ܣܥܝܪ̈ܬܐ',
-'enotif_newpagetext' => 'ܗܕܐ ܗܝ ܦܐܬܐ ܚܕܬܐ',
 'enotif_impersonal_salutation' => 'ܡܦܠܚܢܐ {{SITENAME}}',
-'changed' => 'ܐܫܬܚܠܦܬ',
-'created' => 'ܒܪܐ',
 'enotif_lastvisited' => 'ܚܙܝ $1 ܠܟܠ ܫܘܚܠܦ̈ܐ ܡܢ ܐܡܬܝ ܕܣܘܥܪܢܐ ܐܚܪܝܐ ܕܝܠܟ.',
 'enotif_lastdiff' => 'ܚܙܝ $1 ܠܚܙܝܐ ܕܫܘܚܠܦܐ ܗܢܐ.',
 'enotif_anon_editor' => 'ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ $1',
+'created' => 'ܒܪܐ',
+'changed' => 'ܐܫܬܚܠܦܬ',
 
 # Delete
 'deletepage' => 'ܫܘܦ ܦܐܬܐ',
@@ -1236,7 +1253,7 @@ $1',
 # Rollback
 'rollbacklink' => 'ܐܦܢܝ',
 'editcomment' => "ܦܣܝܩܬ̈ܐ ܕܫܘܚܠܦܐ ܗܘܐ: \"''\$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ܬܐ ܒܝܕ [[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ܪܬܐ ܒܝܕ [[User:$1|$1]]',
 
 # Edit tokens
 'sessionfailure-title' => 'ܡܘܬܒܐ ܠܐ ܢܨܚܬ',
@@ -1294,6 +1311,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' => 'ܒܨܝ',
@@ -1307,24 +1325,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' => 'ܒܨܝ',
@@ -1345,7 +1363,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 ܨܘܝܒ̈ܐ',
 'whatlinkshere-hidetrans' => '$1 ܡܬܚܪ̈ܙܢܘܬܐ',
 'whatlinkshere-hidelinks' => '$1 ܐܣܘܪ̈ܐ',
-'whatlinkshere-hideimages' => '$1 Ü\90Ü£Ü\98ܪÜ\90 Ü\95ܨÜ\98ܪܬܐ',
+'whatlinkshere-hideimages' => '$1 Ü\90Ü£Ü\98ܪÜ\90 Ü\95ܠܦܦܐ',
 'whatlinkshere-filters' => 'ܡܨܦܝܢܝܬ̈ܐ',
 
 # Block/unblock
@@ -1370,13 +1388,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' => 'ܠܥܠܡ',
@@ -1385,7 +1404,7 @@ $1',
 'blocklink' => 'ܚܪܘܡ',
 'unblocklink' => 'ܫܩܘܠ ܚܪܡܐ',
 'change-blocklink' => 'ܫܚܠܦ ܚܪܡܐ',
-'contribslink' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'contribslink' => 'ܫܘܬܦܘ̈ܬܐ',
 'blocklogpage' => 'ܣܓܠܐ ܕܚܪܡܐ',
 'blocklogentry' => 'ܚܪܡ [[$1]] ܠܡܬܚܐ ܕ $2 $3',
 'unblocklogentry' => 'ܫܩܠ ܚܪܡܐ ܡܢ $1',
@@ -1432,6 +1451,7 @@ Do you want to change the settings?',
 # Namespace 8 related
 'allmessages' => 'ܐܓܪ̈ܬܐ ܕܛܟܣܐ',
 'allmessagesname' => 'ܫܡܐ',
+'allmessagescurrent' => 'ܟܬܒܬܐ ܗܫܝܬܐ ܕܐܓܪܬܐ',
 'allmessages-filter-legend' => 'ܡܨܦܝܢܝܬܐ',
 'allmessages-filter-all' => 'ܟܠ',
 'allmessages-prefix' => 'ܡܨܦܝܢܝܬܐ ܐܝܟ ܫܘܪܝܐ',
@@ -1470,7 +1490,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}}',
@@ -1528,6 +1548,8 @@ 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' => 'ܐܝܢ',
 
 # Image deletion
 'filedeleteerror-short' => 'ܦܘܕܐ ܒܫܝܦܐ ܕܠܦܦܐ: $1',
@@ -1541,9 +1563,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' => 'ܒܝܬ ܓܠܚܐ ܕܠܦܦ̈ܐ ܚܕܬ̈ܐ',
@@ -1553,9 +1580,19 @@ $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',
 
 # Metadata
 'metadata' => 'ܓܠܝܬ̈ܐ ܕܡܝܛܐ',
+'metadata-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ ܪ̈ܘܝܚܬܐ',
+'metadata-collapse' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ ܪ̈ܘܝܚܬܐ',
 
 # EXIF tags
 'exif-imagewidth' => 'ܦܬܘܐ',
@@ -1664,7 +1701,7 @@ $1',
 'watchlistedit-normal-legend' => 'ܠܚܝ ܟܘܢܝ̈ܐ ܡܢ ܪ̈ܗܝܬܟ',
 'watchlistedit-normal-explain' => 'ܟܘܢܝ̈ܐ ܒܪ̈ܗܝܬܟ ܡܬܚܘܝܢ ܠܬܚܬ.
 ܠܠܚܝܐ ܕܟܘܢܝܐ, ܫܘܕܥ ܥܠ ܣܢܕܘܩܐ ܕܕܦܢܗ, ܘܕܘܫ "{{int:Watchlistedit-normal-submit}}".
-ܡܨÜ\90 Ü\90ܢܬ Ü\95[[Special:EditWatchlist/raw|ܬܫÜ\9aܠܦ ܪ̈ܗܝܬܐ ܦܛܝܪ̈ܬܐ]].',
+ܡܨܬ Ü\95[[Special:EditWatchlist/raw|ܬܫÜ\9aܠܦܬ ܪ̈ܗܝܬܐ ܦܛܝܪ̈ܬܐ]].',
 'watchlistedit-normal-submit' => 'ܠܚܝ ܟܘܢܝܐ',
 'watchlistedit-normal-done' => '{{PLURAL:$1|ܚܕ ܟܘܢܝܐ ܐܬܠܚܝ|$1 ܟܘܢܝ̈ܐ ܐܬܠܚܘܢ}} ܡܢ ܪ̈ܗܝܬܟ:',
 'watchlistedit-raw-title' => 'ܫܚܠܦ ܪ̈ܗܝܬܐ ܦܛܝܪ̈ܬܐ',
@@ -1695,16 +1732,18 @@ $1',
 'fileduplicatesearch-legend' => 'ܒܨܝܐ ܥܠ ܥܘܦܦܐ',
 'fileduplicatesearch-filename' => 'ܫܡܐ ܕܠܦܦܐ:',
 'fileduplicatesearch-submit' => 'ܒܨܝ',
+'fileduplicatesearch-info' => '$1 × $2 ܦܩܣܠ<br /> ܥܓܪܐ ܕܠܦܦܐ: $3<br /> ܐܕܫܐ ܕ MIME: $4',
 
 # Special:SpecialPages
 'specialpages' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ',
 'specialpages-note' => '----
 * ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܥܝܕ̈ܝܬܐ.
 * <span class="mw-specialpagerestricted">ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܕܩܝܘܡ̈ܐ ܒܠܚܘܕ.</span>',
-'specialpages-group-maintenance' => 'ܬܫܪܪܐ ܕܚܕܬܘܬܐ',
+'specialpages-group-maintenance' => 'ܬܫܪܪ̈ܐ ܕܚܕܬܘܬܐ',
 'specialpages-group-other' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܐܚܪ̈ܢܝܬܐ',
 'specialpages-group-login' => 'ܥܘܠ / ܒܪܝ ܚܘܫܒܢܐ',
 'specialpages-group-changes' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܘܣܓܠ̈ܐ',
+'specialpages-group-media' => 'ܬܫܪܪ̈ܐ ܕܡܝܕܝܐ ܘܐܣܩܬ̈ܐ',
 'specialpages-group-users' => 'ܡܦܠܚܢ̈ܐ ܘܙܕ̈ܩܐ',
 'specialpages-group-highuse' => 'ܦܐܬܬ̈ܐ ܕܡܬܚܫܚܢܘܬܐ ܥܠܝܬܐ',
 'specialpages-group-pages' => 'ܡܟܬܒܘܬ̈ܐ ܕܦܐܬܬ̈ܐ',
@@ -1716,6 +1755,7 @@ $1',
 'blankpage' => 'ܦܐܬܐ ܣܦܝܩܬܐ',
 
 # Special:Tags
+'tags' => 'ܚܬ̈ܡܐ ܕܫܘܚܠܦܐ ܬܪܝܨܐ',
 'tag-filter-submit' => 'ܡܨܦܝܢܝܬܐ',
 'tags-edit' => 'ܫܚܠܦ',
 'tags-hitcount' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ|ܫܘܚܠܦ̈ܐ}}',
@@ -1740,11 +1780,12 @@ $1',
 'logentry-move-move-noredirect' => '$1 ܫܢܐ ܦܐܬܐ ܕ $3 ܠ $4 ܕܠܐ ܫܒܩܐ ܦܐܬܐ ܕܨܘܝܒܐ',
 'logentry-move-move_redir' => '$1 ܫܢܐ ܦܐܬܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܦܐܬܐ ܕܨܘܝܒܐ',
 'logentry-move-move_redir-noredirect' => '$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' => 'ܡܠܬܐ ܕܥܠܠܐ ܐܫܬܕܪܬ ܒܝܕ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
+'rightsnone' => '(ܠܐ ܡܕܡ)',
 
 # Feedback
 'feedback-subject' => 'ܡܠܘܐܐ:',
index ab5b784..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)',
 
@@ -663,7 +660,6 @@ Fey ñi chumngen mülelu ($2 fey ñi chumngen wülngiñ) pengeli tüfa mew.',
 'watching' => 'Llaytumekey...',
 'unwatching' => 'Llaytumekewelay...',
 
-'enotif_newpagetext' => 'Tüfachi ta we pakina',
 'enotif_impersonal_salutation' => '{{SITENAME}} kellufe',
 'created' => 'Llituy',
 
@@ -976,4 +972,7 @@ Ka dungu ellkangeay wünedullin reke.
 # HTML forms
 'htmlform-selectorother-other' => 'Kakelu',
 
+# New logging system
+'rightsnone' => 'chemnorume',
+
 );
index f90ff3f..c4014a1 100644 (file)
@@ -420,9 +420,6 @@ ossabab lli ĝtah hwwa "\'\'$2\'\'".',
 ila bghiti tqdr tstamr tstaml {{SITENAME}}  kamjhol , olla ila bghiti <span class='plainlinks'>[$1 tdkhl aawtani]</span> bnafs smiya ola bsmiya khra.
 
 tqdr tchof baad sfahi bhal ila msjl hta tfrgh lcache dyalk",
-'welcomecreation' => '== mrhba bik, $1! ==
-lcont dyalk raha mojoda
-matnsach tbddl[[Special:Preferences|{{SITENAME}} tfdilat dyal]].',
 'yourname' => 'smiṫ l-mosṫĥdim:',
 'yourpassword' => 'Saroṫ:',
 'yourpasswordagain' => 'aaawd ktb lmot de passe dyalk',
@@ -759,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.',
@@ -1190,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",
@@ -1612,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>
@@ -1694,14 +1688,12 @@ L-Kṫaba dyal had ṣ-ṣefḫa ġaṫban '''ġliḍa''' fe [[Special:RecentCha
 
 'enotif_mailer' => '{{SITENAME}} nidam lbaridi',
 'enotif_reset' => 'Qiyyed ṣ-ṣefḫaṫ bḫal la zerṫihom kamlin',
-'enotif_newpagetext' => 'ṣfḫa jdida di.',
 'enotif_impersonal_salutation' => 'Mosṫeḫdim {{SITENAME}}',
-'changed' => 'Beddel',
-'created' => "tnch'at",
-'enotif_subject' => 'Ṣ-Ṣefḫa $PAGETITLE dyal {{SITENAME}} $CHANGEDORCREATEDha $PAGEEDITOR',
 '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",
@@ -2720,5 +2712,6 @@ jrreb l-ĝṛḍ l-ĝadi.',
 '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 022c04a..1155020 100644 (file)
@@ -17,6 +17,8 @@
 
 $fallback = 'ar';
 
+$rtl = true;
+
 $namespaceNames = array(
        NS_MEDIA            => 'ميديا',
        NS_SPECIAL          => 'خاص',
@@ -315,7 +317,7 @@ $messages = array(
 'tog-editsectiononrightclick' => 'اسمح بـ تعديل الاجزاء لما تعمل right-click بـ الماوس على عناوين الاجزاء (بيحتاج JavaScript)',
 'tog-showtoc' => 'بين جدول المحتويات (بتاع الصفح اللى فيها اكتر من 3 عناوين)',
 'tog-rememberpassword' => ' (لمدة   $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا',
-'tog-watchcreations' => 'زوّد الصفح اللى ابتديتها على ليستة الصفح اللى باراقبها',
+'tog-watchcreations' => 'زوّد الصفح اللى ابتديتها على ليستة الصفح اللى باراقبها.',
 'tog-watchdefault' => 'زوّد الصفح اللى باعدلها على ليستة الصفح اللى باراقبها',
 'tog-watchmoves' => 'زوّد الصفح اللى بانقلها على ليستة الصفح اللى باراقبها',
 'tog-watchdeletion' => 'زوّد الصفح اللى بامسحها على ليستة الصفح اللى باراقبها',
@@ -323,15 +325,16 @@ $messages = array(
 'tog-previewontop' => 'بين الپروڤه قبل علبة التعديل',
 'tog-previewonfirst' => 'بين البروفة عند أول تعديل',
 'tog-nocache' => 'عطّل تخزين البراوزر للصفحه',
-'tog-enotifwatchlistpages' => 'ابعت لى ايميل لما تتغير صفحه فى لستة الصفحات اللى باراقبها',
+'tog-enotifwatchlistpages' => '
+ابعت لى ايميل لما تتغير صفحه فى لستة الصفحات اللى باراقبها',
 'tog-enotifusertalkpages' => 'ابعتلى ايميل لما صفحة مناقشتى تتغيير',
-'tog-enotifminoredits' => 'ابعتلى ايميل للتعديلات الصغيره للصفحات',
+'tog-enotifminoredits' => 'ابعتلى ايميل  عن التعديلات الصغيره للصفحات',
 'tog-enotifrevealaddr' => 'بين الايميل بتاعى فى ايميلات الاعلام',
 'tog-shownumberswatching' => 'بين عدد اليوزرز المراقبين',
 'tog-oldsig' => 'الامضا دلوقتى:',
 'tog-fancysig' => 'امضا خام (من غير لينك أوتوماتيك)',
-'tog-externaleditor' => 'استعÙ\85Ù\84 Ù\85حرر Ø®Ø§Ø±Ø¬Ù\89 Ø§Ù\81تراضÙ\8aا',
-'tog-externaldiff' => 'استعÙ\85Ù\84 Ù\81رÙ\82 Ø®Ø§Ø±Ø¬Ù\89 Ø§Ù\81تراضÙ\8aا',
+'tog-externaleditor' => 'استخدÙ\85 Ù\85حرر Ø®Ø§Ø±Ø¬Ù\89 Ø¨Ø´Ù\83Ù\84 Ø§Ù\81تراضÙ\89 (Ù\84Ù\84خبرا Ø¨Ø³Ø\8c Ù\8aحتاج Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø®Ø§ØµØ© Ø¹Ù\84Ù\89 Ù\83Ù\88Ù\85بÙ\8aÙ\88ترÙ\83) ([//www.mediawiki.org/wiki/Manual:External_editors Ù\84Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84Ù\85عÙ\84Ù\88Ù\85ات].)',
+'tog-externaldiff' => 'استخدÙ\85 Ù\81رÙ\82 Ø®Ø§Ø±Ø¬Ù\89 Ø¨Ø´Ù\83Ù\84 Ø§Ù\81تراضÙ\89 (Ù\84Ù\84خبرا Ø¨Ø³Ø\8c Ù\8aحتاج Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø®Ø§ØµØ© Ø¹Ù\84Ù\89 Ù\83Ù\88Ù\85بÙ\8aÙ\88ترÙ\83) ([//www.mediawiki.org/wiki/Manual:External_editors Ù\84Ù\85عÙ\84Ù\88Ù\85ات Ø§Ù\83تر].)',
 'tog-showjumplinks' => 'خلى وصلات "روح لـ" تكون شغالة.',
 'tog-uselivepreview' => 'استخدم البروفة السريعة (جافاسكريبت) (تجريبي)',
 'tog-forceeditsummary' => 'نبهنى عند تدخيل ملخص للتعديل  فاضي',
@@ -433,8 +436,8 @@ $messages = array(
 'newwindow' => '(بتفتح ويندو جديده)',
 'cancel' => 'كانسل',
 'moredotdotdot' => 'اكتر...',
-'mypage' => 'صفحتى',
-'mytalk' => 'Ù\85Ù\86اÙ\82شاتÙ\89',
+'mypage' => 'صفحه',
+'mytalk' => 'Ù\83Ù\84اÙ\85',
 'anontalk' => 'المناقشة مع عنوان الأيبى دا',
 'navigation' => 'استكشاف',
 'and' => '&#32;و',
@@ -682,9 +685,6 @@ $2',
 
 تقدر تكمل استعمال {{SITENAME}} على انك مجهول، أو <span class='plainlinks'>[$1 الدخول مرة تانيه]</span> بنفس الاسم أو باسم تاني.
 ممكن تشوف بعض الصفحات  كأنك متسجل ، و دا علشان استعمال الصفحات المتخبية فى المتصفح بتاعك.",
-'welcomecreation' => '== اهلاً و سهلا يا $1! ==
-اتفتحلك حساب.
-ما تنساش تغير [[Special:Preferences|تفضيلاتك في {{SITENAME}}]].',
 'yourname' => 'اليوزرنيم:',
 'yourpassword' => 'الباسوورد:',
 'yourpasswordagain' => 'اكتب الباسورد تاني:',
@@ -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' => 'دى لستة بمجموعات اليوزرز المتعرفة فى الويكى دا، بالحقوق اللى معاهم.
@@ -2107,11 +2104,7 @@ PICT # misc.
 
 'enotif_mailer' => 'نظام {{SITENAME}} البريدى للإخطارات',
 'enotif_reset' => 'علم على كل الصفحات كأنك خلاص زرتها',
-'enotif_newpagetext' => 'دى صفحه جديده.',
 'enotif_impersonal_salutation' => 'يوزر {{SITENAME}}',
-'changed' => 'اتغيرت',
-'created' => 'إتنشأت',
-'enotif_subject' => 'صفحة {{SITENAME}} $PAGETITLE تم $CHANGEDORCREATED بواسطة $PAGEEDITOR',
 'enotif_lastvisited' => 'شوف $1 لمراجعة كل التغييرات اللى حصلت من أخر زيارة ليك.',
 'enotif_lastdiff' => 'شوف $1 علشان تبص على التغيير دا.',
 'enotif_anon_editor' => 'يوزر مش معروف $1',
@@ -2143,6 +2136,8 @@ $UNWATCHURL
 
 الfeedback و مساعده اكتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'إتنشأت',
+'changed' => 'اتغيرت',
 
 # Delete
 'deletepage' => 'امسح الصفحه',
@@ -3481,6 +3476,7 @@ $5
 'revdelete-restricted' => 'طبق التعليمات على السيسوبات',
 'revdelete-unrestricted' => 'شيل الضوابط من على السيسوبات',
 'newuserlog-byemail' => 'الباسورد اتبعتت بالايميل',
+'rightsnone' => '(فاضى)',
 
 # Search suggestions
 'searchsuggest-search' => 'تدوير',
index 8935082..76bd39e 100644 (file)
@@ -316,7 +316,7 @@ $messages = array(
 'cancel' => 'বাতিল কৰক',
 'moredotdotdot' => 'অধিক...',
 'mypage' => 'মোৰ পৃষ্ঠা',
-'mytalk' => 'মà§\8bৰ à¦\95থা-বতৰা',
+'mytalk' => 'কথা-বতৰা',
 'anontalk' => 'এই IP-ত যোগাযোগ কৰক',
 'navigation' => 'দিকদৰ্শন',
 'and' => '&#32;আৰু',
@@ -348,6 +348,7 @@ $messages = array(
 'namespaces' => 'নামস্থান',
 'variants' => 'বিকল্পসমূহ',
 
+'navigation-heading' => 'সা-সঁজুলি',
 'errorpagetitle' => 'ভুল',
 'returnto' => '$1লৈ ঘূৰি যাওক ।',
 'tagline' => '{{SITENAME}}ৰ পৰা',
@@ -555,7 +556,7 @@ $1',
 'actionthrottled' => 'কাৰ্য লেহেম কৰা হৈছে',
 'actionthrottledtext' => 'স্পাম ৰোধ কৰিবলৈ এই ক্ৰিয়াতো কম সময়ৰ ভিতৰত বহু বেছি বাৰ কৰাতো ৰোধ কৰা হৈছে, আৰু আপুনি ইতিমধ্যে সেই সীমা অতিক্ৰম কৰিলে।
 অনুগ্ৰহ কৰি কিছু সময় পাছত চেষ্টা কৰক।',
-'protectedpagetext' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bৰ à¦¸à¦®à§\8dপাদনা à§°à§\8bধ à¦\95ৰিবলà§\88 সুৰক্ষিত কৰা হৈছে।',
+'protectedpagetext' => 'সমà§\8dপাদনা à§°à§\8bধ à¦\95ৰিবলà§\88 à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সুৰক্ষিত কৰা হৈছে।',
 'viewsourcetext' => 'আপুনি এই পৃষ্ঠাটোৰ উৎস চাব আৰু নকল কৰিব পাৰে',
 'viewyourtext' => "আপুনি '''আপোনাৰ সম্পাদনাসমূহ'''ৰ উৎস চাব আৰু এই পৃষ্ঠালৈ নকল কৰিব পাৰে:",
 'protectedinterface' => 'এই পৃষ্ঠাই ৱিকি ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা প্ৰদান কৰে আৰু ইয়াক সুৰক্ষিত কৰি ৰখা হৈছে।
@@ -589,7 +590,8 @@ $2',
 
 আপুনি বেনামী ভাবেও {{SITENAME}} ব্যৱহাৰ কৰিব পাৰে, অথবা আকৌ সেই একে বা বেলেগ নামেৰে <span class='plainlinks'>[$1 প্ৰৱেশ]</span> কৰিব পাৰে।
 মন কৰিব যে যেতিয়ালৈকে আপোনাৰ ব্ৰাউজাৰৰ অস্থায়ী-স্মৃতি (cache memory) খালী নকৰে, তেতিয়ালৈকে কিছুমান পৃষ্ঠাত আপুনি প্ৰৱেশ কৰা বুলি দেখুৱাই থাকিব পাৰে।",
-'welcomecreation' => '== আদৰিছোঁ, $1! ==
+'welcomeuser' => 'আদৰিছোঁ, $1!',
+'welcomecreation-msg' => '== আদৰিছোঁ, $1! ==
 আপোনাৰ সদস্যভুক্তি হৈ গ’ল ।
 [[Special:Preferences|{{SITENAME}}ৰ পছন্দসমূহ]]ত আপোনাৰ পছন্দমতে ব্যক্তিগতকৰণ কৰি ল’বলৈ নাপাহৰে যেন ।',
 'yourname' => 'সদস্যনাম:',
@@ -745,6 +747,7 @@ $2
 'changeemail-oldemail' => 'বৰ্তমানৰ ই-মেইল ঠিকনা:',
 'changeemail-newemail' => 'নতুন ই-মেইল ঠিকনা:',
 'changeemail-none' => '(নাই)',
+'changeemail-password' => 'আপোনাৰ  {{SITENAME}} গুপ্তশব্দ:',
 'changeemail-submit' => 'ই-মেইল ঠিকনা সলনি কৰক',
 'changeemail-cancel' => 'বাতিল কৰক',
 
@@ -934,7 +937,6 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'template-protected' => '(সুৰক্ষিত)',
 'template-semiprotected' => '(অৰ্ধ-সুৰক্ষিত)',
 'hiddencategories' => 'এই পৃষ্ঠা {{PLURAL:$1|১-টা নিহিত শ্ৰেণীৰ|$1-টা নিহিত শ্ৰেণীৰ}} সদস্য:',
-'nocreatetitle' => 'পৃষ্ঠা সৃষ্টি সীমিত',
 'nocreatetext' => '{{SITENAME}}ত নতুন পৃষ্ঠা সৃষ্টিৰ ক্ষমতা সীমাবদ্ধ কৰা হৈছে।
 আপুনি ঘূৰি গৈ বৰ্তমানে থকা পৃষ্ঠা এটা সম্পাদনা কৰিব পাৰে, বা [[Special:UserLogin|নতুন সদস্যভৰ্তি হওক/ প্ৰবেশ কৰক]] ।',
 'nocreate-loggedin' => 'নতুন পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই ।',
@@ -959,6 +961,7 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'edit-already-exists' => "নতুন পৃষ্ঠা সৃষ্টি কৰা নহ'ল ।
 পৃষ্ঠাখন ইতিমধ্যে আছেই ।",
 'defaultmessagetext' => 'সাধাৰণ বাৰ্তা পাঠ্য',
+'content-failed-to-parse' => '$1 মডেলৰ বাবে $2ৰ তথ্য নিকা কৰিব পৰা নগ’ল: $3',
 'invalid-content-data' => 'অবৈধ সমল তথ্য',
 'content-not-allowed-here' => '[[$2]] পৃষ্ঠাত "$1" সমল অনুমোদিত নহয়',
 
@@ -1180,6 +1183,11 @@ $1",
 'editundo' => 'পূৰ্ববত কৰক',
 'diff-multi' => '({{PLURAL:$2|এজন সদস্যৰ|$2জন সদস্যৰ}} দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখোৱা হোৱা নাই)',
 'diff-multi-manyusers' => '({{PLURAL:$2|এজনতকৈ|$2-জনতকৈ}} অধিক সদস্যৰ দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই)',
+'difference-missing-revision' => '{{PLURAL:$2|এটা সংস্কৰণ|$2 সংস্কৰণসমূহৰ}} সংশোধনৰ পাৰ্থক্য  ($1) {{PLURAL:$2| পোৱা নগ’ল}}।
+
+
+সাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন অভিলেখ] চালে অধিক তথ্য পাব।',
 
 # Search results
 'searchresults' => 'অনুসন্ধানৰ ফলাফল',
@@ -1257,7 +1265,7 @@ $1",
 
 # Preferences page
 'preferences' => 'পছন্দসমূহ',
-'mypreferences' => 'মà§\8bৰ à¦ªà¦\9bনà§\8dদসমà§\82হ',
+'mypreferences' => 'পছন্দসমূহ',
 'prefs-edits' => 'সম্পাদনাৰ সংখ্যা:',
 'prefsnologin' => 'প্ৰৱেশ কৰা নাই',
 'prefsnologintext' => 'আপোনাৰ পছন্দ সলনি কৰিবলৈ হ’লে <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} প্ৰৱেশ]</span> কৰাতো আৱশ্যক।',
@@ -1278,7 +1286,7 @@ $1",
 'prefs-watchlist-edits-max' => 'সৰ্বোচ্চ নম্বৰ: ১০০০',
 'prefs-watchlist-token' => 'লক্ষ্যতালিকা টোকেন:',
 'prefs-misc' => 'অন্যান্য',
-'prefs-resetpass' => 'à¦\97à§\81পà§\8dতশবà§\8dদ à¦লনি কৰক',
+'prefs-resetpass' => 'à¦\97à§\81পà§\8dতশবà§\8dদ à¦¸লনি কৰক',
 'prefs-changeemail' => 'ই-মেইল ঠিকনা সলনি কৰক',
 'prefs-setemail' => 'এটা ই-মেইল ঠিকনা দিয়ক',
 'prefs-email' => 'ই-মেইল বিকল্প',
@@ -1332,9 +1340,9 @@ $1",
 'prefs-emailconfirm-label' => 'ইমেইল নিশ্চিতকৰণ:',
 'prefs-textboxsize' => 'সম্পাদনা ৱিণ্ড’ৰ আকাৰ',
 'youremail' => 'আপোনাৰ ই-মেইল *',
-'username' => 'সদস্যনাম:',
-'uid' => 'সদস্য চিহ্ন:',
-'prefs-memberingroups' => 'এই {{PLURAL:$1|গোটৰ|গোটবোৰৰ}} সদস্য:',
+'username' => '{{GENDER:$1|সদস্যনাম}}:',
+'uid' => '{{GENDER:$1|User}} চিহ্ন:',
+'prefs-memberingroups' => '{{PLURAL:$1|গোট|গোটসমূহৰ}} {{GENDER:$2|সদস্য}} :',
 'prefs-registration' => 'পঞ্জীয়ন কৰাৰ সময়:',
 'yourrealname' => 'প্ৰকৃত নাম:',
 'yourlanguage' => 'ভাষা:',
@@ -1484,12 +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লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত হ’ল',
-'rightsnone' => '(নাই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'এই পৃষ্ঠা পঢ়ক',
@@ -1726,6 +1735,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 লৈ প্ৰতিলিপি কৰিব পৰা নগ’ল',
@@ -2115,9 +2125,9 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'linksearch-pat' => 'অনুসন্ধান আৰ্হি:',
 'linksearch-ns' => 'নামস্থান:',
 'linksearch-ok' => 'অনুসন্ধান',
-'linksearch-text' => 'ৱাইল্ডকাৰ্ডসমূহ যেনে "*.wikipedia.org" ব্যৱহাৰ কৰিব পাৰি।
-অন্তত এটা উচ্চ-স্তৰৰ ডমেইনৰ প্ৰয়োজন, উদাহৰণস্বৰূপ "*.org"। <br />
-সমৰ্থিত প্ৰটোকলসমূহ: <code>$1</code> (ইয়াৰ এটাকো নিজৰ সন্ধান যোগ নকৰিব)।',
+'linksearch-text' => "ৱাইল্ডকাৰ্ডসমূহ যেনে \"*.wikipedia.org\" ব্যৱহাৰ কৰিব পাৰি।
+অন্তত এটা উচ্চ-স্তৰৰ ডমেইনৰ প্ৰয়োজন, উদাহৰণস্বৰূপ \"*.org\"। <br />
+সমৰ্থিত {{PLURAL:\$2|প্ৰ'ট'ক'ল|প্ৰ'ট'ক'লসমূহ}} : <code>\$1</code> (কোনো প্ৰ'ট'ক'ল নিৰ্দিষ্ট নকৰিলে http:// সূচাব)।",
 'linksearch-line' => '$2 পৰা $1 সংযোগ কৰা হৈছে',
 'linksearch-error' => "ৱাইল্ডকাৰ্ড কেৱল হ'ষ্টনামৰ আৰম্ভণিতহে দেখা যাব ।",
 
@@ -2136,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' => 'এই ৱিকিত থকা গোটসমূহৰ তালিকা সেইবোৰৰ প্ৰৱেশাধিকাৰসহ তলত দিয়া হ’ল ।
@@ -2166,7 +2172,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'emailuser-title-target' => '{{GENDER:$1|সদস্যজনক}} ইমেইল পঠিয়াওক',
 'emailuser-title-notarget' => 'ব্যৱহাৰকাৰী ই-পত্ৰ প্ৰেৰণ কৰক',
 'emailpage' => 'ই-পত্ৰ ব্যৱহাৰকাৰী',
-'emailpagetext' => 'তলৰ প্ৰপত্ৰখন ব্যৱহাৰ কৰি আপুনি এই সদস্যজনলৈ ই-মেইল পঠাব পাৰে ।
+'emailpagetext' => 'তলৰ প্ৰপত্ৰখন ব্যৱহাৰ কৰি আপুনি এই {{GENDER:$1|সদস্যজনলৈ}} ই-মেইল পঠাব পাৰে ।
 আপুনি [[Special:Preferences|আপোনাৰ সদস্য পছন্দসমূহ]]ত প্ৰৱেশ কৰা ই-মেইল ঠিকনাটো প্ৰেৰকৰ ঠিকনা হিছাপে দেখা যাব, যাতে মেইলৰ প্ৰাপকে আপোনাক উত্তৰ দিব পাৰে ।',
 'usermailererror' => 'মেইল বিষয়বস্তুৰ ত্ৰুটি:',
 'defemailsubject' => '"$1" সদস্যৰ পৰা {{SITENAME}} ই-মেইল',
@@ -2198,15 +2204,15 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 
 # Watchlist
 'watchlist' => 'মোৰ লক্ষ্য-তালিকা',
-'mywatchlist' => 'মà§\8bৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95া',
+'mywatchlist' => 'লক্ষ্য-তালিকা',
 'watchlistfor2' => '$1 ৰ কাৰণে($2)',
 'nowatchlist' => 'আপোনাৰ নিৰীক্ষণ তালিকাত একো নাই ।',
 'watchlistanontext' => 'আপোনাৰ লক্ষ্য তালিকাত থকা বস্তুবোৰ চাবলৈ বা সম্পাদনা কৰিবলৈ অনুগ্ৰহ কৰি $1 কৰক।',
 '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' => 'চকু ৰাখক',
@@ -2234,11 +2240,17 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 
 'enotif_mailer' => '{{SITENAME}} জাননী ই-পত্ৰ প্ৰেৰক',
 'enotif_reset' => 'সকলো পৃষ্ঠা পৰিদৰ্শিত বুলি চিহ্নিত কৰক',
-'enotif_newpagetext' => 'এইখন এখন নতুন পৃষ্ঠা।',
 'enotif_impersonal_salutation' => '{{SITENAME}} সদস্য',
-'changed' => 'সলোৱা হৈছে',
-'created' => 'সৃষ্টি কৰা হ’ল',
-'enotif_subject' => '{{SITENAME}}ৰ $PAGETITLE পৃষ্ঠাখন $PAGEEDITORৰ দ্বাৰা $CHANGEDORCREATED',
+'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',
@@ -2272,6 +2284,8 @@ $UNWATCHURL
 
 প্ৰতিক্ৰিয়া আৰু অধিক সহযোগিতাৰ বাবে:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'সৃষ্টি কৰা হ’ল',
+'changed' => 'সলোৱা হৈছে',
 
 # Delete
 'deletepage' => 'পৃষ্ঠা বিলোপ কৰক',
@@ -2461,9 +2475,9 @@ $1',
 'blanknamespace' => '(মুখ্য)',
 
 # Contributions
-'contributions' => 'সদস্যৰ বৰঙণিসমূহ',
+'contributions' => '{{GENDER:$1|সদস্যৰ}} বৰঙণিসমূহ',
 'contributions-title' => '$1ৰ বৰঙণিসমূহ',
-'mycontris' => 'মà§\8bৰ à¦¬à§°à¦\99ণিসমà§\82হ',
+'mycontris' => 'বৰঙণিসমূহ',
 'contribsub2' => '$1 ৰ কাৰণে ($2)',
 'nocontribs' => 'এই গুণসমূহৰ লগত মিল থকা কোনো সালসলনি পোৱা নগ’ল ।',
 'uctop' => '(ওপৰত)',
@@ -2504,7 +2518,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 পুননিৰ্দেশনাসমূহ',
 'whatlinkshere-hidetrans' => '$1 ট্ৰেন্সক্লুস্বনসমূহ',
 'whatlinkshere-hidelinks' => '$1 টা সংযোগ',
-'whatlinkshere-hideimages' => '$1 à¦\9aিতà§\8dৰ সংযোগসমূহ',
+'whatlinkshere-hideimages' => '$1 à¦«à¦¾à¦\87ল সংযোগসমূহ',
 'whatlinkshere-filters' => 'ছেকনী',
 
 # Block/unblock
@@ -2739,6 +2753,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' => 'নতুন ফাইলৰ এক্সটেনছনটো ইয়াৰ প্ৰকাৰৰ লগত মিলা নাই',
@@ -2974,7 +2989,7 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 
 # Info page
 'pageinfo-title' => '"$1" ৰ তথ্য',
-'pageinfo-not-current' => "কেৱল সাম্প্ৰতিক সংশোধনৰ বাবে তথ্য দৃশ্যমান হ'ব পাৰে।",
+'pageinfo-not-current' => 'ক্ষমা কৰিব, পুৰণা সংশোধনৰ বাবে এই তথ্য মুকলি কৰাটো সম্ভৱ নহয়।',
 'pageinfo-header-basic' => 'প্ৰাথমিক তথ্য',
 'pageinfo-header-edits' => 'ইতিহাস সম্পাদনা কৰক',
 'pageinfo-header-restrictions' => 'পৃষ্ঠা সুৰক্ষা',
@@ -2983,6 +2998,7 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'pageinfo-default-sort' => 'ডিফল্ট চৰ্ট কী',
 'pageinfo-length' => 'পৃষ্ঠাৰ দৈৰ্ঘ্য (বাইটত)',
 'pageinfo-article-id' => 'পৃষ্ঠা ID',
+'pageinfo-language' => 'পৃষ্ঠাত সন্নিবিষ্ট ভাষা',
 'pageinfo-robot-policy' => 'সন্ধান ইঞ্জিনৰ স্থিতি',
 'pageinfo-robot-index' => 'ইনডেক্স উপযোগী',
 'pageinfo-robot-noindex' => 'ইনডেক্সৰ অনুপযোগী',
@@ -3021,6 +3037,8 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'markedaspatrollederror' => 'নিৰীক্ষিত বুলি চিহ্নিত কৰিব নোৱাৰি',
 'markedaspatrollederrortext' => 'নিৰীক্ষণ কৰা বুলি চিহ্নিত কৰিবলৈ আপুনি এটা পুনৰীক্ষণ ধাৰ্য্য কৰিব লাগিব।',
 'markedaspatrollederror-noautopatrol' => 'আপোনাক নিজৰ পৰিৱৰ্তনসমূহ নিৰিক্ষিত বুলি চিহ্নিত কৰাৰ অনুমতি নাই।',
+'markedaspatrollednotify' => '$1ৰ এই সম্পাদনা নিৰীক্ষিতৰূপে চিহ্নিত কৰা হ’ল।',
+'markedaspatrollederrornotify' => 'নিৰীক্ষণবিহীন ৰূপে চিহ্নিত কৰা হ’ল',
 
 # Patrol log
 'patrol-log-page' => 'নিৰীক্ষণ অভিলেখ',
@@ -3054,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।",
@@ -3084,6 +3103,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 ঘন্টা|$1 ঘন্টা}}',
 'days' => '{{PLURAL:$1|$1 দিন|$1 দিন}}',
 'ago' => '$1 আগেয়ে',
+'just-now' => 'এইমাত্ৰ',
 
 # Bad image list
 'bad_image_list' => 'The format is as follows:
@@ -3697,6 +3717,7 @@ $5
 'version-license' => 'অনুজ্ঞাপত্ৰ',
 'version-poweredby-credits' => "এই ৱিকি '''[//www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.",
 'version-poweredby-others' => 'অন্য',
+'version-credits-summary' => 'আমি নিম্নোক্ত ব্যক্তিসকলক তেওঁলোকে [[Special:Version|মিডিয়াৱিকি]]লৈ দিয়া দিয়া বৰঙনিৰ বাবে চিনাকী  কৰিব বিচাৰিছো।',
 'version-license-info' => "মিডিয়াৱিকি এটা বিনামূলীয়া চফ্টৱেৰ; আপুনি Free Software Foundation -ৰ দ্বাৰা প্ৰকাশিত GNU General Public License -ৰ চুক্তিসমূহৰ অন্তৰ্গত ইয়াক পুনৰ বিতৰণ কৰিব পাৰিব অথবা সলনি কৰিব পাৰিব; হয়তো অনুজ্ঞাপত্ৰৰ সংস্কৰণ ২ 
 অথবা (আপোনাৰ বিকল্পত) যিকোনো পৰৱৰ্তী সংস্কৰণ।
 
@@ -3839,11 +3860,15 @@ $5
 'logentry-move-move_redir-noredirect' => 'পুনৰ্নিৰ্দেশ নেৰাকৈ এটা পুনৰ্নিৰ্দেশৰ ওপৰেৰে পৃষ্ঠা $3 -ৰ পৰা $4 $1 স্থানান্তৰ কৰা হল',
 'logentry-patrol-patrol' => "পৃষ্ঠা $3 -ৰ $1 চিহ্নিত সংশোধন $4 নিৰীক্ষণ কৰা হ'ল",
 'logentry-patrol-patrol-auto' => "পৃষ্ঠা $3 -ৰ $1 চিহ্নিত সংশোধন $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' => "$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 এটা বাগ ৰিপ\'ৰ্ট কৰক]।
index 708fcd8..c6b25e0 100644 (file)
@@ -189,11 +189,12 @@ $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...',
-'mypage' => 'La mio páxina',
-'mytalk' => 'El mio alderique',
+'morenotlisted' => 'Más na llista...',
+'mypage' => 'Páxina',
+'mytalk' => 'Alderique',
 'anontalk' => 'Alderique pa esta IP',
 'navigation' => 'Navegación',
 'and' => '&#32;y',
@@ -225,6 +226,7 @@ $messages = array(
 'namespaces' => 'Espacios de nome',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menú de navegación',
 'errorpagetitle' => 'Error',
 'returnto' => 'Tornar a $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -274,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:',
@@ -306,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.",
@@ -422,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.
@@ -435,7 +437,7 @@ Consulta: $2',
 'actionthrottled' => 'Aición llendada',
 'actionthrottledtext' => 'Como midida anti-spam, nun se pue repetir esta aición munches vegaes en pocu tiempu, y trespasasti esi llímite.
 Por favor vuelvi intentalo nunos minutos.',
-'protectedpagetext' => 'Esta páxina ta candada pa torgar la so edición.',
+'protectedpagetext' => 'Esta páxina ta candada pa torgar ediciones y otres aiciones.',
 'viewsourcetext' => "Pues ver y copiar la fonte d'esta páxina:",
 'viewyourtext' => "Pues ver y copiar la fonte de '''les tos ediciones''' d'esta páxina:",
 'protectedinterface' => "Esta páxina proporciona'l testu de la interfaz del software d'esta wiki, y ta candada pa torgar abusos.
@@ -470,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.",
-'welcomecreation' => "== ¡Bienllegáu, $1! ==
-Creóse la to cuenta.
+'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' => 'Clave:',
-'yourpasswordagain' => 'Escribi otra vuelta la clave:',
+'yourpassword' => 'Contraseña:',
+'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:',
@@ -487,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',
@@ -644,6 +646,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',
 
@@ -745,7 +748,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.
@@ -832,7 +835,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.',
@@ -903,7 +905,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',
@@ -1005,7 +1007,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',
@@ -1073,7 +1075,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).
@@ -1154,7 +1156,7 @@ Se puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FU
 
 # Preferences page
 'preferences' => 'Preferencies',
-'mypreferences' => 'Les mios preferencies',
+'mypreferences' => 'Preferencies',
 'prefs-edits' => "Númberu d'ediciones:",
 'prefsnologin' => 'Non identificáu',
 'prefsnologintext' => 'Necesites tar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} identificáu]</span> pa camudar les preferencies d\'usuariu.',
@@ -1230,9 +1232,9 @@ Esto nun se pue desfacer.',
 'prefs-emailconfirm-label' => 'Confirmación del corréu:',
 'prefs-textboxsize' => "Tamañu de la ventana d'edición",
 'youremail' => 'Corréu electrónicu:',
-'username' => "Nome d'usuariu:",
-'uid' => "Númberu d'usuariu:",
-'prefs-memberingroups' => 'Miembru {{PLURAL:$1|del grupu|de los grupos}}:',
+'username' => "Nome d'{{GENDER:$1|usuariu|usuaria}}:",
+'uid' => 'ID {{GENDER:$1|del usuariu|de la usuaria}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Miembru}} {{PLURAL:$1|del grupu|de los grupos}}:',
 'prefs-registration' => 'Hora del rexistru:',
 'yourrealname' => 'Nome real:',
 'yourlanguage' => 'Llingua:',
@@ -1381,15 +1383,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',
@@ -1439,7 +1439,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',
@@ -1639,6 +1639,7 @@ Si'l problema persiste, contauta con un [[Special:ListUsers/sysop|alministrador]
 'backend-fail-notsame' => 'Yá esiste un ficheru non idénticu en $1.',
 'backend-fail-invalidpath' => "$1 nun ye una ruta d'almacenamientu válida.",
 'backend-fail-delete' => 'Nun se pudo desaniciar el ficheru $1.',
+'backend-fail-describe' => 'Nun se pudieron camudar los metadatos del ficheru "$1".',
 'backend-fail-alreadyexists' => 'El ficheru $1 yá esiste.',
 'backend-fail-store' => 'Nun se pudo guardar el ficheru $1 en $2.',
 'backend-fail-copy' => 'Nun se pudo copiar el ficheru $1 como $2.',
@@ -1755,7 +1756,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',
@@ -2024,7 +2025,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> (nun amiestes dengún d\'estos na to gueta).',
+{{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.',
 
@@ -2043,10 +2044,6 @@ Protocolos almitíos: <code>$1</code> (nun amiestes dengún d\'estos na to gueta
 '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.
@@ -2106,17 +2103,16 @@ 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',
-'mywatchlist' => 'La mio llista de vixilancia',
+'watchlist' => 'La mio llista de vixilancia',
+'mywatchlist' => 'Llista de vixilancia',
 'watchlistfor2' => 'Pa $1 $2',
 'nowatchlist' => 'La to llista de vixilancia ta vacia.',
 'watchlistanontext' => 'Por favor $1 pa ver o editar entraes na to llista de vixilancia.',
 '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',
@@ -2144,24 +2140,27 @@ Si más tarde quies quitala de la llista de vixilancia calca en "Dexar de vixila
 
 'enotif_mailer' => 'Notificación de corréu de {{SITENAME}}',
 'enotif_reset' => 'Marcar toles páxines visitaes',
-'enotif_newpagetext' => 'Esta ye una páxina nueva.',
 'enotif_impersonal_salutation' => 'Usuariu de {{SITENAME}}',
-'changed' => 'camudada',
-'created' => 'creada',
-'enotif_subject' => 'La páxina de {{SITENAME}} $PAGETITLE foi $CHANGEDORCREATED por $PAGEEDITOR',
+'enotif_subject_deleted' => '{{GENDER:$2|$2}} desanició la páxina «$1» de {{SITENAME}}',
+'enotif_subject_created' => '{{GENDER:$2|$2}} creó la páxina «$1» de {{SITENAME}}',
+'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.',
+'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.',
+'enotif_body_intro_changed' => '{{GENDER:$2|$2}} camudó la páxina «$1» de {{SITENAME}} el $PAGEEDITDATE, consulta $3 pa ver la revisión actual.',
 'enotif_lastvisited' => 'Mira en $1 pa ver tolos cambios dende la cabera visita.',
 'enotif_lastdiff' => 'Mira en $1 pa ver esti cambéu.',
 'enotif_anon_editor' => 'usuariu anónimu $1',
 'enotif_body' => 'Estimáu $WATCHINGUSERNAME,
 
-
-La páxina de {{SITENAME}} $PAGETITLE foi $CHANGEDORCREATED el $PAGEEDITDATE por $PAGEEDITOR, mira $PAGETITLE_URL pa ver la versión actual.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resume del editor: $PAGESUMMARY $PAGEMINOREDIT
 
-Ponte\'n contautu col editor:
+Ponte en contautu col editor:
 corréu: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
@@ -2181,6 +2180,8 @@ $UNWATCHURL
 
 Más ayuda y sofitu:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'camudada',
 
 # Delete
 'deletepage' => 'Esborrar páxina',
@@ -2243,7 +2244,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]]"',
@@ -2252,6 +2253,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:',
@@ -2367,10 +2370,10 @@ $1",
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Collaboraciones del usuariu',
+'contributions' => 'Collaboraciones {{GENDER:$1|del usuariu|de la usuaria}}',
 'contributions-title' => "Contribuciones d'usuariu pa $1",
-'mycontris' => 'Les mios collaboraciones',
-'contribsub2' => 'De $1 ($2)',
+'mycontris' => 'Collaboraciones',
+'contribsub2' => 'Pa $1 ($2)',
 'nocontribs' => "Nun s'atoparon cambeos que coincidan con esi criteriu.",
 'uctop' => '(actual)',
 'month' => "Dende'l mes (y anteriores):",
@@ -2401,7 +2404,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}}',
@@ -2410,7 +2413,7 @@ La cabera entrada del rexistru de bloqueos s'ufre darréu pa referencia:",
 'whatlinkshere-hideredirs' => '$1 redireiciones',
 'whatlinkshere-hidetrans' => '$1 tresclusiones',
 'whatlinkshere-hidelinks' => '$1 enllaces',
-'whatlinkshere-hideimages' => "$1 enllaces d'imaxe",
+'whatlinkshere-hideimages' => '$1 los enllaces al ficheru',
 'whatlinkshere-filters' => 'Peñeres',
 
 # Block/unblock
@@ -2440,7 +2443,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",
@@ -2750,6 +2753,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.',
@@ -2788,7 +2792,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',
@@ -2803,7 +2807,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',
@@ -2816,7 +2820,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',
@@ -2832,7 +2836,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',
@@ -2933,6 +2937,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',
@@ -2941,6 +2946,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',
@@ -2959,6 +2968,8 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'markedaspatrollederror' => 'Nun se pue marcar como supervisada',
 'markedaspatrollederrortext' => 'Necesites conseñar una revisión pa marcala como supervisada.',
 'markedaspatrollederror-noautopatrol' => 'Nun tienes permisu pa marcar los cambios propios como supervisaos.',
+'markedaspatrollednotify' => 'Esti cambiu en $1 marcóse como revisáu.',
+'markedaspatrollederrornotify' => "Falló l'aición de marcar como revisáu.",
 
 # Patrol log
 'patrol-log-page' => 'Rexistru de supervisión',
@@ -2992,6 +3003,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.',
@@ -3021,7 +3033,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => "El formatu ye'l que sigue:
@@ -3779,11 +3794,15 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 'logentry-move-move_redir-noredirect' => '$1 treslladó la páxina "$3" a "$4" sobre una redireición ensin dexar una redireición',
 'logentry-patrol-patrol' => '$1 marcó la revisión $4 de la páxina "$3" como patrullada',
 'logentry-patrol-patrol-auto' => '$1 marcó automaticamente la revisión $4 de la páxina "$3" como patrullada',
-'logentry-newusers-newusers' => "$1 creó una cuenta d'usuariu",
-'logentry-newusers-create' => "$1 creó una cuenta d'usuariu",
-'logentry-newusers-create2' => "$1 creó una cuenta d'usuariu $3",
+'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-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].
index 532fd1c..0dfc520 100644 (file)
@@ -444,8 +444,6 @@ Batdume : ''$2''.",
 # Login and logout pages
 'logouttext' => 'Rin daletoe til solgluyanaf.
 Rin va {{SITENAME}} yoltiskon ware rofavel oke, bifoton kan ar yolt, va int toldogluyal.',
-'welcomecreation' => '<h2>Til drumbaf, $1!</h2><p>Rinaf favesikpata su zo redur.
-Me vulkul da rupeson va "Lodamaceem" bu va intaf {{SITENAME}} rotuilkal.',
 'yourname' => 'Rinaf favesikyolt',
 'yourpassword' => 'Rinaf remravlem',
 'yourpasswordagain' => 'Va rinaf remravlem tolon bazel',
@@ -661,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.',
@@ -1038,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',
@@ -1417,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',
@@ -1492,11 +1488,7 @@ Ta sulara va batu bu div rinafi suzdasiki, koe grablexo va « Mea suzdá » vule
 
 'enotif_mailer' => '{{SITENAME}} Kowalzesi Staksasiki',
 'enotif_reset' => 'Va kotu woranu bu tcalar',
-'enotif_newpagetext' => 'Batcoba tir warzafu bu',
 'enotif_impersonal_salutation' => '{{SITENAME}} favesik',
-'changed' => 'betayan',
-'created' => 'reduyun',
-'enotif_subject' => '{{SITENAME}} bu $PAGETITLE su zo $CHANGEDORCREATED gan $PAGEEDITOR',
 'enotif_lastvisited' => 'Va $1 disukel ta da va kot betaks mali ironokafa worara wil.',
 'enotif_lastdiff' => 'Ta wira va bat betaks va $1 disukel.',
 'enotif_anon_editor' => '$1 yoltiskaf favesik',
@@ -1524,6 +1516,8 @@ To change your watchlist settings, visit
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'reduyun',
+'changed' => 'betayan',
 
 # Delete
 'deletepage' => 'Busulara',
@@ -2392,5 +2386,6 @@ This confirmation code will expire at $4.',
 'revdelete-restricted' => 'irutara rewana pu ristusik',
 'revdelete-unrestricted' => 'irutara tiolteyena pu ristusik',
 'newuserlog-byemail' => 'remravlem staksayan kan e-mail',
+'rightsnone' => '(mek)',
 
 );
index 4c4dff3..619364b 100644 (file)
@@ -7,8 +7,11 @@
  * @ingroup Language
  * @file
  *
+ * @author AZISS
  * @author Cekli829
  * @author Don Alessandro
+ * @author E THP
+ * @author Ebrahimi-amir
  * @author Emperyan
  * @author Erdemaslancan
  * @author Gulmammad
@@ -238,7 +241,7 @@ $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',
@@ -326,7 +329,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ı',
@@ -474,9 +477,6 @@ 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.",
-'welcomecreation' => '== $1, xoş gəlmişsiniz! ==
-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:',
@@ -594,7 +594,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',
 
@@ -624,7 +624,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',
@@ -705,7 +705,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.',
@@ -956,13 +955,13 @@ $1",
 
 # Preferences page
 'preferences' => 'Nizamlamalar',
-'mypreferences' => 'Nizamlamalarım',
+'mypreferences' => 'Nizamlamalar',
 'prefs-edits' => 'Redaktələrin sayı:',
 'prefsnologin' => 'Daxil olmamısınız',
 'prefsnologintext' => 'Nizamlamaları dəyişmək üçün <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daxil olmaq]</span> zəruridir.',
 'changepassword' => 'Parolu dəyiş',
 'prefs-skin' => 'Cild',
-'skin-preview' => 'Sınaq gö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',
@@ -1170,11 +1169,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ı',
@@ -1650,10 +1651,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.
@@ -1740,11 +1737,7 @@ Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-help
 
 'enotif_mailer' => '{{SITENAME}} Bildiriş Xidməti',
 'enotif_reset' => 'Baxılmış bütün səhifələri işarələ.',
-'enotif_newpagetext' => 'Bu səhifə yeni səhifədir.',
 'enotif_impersonal_salutation' => '{{SITENAME}} istifadəçisi',
-'changed' => 'dəyişdi',
-'created' => 'yaradıldı',
-'enotif_subject' => '{{SITENAME}} saytındakı $PAGETITLE səhifəsi $PAGEEDITOR tərəfindən $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Sonuncu ziyarətinizdən indiyədək olan bütün dəyişiklikləri görmək üçün baxın: $1.',
 'enotif_lastdiff' => 'Bu dəyişikliyi görmək üçün $1 səhifəsinə baxın.',
 'enotif_anon_editor' => 'qeydiyyatsız istifadəçi $1',
@@ -1770,6 +1763,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',
@@ -2328,9 +2323,16 @@ Zəhmət olmasa başqa ad seçin.',
 
 # Info page
 'pageinfo-title' => '"$1" üçün məlumat',
+'pageinfo-header-basic' => 'Əsas məlumatlar',
 'pageinfo-header-edits' => 'Redaktələr',
+'pageinfo-header-restrictions' => 'Səhifə mühafizəsi',
+'pageinfo-header-properties' => 'Səhifə xüsusiyyətləri',
 'pageinfo-views' => 'Göstərmə səhifəsi',
 'pageinfo-watchers' => 'Baxış sayı',
+'pageinfo-firstuser' => 'Səhifəni yaradan',
+'pageinfo-firsttime' => 'Səhifənin yaranma tarixi',
+'pageinfo-lastuser' => 'Sonuncu redaktor',
+'pageinfo-lasttime' => 'Sonuncu redaktənin tarixi',
 'pageinfo-edits' => 'Redaktələrin sayı',
 'pageinfo-authors' => 'Fərqli müəlliflərin sayı',
 
@@ -2984,6 +2986,7 @@ Bu saytda texniki problemlər var.',
 '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:',
diff --git a/languages/messages/MessagesAzb.php b/languages/messages/MessagesAzb.php
new file mode 100644 (file)
index 0000000..f92fc2a
--- /dev/null
@@ -0,0 +1,3744 @@
+<?php
+/** South Azerbaijani (تورکجه)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Amir a57
+ * @author Arjanizary
+ * @author Calak
+ * @author E THP
+ * @author Ebrahimi-amir
+ * @author Erdemaslancan
+ * @author Mousa
+ */
+
+$fallback = 'fa';
+$rtl = true;
+
+$messages = array(
+# User preference toggles
+'tog-underline' => 'باغلانتی‌لارین آلتینی خطله:',
+'tog-justify' => 'متنی صحیفه بویو پایلا',
+'tog-hideminor' => 'سون دییشیکلیکلرده کیچیک‌لری گیزلت',
+'tog-hidepatrolled' => 'نظارتلنمیش دَییشیکلیکلری سون دییشیکلیکلرده گیزلت',
+'tog-newpageshidepatrolled' => 'نظارتلنمیش صحیفه‌لری یئنی صحیفه‌لر سیاهی‌سیندان گیزلت',
+'tog-extendwatchlist' => 'ایزله‌دیکلری، بوتون دیشیکلیکلری گؤسترمک اوچون گئنیشلندیر',
+'tog-usenewrc' => 'دَییشیکلیکلری سون دَییشیکلیکلر صحیفه‌سینده ایزله‌دیکلر صحیفه‌سینده گروپ‌لا (جاوااسکریپت لازیم‌دیر)',
+'tog-numberheadings' => 'باشلیق‌لاری اوتوماتیک نومره‌له',
+'tog-showtoolbar' => 'دَییشدیرمه آراج چوبوغونو گؤستر (جاوااسکریپت لازیم‌دیر)',
+'tog-editondblclick' => 'صحیفه‌‌لری ایکی کلیکله دَییشدیر (جاوااسکریپت لازیم‌دیر)',
+'tog-editsection' => '[دَییشدیر] باغلانتی‌سیلا بؤلوم دَییشدیرمه‌سینه ایجازه وئر',
+'tog-editsectiononrightclick' => 'بؤلوم‌لرین دیشدیرمه‌سینی، باشلیقلارین اوزرینده ساغ‌کلیک ائتمک‌له ایجازه وئر (جاوااسکریپت لازیم‌دیر)',
+'tog-showtoc' => 'ایچینده‌کیلر جدولینی گؤستر (۳-دن آرتیق باشلیقلاری اولان صحیفه‌‌لرده)',
+'tog-rememberpassword' => 'منیم گیریشیمی بو بیلگی‌سایاردا یاددا ساخلا (چوخو {{PLURAL:$1|بیر گونه|$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' => 'دیری اؤن‌گؤستریش ایشلد (جاوااسکریپت لازیم‌دیر)(تست مرحله‌سینده)',
+'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' => 'دَییشدیرمه قوتوطونون فونت نؤوعو:',
+'editfont-default' => 'براوزر دیفالتی',
+'editfont-monospace' => 'ثابیت آرالی فونت',
+'editfont-sansserif' => 'بوجاق‌سیز فونت',
+'editfont-serif' => 'بوجاق‌لی فونت',
+
+# Dates
+'sunday' => 'سود گونو(یکشنبه)',
+'monday' => 'دوزگونو(دوشنبه)',
+'tuesday' => 'آرا گون(سه‌شنبه)',
+'wednesday' => 'اوْدگونو(چهارشنبه)',
+'thursday' => 'سوگونو(پنجشنبه)',
+'friday' => 'جوما(آینی‌گون)',
+'saturday' => 'يئل‌گونو(شنبه)',
+'sun' => 'سود گونو(یکشنبه)',
+'mon' => 'دوزگونو(دوشنبه)',
+'tue' => 'سه‌شنبه(آرا گون)',
+'wed' => 'اوْدگونو (چهارشنبه)',
+'thu' => 'سوگونو(پنجشنبه)',
+'fri' => 'آینی‌گون(جوما)',
+'sat' => 'يئل‌گونو(شنبه)',
+'january' => 'ژانویه',
+'february' => 'فئوریه',
+'march' => 'مارس',
+'april' => 'آوریل',
+'may_long' => 'مئی',
+'june' => 'ژوئن',
+'july' => 'ژولای',
+'august' => 'آقوست',
+'september' => 'سئپتامبر',
+'october' => 'اوکتوبر',
+'november' => 'نووامبر',
+'december' => 'دئسامبر',
+'january-gen' => 'ژانویه',
+'february-gen' => 'فوریه',
+'march-gen' => 'مارس',
+'april-gen' => 'آوریل',
+'may-gen' => 'مِی',
+'june-gen' => 'ژوئن',
+'july-gen' => 'جولای',
+'august-gen' => 'آقوست',
+'september-gen' => 'سئپتامبر',
+'october-gen' => 'اوکتوبر',
+'november-gen' => 'نووامبر',
+'december-gen' => 'دئسامبر',
+'jan' => 'ژانویه',
+'feb' => 'فئوریه',
+'mar' => 'مارس',
+'apr' => 'آوریل',
+'may' => 'مئی',
+'jun' => 'ژوئن',
+'jul' => 'ژولای',
+'aug' => 'آقوست',
+'sep' => 'سئپتامبر',
+'oct' => 'اوکتوبر',
+'nov' => 'نووامبر',
+'dec' => 'دئسامبر',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|بؤلمه|بؤلمه‌لر}}',
+'category_header' => '«$1» بؤلمه‌سین‌ده‌کی مقاله‌لر',
+'subcategories' => 'آلت بؤلمه‌لر',
+'category-media-header' => '«$1» بؤلمه‌سینده مئدیا',
+'category-empty' => "''بو بؤلمه‌نین ایندی فایل یوخسا مئدیاسی یوخدور.''",
+'hidden-categories' => '{{PLURAL:$1|گیزلی بؤلمه|گیزلی بؤلمه‌لر}}',
+'hidden-category-category' => 'گیزلی بؤلمه‌لر',
+'category-subcat-count' => 'بو بؤلمه‌ده {{PLURAL:$2|یالنیز|}} آشاغیداکی {{PLURAL:$1|بیر|$1}} آلت‌بؤلمه وار؛ بو بؤلمه‌نین جمعاً $2 آلت‌بؤلمه‌سی وار.',
+'category-subcat-count-limited' => 'بو بؤلمه‌ده آشاغیداکی {{PLURAL:$1|آلت‌بؤلمه|$1 آلت‌بؤلمه}} واردیر.',
+'category-article-count' => 'بو بؤلمه‌ده {{PLURAL:$2|یالنیز|}} آشاغیداکی {{PLURAL:$1|بیر|$1}} صحیفه وار؛ بو بؤلمه‌نین جمعاً $2 صحیفه‌سی وار.',
+'category-article-count-limited' => 'بو بؤلمه‌ده، آشاغیداکی {{PLURAL:$1|یارپاق|$1 یارپاق}} واردیر.',
+'category-file-count' => 'بو بؤلمه‌ده {{PLURAL:$2|یالنیز|}} آشاغیداکی {{PLURAL:$1|بیر|$1}} فایل وار؛ بو بؤلمه‌نین جمعاً $2 فایلی وار.',
+'category-file-count-limited' => 'بؤلمه‌ده، بو {{PLURAL:$1|فایل|$1 فایل}} واردیر.',
+'listingcontinuesabbrev' => '(قالانی)',
+'index-category' => 'ایندئکس‌لشدیریلمیش یارپاقلار',
+'noindex-category' => 'ایندئکس‌لشدیریلمه‌ین یارپاقلار',
+'broken-file-category' => 'فایل‌لارا قیریلمیش باغلانتیلاری اولان یارپاقلار',
+
+'about' => 'گؤره',
+'article' => 'ایچری‌لی یارپاق',
+'newwindow' => '(یئنی پنجره‌ده آچیلیر)',
+'cancel' => 'لغو ائت',
+'moredotdotdot' => 'داها...',
+'morenotlisted' => 'داها آرتیق لیست اولونماییب‌دیر...',
+'mypage' => 'مقاله',
+'mytalk' => 'دانیشیق',
+'anontalk' => 'بو آی‌پی آدرسینه دانیشیق',
+'navigation' => 'دولانماق',
+'and' => '&#32;و',
+
+# Cologne Blue skin
+'qbfind' => 'تاپ',
+'qbbrowse' => 'گؤزدن گئچید',
+'qbedit' => 'دَییشدیر',
+'qbpageoptions' => 'بو صحیفه‌‌',
+'qbmyoptions' => 'منیم صحیفه‌‌لریم',
+'qbspecialpages' => 'اؤزل صحیفه‌لر',
+'faq' => 'چوخ سوروشولان سواللار',
+'faqpage' => 'Project:چوخلو سوروشولان سورغولار',
+
+# Vector skin
+'vector-action-addsection' => 'قونو آرتیر',
+'vector-action-delete' => 'سیل',
+'vector-action-move' => 'آدینی ديَیشدیر',
+'vector-action-protect' => 'قورو',
+'vector-action-undelete' => 'سیلمگی قایتار',
+'vector-action-unprotect' => 'قوروماغی دَییشدیر',
+'vector-simplesearch-preference' => 'ساده‌لشدیریلمیش آختاریش چوبوغو (یالنیز Vector دَری‌سینده)',
+'vector-view-create' => 'یارات',
+'vector-view-edit' => 'دَییشدیر',
+'vector-view-history' => 'گئچمیشه باخ',
+'vector-view-view' => 'اوخو',
+'vector-view-viewsource' => 'قایناغا باخ',
+'actions' => 'ایشلر',
+'namespaces' => 'آدلار فضاسی',
+'variants' => 'واریانتلار',
+
+'navigation-heading' => 'دولانماق مِنوسو',
+'errorpagetitle' => 'خطا',
+'returnto' => '$1-ه قاییت.',
+'tagline' => '{{SITENAME}} سایتیندان',
+'help' => 'یاردیم',
+'search' => 'آختار',
+'searchbutton' => 'آختار',
+'go' => 'گئت',
+'searcharticle' => 'گئت',
+'history' => 'صحیفه‌‌نین گئچمیشی',
+'history_short' => 'گئچمیش',
+'updatedmarker' => 'سون باخیشیمدان بویانا، یئنی‌لشیب‌دیر',
+'printableversion' => 'چاپ ائتمه‌لی نوسخه',
+'permalink' => 'قالان باغلانتی',
+'print' => 'یازدیر',
+'view' => 'باخ',
+'edit' => 'دَییشدیر',
+'create' => 'یارات',
+'editthispage' => 'بو صحیفه‌‌نی دَییشدیر',
+'create-this-page' => 'بو صحیفه‌‌نی يارات',
+'delete' => 'سیل',
+'deletethispage' => 'بو صحیفه‌‌نی سیل',
+'undelete_short' => '{{PLURAL:$1|بیر دَییشیکلیگی|$1 دَییشیکلیگی}} برپا ائت',
+'viewdeleted_short' => '{{PLURAL:$1|بیر|$1}} سیلینمیش دَییشیکلیگی گؤستر',
+'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 چاغیندا دَییشیلیب‌دیر.',
+'viewcount' => 'بو یارپاق {{PLURAL:$1|بیر|$1}} دفعه گؤرونوب‌دور.',
+'protectedpage' => 'قورونموش یارپاق',
+'jumpto' => 'آتلان:',
+'jumptonavigation' => 'دولانماق',
+'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:حاقیندا',
+'copyright' => 'ایچینده‌کیلر $1 لیسانسی احاطه‌سینده‌دیلر.',
+'copyrightpage' => '{{ns:project}}:کوپی حاقی',
+'currentevents' => 'ایندیکی اولایلار',
+'currentevents-url' => 'Project:ایندیکی اولایلار',
+'disclaimers' => 'رد ائتمک',
+'disclaimerpage' => 'Project:عمومی رد ائتمک',
+'edithelp' => 'ديَیشیکلیک‌لر اوچون یاردیم',
+'edithelppage' => 'Help:دَییشدیرمه',
+'helppage' => 'Help:ایچینده‌کیلر',
+'mainpage' => 'آنا صحیفه',
+'mainpage-description' => 'آنا صحیفه',
+'policy-url' => 'Project:قایدالار',
+'portal' => 'توپلوم پورتالی',
+'portal-url' => 'Project:توپلوم پورتالی',
+'privacy' => 'گیزلیلیک سیاستی',
+'privacypage' => 'Project:گیزلیلیک سیاستی',
+
+'badaccess' => 'یول وئرمه خطاسی',
+'badaccess-group0' => 'ایسته‌دیگینیز ایشه ایجازه‌نیز یوخدور.',
+'badaccess-groups' => 'ایسته‌دیگینیز ایشین ایجازه‌سی، تکجه بو {{PLURAL:$2|قروپ|قروپلار}}داکی ایشلدنلره وئریلیب‌دیر: $1.',
+
+'versionrequired' => 'مدئدیاویکی یازیلیمینین $1 نوسخه‌سی لازیم‌دیر',
+'versionrequiredtext' => 'بو یارپاغی ایشلتدماغا، مئدیاویکی یازیلیمینین $1 نوسخه‌سی لازیم‌دیر.
+[[Special:Version|نوسخه یارپاغینا]] باخین.',
+
+'ok' => 'اولدو',
+'retrievedfrom' => '«$1»-دن آلینمیشدیر',
+'youhavenewmessages' => 'سیزین $1 ($2) وارینیزدیر.',
+'newmessageslink' => 'یئنی مئساژلار',
+'newmessagesdifflink' => 'سون دَییشیکلیک',
+'youhavenewmessagesfromusers' => 'سیزین {{PLURAL:$3|بیر آیری ایستیفاده‌چی‌دن|$3 ایستیفاده‌چی‌دن}} $1 وارینیزدیر ($2).',
+'youhavenewmessagesmanyusers' => 'سیزین چوخلو ایشلدنلردن $1 وارینیزدیر ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|بیر یئنی مئساژ|یئنی مئساژلار}}',
+'newmessagesdifflinkplural' => 'سون {{PLURAL:$1|دَییشیکلیک|دَییشیکلیکلر}}',
+'youhavenewmessagesmulti' => '$1-دا یئنی بیلدیرینیز وار.',
+'editsection' => 'دَییشدیر',
+'editold' => 'دَییشدیر',
+'viewsourceold' => 'قایناغا باخ',
+'editlink' => 'دَییشدیر',
+'viewsourcelink' => 'قایناغا باخ',
+'editsectionhint' => 'بؤلومو دَییشدیر: $1',
+'toc' => 'ایچینده‌کیلر',
+'showtoc' => 'گؤستر',
+'hidetoc' => 'گیزلت',
+'collapsible-collapse' => 'گیزلت',
+'collapsible-expand' => 'گئنیشلندیر',
+'thisisdeleted' => '$1-نا باخ یا اونو قایتار؟',
+'viewdeleted' => '$1 گؤستریلسین؟',
+'restorelink' => '{{PLURAL:$1|بیر سیلینمیش دَییشیکلیک|$1 سیلینمیش دَییشیکلیکلر}}',
+'feedlinks' => 'بسلمه',
+'feed-invalid' => 'گئچرسیز آبونه کانال جورو.',
+'feed-unavailable' => 'سیندیکاسیا خطلری ال‌ده دئییل‌لر',
+'site-rss-feed' => '$1 آراِس‌اِس فید',
+'site-atom-feed' => '$1 آتوم فید',
+'page-rss-feed' => '«$1» آراِس‌اِس فید',
+'page-atom-feed' => '«$1» آتوم فید',
+'red-link-title' => '$1 (صحیفه یوخدور)',
+'sort-descending' => 'آزالان سیرالاماق',
+'sort-ascending' => 'چوخالان سیرالاماق',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'مقاله',
+'nstab-user' => 'ایستیفاده‌چی صحیفه‌سی',
+'nstab-media' => 'مئدیا صحیفه‌سی',
+'nstab-special' => 'اؤزل صحیفه',
+'nstab-project' => 'پروژه صحیفه‌سی',
+'nstab-image' => 'فایل',
+'nstab-mediawiki' => 'مئساژ',
+'nstab-template' => 'شابلون',
+'nstab-help' => 'یاردیم صحیفه‌سی',
+'nstab-category' => 'بؤلمه',
+
+# Main script and global functions
+'nosuchaction' => 'بئله چالیشما یوخدور',
+'nosuchactiontext' => 'URL-ده گؤستریلن ایش گئچرسیزدیر.
+اولا بیلر کی URL-ی یانلیش یازیب یوخسا یانلیش باغلانتی‌لا گلمیشسینیز.
+همده بو، {{SITENAME}} سایتی ایشلدن یازیلیمین خطاسینی گؤستره بیلر.',
+'nosuchspecialpage' => 'بئله اؤزل یارپاق یوخدور',
+'nospecialpagetext' => '<strong>سیز بیر یانلیش اؤزل یارپاغینی ایسته‌میسینیز.</strong>
+دوزگون اؤزل یارپاق‌لارین سیاهی‌سینی [[Special:SpecialPages|{{int:specialpages}}]]-ده گؤره بیلرسینیز.',
+
+# General errors
+'error' => 'خطا',
+'databaseerror' => 'دیتابیس خطاسی',
+'dberrortext' => 'بیر دیتابیس سورغو سینتکس خطاسی قاباغا گلدی.
+بو، یازیلیم‌دا بیر خطانی گؤستره بیلر.
+سون قصد ائدیلن دیتابیس سورغوسو بو ایدی:
+<blockquote><code>$1</code></blockquote>
+"<code>$2</code>" فونکسیاسی ایچیندن.
+دیتابیس بو خطانی قایتاردی: "<samp>$3: $4</samp>".',
+'dberrortextcl' => 'بیر دیتابیس سورغو سینتکس خطاسی قاباغا گلدی.
+سون قصد ائدیلن دیتابیس سورغوسو بو ایدی:
+"$1"
+"$2" فونکسیاسی ایچیندن.
+دیتابیس بو خطانی قایتاردی: "$3: $4"',
+'laggedslavemode' => "'''دیقت:''' یارپاق‌دا، سون دَییشیکلیکلرین اولماماسی ایمکانی وار.",
+'readonly' => 'دیتابیس باغلانیب',
+'enterlockreason' => 'باغلاما نَدَن‌لیگی و آچیلماغین تخمینی واختینی یازین',
+'readonlytext' => 'ایندی دیتابیس یئنی گیرمه‌لره و باشقا دَییشیکلیکلره باغلی‌دیر، اولا بیلر بو روتین دیتابیس باخیمی اوچون‌دور، قورتاران‌دان سونرا، عادی دورومونا قاییتاجاق.
+
+اونو باغلایان ایداره‌چی بو ایضاحی وئریب‌دیر: $1',
+'missing-article' => 'معلومات بازاسی، تاپیلماسی ایستنن "$1" $2 آدلی صحیفه‌‌يه عاید متنی تاپا بیلمه‌دی. 
+
+بۇ وضعیت صحیفه‌‌نین، سیلینمیش بیر صحیفه‌‌نین کئچمیش وئرسیياسی اوْلماسیندان قايناقلانا بیلر. 
+
+اگر نیيه بۇ دئيیلسه، پروْقرامدا بیر سهو ایله قارشیلاشمیش اوْلا بیلرسینیز. 
+خاهیش ائدیریک بۇنو بیر [[Special:ListUsers/sysop|administrator]]، URL نوْت ائده‌رک گؤندرین.',
+'missingarticle-rev' => '(نوسخه نومره‌سی: $1)',
+'missingarticle-diff' => '(فرق: $1، $2)',
+'readonly_lag' => 'ایکینجی درجه‌لی دیتابیس خیدمت‌چیلری، آنا دیتابیسه یئتیشماغا گؤره، بو دیتابیس اوتوماتیک باغلانیب‌دیر',
+'internalerror' => 'ایچ خطاسی',
+'internalerror_info' => 'ایچ خطاسی: $1',
+'fileappenderrorread' => 'اکلَنَنده، «$1»-ی اوخوماق مومکون دئییل‌دیر.',
+'fileappenderror' => '«$1»-ی «$2»-ه اکله‌مک اولانمادی.',
+'filecopyerror' => '«$1» فایلی، «$2»-ه کوپی اولانمادی.',
+'filerenameerror' => '«$1» فایلین آدی «$2»-نا دَییشدیریلنمه‌دی.',
+'filedeleteerror' => '«$1» فایلی سیلیننمه‌دی.',
+'directorycreateerror' => '«$1» دایرکتوری‌سی سیلیننمه‌دی.',
+'filenotfound' => '«$1» فایلی تاپیلانمادی.',
+'fileexistserror' => '«$1» فایلینا یازیلانمادی: فایل اؤنجه‌دن واردیر.',
+'unexpected' => 'گؤزلنیلمه‌ین دَیَر: «$1»=«$2»',
+'formerror' => 'خطا: فورم یوللانانمادی.',
+'badarticleerror' => 'بو ایشی بو یارپاق اوستون‌ده ائتمک اولماز.',
+'cannotdelete' => '«$1» فایل یا یارپاغی سیلیننمه‌دی.
+اولا بیلر اونو اؤنجه‌دن باشقا بیر اشلدن سیلمیش اولا.',
+'cannotdelete-title' => '«$1» یارپاغی سیلیننمیر',
+'delete-hook-aborted' => 'سیمک، چنگل‌له یاری‌دا قالدی.
+او هئچ بیر ایضاح وئرمه‌دی.',
+'badtitle' => 'پیس باشلیق',
+'badtitletext' => 'آختاریلان صحیفه‌‌ آدی سهودیر و يا بوْشدور، يا دا دۆزگون اوْلمايان دیللر‌آراسی، ياخود ویکیلرآراسی کئچید ایستیفاده ائدیلیب. 
+باشلیقلاردا ایستیفاده ائدیلمه‌سی قاداغان اوْلونان بیر و يا داها چوْخ سیمووْل ایستیفاده ائدیلمیش اوْلا بیلر.',
+'perfcached' => 'بو بیلگی، کَش اولوب‌دور و اولا بیلر گونجل اولماسین. چوخو {{PLURAL:$1|بیر نتیجه|$1 نتیجه}} کَش‌ده‌دیر.',
+'perfcachedts' => 'بو بیلگی کَش اولوب‌دور، سون دفعه $1 واختیندا گونجلیب‌دیر. چوخو {{PLURAL:$4|بیر نتیجه|$4 نتیجه}} کَش‌ده‌دیر.',
+'querypage-no-updates' => 'بو یارپاق‌دا گونجل‌له‌مک ایندی باغلانیب‌دیر.
+بورداکی بیلگیلر یئنی‌لشمیه‌جکلر.',
+'wrong_wfQuery_params' => 'wfQuery() اوچون یانلیش پارامئترلر وئریلیب‌دیر<br />
+فونکسیا: $1<br />
+سورغو: $2',
+'viewsource' => 'قایناغا باخ',
+'viewsource-title' => '$1 اوچون قایناغا باخین',
+'actionthrottled' => 'سیزین چالیشمانیزین قاباغی آلیندی',
+'actionthrottledtext' => 'آنتی-ایسپام حرکت‌لری گؤره، بیر حرکتی قیسا بیر زامان آرالیغیندا چوخئتمه‌نیز انگللندی، و سیز حدی آشمیسینیز. لطفاً بیر نئچه دقیقه سونرا یئنی‌دن یوخلایین.',
+'protectedpagetext' => 'بو صحیفه دیَیشدیرمک و باشقا ایشلر اوچون باغلی‌دیر.',
+'viewsourcetext' => 'سیز بو صحیفه‌نین مزمونونو گؤره و کؤچوره بیلرسینیز:',
+'viewyourtext' => "'''اؤز دَییشیکلیکلرینیز''' ین کودونو گؤروب و بو صحیفه‌یه کوپی ائده بیلرسینیز:",
+'protectedinterface' => 'بو صحیفه‌ده پروقرام تأمیناتی اوچون سیستئم بیلگی‌لری وار و سوی-ایستیفاده‌نین قارشی‌سینی آلماق اوچون محافظه اولونما‌لی‌دیر.',
+'editinginterface' => "'''دیقت:''' سیز بیر یازیلیم آرا-اوزونه یازی تعمین ائدن صحیفه‌نی دَییشدیرمک‌ده‌سینیز.
+بو صحیفه‌نی دَییشدیرمک، بو ویکی‌نی ایستیفاده ائدن باشقا ایستیفاده‌چیلرین گؤرونوشونو دَییشه‌جک‌دیر.
+چئویرمه‌لری بوتون ویکی‌لره آرتیریب یوخسا دَییشدیرمک اوچون لوطفاً [//translatewiki.net/ translatewiki.net]، مئدیاویکی‌نین یئرلیلشدیرمه پروژه‌سیندن ایستیفاده ائدین.",
+'sqlhidden' => '(اس‌کیوال سورغوسو گیزلی)',
+'cascadeprotected' => 'بو صحیفه دَییشیکلیکلر قاباغیندا قورونوب‌دور، چونکو بو آشاغیداکی، آبشاری {{PLURAL:$1|سئچمه‌سی|سئچمه‌لری}} سئچیلن، قورونان {{PLURAL:$1|صحیفه|صحیفه‌لر}} ایچینده‌دیر:
+$2',
+'namespaceprotected' => "سیز '''$1''' آدفضاسینداکی صحیفه‌لرین دَییشمه‌سینه ایجازه‌نیز یوخدور.",
+'customcssprotected' => 'سیز بو CSS صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.',
+'customjsprotected' => 'سیز بو جاوااسکریپت صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور، نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.',
+'ns-specialprotected' => 'اؤزل یارپاقلاری دَییشمک اولماز.',
+'titleprotected' => 'بو آددا یارپاغین یارادیلماسی [[User:$1|$1]] ایشلدن طرفیندن باغلانیب‌دیر.
+اونون نَدَن‌لیگی بودور: "\'\'$2\'\'"',
+'filereadonlyerror' => '«$2» آنباری‌نین تکجه-اوخومالی دوروموندا اولدوغونا گؤره، «$1»-ی دَییشمک اولماز.
+
+اونو باغلایان ایداره‌چی بو ایضاحی وئریب‌دیر: $3',
+'invalidtitle-knownnamespace' => '«$2» آدآلان‌لی و «$3» یازی‌لی یانلیش باشلیق',
+'invalidtitle-unknownnamespace' => 'تانینمامیش $1 نومره‌لی آدآلان و «$2» یازی‌لی یانلیش باشلیق',
+'exception-nologin' => 'گیریش ائتمه‌میسینیز',
+'exception-nologin-text' => 'بو یارپاق یا ایشی گؤرمگه، بو ویکی‌یه گیرمه‌لیسینیز.',
+
+# Virus scanner
+'virus-badscanner' => "پیس تنظیملر: تانینمامیش ویروس یوخلایان: ''$1''",
+'virus-scanfailed' => 'یوخلاماق باشا چاتمادی (کود $1)',
+'virus-unknownscanner' => 'تانینمامیش آنتی‌ویروس:',
+
+# Login and logout pages
+'logouttext' => "'''سیز ایندی سیستِم‌دن چیخدینیز.'''
+
+سیز {{SITENAME}}-ی تانینمامیش اولاراق ایشلده بیلرسینیز، یوخسا همن ایستیفاده‌چی آدی یا باشقا ایستیفاده‌چی آدی ایله <span class='plainlinks'>[$1یئنی‌دن گیریش]</span> ائده بیلرسینیز.
+بونا دیقت ائدین کی بعضی صحیفه‌لر، کَش-ینیزی سیلمه‌میشه کیمی، هله ده سیزین گیریش ائتدیگینیز کیمی گؤستریله‌جکلر.",
+'welcomeuser' => 'خوش گلمیسینیز، $1!',
+'welcomecreation-msg' => 'حسابینیز آچیلدی.
+[[Special:Preferences|{{SITENAME}}ترجیحلر]] دییشدیرمیی اونوتمایین.',
+'yourname' => 'ایستیفاده‌چی آدی:',
+'yourpassword' => 'رمز:',
+'yourpasswordagain' => 'رمزی یئنی‌دن یازین:',
+'remembermypassword' => 'بو بیلگی‌سایاردا منیم گیریشیمی (چوخو $1 {{PLURAL:$1|گون}}ه قدر) یاددا ساخلا',
+'securelogin-stick-https' => 'گیرندن سونرا، HTTPS-ه باغلی قال',
+'yourdomainname' => 'سیزین دامنه:',
+'password-change-forbidden' => 'بو ویکی‌ده رمزلری دَییشه بیلنمه‌سینیز.',
+'externaldberror' => 'بیر دیتابیس دوغرولاما خطاسی اولدو، یوخسا سیزین ائشیک حسابینیزی گونجل‌لدمگه ایجازه‌نیز یوخدور.',
+'login' => 'گیریش',
+'nav-login-createaccount' => 'گیریش / حساب یاراد',
+'loginprompt' => '{{SITENAME}} سایتینا گیریش اوچون، کوکی‌لره ایجازه وئرمک لازیم‌دیر.',
+'userlogin' => 'گیریش / حساب یاراد',
+'userloginnocreate' => 'گیریش',
+'logout' => 'چیخیش',
+'userlogout' => 'چیخیش',
+'notloggedin' => 'گیرمه‌میسینیز',
+'nologin' => 'حسابینیز یوخدومو؟ $1.',
+'nologinlink' => 'حساب یارات',
+'createaccount' => 'حساب یارات',
+'gotaccount' => 'اؤنجه‌دن حسابینیز وارمی؟ $1.',
+'gotaccountlink' => 'گیریش',
+'userlogin-resetlink' => 'گیریش بیلگیلرینیزی اونوتموسونوز؟',
+'createaccountmail' => 'ایمیل ایله',
+'createaccountreason' => 'نَدَن‌لیک:',
+'badretype' => 'یازدیغینیز رمزلر بیر دئییل‌لر.',
+'userexists' => 'یازدیغینیز آد، اؤنجه‌دن ایشده‌دیر.
+لوطفاً باشقا بیر آد سئچین.',
+'loginerror' => 'گیریش خطاسی',
+'createaccounterror' => 'بو حساب یارادیلانمادیر: $1',
+'nocookiesnew' => 'ایستیفاده‌چی حسابی یارادیلدی، اما سیز گیرمه‌میسینیز.
+{{SITENAME}} ایستیفاده‌چیلری گیردیرمک اوچون، کوکی‌لری ایشلدیر.
+سیزین کوکی‌لریز باغلانیب‌دیر.
+لوطفاً اونلاری آچین و سونرا یئنی ایستیفاده‌چی آدی و رمزینیزله گیریش ائدین.',
+'nocookieslogin' => '{{SITENAME}} ایشلدنلری گیردیرمک اوچون، کوکی‌لری ایشلدیر.
+سیزین کوکی‌لریز باغلانیب‌دیر.
+لوطفا اونلاری آچین و یئنی‌دن چالیشین.',
+'nocookiesfornew' => 'قایناغینی دوغرو اولدوغونو بیلمه‌مک اوچون، ایشلدن حسابی یارادیلمادی.
+کوکی‌لرینیزین آچیق اولدوغون دان آرخایین اولوب، بو یارپاغی یئنی‌دن یوکله‌ییب، یئنی‌دن چالیشین.',
+'noname' => 'گئچرلی ایستیفاده‌چی آدی وئرمه‌دینیز.',
+'loginsuccesstitle' => 'گیریش اوغورلو',
+'loginsuccess' => "'''سیز ایندی {{SITENAME}} سایتینا، «$1» آدی‌له گیرمیسینیز.'''",
+'nosuchuser' => '«$1» آدلا ایستیفاده‌چی یوخدور.
+ایستیفاده‌چی آدلاری، حرفلرین بؤیوک/کیچیک‌لیگینه حساس‌دیلار.
+یازدیغینیزا یئنی‌دن باخین، یوخسا [[Special:UserLogin/signup|یئنی بیر حساب آچین]].',
+'nosuchusershort' => '"$1" آدلا ایستیفاده‌چی یوخدور.
+دوزگون یازدیغینیزدان آرخایین اولون.',
+'nouserspecified' => 'بیر ایستیفاده‌چی آدی وئرمه‌لیسینیز.',
+'login-userblocked' => 'بو ایستیفاده چی باغلانیب‌دیر. گیریشه ایجازه یوخدور.',
+'wrongpassword' => 'یانلیش رمز وئریلدی.
+یئنی‌دن یازین.',
+'wrongpasswordempty' => 'بوش رمز وئردینیز.
+یئنی‌دن یازین.',
+'passwordtooshort' => 'رمز، آزی {{PLURAL:$1|بیر|$1}} کاراکتئر اولمالی‌دیر.',
+'password-name-match' => 'رمزینیز ایستیفاده‌چی آدینیزلا فرق‌لی اولمالی‌دیر.',
+'password-login-forbidden' => 'بو ایستیفاده‌چی آدی و رمزی ایشلدمک، قاداغان اولوب‌دور.',
+'mailmypassword' => 'یئنی رمزی ایمیل ایله گؤندر',
+'passwordremindertitle' => '{{SITENAME}} سایتینا یئنی گئچیجی رمز',
+'passwordremindertext' => 'بیر کس (احتیمالاً سیز، $1 آی‌پی آدرسی‌له) {{SITENAME}} ($4) اوچون یئنی رمز ایستگی وئریب‌دیر. «$2» ایستیفاده‌چیسی اوچون یئنی بیر رمز دوزلیب و «$3»-ه تنظیم اولوب‌دور. بو سیزین ایسته‌دیگینیز اولسا، گیریب و بیر یئنی رمز وئرمک لازیم‌دیر.
+بو گئچیجی رمز، {{PLURAL:$5|بیر|$5}} گون‌ده واختی گئچه‌جک‌دیر.
+
+بو ایستگی باشقا بیر کس وئریب‌سه، یوخسا سیز رمزینیزی یادا گئتیرمیسیزسه، و داها اونو دَییشمک ایسته‌میرسینیزسه، بو مئساژی نظره توتماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.',
+'noemail' => '«$1» ایستیفاده‌چی‌یه ایمیل آدرسی قئید اولماییب‌دیر.',
+'noemailcreate' => 'دوزگون بیر ایمیل آدرسی وئرمه‌لیسینیز',
+'passwordsent' => '«$1»-نا قئید اولونان ایمیل آدرسینه، یئنی بیر رمز گؤندریلدی.
+اونا آلان‌دان سونرا یئنی‌دن گیرین.',
+'blocked-mailpassword' => 'سیزین آی‌پی آدرسینیز دَییشیک وئرمه‌یه باغلانیب و سوءاستفاده قاباغی آلماق اوچون، رمزی یئنی‌دن اله گتیرمک ایمکانینا ایجازه‌نیز یوخدور.',
+'eauthentsent' => 'سیزین سئچیلمیش ایمیل آدرسینه، دوغرولاماق اوچون بیر ایمیل گؤندریلدی.
+هر یئنی بیر ایمیل گؤندرمک‌دن اؤنجه، بو حسابین دوغرودان سیزین اولدوغونو گؤسترمک اوچون، او ایمیل‌ده‌کی ایشلری گؤرمه‌لیسینیز.',
+'throttled-mailpassword' => 'سون {{PLURAL:$1|ساعات|$1 ساعات}}‌دا سیزه بیر رمز یادا سالما گؤندریلیب‌دیر.
+سوءاستفاده قاباغین آلماق اوچون، هر {{PLURAL:$1|ساعات|$1 ساعات}}‌دا یالنیز بیر رمز یادا سالما گؤندریلر.',
+'mailerror' => 'ایمیل گؤندرمه خطاسی: $1',
+'acct_creation_throttle_hit' => 'سیزین آی‌پی آدرسینیزی ایشلدن زیارتچیلر، سون گون‌ده {{PLURAL:$1|بیر حساب|$1 حساب}} یارادیبلار کی ان چون ایجازه وئریلن‌دیر.
+اونا باخاراق، بو آی‌پی آدرسی ایشلدن زیارتچیلر، بو زامان‌دا، داها آرتیق حساب یارادابیلمزلر.',
+'emailauthenticated' => 'ایمیل آدرسینیز $3 تاریخینده ساعات $2-ده دوغرولانیب‌دیر.',
+'emailnotauthenticated' => 'سیزین ایمیل آدرسینیز هله دوغرولانماییب‌دیر.
+آشاغیداکی اؤزل‌لیکلر اوچون هئچ بیر ایمیل گؤندریلمه‌یه‌جک‌دیر.',
+'noemailprefs' => 'بو اؤزل‌لیکلر ایشله‌مک اوچون، ترجیح‌لرینیزده ایمیل آدرسینیزی وئرین.',
+'emailconfirmlink' => 'ایمیل آدرسینیزی دوغرولایین',
+'invalidemailaddress' => 'بو ایمیل آدرس، یانلیش فورمتی اولدوغو اوچون، قبول اولماز.
+لوطفاً دوزگون فورمت‌لی آدرس وئرین، یوخسا اونو بوش بوراخین.',
+'cannotchangeemail' => 'حساب ایمیل آدرسلری بو ویکی‌ده دَییشیلنمزلر.',
+'emaildisabled' => 'بو سایت ایمیل گؤندرنمز.',
+'accountcreated' => 'حساب یارادیلدی',
+'accountcreatedtext' => '$1 ایستیفاده‌چی حسابی یارادیلیب‌دیر.',
+'createaccount-title' => '{{SITENAME}} اوچون حساب یارادیلماسی',
+'createaccount-text' => 'بیر کس، سیزین ایمیل آدرسینیزه {{SITENAME}} ($4) سایتیندا «$2» آدی و «$3» رمزی ایله بیر حساب آچیب‌دیر. سیز گرک گیریش ائدیب و رمزینیزی ایندی دَییشدیره‌سیز.
+
+بو حساب یانلیش دوزلیب‌سه، بو مئساژا محل قویمایابیلرسیز.',
+'usernamehasherror' => 'ایستیفاده‌چی آدیندا hash حرفلری اولا بیلمز',
+'login-throttled' => 'سیزین چوخ گیریش چالیشماغینیز اولوب‌دور.
+لوطفاً یئنی‌دن چالیشماق‌دان اؤنجه بیر آز دؤزون.',
+'login-abort-generic' => 'سیزین گیریشینیز باشاری‌سیز اولدو - دایاندیریلدی',
+'loginlanguagelabel' => 'دیل: $1',
+'suspicious-userlogout' => 'سیزین چیخیش ایستگینیز رد اولوندو. بو، براوزرین یا پروکسی-کَشلمه‌سینین دوزگون ایشله‌مه‌مه‌سین‌دن قایناق‌لانیر.',
+
+# E-mail sending
+'php-mail-error-unknown' => 'پی‌اچ‌پی‌نین mail() فونکسیاسیندا تانینمامیش خطا.',
+'user-mail-no-addy' => 'ایمیل آدرسی اولماماق‌لا، ایمیل گؤندرمگه چالیشدی',
+'user-mail-no-body' => 'بیر بوش یا چوخ قیسا یازیسی اولان ایمیل گؤندرمگه چالیشیلدی.',
+
+# Change password dialog
+'resetpass' => 'رمزی دَییشدیر',
+'resetpass_announce' => 'سیز بیر گئچرلی ایمیل اولونان کود ایله گیرمیسینیز.
+گیرمگی قورتارماق اوچون، یئنی بیر رمز قویمالیسینیز:',
+'resetpass_header' => 'حساب رمزینی دَییشدیر',
+'oldpassword' => 'اسکی رمز',
+'newpassword' => 'یئنی رمز',
+'retypenew' => 'یئنی رمزی یئنی‌دن یازین:',
+'resetpass_submit' => 'رمز یارادین و گیریش ائدین',
+'resetpass_success' => 'رمزینیز باشاری‌لا دَییشدیرلدی! ایندی گیریرسینیز...',
+'resetpass_forbidden' => 'رمزلر دَییشیلمز',
+'resetpass-no-info' => 'بو صحیفه‌نی دوغرو گؤردوگونوز اوچون سیستمه گیرمه‌لیسینیز.',
+'resetpass-submit-loggedin' => 'رمزی دَییشدیر',
+'resetpass-submit-cancel' => 'لغو ائت',
+'resetpass-wrong-oldpass' => 'یانلیش گئچیجی یا ایندیکی رمز.
+اولا بیلر سیز باشاریلیق‌لا رمزینیزی دَییشمیسینیز یوخسا یئنی گئچرلی رمز ایسته‌میسینیز.',
+'resetpass-temp-password' => 'گئچیجی رمز:',
+
+# Special:PasswordReset
+'passwordreset' => 'رمزی یئنی‌له',
+'passwordreset-text' => 'حسابینیزا بیلگیلرینه گؤره یادا سالما ایمیلی آلماق اوچون، بو فورمو دولدورون.',
+'passwordreset-legend' => 'رمزی یئنی‌له',
+'passwordreset-disabled' => 'بو ویکی‌ده رمزی یئنی‌له‌مک باغلانیب‌دیر.',
+'passwordreset-pretext' => '{{PLURAL:$1|آشاغیداکی وئری پارچالارینین بیرینی وئرین}}',
+'passwordreset-username' => 'ایستیفاده‌چی آدی:',
+'passwordreset-domain' => 'دامنه:',
+'passwordreset-capture' => 'سون نتیجه ایمیل گؤستریلسین؟',
+'passwordreset-capture-help' => 'بو قوطویا علامت قویساز، (گئچیجی رمزی اولان) ایمیل ایستیفاده‌چی‌یه گؤندریلن کیمی بوردا سیزه گؤستریله‌جکدیر.',
+'passwordreset-email' => 'ایمیل آدرسی:',
+'passwordreset-emailtitle' => '{{SITENAME}}-ده حساب بیلگیلری',
+'passwordreset-emailtext-ip' => 'بیر کس (احتیمالاً سیز، $1 آی‌پی آدرسی‌له)، {{SITENAME}} ($4) سایتینداکی حسابینیز اوچون یادا سالما بیلگیلری ایسته‌ییب‌دیر. آشاغیداکی ایستیفاده‌چی {{PLURAL:$3|حسابی|حسابلاری}} بو ایمیل ایله ایلگی‌لی‌دیرلر:
+
+$2
+
+بو گئچیجی {{PLURAL:$3|رمز|رمزلر}}، {{PLURAL:$5|بیر گون|$5 گون}}‌ده {{PLURAL:$3|واختی|واختلاری}} قورتاراجاق‌دیر.
+سیز گرک ایندی سایتا گیریب و یئنی بیر رمز سئچه‌سینیز. باشقا آدام بو ایستَگی وئرمیش‌سه، یوخسا سیز اسکی رمزینیزی یادا گتیرمیشسینیزسه، و داها اونو چئویرمک ایسته‌میرسینیزسه، بو مئساژی سایماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.',
+'passwordreset-emailtext-user' => '{{SITENAME}} سایتیندا، $1 ایستیفاده‌چی، سیزین اوردا ($4) حسابینیز بیلگیلری اوچون بیر یادا سالما ایستگی وئریب‌دیر. آشاغیداکی {{PLURAL:$3|ایستیفاده‌چی|ایستیفاده‌چیلر}} بو ایمیل ایله ایلگیلیدیرلر:
+
+$2
+
+بو گئچیجی {{PLURAL:$3|رمز|رمزلر}}، {{PLURAL:$5|بیر|$5گون}} سونرا واختلاری قورتاراجاق‌دیر. 
+سیز گرک ایندی گیریب و بیر یئنی رمز سئچه‌سینیز. باشقا آدام بو ایستَگی وئرمیش‌سه، یوخسا سیز اسکی رمزینیزی یادا گتیرمیشسینیزسه، و داها اونو چئویرمک ایسته‌میرسینیزسه، بو مئساژی سایماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.',
+'passwordreset-emailelement' => 'ایستیفاده‌چی آدی: $1
+گئچیجی رمز: $2',
+'passwordreset-emailsent' => 'بیر یادا سالما ایمیلی گؤندریلیب‌دیر.',
+'passwordreset-emailsent-capture' => 'آشاغیدا گؤستریلن کیمی بیر یادا سالما ایمیلی گؤندریلیب‌دیر.',
+'passwordreset-emailerror-capture' => 'آشاغیدا گؤستریلن کیمی بیر یادا سالما ایمیل یارادیلیب‌دیر، اما ایستیفاده‌چی‌یه گؤندرمگی باشاریلی اولمادی: $1',
+
+# 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' => 'قالین یازی',
+'italic_sample' => 'اَیری یازی',
+'italic_tip' => 'اَیری یازی',
+'link_sample' => 'باغلانتی باشلیغی',
+'link_tip' => 'ایچری باغلانتی‌سی',
+'extlink_sample' => 'http://www.example.com باغلانتی باشلیغی',
+'extlink_tip' => 'خاریجی باغلانتی (http:// اؤن‌اکی‌نی اونوتمایین)',
+'headline_sample' => 'باشلیق متنی',
+'headline_tip' => '۲ یوکسک باشلیق',
+'nowiki_sample' => 'فورمت‌لشدیریلمه‌میش یازی‌نی بورا داخیل ائدین',
+'nowiki_tip' => 'ویکی فورمت‌لندیرمه‌سینی سایما',
+'image_tip' => 'یئرلشدیریلمیش فایل',
+'media_tip' => 'فایل باغلانتی‌سی',
+'sig_tip' => 'سیزین ایمضانیز واخت ایله',
+'hr_tip' => 'دوزئی خط (آز ایشلدین)',
+
+# Edit pages
+'summary' => 'قیساسی:',
+'subject' => 'قونو/باشلیق:',
+'minoredit' => 'بو بیر کیچیک دَییشدیرمه‌دیر',
+'watchthis' => 'بو صفحه‌نی ایزله',
+'savearticle' => 'صحیفه‌نی قئید ائت',
+'preview' => 'اؤن‌گؤستریش',
+'showpreview' => 'سیناق گؤستریش',
+'showlivepreview' => 'دیری اؤن‌گؤستریش',
+'showdiff' => 'دَییشیکلیکلری گؤستر',
+'anoneditwarning' => "'''دیقت:''' سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلاجاق‌دیر.",
+'anonpreviewwarning' => "''سیستمه گیرمه‌میسینیز. قئید ائتمک‌له، سیزین آی‌پی آدرسینیز بو صحیفه‌نین گئچمیشین‌ده ثبت اولوناجاقدیر.''",
+'missingsummary' => "'''یادا سالما:''' سیز بیر دَییشیکلیک قیساسی یازمامیسینیز. «{{int:savearticle}}» دویمه‌سینی تیک‌لاسازسا، دَییشیکلیگینیز، قیسا شرح‌سیز اولاراق قئید اولوناجاق.",
+'missingcommenttext' => 'لوطفاً آشاغی‌دا بیر یوروم یازین.',
+'missingcommentheader' => "'''یادا سالما:''' سیز یورومونوز اوچون بیر قونو/باشلیق یازمامیسینیز.
+«{{int:savearticle}}»-ی تیک‌لاسازسا، دَییشیکلیگینیز، قونو/باشلیق-ی اولمایاراق قئید اولوناجاق‌دیر.",
+'summary-preview' => 'قیسا اؤن‌گؤستریش:',
+'subject-preview' => 'قونو/باشلیق اؤن‌گؤستریشی:',
+'blockedtitle' => 'ایستیفاده‌چی باغلانیب',
+'blockedtext' => '\' \'ایستیفاده‌چی آدی و یا آی پی عنوانینیز قاباغی باغلانیب دیر.\'
+
+سیزی باغلایان$ 1. الیله اولوب دیر 
+باغلاماق سببی:\' $ 2.
+
+* باغلانمانین باشلانان زامانی: $ 8
+* باغلانمانین قورتولان زامانی: $ 6
+* باغلانما مدتی: $ 7
+
+گؤستریلن سببه گؤره ائنگئللئنمئنیزین اویغون اولمادیغینی دوشونورسونوزسه، $ 1 یا دا باشقا بیر [[{{MediaWiki:Grouppage-sysop}}|مدیر]]  ایله بو وضعیتی گؤروشه بیلرسینیز. [[Special:Preferences|ترجیح لرینیز]] قیسمینده اعتبارلی بیر ائ-پوچت اونوانی گیرمئدیسئنیز "ایستیفاده‌چییه ائ-پوچت گؤندر" خصوصیتینی ایستیفاده ائده، ترجیهلرینیز ایمیل عنوانینیزی علاوه ایمیل گؤندرمک حقوقونا صاحب اولاجاقسینیز.
+بو آنکی باغلانما عنوانینیز $ 3، ائنگئللئنمئ نؤمره‌نیز # $ 5.
+بیر ایداره‌چی‌لر وضعیتینیز حاقیندا معلومات آلماق ایستدیگینیزده و یا هر هانسی بیر سورگودا بو معلومات‌لار لازیم اولا‌جاق، خاهیش ائدیریک نوت ائدین.',
+'autoblockedtext' => '
+\' \'ایستیفاده‌چی آدی و یا آی پی عنوانینیز قاباغی باغلانیب دیر.\'
+
+سیزی باغلایان$ 1. الیله اولوب دیر 
+باغلاماق سببی:\' $ 2.
+
+* باغلانمانین باشلانان زامانی: $ 8
+* باغلانمانین قورتولان زامانی: $ 6
+* باغلانما مدتی: $ 7
+
+گؤستریلن سببه گؤره ائنگئللئنمئنیزین اویغون اولمادیغینی دوشونورسونوزسه، $ 1 یا دا باشقا بیر [[{{MediaWiki:Grouppage-sysop}}|مدیر]]  ایله بو وضعیتی گؤروشه بیلرسینیز. [[Special:Preferences|ترجیح لرینیز]] قیسمینده اعتبارلی بیر ائ-پوچت اونوانی گیرمئدیسئنیز "ایستیفاده‌چییه ائ-پوچت گؤندر" خصوصیتینی ایستیفاده ائده، ترجیهلرینیز ایمیل عنوانینیزی علاوه ایمیل گؤندرمک حقوقونا صاحب اولاجاقسینیز.
+بو آنکی باغلانما عنوانینیز $ 3، ائنگئللئنمئ نؤمره‌نیز # $ 5.
+بیر ایداره‌چی‌لر وضعیتینیز حاقیندا معلومات آلماق ایستدیگینیزده و یا هر هانسی بیر سورگودا بو معلومات‌لار لازیم اولا‌جاق، خاهیش ائدیریک نوت ائدین.',
+'blockednoreason' => 'دلیل وئریلمه‌ییب',
+'whitelistedittext' => 'صحیفه‌لری دَییشمک اوچون گرک $1.',
+'confirmedittext' => 'سیز صحیفه‌لری دَییشدیرمک‌دن اؤنجه، ایمیل آدرسینیزی دوغرولامالیسینیز.
+لوطفاً ایمیل آدرسینیزی [[Special:Preferences|ایستیفاده‌چی تنظیملری]]نیزدن بیلدیریب و دوغرولایین.',
+'nosuchsectiontitle' => 'بؤلوم تاپیلانمادی',
+'nosuchsectiontext' => 'سیز بیر وار اولمایان بؤلومو دَییشدیرمگه چالیشدینیز.
+اولا بولر سیز صحیفه‌یه باخاندا، او بؤلوم سیلینیب یوخسا داشینیب‌دیر.',
+'loginreqtitle' => 'گیریش لازیم‌دیر',
+'loginreqlink' => 'گیریش',
+'loginreqpagetext' => 'باشقا صحیفه‌لری گؤرمک اوچون گرک $1.',
+'accmailtitle' => 'رمز گؤندریلدی',
+'accmailtext' => "[[User talk:$1|$1]] اوچون بیر راست‌گله رمز یارادیلیب و $2-ه گؤندریلدی.
+
+بو یئنی حسابین رمزی، گیرندن سونرا ''[[Special:ChangePassword|رمز دَییشدیرمه]]'' صحیفه‌سیندن دَییشیله بیلر.",
+'newarticle' => '(یئنی)',
+'newarticletext' => "مؤوجود اوْلمايان صحیفه‌‌يه اوْلان کئچیدی ایزله‌دینیز. 
+آشاغیداکی ساحه‌‌يه مظمونونو يازاراق بۇ صحیفه‌‌نی '''سیز''' يارادا بیلرسینیز. (علاوه‌‌ معلومات اۆچون [[{{MediaWiki:Helppage}}|کؤمک صحیفه‌‌سینه]] باخین). اگر بۇ صحیفه‌‌يه سهون گلمیسینیزسه ساده‌جه اوْلاراق براوزئرین '''گئری''' دۆيمه‌سینه وۇرون.",
+'anontalkpagetext' => "''بو صحیفه قئیدیات‌دان کئچممیش و یا داخیل اولمامیش آنونیم ایستیفادچییه عایید موذاکیره صحیفه‌سی‌دیر.
+اونا گؤره بو ایستیفادچینی رقم‌لردن عبارت ایپ اونوانی ایله معین ائتمک مجبوریتیندییک.
+بئله ایپ اونوان بیر نئچه فرد طرفین‌دن ایستیفاده‌ده اولا بیلر.
+اگر سیز آنونیم ایستیفادچیسینیزسه و بو مئساژین سیزه عایید اولمادیغینی دوشونورسونوزسه، اوندا  [[Special:UserLogin/signup|قئیدیات‌دان کئچین]] و یا [[Special:UserLogin|داخی اولون]].''",
+'noarticletext' => 'ایندی بو صحیفه‌ده یازی یوخدور.
+سیز آیری صحیفه‌‌لرده [[Special:Search/{{PAGENAME}}|بو باشلیق اوچون آختارا بیلرسیز]]،
+یا دا <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ایلگیلی قئیدلری آختارا بیلرسیز]،
+یا دا [{{fullurl:{{FULLPAGENAME}}|action=edit}} بو صحیفه‌نی دَییشدیره بیلرسیز]</span>.',
+'noarticletext-nopermission' => 'بو صحیفه‌‌ ایندی بوشدور. 
+باشقا صحیفه‌‌لرده عینی آددا صحیفه‌‌نی  [[Special:Search/{{PAGENAME}}| آختار]], علاقه‌‌لی قئيدلره 
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} باخا],
+و يا صحیفه‌‌نی  [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə]</span> ائده بیلرسینیز.',
+'missing-revision' => '«{{PAGENAME}}» صحیفه‌سی اوچون $1 نومره‌لی نوسخه یوخدور.
+
+عموماُ بو ایشکال، واختی گئچمیش بیر باغلانتی ایله سیلینمیش بیر صحیفه‌یه گلنده، قاباغا گلر.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمک سیاهی]‌سینده باشقا بیلگیلر اولا بیلر.',
+'userpage-userdoesnotexist' => '«$1» ایستیفاده‌چی حسابی یارانماییب‌دیر.
+بو صحیفه‌نی یارادماق یوخسا دَییشدیرمگینه بیر ده باخین.',
+'userpage-userdoesnotexist-view' => '«$1» ایستیفاده‌چی حسابی یارانماییب‌دیر.',
+'blocked-notice-logextract' => 'بو ایستیفاده‌چی ایندی باغلانیب‌دیر.
+باغلاماق سیاهی‌سینده‌کی سون یازی آشاغیدا قایناق اوچون گلیب‌دیر:',
+'clearyourcache' => "' 'قئید:' یازدیق‌دان سونرا دییشیک‌لیک‌لری گؤرمک اوچون براوزئرینیزین کئش یادداشیندا تمیزلمه‌نیز لازیم اولا بیلر.
+* 'فایرفاکس / سافاری:''Shift'' دویمه‌سینه باسین \"یئنی‌دن یوکله\"-ا داخیل اولون یا دا ''Ctrl-F5'' یا ''Ctrl-R'' ائدین (ماج اوچون ''⌘-R'').
+* 'گووگل کروم:'''Ctrl+Shift+R'' باسین. (ماج اوچون ''⌘-Shift-R'')
+* 'اینترنت ایکسپئلور:''' کلید ''Ctrl'' باسین یئنی‌لئ 'یئ داخیل اولون یا دا ''Ctrl-F5'' ائدین.
+* 'اوپئرا:' آلت‌لری → سئچیملر 'دن اؤنبئللیغی ''Tools &rarr; Preferences'' تمیزلیین.",
+'usercssyoucanpreview' => "'''اؤنری:''' یئنی سی‌اس‌اس-ی قئید ائتمک‌دن اؤنجه، یوخلاماق اوچون، «{{int:showpreview}}» دویمه‌سینی ایشلدین.",
+'userjsyoucanpreview' => "'''اؤنری:''' یئنی جاوااسکریپتی قئید ائتمک‌دن اؤنجه، یوخلاماق اوچون، «{{int:showpreview}}» دویمه‌سینی ایشلدین.",
+'usercsspreview' => "'''خاتیرلادیریق کی، سیز یالنیز سی‌اس‌اس-ده سیناق گؤستریشی ائتمیسینیز.'''
+''''بو هله یادداشدا ساخلانیلماییب!'''",
+'userjspreview' => "'خاتیرلادیریق کی، سیز یالنیز سی اس اس -ده تئست/سیناق گؤستریشی ائتمیسینیز.'
+'بو هله یادداشدا ساخلانیلماییب!'",
+'sitecsspreview' => "'''خاتیرلادیریق کی، سیز یالنیز سی‌اس‌اس-ده سیناق گؤستریشی ائتمیسینیز.'''
+'''بو هله یادداشدا ساخلانیلماییب!'''",
+'sitejspreview' => "'خاتیرلادیریق کی، سیز یالنیز ژاواسجریپت کودوندا سیناق گؤستریشی ائتمیسینیز.'
+'بو هله یادداشدا ساخلانیلماییب!'",
+'userinvalidcssjstitle' => 'خاتیرلادیرق:\' \'"$1" آدییلا بیر پوشه یوخ‌دور. پوشه-آدی.css و. js فایل‌لارینین آدلاری کیچیک حرف ایله یازماسی لازیم‌دیر، یعنی {{ns:user}}: تمل / vector.css دئییل، {{ns:user}}: تمل / Vector.css.',
+'updated' => '(گونجل‌لندی)',
+'note' => "'''دیقت:'''",
+'previewnote' => "'''بونون ساده‌جه بیر سیناق گؤستریشی اولدوغونو نظرده آلین.'''
+سیزین دییشیکلرینیز هله قئید اولونماییب!",
+'continue-editing' => 'دَییشدیرمه یئرینه گئت',
+'previewconflict' => 'بو سیناق گؤستریشی‌دیر و یادداشدا ساخلایاجاغینیز تق‌دیرده متنین دییشدیر صحیفه‌سی‌نین یوخاری حیسه‌سینده نتیجه‌نین نئجه اولاجاغینی گؤستریر.',
+'session_fail_preview' => "'''اوزر ایستییریک! سیزین دییشتیرینیز‌ ساخلانیلمادی. لطفاً بیر داها تکرار ائدین. پروبلئم حل اولونماسا حسابینیزدان [[Special:UserLogout|چیخین]]  و یئنی‌دن داخیل اولون.'''",
+'session_fail_preview_html' => "'''اوزر ایستییریک! داخیل وئری‌سی‌نین ایتمه‌سین‌دن گؤره تنظیملمه‌نیزی اعمال کئچیره بیلمیجیی.' '
+
+' چونکی {{SITENAME}} سایتیندا raw هتمل تأثیرین‌دیر،تا جاوااسکریپت هوجوم‌لارینا تدبیر اولا‌راق گیزلنمیش‌دیر.'
+
+' 'گر بو حاق‌لی بیر تنظیملمه گیریش میسئ، لطفاً یئنی‌دن جهد ائدین. اگر هله چالیشمازسا، [[Special:UserLogout|خارج شوید]] یئنی‌دن ایجلاس آچماغی یوخلایین.' '",
+'token_suffix_mismatch' => "'' ' ديَیشیکلیگی‌نین گئری چئوریلدی، چونکی آلیجی‌نین تنزیمله‌مه کوتوجوغونداکی دورغو ایشاره‌لرینی پوزدو. 
+ديَیشیکلیگی‌نین، صحیفه‌‌ متنینده پوزولماغی اؤنله‌مک اوچون گئری چئوریلدی. 
+اگر پروبلئملی بیر wئب-باسئد آنونیم پروکسی خیدمتی ایستیفاده بو حادثه‌‌ بضا رئاللاشا بیلر.'' '",
+'edit_form_incomplete' => "'''دییشیک‌لیک فورماسی اوچون بعضی سئروئرلره ایشلمه‌دی؛ ائتدیگینیز دییشیک‌لیک‌لر بوزولمامیشتیر، نظردن کئچیریب یئنی‌دن سینایین.'",
+'editing' => '<font style="color:red">$1</font> دییشدیریلیر',
+'creating' => '$1 یارادیلیر',
+'editingsection' => '$1 دَییشدیریلیر (بؤلوم)',
+'editingcomment' => '$1 دَییشدیریلیر (یئنی بؤلوم)',
+'editconflict' => 'عینی واختدا دییشدیرمک: $1',
+'explainconflict' => "سیز صحیفه‌‌نی رئداکته باشقا بیری ده ديَیشیکلیک ائتدی. 
+يوخاریداکی يازی صحیفه‌‌نین بو آنکی حالینی گؤستریر. 
+سیزین ديَیشیکلیکلری‌نین آلتا گؤستریلمیشدیر. سون دئغیشیکلئرینیزی يازی‌نین ایچینه داخیل ائتمه‌يینیز لازیم اولاجاق. 
+«{{int:savearticle}}» ائ باسدیغینیزداع' ' يالنیزعع' يوخاریداکی يازی يازیلاجاق.",
+'yourtext' => 'یازینیز',
+'storedversion' => 'قئید ائدیلمیش نوسخه',
+'nonunicodebrowser' => "' 'دیققت: آختاریش برنامه نیز اویغون دئییل.
+صحیفه‌لری اعتبارلا دییشدیرمیینیزه ایجازه وئرمک اوچون: آسجیی اولمایان کاراکتئرلر دییشدیرمه قوتوسوندا اونالتیلیک کودلار اولا‌راق گؤرونه‌جک.' '",
+'editingold' => "'دیققت! سیز بو صحیفه‌نین کؤهنه نوسخه سین دییشدیر ائدیرسینیز. مقالنی یادداشدا ساخلایاجاغینیز حالدا بو نوسخه سونرا ائدیلمیش هر بیر دییشیک‌لیک ایتیریله‌جک.'",
+'yourdiff' => 'فرقلر',
+'copyrightwarning' => 'خاهیش اولونور دقته آلاسینیز کی، {{SITENAME}}داکی بوتون فالیت‌لرینیز $2 لیسئنزیاسینا تابع اولدوغو حساب ائدیلیر (تفرروات اوچون باخ: $1). اگر یازدیق‌لارینیزین اساس‌لی شکیلده رئداکته ائدیلمه‌سینی و ایستنیلدیگی واخت باشقا یئره اؤتورولمه‌سینی ایستمیرسینیزسه، یازی‌لارینیزی بورادا درج ائتمیین.
+<br />
+سیز عینی زاماندا سؤز وئریرسینیز کی، بو یازی‌لاری سیز اؤزونوز یازمیسینیز و یا اونلاری هامییا آچیق موهیت‌دن یا دا بونا بنزر منبع‌دن کؤچورموسونوز.
+
+----
+
+</div> ایستیلئ="فونت-weight: بولد؛ فونت-سیزئ: 110%؛ جولور:رئد؛">موللیف حقوق‌لاری ایله قورونموش هئچ بیر ایشی ایجازه‌سیز درج ائتمیین!</div>',
+'copyrightwarning2' => 'خاهیش ائدیریک، {{SITENAME}} سایتینا ائده‌جه‌یم بوتون روسوم دیگر عضو‌لر طرفین‌دن دوزئنلئنئبیلئجئغینی، دییش‌دیریله و یا سیلینئبیلئجئغینی خاتیرلایین. یازی‌لارینین مئرهامئتسیزجئ دئغیشتیریلی بیلمسینه راضی‌لیق گؤسترمیرسه بورا ایشتیراک ائتمیین. <br />
+آیریجا بو علاوه یازینی سیزین یازدیغینیزدان یا دا سربست کوپیالاما ایجازه‌سی وئرن بیر قایناق‌دان کوپیالادیغینیزی بیزه اؤهده‌لرینه ائتمکدسینیز (دئتال‌لار اوچون ایستیناد: $1).',
+'longpageerror' => "خطا: داخیل متنین اوزون‌لوغو قبول ائدیله بیلر ان چوخ اوزونلوق اولان {{PLURAL: $2 | بیر کیلوبایت | $2 کیلوبایت}} دان چوخ‌دور و {{PLURAL: $1 | بیر کیلوبایت | $1 کیلوبایت}} بؤیوکلوگونده‌دیر.'
+دییشیک‌لیگی‌نین کایدئدیلئمئز.",
+'readonlywarning' => "'''دیققت: باخیم سببی ایله وئریلن‌لر بازاسی بو آندا کیلیدلی‌دیر. بو سببله دییشیک‌لیک‌لری‌نین بو آندا قئیدئدیل میجاغدیر. یازدیق‌لارینیزی باشقا بیر پرونده ده آلیب ساخلایا و داها سونرا تکرار بورا گتیریب یازا بیلرسینیز '
+
+کیلیدله‌ین خیدمتله بو شرحی علاوه ائتمیش‌دیر: $1",
+'protectedpagewarning' => "' 'خاطیرلیریق: بو ​​صحیفه باغلانیب دیر و یالنیز مودیر اولان‌لار طرفین‌دن دییش‌دیریله بیلر.'
+سون گونده‌لیک گیردی‌سی ایستیناد مقصدلی آشاغیدا وئریلمیش‌دیر:",
+'semiprotectedpagewarning' => "'قئید:' بو صحیفه محافظه‌لی اولدوغو اوچون یالنیز قئیدیات‌دان کئچمیش ایستیفاده‌چی‌لر دییشدیر ائده بیلرلر.",
+'cascadeprotectedwarning' => "'''خاطیرلایریق:''' بو صحیفه بو یئرده {{PLURAL:$1|صحیفهٔ|صحیفه‌لر}} یئرلشمیه یه گوره آبشاری- حفظ اولونوب آلتیندا باغلانیب بونجه مودیر فقط ائلیه بیله لر دییشدیر ائده بیلسین لر",
+'titleprotectedwarning' => "'دیققت! بو صحیفه محافظه‌لی‌دیر، یالنیز [[Special:ListGroupRights|ایجازه سی اولان]] ایستیفاده‌چی‌لر اونو دییشدیر ائده بیلرلر.'",
+'templatesused' => '{{PLURAL:$1|شابلون}} بو صفحه‌ده ایشلنیب‌دیر:',
+'templatesusedpreview' => '{{PLURAL:$1|بیر|$1}} شابلون بو اؤن‌گؤستریش‌ده ایشلنیب‌دیر:',
+'templatesusedsection' => '{{PLURAL:$1|شابلون}} بو بؤلمه‌ده ایشلنیب‌دیر:',
+'template-protected' => '(قورونوب)',
+'template-semiprotected' => '(یاریم‌قورونموش)',
+'hiddencategories' => 'بو صحیفه {{PLURAL:$1|بیر گیزلی دسته‌یه|$1 گیزلی دسته‌لره}} عایددیر:',
+'nocreatetext' => '{{SITENAME}} یئنی صحیفه یارادماق ایمکانی‌نی محدودلاشدیریب‌دیر.
+سیز دالی دؤنوب و اؤنجه‌دن اولان بیر صحیفه‌نی دَییشدیره بیلرسینیز، یا دا [[Special:UserLogin|گیریب یوخسا یئنی حساب آچین]].',
+'nocreate-loggedin' => 'سیزین یئنی صحیفه‌لر یاراتماغا ایجازه‌نیز یوخدور.',
+'sectioneditnotsupported-title' => 'بؤلوم دییشدیرمه‌سی دستک‌لنمیر',
+'sectioneditnotsupported-text' => 'بو صحیفه‌ده بؤلوم دَییشدیرمه‌سی دستکلنمیر.',
+'permissionserrors' => 'ایزین خطاسی',
+'permissionserrorstext' => 'سیز آشاغیداکی {{PLURAL:$1|دلیل|دلیل‌لر}}ه گؤره، او ایشه ایجازه‌نیز یوخدور.',
+'permissionserrorstext-withaction' => 'سیز آشاغیداکی {{PLURAL:$1|دلیل|دلیل‌لر}}اوچون، $2 ایشینه ایجازه‌نیز یوخدور:',
+'recreate-moveddeleted-warn' => "'''دیقت: سیز اؤنجه‌ده سیلینمیش بیر صفحه‌نی یئنی‌دن یارادیرسینیز.'''
+
+بو صفحه‌نین یئنی‌دن یارادماغی‌نین نه‌قدر اویغون اولدوغونو گرک نظرده آلاسینیز.
+بو صفحه‌نین سیلمک و آپارماق گئچمیشی بوردا گؤستریلیب‌دیر:",
+'moveddeleted-notice' => 'بو صحیفه سیلینمیشدیر.
+معلومات اوچون آشاغیدا بو صحیفه‌نین آددَییشدیرمه و سیلمه قئيدلری گؤستریلیب‌دیر.',
+'log-fulllog' => 'بوتون بیلگی‌لری گؤستر',
+'edit-hook-aborted' => 'دوزلیش‌لر قارماق-پروسئ‌دور طرفین‌دن گئری قایتاریلیب.
+علاوه ایزاهات وئریلمه‌ییب.',
+'edit-gone-missing' => 'صحیفنی یئنی لمک مومکون دئییل.
+چوخ گومان کی، صحیفه سیلینمیش‌دیر.',
+'edit-conflict' => 'سیزله برابر دییشدیرمه',
+'edit-no-change' => 'سیزین دییشدیر قئیده آلینمامیش‌دیر. بئله کی، متنده هئچ بیر دییشدیر ائدیلممیش‌دیر.',
+'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' => 'جاوااسکریپت',
+'content-model-css' => 'سی‌اس‌اس',
+
+# Parser/template warnings
+'expensive-parserfunction-warning' => 'خبردارلیق: بو ​​صحیفه چوخ چوخ زنگین ییغیجی تجزیه ائدن چاغیریشی دستورلار ائدیر.
+
+بو $2 مراجعت آز اولما‌لی، بو آندا {{PLURAL:$2|چاغیرش وار|چاغریش وار}} و اینک {{PLURAL:$1|چاغیرش وار|$1چاغریش وار}} .',
+'expensive-parserfunction-category' => 'کیفایت قدر بؤیوک سایدا گئنیشرئسورس‌لو فونکسیا‌لارین مراجعت اولوندوغو صحیفه‌لر',
+'post-expand-template-inclusion-warning' => "'''دیققت!''' داخیل ائدیلن شابلوْنلارین حجمی حددیندن آرتیق بؤيوکدور.
+بعضی شابلوْنلار علاوه‌‌ اوْلونماياجاق.",
+'post-expand-template-inclusion-category' => 'شابلونون داخیل اولدوغو صحیفه‌‌لرین اؤلچوسو بؤيوکدور.',
+'post-expand-template-argument-warning' => "'''دیقت:''' بو صفحه‌ده، آزی بیر چوخ اوزون بویلو شابلون آرگومانی واردیر.
+بو آرگومانلارین اوستون‌دن کئچیلیب‌دیر.",
+'post-expand-template-argument-category' => 'شابلونلاردا بوراخیلمیش آرگومانلارین مؤوجود اولدوغو صفحه‌لر',
+'parser-template-loop-warning' => '[[$1]]: شابلوندا دويون تاپیلدی',
+'parser-template-recursion-depth-warning' => '($1) شابلوندا درین‌لیک لیمیتی کئچیلدی',
+'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' => 'تکرارلاما دونمه سی قبول ائدیلدی',
+'parser-unstrip-recursion-limit' => 'حداکثر ارجاع دستور دا unstrip تجاوز گئچیب دیر ($1)',
+'converter-manual-rule-error' => 'خطا ال مبدیلی قانون لاریندا',
+
+# "Undo" feature
+'undo-success' => 'بو دَییشیک‌لیک گئری آلینا بیلر. لطفاً آشاغی‌داکی موقاییسه ائتمیی نظارت ائدین، حقیقتن بو دییشیک‌لیگی ائتمک ایستدیگینیزدن امین اولون و صحیفنی یازا‌راق بیر اوولکی دییشیک‌لیگی گئرییه آلین.',
+'undo-failure' => 'دییشیک‌لیک‌لرین توققوشماسی نتیجه‌سینده گئرییه قایتارما ایشی اوغورسوز اولدو.',
+'undo-norev' => 'دوزلیش‌لر گئری قایتاریلا بیلینمیر، چونکی اونلار یا مؤوجود دئییل، یا دا سیلینیب.',
+'undo-summary' => '$1 دییشیک‌لیک [[Special:Contributions/$2|$2]] ([[User talk:$2|دانیشیق]]) طرفین‌دن گئری آلیندی​​.',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'حساب یارادماق اولمور',
+'cantcreateaccount-text' => "بو ای پی عنوانین‌دان ('$1) ایستیفاده‌چی حسابی یارادیلماسی [[User:$3|$3]] طرفین‌دن انگللنمیش‌دیر.
+
+$3 طرفین‌دن وئریلن سبب '$2",
+
+# History pages
+'viewpagelogs' => 'بو صحیفه‌نین قئیدلرینه باخ',
+'nohistory' => 'بو صحیفه اوچون دَییشدیرمه گئچمیشی یوخدور.',
+'currentrev' => 'سون نوسخه',
+'currentrev-asof' => '$1 تاریخینه کیمی سون حال',
+'revisionasof' => '$1 نوسخه‌سی',
+'revision-info' => '$1-ده $2-له یارادیلمیش نوسخه',
+'previousrevision' => 'اونجه‌کی وئرسیيا',
+'nextrevision' => 'داها یئنی نوسخه ←',
+'currentrevisionlink' => 'سون نوسخه',
+'cur' => 'ایندی',
+'next' => 'سونراکی',
+'last' => 'اؤنجه',
+'page_first' => 'ایلک',
+'page_last' => 'سون',
+'histlegend' => "فرقلری سئچمه: موقاییسه ائتمک ایسته‌دیگینیز دییشیک‌لیکلرین یانینداکی گیرده دویمه‌لره علامت قویون و سونرا Enter-ی ووروب یوخسا آشاغیداکی اویمه‌نی وورون.<br />
+آچیقلاما:'''({{int:cur}})''' =سون نوسخه ایله فرقلر ، '''({{int:last}})''' = اؤنجه‌کی نوسخه ایله فرقلر، '''{{int:minoreditletter}}''' = کیچیک دییشیک‌لیک.",
+'history-fieldset-title' => 'گئچمیشی آختار',
+'history-show-deleted' => 'یالنیز سیلینَنلر',
+'histfirst' => 'ان قاباقکی',
+'histlast' => 'ان سونراکی',
+'historysize' => '({{PLURAL:$1|بیر|$1}} بایت)',
+'historyempty' => '(بوش)',
+
+# Revision feed
+'history-feed-title' => 'دَییشیکلیکلر گئچمیشی',
+'history-feed-description' => 'ویکی‌ده بو صحیفه اوچون نوسخه‌لر گئچمیشی',
+'history-feed-item-nocomment' => '$2-ده $1',
+'history-feed-empty' => 'ایسته‌دیگینیز صحیفه یوخدور.
+اولا بیلر کی بو ویکی‌دن سیلینیب یوخسا آدی دَییشیلیب‌دیر.
+ایلگیلی یئنی صحیفه‌لری تاپماق اوچون [[Special:Search|بو ویکی‌ده آختارماغا چالیشین]].',
+
+# Revision deletion
+'rev-deleted-comment' => '(دَییشدیرمک قیساسی سیلیندی)',
+'rev-deleted-user' => '(ایستیفاده‌چی آدی سیلیندی)',
+'rev-deleted-event' => '(قئيد سیلیندی)',
+'rev-deleted-user-contribs' => '[ایستیفاده‌چی آدی و يا ای-پی اونوانی سیلیندی - ديَیشیکلیک چالیشمالاردان چیخاریلدی]',
+'rev-deleted-text-permission' => "بو ديَیشیکلیک بو صحیفه‌دن '''سیلینیب دیر.'''",
+'rev-deleted-text-unhide' => "بو صحیفه رئویزیونو 'سیلینمیش.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاهه سیلینمش] دئتال‌لاری بیلر.
+بیر خیدمتله اولا‌راق اگر داوام ائتسه‌نیز [$1 بو رئویزیونو هله گؤره بیلرسینیز].",
+'rev-suppressed-text-unhide' => 'صحیفه‌نین بو نوسخه سی سیلینیب.
+مومکون‌دور کی، بونون سببی [{{fullurl:{{#Special:Log}}/delete|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-unhide-diff' => "بو دییشیک‌لیگی‌نین رئویزیون‌لارین‌دان بیری 'سیلینمیش.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمه گوندلیگینده] دئتال‌لار اولا بیلر.
+بیر خیدمتله اولا‌راق اگر داوام ائتسه‌نیز [$1 بو دییشیک‌لیگی هله گؤره بیلرسینیز].",
+'rev-suppressed-unhide-diff' => "بو دییشیک‌لیگی‌نین رئویزیون‌لارین‌دان بیری 'باسدیریلمیش.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} دایاندیرما گوندلیگینده] دئتال‌لار اولا بیلر.
+بیر خیدمتله اولا‌راق اگر داوام ائتسه‌نیز [$1 بو دییشیک‌لیگی هله گؤره بیلرسینیز].",
+'rev-deleted-diff-view' => "بو دییشیک‌لیگی‌نین رئویزیون‌لارین‌دان بیری 'سیلینمیش.
+بیر خیدمتله اولا‌راق بو دییشیک‌لیگی گؤره بیلرسینیز؛ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمه گوندلیگینده] دئتال‌لار اولا بیلر.",
+'rev-suppressed-diff-view' => "بو دییشیک‌لیگی‌نین رئویزیون‌لارین‌دان بیری 'باسدیریلمیش.
+بیر خیدمتله اولا‌راق بو دییشیک‌لیگی گؤره بیلرسینیز؛ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} دایاندیرما گوندلیگینده] دئتال‌لار اولا بیلر.",
+'rev-delundel' => 'گؤستر/گیزلت',
+'rev-showdeleted' => 'گؤستر',
+'revisiondelete' => 'نوسخه‌لری سیل/قایتار',
+'revdelete-nooldid-title' => 'هدف نوسخه گئچرسیزدیر',
+'revdelete-nooldid-text' => 'بو فونکسیانی حیاتا کئچیرمک اوچون مویین هدف دییشیک‌لیک و یا دئغیشیکیلئرینیز یوخ. تقدیم ائدیلمیش اولان رئویزیون مؤوجود دئییل، و یا مؤوجود رئویزیونو گیزلتمه‌یه چالیشیرسینیز.',
+'revdelete-nologtype-title' => 'هئچ بیر قئيد تیپی وئریلمه‌دی',
+'revdelete-nologtype-text' => 'بو عملیاتی دؤوره‌يه سوخماق اوچون بیر قئيد تیپی ایفاده ائتمه‌دینیز.',
+'revdelete-nologid-title' => 'يانلیش ژورنال يازیسی',
+'revdelete-nologid-text' => 'بو ایتفاق حیاتا کئچیرمک اوچون هئچ بیر قئید تیپی ایفاده ائدیلمه‌دی و یا گؤستریلن قئید تیپی مؤوجود دئییل.',
+'revdelete-no-file' => 'آختاریلان فايل مؤوجود دئيیل',
+'revdelete-show-file-confirm' => '"<nowiki>$1</nowiki>" فایلینین $2 $3 تاریخ‌لی سیلینمیش بیر رئداکته‌سینی گؤرمک ایستدیگینیزدن امینسیزینیزمی؟',
+'revdelete-show-file-submit' => 'بلی',
+'revdelete-selected' => "[[:$1]] صحیفه‌سی‌نین {{PLURAL:$2|سئچیلمیش نوسخه لری|سئچیلمیش نوسخه لری }}:'",
+'logdelete-selected' => "'ژورنالین {{PLURAL:$1|سئچیلمیش قئیدی|سئچیلمیش قئیدلری}}:'",
+'revdelete-text' => "' 'سیلینئن رئویزیون‌لار و حادثه‌لر هله صحیفه کئچمیشینده و گونده‌لیک‌لرده گؤرونه‌جک، لاکین ترکیبین پارچا‌لاری عمومی اولا‌راق ائریشیلئمئیئجئکتیر.'
+{{SITENAME}} سایتین‌داکی دیگر ایداره‌چی‌لر گیزلی مزمونا چاتا بیلر و علاوه محدودیت‌لر آیارلانمادییسا بو اینتئرفئیس ایله گئری گتیره بیلر.",
+'revdelete-confirm' => 'خاهیش ائدیریک، بونو ائتمک ایستدیگینیزی، نتیجه‌لرینی آنلادیغینیزی، و بونو [[{{MediaWiki:Policy-url}}| پرینسیپ‌لره]] گؤره ائدیر اولدوغونوزو تسدیق ائدین.',
+'revdelete-suppress-text' => "ساخلاما 'یالنیز آشاغی‌داکی حال‌لار اوچون ایستیفاده ائدیلمه‌لی‌دیر:
+* اویگون‌سوز فردی معلومات
+*:' ائو اونوان‌لاری و تئلئفون نؤمره‌لری، سوسیال تهلوکه‌سیزلیک نؤمره‌لری، و س.'",
+'revdelete-legend' => 'گؤرونوش محدودیتلری قوی:',
+'revdelete-hide-text' => 'صحیفه‌‌نین بو وئرسیياسی‌نین متنینی گیزله',
+'revdelete-hide-image' => 'فایلین ایچینده‌کیلرینی گیزلت',
+'revdelete-hide-name' => 'حرکتی و مقصدی گیزله‌مک',
+'revdelete-hide-comment' => 'ديَیشیکلیکلرین شرحینی گیزله',
+'revdelete-hide-user' => 'دَییشدیرن یازارین ایستیفاده‌چی آدینی/آی‌پی اونوانینی گیزله',
+'revdelete-hide-restricted' => 'بیلگی‌لری ایدارچی‌لردن ده گیزله',
+'revdelete-radio-same' => '(ديَیشدیرمه)',
+'revdelete-radio-set' => 'بلی',
+'revdelete-radio-unset' => 'یوخ',
+'revdelete-suppress' => 'بیلگی‌لری ایداره‌چیلردن ده گیزله',
+'revdelete-unsuppress' => 'برپا اولونان وئرسیا‌لار اوزرین‌دن محدودیت‌لری قال‌دیر',
+'revdelete-log' => 'ندن:',
+'revdelete-submit' => 'سئچیلمیش {{PLURAL:$1|نوسخه|نوسخه لری}} تطبیق ائت',
+'revdelete-success' => "'نوسخه لرین گؤرونوشو یئنیلندی.'",
+'revdelete-failure' => "'نوسخه لرین گؤرونوشو دییش‌دیریله بیلمز:'$1",
+'logdelete-success' => "''' گونده‌لیک گؤرونوشو اوغورلا تاماملاندی.'''",
+'logdelete-failure' => "'''ژورنالین گؤرونوشو تنزیملنمه‌ییب:'''
+$1",
+'revdel-restore' => 'گؤرونوشو دییش',
+'revdel-restore-deleted' => 'سیلینمیش نوسخه‌لر',
+'revdel-restore-visible' => 'گؤرونن نوسخه‌لر',
+'pagehist' => 'صحیفه‌‌نین گئچمیشی',
+'deletedhist' => 'سیلین‌میش گئچمیشی',
+'revdelete-hide-current' => 'تاریخ $2 و ساعات $1-ده‌کی آیتئمی گیزلدمک خطاسی: بو ایندیکی نوسخه‌دیر و گیزلدیلنمز.',
+'revdelete-show-no-access' => 'تاریخ $2 و ساعات $1-ده‌کی آیتئمی گؤسترمک خطاسی: بو آیتئم «محدودلاشدیریلیب» و سیز اونا ال تاپانماسینیز.',
+'revdelete-modify-no-access' => 'تاریخ $2 و ساعات $1-ده‌کی آیتئمی دَییشدیرمک خطاسی: بو آیتئم «محدودلاشدیریلیب» و سیز اونا ال تاپانماسینیز.',
+'revdelete-modify-missing' => '$1 نومره‌لی آیتئمی دَییشدیرمک خطاسی: بو آیتئم دیتابیس‌ده دئییل!',
+'revdelete-no-change' => "'''دیقت:''' تاریخ $2 و ساعات $1-ده‌کی آیتئم اوچون اؤنجه‌دن گؤرونوش تنظیملری ایستگی وئریلیب‌دیر.",
+'revdelete-concurrent-change' => 'تاریخ $2 و ساعات $1-ده‌کی آیتئمی گیزلدمک خطاسی: نظره گلیر سیز اونو دَییشدیرنده، باشقا بیر کس اونو دَییشیب‌دیر.
+لوطفاً سیاهی‌لره باخین.',
+'revdelete-only-restricted' => 'تاریخ $2 و ساعات $1-ده‌کی آیتئمی گیزلدمک خطاسی: سیز باشقا گؤرونوش تنظیملرینین هئچ بیرینی سئچمه‌مک‌له، آیتئملری ایداره‌چیلردن گیزلده بیلنمزسینیز.',
+'revdelete-reason-dropdown' => '*عمومی سیلمک دلیل‌لری
+** کوپی حاقی نقضی
+** اویغون‌سوز باخیش یوخسا شخصی بیلگیلر
+** اویغون‌سوز ایستیفاده‌چی آدی
+** ایفتیرا احتیمالی اولان بیلگیلر',
+'revdelete-otherreason' => 'آیری/آرتیق دلیل:',
+'revdelete-reasonotherlist' => 'آیری دلیل‌لر',
+'revdelete-edit-reasonlist' => 'سیلمک دلیل‌لرینی دَییشدیر',
+'revdelete-offender' => 'نوسخه یازاری:',
+
+# Suppression log
+'suppressionlog' => 'سؤندورمک سیاهی‌سی',
+'suppressionlogtext' => 'آشاغی‌دا ایداره‌چیلردن گیزلنن سیلمکلر و باغلاماقلار شامیل اولان سیاهی گؤستریلیر.
+ایندیکی ایش‌ده اولان باغلاماقلارین سیاهی‌سینی گؤرمگه، [[Special:BlockList|باغلانانلار صحیفه‌سی]]نه باش وورون.',
+
+# History merging
+'mergehistory' => 'صحیفه‌لر بیرلشدیرمه گئچمیشی',
+'mergehistory-header' => 'بو صحیفه ایله، سیز بیر صحیفه‌نین نوسخه‌لرینین گئچمیشینی، یئنی بیر صحیفه‌نینکی ایله بیلشدیره بیلرسینیز.
+آرخایین اولون کی بو دَییشیکلیک تاریخی صحیفه‌نین داوامینی ساخلایاجاق‌دیر.',
+'mergehistory-box' => 'ایکی صحیفه‌نین نوسخه‌لرینی بیرلشدیرمک:',
+'mergehistory-from' => 'قایناق صحیفه:',
+'mergehistory-into' => 'مقصد صحیفه:',
+'mergehistory-list' => 'بیلشدیریله بیلن دَییشیکلیک گئچمیشی',
+'mergehistory-merge' => '[[:$1]]-ین آشاغیداکی نوسخهلری، [[:$2]]-ین‌له بیرلشه بیلرلر.
+یالنیز بلیرلنمیش زامان‌دا و اوندان اؤنجه ائدیلمیش دَییشیکلیکلری بیرلشدیرمک اوچون، گیرده دویمه‌لردن ایستیفاده ائدین.
+دیقت ائدین کی دولانما باغلانتیلارینی ایشلدمک، بو سوتونو یئنی‌له‌یه‌جکدیر.',
+'mergehistory-go' => 'بیرلشدیریله بیلن دَییشیکلیکلری گؤستر',
+'mergehistory-submit' => 'نوسخه‌لری بیرلشدیرمک',
+'mergehistory-empty' => 'نوسخه‌لرین هئچ بیری بیرلشدیریلنمزلر.',
+'mergehistory-success' => '[[:$1]]-ین {{PLURAL:$3|بیر|$3}} نوسخه‌سی باشاری‌لا [[:$2]]-له بیرلشدیریلدی.',
+'mergehistory-fail' => 'گئچمیش بیرلشدیریلنمه‌دی، لوطفاً صحیفه و زامان پارامئترلرینی یئنی‌دن یوخلایین.',
+'mergehistory-no-source' => '$1 قایناق صحیفه‌سی یوخدور.',
+'mergehistory-no-destination' => '$1 مقصد صحیفه‌سی یوخدور.',
+'mergehistory-invalid-source' => 'قایناق صحیفه‌نین گرک دوزگون باشلیغی اولسون.',
+'mergehistory-invalid-destination' => 'مقصد صحیفه‌نین گرک دوزگون باشلیغی اولسون.',
+'mergehistory-autocomment' => '[[:$1]]، [[:$2]] ایله بیرلشدیریلدی',
+'mergehistory-comment' => '[[:$1]]، [[:$2]] ایله بیرلشدیریلدی: $3',
+'mergehistory-same-destination' => 'قایناق و مقصد صحیفه‌لر، بیر اولانمازلار',
+'mergehistory-reason' => 'ندن',
+
+# Merge log
+'mergelog' => 'بیرلشدیرمه سیاهی‌سی',
+'pagemerge-logentry' => '[[$1]]، [[$2]] ایله بیرلشدیریلدی (نوسخه‌لر $3-ه قدر)',
+'revertmerge' => 'آيیر',
+'mergelogpagetext' => 'آشاغدی‌دا، ان سون صحیفه بیرلشدیریلمه‌لری گؤستریلیر.',
+
+# Diffs
+'history-title' => '«$1»-ین گئچمیشی',
+'difference-title' => '«$1» نوسخه‌لرینین آراسینداکی فرقلری',
+'difference-title-multipage' => '«$1» و «$2» صحیفه‌لرین آراسینداکی فرقلر',
+'difference-multipage' => '(صحیفه‌لر آراسینداکی فرقلر)',
+'lineno' => 'خط $1:',
+'compareselectedversions' => 'سئچیلمیش نوسخه‌لری قارشیلاشدیر',
+'showhideselectedversions' => 'سئچیلمیش نوسخه‌لری گؤستر/گیزلد',
+'editundo' => 'قایتار',
+'diff-multi' => '({{PLURAL:$2|بیر|$2}} ایستیفاده‌چی طرفیندن ائدیلن {{PLURAL:$1|بیر|$1}} اورتا دَییشیکلیک گؤستریلمیر)',
+'diff-multi-manyusers' => '{{PLURAL:$2|بیر|$2}}-دن چوخ ایستیفاده‌چی یارادان {{PLURAL:$1|بیر|$1}} نوسخه، گؤستریلمه‌ییب‌دیر',
+'difference-missing-revision' => 'بو فرقین ($1) {{PLURAL:$2|بیر|$2}} نوسخه‌سی تاپیلانمادی.
+
+عموماً بو خطا، سیلینن بیر صحیفه‌یه واختی گئچمیش بیر فرق باغلانتی‌سیلا گلمک ایله آرا گلر.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}سیلمک سیاهی‌سی]ندا باشقا بیلگیلر اولا بیلر.',
+
+# Search results
+'searchresults' => 'آختاریش سونوجلاری',
+'searchresults-title' => '«$1» اوچون آختاریش نتیجه‌لری',
+'searchresulttext' => '{{SITENAME}} سایتینی آختارماق‌دا آرتیق بیلگیلر اوچون [[{{MediaWiki:Helppage}}|{{int:help}}]]-ه باخین.',
+'searchsubtitle' => "سیز '''[[:$1]]'''-ی آختاردینیز ([[Special:Prefixindex/$1| «$1» ایله باشلانان بوتون صحیفه‌لر]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|«$1»-ه باغلانان بوتون صحیفه‌لر]])",
+'searchsubtitleinvalid' => "'''$1'''-ی آختاردینیز",
+'toomanymatches' => 'چوخلو سونوچلار تاپیلدی، لوطفاً باشقا بیر سورغویلا چالیشین.',
+'titlematches' => 'صحیفه‌‌ آدی عینیدیر',
+'notitlematches' => 'عینی صحیفه باشلیغی تاپیلمادی',
+'textmatches' => 'یازی عینی‌دیر',
+'notextmatches' => 'هئچ بیر بنزر صحیفه یازی‌سی تاپیلمادی',
+'prevn' => 'اؤنجه‌کی {{PLURAL:$1|$1}}',
+'nextn' => 'سونراکی {{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' => 'آختارماق تنظیملری',
+'searchmenu-exists' => "'''بو ویکی‌ده «[[:$1]]» آدلی صحیفه واردیر.'''",
+'searchmenu-new' => "'''بو ویکی‌ده «[[:$1]]» صحیفه‌‌سینی يارات!'''",
+'searchhelp-url' => 'Help:ایچینده‌کیلر',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1| بو اؤن‌اک ایله اولان صحیفه‌لری آختار]]',
+'searchprofile-articles' => 'مقاله‌لر',
+'searchprofile-project' => 'یاردیم و پروژه صحیفه‌لری',
+'searchprofile-images' => 'مولتی‌مئدیا',
+'searchprofile-everything' => 'هرشئی',
+'searchprofile-advanced' => 'گلیشمیش',
+'searchprofile-articles-tooltip' => '$1-ده آختار',
+'searchprofile-project-tooltip' => '$1-ده آختار',
+'searchprofile-images-tooltip' => 'فایل‌لار اوچون آختار',
+'searchprofile-everything-tooltip' => 'بوتون متنلری آختار (دانیشیق صحیفه‌لری اولماقلا)',
+'searchprofile-advanced-tooltip' => 'تاپشیریلان آدفضالاریندا آختار',
+'search-result-size' => '$1 ({{PLURAL:$2|۱ سؤزجوک|$2 سؤزجوک}})',
+'search-result-category-size' => '{{PLURAL:$1|بیر|$1}} عوضو ({{PLURAL:$2|بیر|$}} آلت‌بؤلمه، {{PLURAL:$3|بیر|$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' => 'بوتون',
+'showingresults' => "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$1|'''بیر'''|'''$1'''}} سونوجا قدر گؤستریلیر.",
+'showingresultsnum' => "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$3|'''بیر'''|'''$3'''}} سونوج گؤستریلیر.",
+'showingresultsheader' => "'''$4''' اوچون {{PLURAL:$5|'''$3'''-دن '''$1''' نتیجه|'''$3'''-دن '''$1-$2''' نتیجه}}",
+'nonefound' => "'''دیقت:''' یالنیز بعضی آدفضالاری آختاریلیر. سورغونوزو ''all:'' اؤن‌اکی‌نی آرتیرماقلا بوتون یئرلرده (او جومله‌دن دانیشیق صحیفه‌لری، شابلونلار و سونرا) آختارین، یوخسا ایسته‌دیگینیز آدفضاسینین آدینی اؤن‌اک کیمی آرتیرین و یالنیز اوردا آختارین.",
+'search-nonefound' => 'سیزین سورونوزا اویغون نتیجه تاپیلمادی.',
+'powersearch' => 'گلیشمیش آختاریش',
+'powersearch-legend' => 'گلیشمیش آختاریش',
+'powersearch-ns' => 'آدفضالاریندا آختار',
+'powersearch-redir' => 'یوللاندیرمالاری لیست ائت',
+'powersearch-field' => 'آختار:',
+'powersearch-togglelabel' => 'یوخلا:',
+'powersearch-toggleall' => 'بوتون',
+'powersearch-togglenone' => 'هئچ بیری',
+'search-external' => 'ائشیک آختاریش',
+'searchdisabled' => '{{SITENAME}} آختاریشی باغلانیب‌دیر.
+ایندی گوگل ایله آختارا بیلرسینیز.
+دیقت ائدین کی اونون {{SITENAME}} ایندئکسی، کؤهنه اولا بیلر.',
+
+# Quickbar
+'qbsettings' => 'سورعت پانئلی',
+'qbsettings-none' => 'هئچ بیری',
+'qbsettings-fixedleft' => 'سولا ثابیت',
+'qbsettings-fixedright' => 'ساغا ثابیت',
+'qbsettings-floatingleft' => 'سولا اوزن',
+'qbsettings-floatingright' => 'ساغا اوزن',
+'qbsettings-directionality' => 'ثابیت، سیزین دیل یازینیزین یولویلا',
+
+# Preferences page
+'preferences' => 'ترجیحلر',
+'mypreferences' => 'ترجیحلر',
+'prefs-edits' => 'دَییشمه‌لرین سایی:',
+'prefsnologin' => 'گیرمه‌میسینیز',
+'prefsnologintext' => 'ایستیفاده‌چی تنظیملرینی دَییشمک اوچون، <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} گیرمه‌لیسینیز]</span>.',
+'changepassword' => 'رمزی دَییشدیر',
+'prefs-skin' => 'قابیق',
+'skin-preview' => 'اؤن‌گؤستریش',
+'datedefault' => 'سئچیم‌سیز',
+'prefs-beta' => 'بئتا اؤزل‌لیکلر',
+'prefs-datetime' => 'تاریخ و واخت',
+'prefs-labs' => 'آزماییشی اؤزل‌لیکلر',
+'prefs-user-pages' => 'ایستیفاده‌چی صحیفه‌لری',
+'prefs-personal' => 'ایستیفاده‌چی پروفایلی',
+'prefs-rc' => 'سون دَییشیکلیکلر',
+'prefs-watchlist' => 'ایزله‌دیکلر',
+'prefs-watchlist-days' => 'ایزله‌دیکلرده گؤستریلن گونلر',
+'prefs-watchlist-days-max' => 'چوخو {{PLURAL:$1|بیر|$1}} گون',
+'prefs-watchlist-edits' => 'گنیشلنمیش ایزله‌مه‌لرده گؤستریلن دَییشیکلیکلرین چوخو:',
+'prefs-watchlist-edits-max' => 'چوخ سایی: ۱۰۰۰',
+'prefs-watchlist-token' => 'ایزله‌دیکلر نیشانی:',
+'prefs-misc' => 'باشقا',
+'prefs-resetpass' => 'رمزی دَییشدیر',
+'prefs-changeemail' => 'ایمیل آدرسینی دَییشدیر',
+'prefs-setemail' => 'بیر ایمیل آدرسی وئر',
+'prefs-email' => 'ایمیل ترجیحلری',
+'prefs-rendering' => 'گؤرونوش',
+'saveprefs' => 'قئید ائت',
+'resetprefs' => 'قئید ائدیلمه‌میش ترجیحلری صیفیرله',
+'restoreprefs' => 'بوتون ایلک ترجیحلری قایتار',
+'prefs-editing' => 'دَییشدیرمک‌ده',
+'prefs-edit-boxsize' => 'دَییشدیرمه پنجره‌سینین اؤلچو',
+'rows' => 'سطرلر:',
+'columns' => 'سوتونلار',
+'searchresultshead' => 'آختار',
+'resultsperpage' => 'صحیفه‌‌يه عاید تاپیلمیش نتیجه‌لر:',
+'stub-threshold' => '<a href="#" class="stub">کئچیدسیز لینکی</a> فورمات ائتمک اوچون حدود (بایت‌لارلا):',
+'stub-threshold-disabled' => 'چالیشمایان',
+'recentchangesdays' => 'سون دییشیک‌لرده گؤستریلن گون‌لرین میقداری:',
+'recentchangesdays-max' => 'ماکسیموم $1 {{PLURAL:$1|گون |گون}}',
+'recentchangescount' => 'سون ديَیشیکلیکلرده باشلیق سايی:',
+'prefs-help-recentchangescount' => 'بورایا یئنی دییشیک‌لیک‌لر، صحیفه‌لرین و ژورنال‌لارین تاریخچه‌سی داخیل‌دیر.',
+'prefs-help-watchlist-token' => 'بو ساحنی گیزلی پاروللا دولدورماغینیز سیزین ایزلمه سیاهینیز اوچون آراس‌اس یاییم کانا‌لی یارادا‌جاق‌دیر.
+بو پارولو بیلن هر کس ایزلمه سیاهینیزی اوخویا بیلر، بو سبب‌دن اعتبارلی پارول سئچین.
+تصادفی یوللا سئچیلمیش بو پارول‌دان ایستیفاده ائده بیلرسینیز: $1',
+'savedprefs' => 'سئچیمینیز قئيد ائدیلدی.',
+'timezonelegend' => 'چاغ بؤلگه‌سی:',
+'localtime' => 'یئرلی چاغ:',
+'timezoneuseserverdefault' => 'ویکی اؤن‌فرضینی ایشلد ($1)',
+'timezoneuseoffset' => 'باشقا (چاغ فرقینی بیلدیر)',
+'timezoneoffset' => 'واقت فرقی¹:',
+'servertime' => 'خیدمتچی چاغی:',
+'guesstimezone' => 'براوزِردن دولدور',
+'timezoneregion-africa' => 'آفریقا',
+'timezoneregion-america' => 'آمریکا',
+'timezoneregion-antarctica' => 'گونئی قطب',
+'timezoneregion-arctic' => 'قوزئی قطب',
+'timezoneregion-asia' => 'آسیا',
+'timezoneregion-atlantic' => 'اطلس اوقیانوسو',
+'timezoneregion-australia' => 'اوسترالیا',
+'timezoneregion-europe' => 'اوروپا',
+'timezoneregion-indian' => 'هیند اوقیانوسو',
+'timezoneregion-pacific' => 'بؤیوک اوقیانوس',
+'allowemail' => 'باشقا ایستیفاده‌چیلردن ایمیل آلماغی آچ',
+'prefs-searchoptions' => 'آختار',
+'prefs-namespaces' => 'آدلار فضاسی:',
+'defaultns' => 'یوخسا بو آدفضالاریندا آختار:',
+'default' => 'فرض ائدیلن',
+'prefs-files' => 'فایل‌لار',
+'prefs-custom-css' => 'شخصی سی‌اس‌اس',
+'prefs-custom-js' => 'شخصی جاوااسکریپت',
+'prefs-common-css-js' => 'بوتون قابیقلار اوچون پایلاشمیش سی‌اس‌اس/جاوااسکریپت:',
+'prefs-reset-intro' => 'ترجیحلرینیزی سایتین ایلک فرض ائدیلنلرینه دؤندرمک اوچون، بو صحیفه‌دن ایستیفاده ائده بیلرسینیز.
+بو ایش قایتاریلا بیلمز.',
+'prefs-emailconfirm-label' => 'ایمیل دوغرولاماسی:',
+'prefs-textboxsize' => 'دَییشدیرمه قوتوسونون اؤلچو',
+'youremail' => 'ایمیل:',
+'username' => '{{GENDER:$1|ایستیفاده‌چی آدی}}:',
+'uid' => '{{GENDER:$1|ایستیفاده‌چی}} ID:',
+'prefs-memberingroups' => '{{PLURAL:$1|بیر|$1}} قروپ {{GENDER:$2|عوضو}}و:',
+'prefs-registration' => 'یازیلماق واختی:',
+'yourrealname' => 'دوغرو آد:',
+'yourlanguage' => 'دیل:',
+'yourvariant' => 'دیل واریانتی:',
+'prefs-help-variant' => 'بو ویکی‌نین ایچینده‌کیلری‌نین گؤستریلدیگی اوچون سئچدیگینیز واریانت یوخسا اورتوقرافی.',
+'yournick' => 'یئنی ایمضا:',
+'prefs-help-signature' => 'دانیشیق صحیفه‌لرینده یاخیشلار گرک «<nowiki>~~~~</nowiki>» ایله ایمضالانالار. بو نیشان اوتوماتیک‌جه سیزین آدینیز و تاریخه دؤنه‌جک‌دیر.',
+'badsig' => 'یانلیش خام ایمضا.
+اچ‌تی‌ام‌ال تگ‌لرینی یوخلایین.',
+'badsiglength' => 'ایمضانیز چوخ اوزون‌دور.
+او گرک {{PLURAL:$1|بیر|$1}} حرف‌دن اوزون اولمایا.',
+'yourgender' => 'جینس:',
+'gender-unknown' => 'بیلیندیرمه‌میش',
+'gender-male' => 'آقا',
+'gender-female' => 'خانیم',
+'prefs-help-gender' => 'ایستگه یاغلی: یازیلیم‌لا، دوزگون جنسیته ایلگی‌لی آدرس وئرمک اوچون ایشنیر.
+بو بیلگی، عمومی اولاجاق‌دیر.',
+'email' => 'ایمیل',
+'prefs-help-realname' => 'اصلی آد ایستگه باغلی‌دیر.
+اگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.',
+'prefs-help-email' => 'ایمیل آدرسی ایستگه باغلی‌دیر، آنجاق رمزینیزی اونوتدوغونوز واخت، سیزه يئنی رمز گؤندرمگه گرکلی‌دیر.',
+'prefs-help-email-others' => 'سیز هم‌ده آیری ایستیفاده‌چیلره ایجازه وئره بیلرسیز، سیزین ایستیفاده‌چی یا دانیشیق صحیفه‌نیزده بیر باغلانتی ایله، سیزله ایلگی قورسونلار.
+آیری ایستیفاده‌چیلر سیزینله ایلگی قوراندا، سیزین ایمیل آدرسیز گؤستریلمه‌یه‌جک‌دیر.',
+'prefs-help-email-required' => 'ایمیل آدرس گرکلی‌دیر.',
+'prefs-info' => 'اساس بیلگیلر',
+'prefs-i18n' => 'اولوسلارآراسی‌لاشدیرما',
+'prefs-signature' => 'ایمضا',
+'prefs-dateformat' => 'تاریخ فورمتی',
+'prefs-timeoffset' => 'ساعات قورشاغینین فرقی',
+'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' => 'ایمیل آدرسی، گئچرلی نظره گلیر',
+'email-address-validity-invalid' => 'گئچرلی بیر ایمیل آدرسی وئرین',
+
+# User rights
+'userrights' => 'ایستیفاده‌چی حاقلاری ایداره‌سی',
+'userrights-lookup-user' => 'ایستیفاده‌چی گروپلاری ایداره‌سی',
+'userrights-user-editname' => 'ایستیفاده‌چی آدی‌نیزی یازین',
+'editusergroup' => 'ایستیفاده‌چی قروپونو دَییشدیر',
+'editinguser' => "ایستیفاده‌چی '[[User:$1|$1]]' $2 اوچون ایستیفاده‌چی حقوق‌لاری دییشدیریلیر",
+'userrights-editusergroup' => 'ایستیفاده‌چی قروپونو دَییشدیر',
+'saveusergroups' => 'ایستیفاده‌چی قروپونو قئيد ائت',
+'userrights-groupsmember' => 'داخیل اولدوغو قروپلار:',
+'userrights-groupsmember-auto' => 'گومان ائدیلن عضو:',
+'userrights-groups-help' => 'بو ایستیفاده‌چی‌نین ایچینده اولدوغو قروپ‌لاری دییش‌دیره بیلرسینیز:
+* سئچیلمیش بیر قوتو، ایستیفاده‌چی‌نین او قروپا داخیل اولدوغو معناسینی وئرر
+* سئچیلمه‌ییب بیر قوتو، ایستیفاده‌چی‌نین او قروپدا اولمادیغی معناسینی وئرر.
+**، قروپو بیر دفعه میدانا گتیردیک‌دن سونرا سیلئمئجئغینیزی بیلدیریر، یا دا قارشی‌لیق‌لی اولا‌راق.',
+'userrights-reason' => 'ندن:',
+'userrights-no-interwiki' => 'سیزه باشقا ویکی لايیهه‌لرده‌کی ایستیفاده‌چیلرین ائستاتوسونو ديَیشمه‌يه ایزین وئریلمه‌يیب',
+'userrights-nodatabase' => '$1 وئریلنلر بازاسی يا مؤوجود دئيیل، يا دا لوکال دئيیل.',
+'userrights-nologin' => 'سیز ایستیفاده‌چی‌لرین حقوق‌لارینی دییشمک اوچون سیستئمه ایداره‌چی اولا‌راق [[Special:UserLogin|daxil olmalısınız]].',
+'userrights-notallowed' => 'سیزین ایستیفاده‌چی حسابینیزا دیگر ایستیفاده‌چی‌لره حقوق‌لار وئرمک و یا آلماغا ایجازه وئریلمه‌ییب.',
+'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-createpage' => 'صحیفه‌لری یاراد (دانیشیق صحیفه‌لر نظرده توتولمور)',
+'right-createtalk' => 'دانیشیق صحیفه‌لری یاراد',
+'right-createaccount' => 'یئنی ایستیفاده‌چی حسابلاری یاراد',
+'right-minoredit' => 'دَییشیکلیکلری، کیچیک اولاراق نیشانلا',
+'right-move' => 'صحیفه‌لرین آدینی دَییشدیر',
+'right-move-subpages' => 'صحیفه‌لرین آدلارینی، آلت‌صحیفه‌لری ایله بیرلیکده، دَییشدیر',
+'right-move-rootuserpages' => 'ایستیفاده‌چی کؤک صحیفه‌لرینین آدلارینی دَییشدیر',
+'right-movefile' => 'فایل‌لارین آدلارینی دَییشدیر',
+'right-suppressredirect' => 'صحیفه‌لرین آدینی دَییشدیرنده، قایناق صحیفه‌لردن یوللاندیرما یارادما',
+'right-upload' => 'فایل یوکله‌یین',
+'right-reupload' => 'اؤنجه‌دن اولان فایل‌لارین اوستونه یاز',
+'right-reupload-own' => 'همن ایستیفاده‌چی ایله یوکلنن فایل‌لارین اوستونه یاز',
+'right-reupload-shared' => 'عمومی آنبارها اولان فایل‌لاری، محلی اولاراق ابطال ائت',
+'right-upload_by_url' => 'فایل‌لاری بیر اینترنت آدرسیندن یوکله',
+'right-purge' => 'بیر صحیفه‌نین کَشینی، دوغرولانمامیش سیل',
+'right-autoconfirmed' => 'یاریم‌قورونموش صحیفه‌لری دَییشدیر',
+'right-bot' => 'بیر اوتوماتیک پروسئس کیمی حساب اولون',
+'right-nominornewtalk' => 'دانیشیق صحیفه‌لرده کیچیک دَییشیکلیک، یئنی مئساژ یارادماسین',
+'right-apihighlimits' => 'API سورغولاریندا، یوخاری محدودیتلر ایشلد',
+'right-writeapi' => 'یازان API ایشلد',
+'right-delete' => 'صحیفه‌لری سیل',
+'right-bigdelete' => 'یئکه گئچمیشلری اولان صحیفه‌لری سیل',
+'right-deletelogentry' => 'بعضی خاص سیاهی آیتئملرینی سیل و سیلماغی قایتار',
+'right-deleterevision' => 'بعضی خاص صحیفه نوسخه‌لرینی سیل و سیلماغی قایتار',
+'right-deletedhistory' => 'سیلینمیش گئچمیش آیتئملرینی، یازیلارینی گؤسترمه‌مکله، گؤستر',
+'right-deletedtext' => 'سیلینمیش یازی و سیلینمیش نوسخه‌لر آراسینداکی فرقلره باخ',
+'right-browsearchive' => 'سیلینمیش صحیفه‌لری آختار',
+'right-undelete' => 'بیر صحیفه‌نین سیلینمگینی قایتار',
+'right-suppressrevision' => 'ایداره‌چیلردن گیزلی اولان نوسخه‌لره باخ و قایتار',
+'right-suppressionlog' => 'خصوصی سیاهی‌لره باخ',
+'right-block' => 'باشقا ایستیفاده‌چیلرله دَییشدیرمگی باغلا',
+'right-blockemail' => 'بیر ایستیفاده‌چینین ایمیل گؤندرمگینی باغلا',
+'right-hideuser' => 'بیر ایستیفاده‌چی آدینی باغلا و اونو عموم‌دان گیزلد',
+'right-ipblock-exempt' => 'آی‌پی باغلاماقلاری، اوتوماتیک باغلاماقلاری و سیرا باغلاماقلاریندان گئچ',
+'right-proxyunbannable' => 'پروکسیلرین اوتوماتیک باغلاماقلاریندان گئچ',
+'right-unblockself' => 'اؤزلرینی آچسینلار',
+'right-protect' => 'قوروماق سطحینی و قورونموش صحیفه‌لری دَییشدیر',
+'right-editprotected' => 'قورونموش صحیفه‌لری (قورونماقلاری مونتشیر اولمایان) دَییشدیر',
+'right-editinterface' => 'ایستیفاده‌چی آرا-اوزونو دَییشدیر',
+'right-editusercssjs' => 'باشقا ایستیفاده‌چیلرین سی‌اس‌اس و جاوااسکریپت فایل‌لارینی دَییشدیر',
+'right-editusercss' => 'باشقا ایستفاده‌چیلرین سی‌اس‌اس فایل‌لارینی دَییشدیر',
+'right-edituserjs' => 'باشقا ایستیفاده‌چیلرین جاوااسکریپت فایل‌لارینی دَییشدیر',
+'right-rollback' => 'بیر خاص صحیفه‌نی سون دفعه دَییشدیرن ایستیفاده‌چینین دَییشیکلیکلرینی تئزلیکله قایتار',
+'right-markbotedits' => 'قایتاریلان دَییشیکلیکلری، بوت دَییشیکلیگی اولاراق نیشانلا',
+'right-noratelimit' => 'سورعت محدودیتلریندن گئچ',
+'right-import' => 'باشقا ویکیلردن صحیفه گیردیر',
+'right-importupload' => 'بیر فایل یوکلمه‌سیندن صحیفه گیردیر',
+'right-patrol' => 'باشقالارین دَییشیکلیکلرینه نظارت ائت',
+'right-autopatrol' => 'بیر کسین اؤز دَییشیکلیکلرینی، نظارتلنمیش اولاراق نیشانلا',
+'right-patrolmarks' => 'سون نظارتلنمیش دَییشیکلیکلره باخ',
+'right-unwatchedpages' => 'نظارتلنمه‌میش صحیفه‌لرین لیستینه باخ',
+'right-mergehistory' => 'صحیفه‌لرین گئچمیشلرینی بیرلشدیر',
+'right-userrights' => 'بوتون ایستیفاده‌چی حاقلارینی دَییشدیر',
+'right-userrights-interwiki' => 'باشقا ویکیلرده‌کی ایستیفاده‌چیلرین ایستیفاده‌چی حاقلارینی دَییشدیر',
+'right-siteadmin' => 'دیتابیسی قیفیل‌لا و قیفیلینی آچ',
+'right-override-export-depth' => 'ایچری باغلانتیلاری اولان صحیفه‌لری، چوخو ۵ درجه درینلیگی ایله، ایخراج ائت',
+'right-sendemail' => 'باشقا ایستیفاده‌چیلره ایمیل گؤندر',
+'right-passwordreset' => 'رمز یئنی‌له‌مه ایمیل‌لرینه باخ',
+
+# Special:Log/newusers
+'newuserlogpage' => 'ایستیفاده‌چی یارادیلما قئیدی',
+'newuserlogpagetext' => 'بو ایستیفاده‌چی یارادماق سیاهیسیدیر.',
+
+# User rights log
+'rightslog' => 'ایستیفاده‌چی حاقلاری سیاهی‌سی',
+'rightslogtext' => 'بو، ایستیفاده‌چی حاقلارینا اولان دَییشیکلیکلر سیاهی‌سی‌دیر.',
+
+# 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-move-rootuserpages' => 'ایستیفاده‌چی کؤک صحیفه‌لرینین آدلارینی دَییشدیر',
+'action-movefile' => 'بو فایلین آدینی دَییشدیر',
+'action-upload' => 'بو فایلی یوکله',
+'action-reupload' => 'بو اؤنجه‌دن اولان فایلین اوستونه یاز',
+'action-reupload-shared' => 'بو فایلی بیر عمومی آنبارها ایبطال ائت',
+'action-upload_by_url' => 'بو فایلی بیر اینترنت آدرسیندن یوکله',
+'action-writeapi' => 'یازان API ایشلد',
+'action-delete' => 'بو صحیفه‌‌نی سیل',
+'action-deleterevision' => 'بو نوسخه‌نی سیل',
+'action-deletedhistory' => 'بو صحیفه‌نین سیلینمیش گئچمیشینه باخ',
+'action-browsearchive' => 'سیلینمیش صحیفه‌لری آختار',
+'action-undelete' => 'بو صحیفه‌نین سیلمگینی قایتار',
+'action-suppressrevision' => 'بو گیزلی نوسخه‌یه یئنی‌دن باخ و اونو قایتار',
+'action-suppressionlog' => 'بو خصوصی سیاهی‌یا باخ',
+'action-block' => 'بو ایستیفاده‌چی‌نین دَییشدیرمه‌سینین قاباغینی آل',
+'action-protect' => 'بو صحیفه اوچون قورونماق سطحلرینی دَییشدیر',
+'action-rollback' => 'بیر خاص صحیفه‌نی سون دفعه دَییشدیرن ایستیفاده‌چینین دَییشیکلیکلرینی تئزلیکله قایتار',
+'action-import' => 'بو صحیفه‌نی باشقا بیر ویکی‌دن گیردیر',
+'action-importupload' => 'بو صحیفه‌نی بیر فایل یوکلمه‌سیندن گیردیر',
+'action-patrol' => 'باشقالارین دَییشیکلیکلرینی، نظارتلنمیش اولاراق نیشانلا',
+'action-autopatrol' => 'اؤز دَییشیکلیکلرینیزی نظارتلنمیش اولاراق نیشانلا',
+'action-unwatchedpages' => 'نظارتلنمه‌میش صحیفه‌لرین لیستینه باخ',
+'action-mergehistory' => 'بو صحیفه‌نین گئچمیشینی بیرلشدیر',
+'action-userrights' => 'بوتون ایستیفاده‌چی حاقلارینی دَییشدیر',
+'action-userrights-interwiki' => 'باشقا ویکیلرده‌کی ایستیفاده‌چیلرین ایستیفاده‌چی حاقلارینی دَییشدیر',
+'action-siteadmin' => 'دیتابیسی قیفیل‌لا یا قیفیلینی آچ',
+'action-sendemail' => 'ایمیل گؤندر',
+
+# Recent changes
+'nchanges' => '$1 {{PLURAL:$1|دَییشیکلیک}}',
+'recentchanges' => 'سون دَییشیکلیکلر',
+'recentchanges-legend' => 'سون دَییشیکلیکلر سئچمه‌لری',
+'recentchanges-summary' => 'بو صحیفه‌ده، بو ویکی‌ده وئریلن ان سون دَییشیکلیکلری ایزله‌یین.',
+'recentchanges-feed-description' => 'ویکی‌ده‌کی ان سون ديَیشیکلیک‌لری بو يايیم کانالیندان ایزله‌يین.',
+'recentchanges-label-newpage' => 'بو دییشیک یئنی بیر صحیفه یاراتدی',
+'recentchanges-label-minor' => 'بو بیر کیچیک دَییشدیرمه‌دیر',
+'recentchanges-label-bot' => 'بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر',
+'recentchanges-label-unpatrolled' => 'بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر',
+'rcnote' => "آشاغیدا {{PLURAL:$1|'''بیر'''|'''$1'''}} ديَیشیکلیک، سون {{PLURA?:$2|بیر|$2}} گون‌ده، ساعت $5، $4 تاریخینه قدر گلیب‌دیر.",
+'rcnotefrom' => "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر گلیبلر.",
+'rclistfrom' => '$1 واختیندان باشلایاراق یئنی دییشیکلری گؤستر',
+'rcshowhideminor' => 'کیچیک دَییشیکلری $1',
+'rcshowhidebots' => 'بوتلاری $1',
+'rcshowhideliu' => 'ایچری گیرمیش ایستیفاده‌چیلری $1',
+'rcshowhideanons' => 'تانینمامیش ایستیفاده‌چیلری $1',
+'rcshowhidepatr' => 'نظارت ائدیلن دَییشیکلیکلری $1',
+'rcshowhidemine' => 'منیم دَییشیکلریمی $1',
+'rclinks' => 'سون $2 گون عرضینده‌کی سون  $1 ديَیشیکلیگی گؤستر <br />$3',
+'diff' => 'فرق',
+'hist' => 'گئچمیش',
+'hide' => 'گیزلت',
+'show' => 'گؤستر',
+'minoreditletter' => 'ک',
+'newpageletter' => 'ی',
+'boteditletter' => 'ب',
+'number_of_watching_users_pageview' => '[{{PLURAL:$1|بیر|$1}} ایزله‌ین ایستیفاده‌چی]',
+'rc_categories' => 'بؤلمه‌لره محدودلاشدیر («|» ایله آییر)',
+'rc_categories_any' => 'هر',
+'rc-change-size-new' => 'دَییشیکلیک‌دن سونرا {{PLURAL:|بیر|$1}} بایت',
+'newsectionsummary' => '/* $1 */ یئنی بؤلمه',
+'rc-enhanced-expand' => 'تفصیلاتی گؤستر (جاوااسکریپت لازیم‌دیر)',
+'rc-enhanced-hide' => 'تفصیل‌لری گیزلت',
+'rc-old-title' => 'ایلک‌جه «$1» آدی‌له یارانمیشدیر',
+
+# Recent changes linked
+'recentchangeslinked' => 'ایلگیلی دَییشیکلیکلر',
+'recentchangeslinked-feed' => 'ایلگیلی دَییشیکلیکلر',
+'recentchangeslinked-toolbox' => 'ایلگیلی دَییشیکلیکلر',
+'recentchangeslinked-title' => "''$1'' ایله ایلگی‌لی دییشیکلر",
+'recentchangeslinked-noresult' => 'قئيد اوْلونان دؤورده ایلگیلی صحیفه‌‌لرده هئچ بیر ديَیشیکلیک يوْخدور.',
+'recentchangeslinked-summary' => "آشاغیداکی سیياهی، قئيد اوْلونان صحیفه‌‌يه (و يا قئيد اوْلونان کاتئقوْرياداکی صحیفه‌‌لره) داخیلی کئچید وئرن صحیفه‌‌لرده ائدیلمیش سوْن ديَیشیکلیکلرین سیياهیسیدیر. 
+[[Special:Watchlist|ایزله‌مه سیياهینیزداکی]] صحیفه‌‌لر '''قالین''' شریفتله گؤستریلمیشدیر.",
+'recentchangeslinked-page' => 'صحیفه آدی:',
+'recentchangeslinked-to' => 'قئيد اوْلونان صحیفه‌‌ده‌کی دئيیل، اوْنا داخیلی کئچید وئرن صحیفه‌‌لرده‌کی ديَیشیکلیکلری گؤستر',
+
+# Upload
+'upload' => 'فایل یوکله‌',
+'uploadbtn' => 'فایل یوکله‌یین',
+'reuploaddesc' => 'يوکلئمئ فورمونا گئری دؤن.',
+'upload-tryagain' => 'ديَشدیریلمیش فايل ایضاهینی گؤندر',
+'uploadnologin' => 'گیریش ائتمه‌میسینیز',
+'uploadnologintext' => 'فايل يوکله‌مک اوچون [[Special:UserLogin|گیریش ائتمه‌میسینیز]].',
+'upload_directory_missing' => '($1) یوکلمه قایداسی آختاریلیر و وئبسئروئرده یارادیلماسی قئیری-مومکون‌دور.',
+'upload_directory_read_only' => '"$1" کاتالوقونون آرشیوی وئب-سئروئر یازی‌لاری اوچون باغلی‌دیر.',
+'uploaderror' => 'یوکلمه خطاسی',
+'upload-recreate-warning' => "'دیققت: بو آددا فایل سیلینیب، یاخود آدی دییشدیریلیب.'
+
+بو صحیفه‌نین سیلینمه و آددییشمه ژورنا‌لی آشاغیدا گؤستریلمیش‌دیر:",
+'uploadtext' => "فایل یوکلمک اوچون آشاغی‌داکی فورما‌دان ایستیفاده ائدین.
+اول‌لر یوکلنمیش فایل‌لارا باخماق اوچون [[Special:FileList|یوکلنمیش فایل‌لار سیاهی‌سینا]] کئچین، هم‌چی‌نین (تکرار) یوکلنمیش فایل‌لارا [[Special:Log/upload|یوکلمه ژورنالیندا]]، سیلینمیش فایل‌لارا [[Special:Log/delete|سیلینمه ژورنالیندا]] باخا بیلرسینیز.
+
+مقاله‌یه فایل یئرلش‌دیرمک اوچون آشاغیداکی فورما‌لاردان بیرینی ایستیفاده ائدین:
+* فایلین تام نوسخه لری یئرلش‌دیرمک اوچون: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''';
+* فایلین 200 پیکسئلدک کیچیلدیلمیش وئرسیاسینی متن‌دن سولدا، آلتیندا ایزاهلا یئرلش‌دیرمک اوچون: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|təsvir]]</nowiki></code>''';
+* صحیفه‌ده فایلین اؤزونو گؤسترمه‌دن اونا بیرباشا کئچید یئرلش‌دیرمک اوچون: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''.",
+'upload-permitted' => 'ایجازه وئریلن فايل تیپلری: $1.',
+'upload-preferred' => 'ایجازه وئریلن فايل تیپلری: $1.',
+'upload-prohibited' => 'ایجازه وئریلمه‌ين فايل تیپلری: $1.',
+'uploadlog' => 'يوکله‌مه قئيدی',
+'uploadlogpage' => 'یوکلمه قئیدلری',
+'uploadlogpagetext' => 'آشاغیدا ان سون یوکله‌نیلن فایل‌لارین لیستی گؤستریلیر.
+داها گؤرونوش‌لو گؤسترمک اوچون، [[Special:NewFiles|یئنی فایل‌لار گالئری‌سینه]] باخین.',
+'filename' => 'فایل آدی',
+'filedesc' => 'قیساسی',
+'fileuploadsummary' => 'قیساسی:',
+'filereuploadsummary' => 'فایل دَییشیکلری:',
+'filestatus' => 'مؤلف حوقوقلاری:',
+'filesource' => 'قایناق:',
+'uploadedfiles' => 'یوکلنمیش فایللار‌',
+'ignorewarning' => 'خبردارلیقلارا اهمیت وئرمه و فايلی ساخلا',
+'ignorewarnings' => 'بوتون خبردارلیقلارا محل قويماماق',
+'minlength1' => 'فايل آدی ان آزی بیر حرفدن عبارت اولمالیدیر.',
+'illegalfilename' => '"$1" فایل آدیندا صحیفه آدلاریندا ایستیفاده‌سینه یول وئریلمه‌ین سیمبول‌لار وار. لطفاً فایلین آدینی دییشین و یئنی‌دن یوکلمه‌یه جهد ائدین.',
+'filename-toolong' => 'فایل آدی 240 بایت‌دان اوزون اولا بیلمز.',
+'badfilename' => 'فایلین آدی دییشیلدی. یئنی آدی: "$1".',
+'filetype-mime-mismatch' => '".$1" فایل اوزانتی‌سی فایلین میمئ تیپینه ($2) اویغون گلمیر.',
+'filetype-badmime' => '"$1" MIME تیپین‌دکی فایل‌لارین یوکلنمه‌سینه ایجازه وئریلمیر.',
+'filetype-bad-ie-mime' => 'بو فایل یوک‌لنه، چونکی اینتئرنئت اکسپلورر بونو، ایجازه وئریلمه‌ین و احتمالا زررلی فایل نؤوو اولان "$1" اولا‌راق تثبیت ائدیر.',
+'filetype-unwanted-type' => "'''\". \$1\"''' ایستنمه‌ین بیر فایل نؤوودور. تکلیف ائدیلن {{PLURAL: \$3 | فایل نؤوو | فایل نؤو‌لری}} \$2.",
+'filetype-banned-type' => '\' \'". $1"\' {{PLURAL: $4 | ایجازه وئریلن بیر فایل نؤوو دئییل | ایجازه وئریلن بیر فایل نؤوو دئییل}}. ایجازه وئریلن {{PLURAL: $3 | فایل نؤوو | فایل نؤو‌لری}} $2.',
+'filetype-missing' => 'فايلین هئچ بیر اوزانتیسی يوخدور (مثلا، ".jpg").',
+'empty-file' => 'سیز یول‌لادیغینیز فایل، بوش ایدی.',
+'file-too-large' => 'گؤندردیگینیز فایل چوخ بؤیوک‌دور.',
+'filename-tooshort' => 'فایل آدی چوخ قیسادی.',
+'filetype-banned' => 'بو تیپ فایل‌لار قاداغان‌دیر.',
+'verification-error' => 'فایل تصدیقی باش توتمادی.',
+'hookaborted' => 'ائتمه‌یه چالیشدیغینیز دییشیک‌لیک بیر فایل اوزانتی‌سی چئنگئلیلئ لغو ائدیلدی.',
+'illegal-filename' => 'فایل آدینا ایجازه یوخ‌دور.',
+'overwrite' => 'بیر اولان فایلین اوستونه یازماغا ایجازه یوخدور.',
+'unknown-error' => 'بیلینمه‌ين بیر خطا ياراندی.',
+'tmp-create-error' => 'مووققتی فايل يارادیلا بیلمه‌دی.',
+'tmp-write-error' => 'موقتی فایل یازیلارکن ختا.',
+'large-file' => 'فایل‌لارین $1 اؤلچوسون‌دن داها بؤیوک اولماماسی تکلیف؛
+بو فایلین اؤلچوسو $2.',
+'largefileserver' => 'فایلین اؤلچوسو یول وئریلن حدی آشیر.',
+'emptyfile' => 'یوکلدیگینیز فایل بوش‌دور. بو فایلین آدیندا اولان هرف سهوی ایله باغ‌لی اولا بیلر. خاهیش اولونور کی، دوغوردان دا بو فای‌لی یوکلمک ایستدیگینیزی یوخلایاسینیز.',
+'windows-nonascii-filename' => 'بو wiki فایل آدلاریندا خصوصی کاراکتئر ایستیفاده‌سینی دستکلمیر',
+'fileexists' => 'یوکلمک ایستدیگینیز آددا فایل مؤوجوددور.
+لطفاً <strong>[[:$1]]</strong> کئچیدینی یوخلایین و بو فای‌لی یوکلمک ایستدیگینیزدن عمین اولون.
+[[$1|thumb]]',
+'filepageexists' => 'بو فایل اوچون شرح صحیفه‌سی <strong>[[:$1]]</strong> عنوانیندا اونسوز دا یارادیلمیش، لاکین بو آددا بیر فایل بو آندا مؤوجود دئییل.
+گیرجیینیز خلاصه شرح صحیفه‌سینده گؤرونمه‌یه‌جک.
+اؤزئتینیزین اورادا گؤرونمه‌سی اوچون، بونو الله دییشدیرملیسینیز.
+[[$1|کیچیک شکیل]]',
+'fileexists-extension' => 'بئنزئر آدلا باشقا بیر فایل مؤوجود: [[$2|thumb]]
+* چکیلمیش فایلین آدی: <strong>[[:$1]]</strong>
+* مؤوجود فایلین آدی: <strong>[[:$2]]</strong>
+خاهیش ائدیریک باشقا بیر آد سئچین',
+'fileexists-thumbnail-yes' => "بو فایل، بیر رسمی فور وئرسیاسی کیمی گؤرونور (تهومبنایل)'. [[$1|thumb]]
+خاهیش ائدیریک <سترونگ> [[:$1]] </strong> فایلینی نظارت ائدین.
+اگر نظارت ائدیلن فایل ایله خصوصی اؤلچوسون‌دکی عینی دوسیایسا آرتیق کیچیک شکیل یوکلمه‌یه احتیاج یوخ‌دور.",
+'file-thumbnail-no' => "بو فایلین آدی <strong>$1</strong> ایله باشلاییر.
+بو باشقا بیر شکیل فور نوسخه سینه بنزییر (thumbnail)'
+اگر سیزده بو شکیلین تام نظر گلیر نسخه سی وارسا اونو یوکلیین، عکس حالدا خاهیش ائدیریک فایل آدینی دییش‌دیرین.",
+'fileexists-forbidden' => 'بو آددا بیر فايل وار، و اوزرینه يازیلما اولماز. 
+فايلینیزی يئنه ده يوکله‌مک ایسته‌يیرسینیزسه، خاهیش ائدیریک گئری دؤنوب يئنی بیر آد ایستیفاده ائدین.
+[[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'بو آددا بیر فايل اورتاق آمباردا مؤوجود دیر. 
+فايلینیزی يئنه ده يوکله‌مک ایسته‌يیرسینیزسه، خاهیش ائدیریک گئری گئدیب يئنی بیر آد ایستیفاده ائدین. 
+[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => 'بو فایل آشاغی‌داکی {{PLURAL: $1 | فایلین | فایل‌لارین}} تکراری سی‌دیر:',
+'file-deleted-duplicate' => 'بو فایلین عینی اولان باشقا بیر فایل([[:$1]])داها اول‌دن سیلیندی. بو فای‌لی یئنی‌دن یوکلمه‌دن اول دیگر فایلین سیلینمه‌سی قئیدلرینی ایداره ائتملیسینیز.',
+'uploadwarning' => 'يوکله‌مه خبردارلیغی',
+'uploadwarning-text' => 'خاهیش ائدیریک آشاغی‌داکی فایل شرحینی دییش‌دیرین و یئنی‌دن جهد ائدین.',
+'savefile' => 'فايلی قئيد ائت',
+'uploadedimage' => '«[[$1]]» یوکلندی',
+'overwroteimage' => '"[[$1]]"-این یئنی نوسخه سی یوکلندی',
+'uploaddisabled' => 'يوکله‌مه باش توتمادی',
+'copyuploaddisabled' => 'اینترنت آدرسی ایله یوکلمه باش توتمادی.',
+'uploadfromurl-queued' => 'يوکله‌مه‌نیز نؤوبه گؤزله‌يیر',
+'uploaddisabledtext' => 'فايل يوکلنمه‌سی باش توتمادی.',
+'php-uploaddisabledtext' => 'پی اچ پی فایل یوکلملری دؤوره خاریجی‌دیر. خاهیش ائدیریک file_uploads تنظیم لرین یئنی دن بیر باخین.',
+'uploadscripted' => 'بو فایل بیر اینتئرنئت آختاریش برنامه سی طرفین‌دن سهو چئوریلبیلجک بیر HTML و یا ایسکریپت کودو عبارت‌دیر.',
+'uploadvirus' => 'فايلدا ویروس وار!  
+دئتاللار: $1',
+'uploadjava' => 'فایل، بیر جاوا. نوع ‎‎class ائهتیوا ائدن بیر زیپ فایلی‌دیر.
+جاوا فایل‌لارینین یوکلنمه‌سینه ایجازه وئریلمیر، چونکی تهلوکه‌سیزلیک محدودلاشدیرما‌لارینین آتلانماسینا سبب اولا بیلمکده‌دیرلر.',
+'upload-source' => 'قایناق فايلی',
+'sourcefilename' => 'فايل آدی منبع‌لری',
+'sourceurl' => 'قایناق آدرسی',
+'destfilename' => 'فايل آدی',
+'upload-maxfilesize' => 'فايلین بویوک هجمی: $1',
+'upload-description' => 'فایل ایضاهی',
+'upload-options' => 'یوکلمه سئچینیکلر',
+'watchthisupload' => 'بو فايلی ایزله',
+'filewasdeleted' => 'بو آددا بیر فایل یاخین زاماندا یوکلندی و سونرا ایداره‌چی‌لر طرفین‌دن سیلیندی. فای‌لی یوکلئمئدئن اول، $1 صحیفه‌سینه بیر گؤز آتین.',
+'filename-bad-prefix' => 'یوکلمکده اولدوغونوز فایلین آدی، عمومی اولا‌راق رقمسال کامئرا‌لار طرفین‌دن آوتوماتیک اولا‌راق ائکئلئنئن و آچیقلاییجی اولمایان \'"$1"\' ایله باشلاییر.
+خاهیش ائدیریک فایلینیز اوچون داها آچیقلاییجی بیر آد سئچین.
+
+یوکلمکده اولدوغونوز فایلین آدی، عمومی اولا‌راق رقمسال کامئرا‌لار طرفین‌دن آوتوماتیک اولا‌راق باغلانان و آچیقلاییجی اولمایان \'"$1"\' ایله باشلاییر.
+خاهیش ائدیریک فایلینیز اوچون داها آچیقلاییجی بیر آد سئچین.',
+'upload-success-subj' => 'یوکلمه گوتولدو',
+'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' => 'اوزاقدان یوکلمه، <code>http://</code> یوخسا <code>ftp://</code> ایله باشلانان آدرس ایسته‌ییر.',
+'upload-file-error' => 'ایچ خطاسی',
+'upload-file-error-text' => 'سئروئرده مووققتی فایل میدانا گتیرمه جهدی زامانی بیر داخیلی خطا میدانا گلدی.
+خاهیش ائدیریک بیر [[Special:ListUsers/sysop|administrator]] یله علاقه ساخلایین.',
+'upload-misc-error' => 'بیلین‌مه‌ین یوکلمه خطاسی',
+'upload-misc-error-text' => 'یوکلمه اسناسیندا بیلینمه‌ین بیر خطا میدانا گلدی.
+خاهیش ائدیریک علاقه‌نین اعتبارلی و چاتیلا بیلر اولدوغونو تصدیق و یئنی‌دن جهد ائدین.
+اگر پروبلئم تکرارلانسا، بیر [[Special:ListUsers/sysop|administrator]] ایله علاقه ساخلایین',
+'upload-too-many-redirects' => 'آدرس ده چوخ یؤنلندیرمه وار',
+'upload-unknown-size' => 'بیلین‌مه‌ين هجم',
+'upload-http-error' => 'اچ تی تی پی ختاسی وار : $1',
+'upload-copy-upload-invalid-domain' => 'فایل یوکلنمه سی بو بازه ده امکانی یوخدور',
+
+# File backend
+'backend-fail-stream' => '$1 فای‌لی یولانمامادی.',
+'backend-fail-backup' => 'بو فایل $1 اوچون نوسخه پشتیان یارتماق اولماز',
+'backend-fail-notexists' => '"$1" فای‌لی مؤوجود دئییل',
+'backend-fail-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 بایتی}} $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-wrong-format' => 'گؤستریلن فايل زیپ فايلی دئيیل.',
+'zip-bad' => 'فایل خاراب یا دا باشقا بیر سبب‌دن اؤتری اوخونمایان بیر زیپ فایلی.
+تهلوکه‌سیزلیک نظارتی اویغون شکیلده گئرچکلشدیریلمیر.',
+'zip-unsupported' => 'فايل، مئدیياویکی طرفیندن دستکلنمه‌ين زیپ خصوصیتلرینه صاحب بیر زیپ فايلی. 
+تهلوکه‌‌سیزلیک نظارتی اويغون بیر شکیلده گئرچئکلئشتیریلئمیيور.',
+
+# Special:UploadStash
+'uploadstash' => 'گیزلی يوکله‌مه',
+'uploadstash-summary' => 'بو صحیفه‌‌ يوکلنمیش(و يا يوکلنمکده دیر) آمما هله ویکیده نشر اولونمامیش فايللارا چاتماغی تعمین ائدر. بو فايللار يالنیز يوکله‌يه‌نی طرفیندن گؤروله بیلر.',
+'uploadstash-clear' => 'مووققتی فايللاری تمیزله',
+'uploadstash-nofiles' => 'سیزین هئچ آمبار اولموش فایلینیز یوخدور.',
+'uploadstash-badtoken' => 'چالیشمانین حیاتا کئچیریلمه‌سی باشاریسیز اولدو، احتیماللا تنزیمله‌مه قايدالاری زامان آشیمینا معروض قالدی. يئنیدن چالیشین.',
+'uploadstash-errclear' => 'فايللارین سیلینمه‌سی باشاریسیز اولدو.',
+'uploadstash-refresh' => 'فايل سیياهیسینی يئنیله',
+'invalid-chunk-offset' => 'اعتبارسیز یئربه‌یئر',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'گیریش قاداغاندیر',
+'img-auth-nopathinfo' => 'PATH_INFO یوخدور.
+سئروئرینیز بو معلوماتی کئچیرمک اوچون نیزاملانمامیش. 
+سی‌جی‌آی اولا بیلر و 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-streaming' => '"$1" آخینی.',
+'img-auth-public' => "img_auth.php 'نین فونکسیاسی خصوصی بیر ویکی فایل‌لاری چیخارماق‌دیر.
+بو wiki اومومی بیر wiki اولا‌راق قورولوب.
+ان اویغون تهلوکه‌سیزلیک اوچون، img_auth.php دؤوره خاریجی بوراخیلدی.",
+'img-auth-noread' => 'ایستیفاده‌چی‌نین «$1»بیر  اوخوماق حقوقو يوخدور.',
+'img-auth-bad-query-string' => 'آدرس اونواندا يانلیش آختاریش ستری وار.',
+
+# HTTP errors
+'http-invalid-url' => 'سهو اورل: $1',
+'http-invalid-scheme' => '"$1" سماسینا صاحب اورللئر دستک‌لنمیر',
+'http-request-error' => 'هتتپ ایستیی بیلینمه‌ین بیر سببله موفقیت‌سیز اولدو.',
+'http-read-error' => 'اچ‌تی‌تی‌پی اوخوما ختاسی',
+'http-timed-out' => 'اچ‌تی‌تی‌پی ایستیی‌نین واختی بیتدی.',
+'http-curl-error' => 'مراجعت نشانی ده یانلیش : $1',
+'http-host-unreachable' => 'آدرسه چاتماق اولمادی (خطا).',
+'http-bad-status' => 'اچ‌تی‌تی‌پی مراجعتین یوخلانماسی زامانی پروبلئم آشکارلانمیش‌دیر: $1 $2',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => 'اینترنتی آدرسه چاتماق اولمادی.',
+'upload-curl-error6-text' => 'گؤستریلن اورل ائریشیلمیر.
+خاهیش ائدیریک اورل دوغرو و سایتین آچیق اولدوغونو نظارت ائدین.',
+'upload-curl-error28' => 'يوکله‌مه واختی بیتدی',
+'upload-curl-error28-text' => 'بو سایتین جاواب وئرمه‌سی چوخ اوزون سورور.
+خاهیش ائدیریک سایتین آچیق اولدوغونو نظارت ائدین، قیسا بیر مدت گؤزلیین و یئنی‌دن جهد ائدین.
+سایتین داها آز مشغول اولدوغو بیر زاماندا سیناماق داها یاخشی اولا بیلر.',
+
+'license' => 'لیسانس:',
+'license-header' => 'لیسانس',
+'nolicense' => 'هئچ‌بیری سئچیلمه‌ییب',
+'license-nopreview' => '(اؤن‌گؤستریش یوخدور)',
+'upload_source_url' => '(بیر گئچرلی و عموم گؤره بیلن اینترنت آدرسی)',
+'upload_source_file' => '(بیلگی‌سایارینیزدا بیر فایل)',
+
+# Special:ListFiles
+'listfiles-summary' => 'بو اؤزل صحیفه، بوتون یوکله‌نیلن فایل‌لاری گؤستریر.
+ایستیفاده‌چیه فیلتر اولوناندا، یالنیز او ایستیفاده‌چی سون نوسخه‌لرینی یوکله‌ین فایل‌لار گؤستریلیر.',
+'listfiles_search_for' => 'مئدیا آدی اوچون آختار:',
+'imgfile' => 'فایل',
+'listfiles' => 'فایل لیستی',
+'listfiles_thumb' => 'کیچیک شکیل',
+'listfiles_date' => 'تاریخ',
+'listfiles_name' => 'آد',
+'listfiles_user' => 'ایستیفاده‌چی',
+'listfiles_size' => 'اؤلچو',
+'listfiles_description' => 'شرح',
+'listfiles_count' => 'نوسخه‌لر',
+
+# File description page
+'file-anchor-link' => 'فایل',
+'filehist' => 'فايل گئچمیشی',
+'filehist-help' => 'فايلین اول‌کی وئرسیياسینی گؤرمک اۆچون گۆن/تاریخ بؤلمه‌سینده‌کی تاریخلری تێقلايین.',
+'filehist-deleteall' => 'هاممی‌سین سیل',
+'filehist-deleteone' => 'سیل',
+'filehist-revert' => 'قایتار',
+'filehist-current' => 'ایندیکی',
+'filehist-datetime' => 'تاریخ/واخت',
+'filehist-thumb' => 'کیچیک شکیل',
+'filehist-thumbtext' => '$1 تاریخینده‌کی نوسخه‌نین کیچیک گؤرونتوسو',
+'filehist-nothumb' => 'کیچیک شکیل یوخدو',
+'filehist-user' => 'ایستیفاده‌چی',
+'filehist-dimensions' => 'اؤلچولر',
+'filehist-filesize' => 'فایل اؤلچوسو',
+'filehist-comment' => 'باخیش',
+'filehist-missing' => 'فایل یوخدور',
+'imagelinks' => 'فايل ایشلدمه‌سی',
+'linkstoimage' => 'آشاغیداکی {{PLURAL:$1|صحیفه|$1 صحیفه‌لر}} بو فایلا {{PLURAL:$1|باغلانیر|باغلانیرلار}}',
+'linkstoimage-more' => 'بو فایلا {{PLURAL:$1|بیر|$1}}-دن چوخ صحیفه باغلانتی‌سی واردیر.
+آشاغیداکی لیست بو فایلا یالنیز ایلک $1 صحیفه باغلانتیسینی گؤستریر.
+بیر [[Special:WhatLinksHere/$2|بوتون لیست]] ده واردیر.',
+'nolinkstoimage' => 'بو فایلا هئچ بیر صحیفه باغلانماییب.',
+'morelinkstoimage' => 'بو فایلا [[Special:WhatLinksHere/$1| داها چوخ علاقه‌لری]] باخ.',
+'linkstoimage-redirect' => '$1 (فایل ایستیقامتلندیریلیر) $2',
+'duplicatesoffile' => 'بو {{PLURAL:$1 | فایل | $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' => 'بو آددا بیر فایل یوخ، اما سیز [$1 یوکله‌یه بیلرسینیز].',
+'uploadnewversion-linktext' => 'بو فايلین يئنی سین يوکله',
+'shared-repo-from' => '$1-دن',
+'shared-repo' => 'عومومی آمبار',
+'upload-disallowed-here' => 'تاسف لر سیز ائلیه بیلمه سیز بو فایلی تزدن یازاسیز.',
+
+# File reversion
+'filerevert' => '$1فایلی اولکی حالینا قایتار',
+'filerevert-legend' => 'فايلی اولکی وضعیتینه قايتار',
+'filerevert-intro' => "'''[[Media:$1|$1]]'''مئدیاسینین [$4 $3، $2 ایل تاریخ‌لی نوسخه] اونو گئری گتیریرسینیز.",
+'filerevert-comment' => 'ندن:',
+'filerevert-defaultcomment' => '$2، $1 تاریخ‌لی سورومئ گئری قایتاریلدی',
+'filerevert-submit' => 'وضعیتینه',
+'filerevert-success' => "'''[[Media:$1|$1]]' فایلی [$4 $3، $2 ایل تاریخ‌لی سورومئ] گئری قایتاریلدی.",
+'filerevert-badversion' => 'بو فایلین وئریلن زامان معلوماتینا صاحب اوولکی بیر یئرلی نوسخه سی یوخ‌دور.',
+
+# File deletion
+'filedelete' => 'سیل $1',
+'filedelete-legend' => 'فایلی سیل',
+'filedelete-intro' => "سیز '''[[Media:$1|$1]]''' فایلینی بوتون گئچمیشی‌له بیرلیکده سیلمک‌ده‌سینیز.",
+'filedelete-intro-old' => "سیز '''[[Media:$1|$1]]''' فایلینین [$4 $3، $2]-ده‌کی نوسخه‌سینی سیلمک‌ده‌سینیز.",
+'filedelete-comment' => 'نَدَن‌لیک:',
+'filedelete-submit' => 'سیل',
+'filedelete-success' => "'$1 سیلینمیش‌دیر.",
+'filedelete-success-old' => '<span class="plainlinks">\'\'\'[[Media:$1|$1]]\'\'\'-nin  $3 və $2 نوسخه لری سیلینمیش‌دیر.</span>',
+'filedelete-nofile' => "'$1 مؤوجود دئییل.",
+'filedelete-nofile-old' => "'''$1 اوچون نظرده توتولان خصوصیتده آرشیولئنمیش بیر نوسخه یوخ.",
+'filedelete-otherreason' => 'باشقا/آرتیق دلیل:',
+'filedelete-reason-otherlist' => 'باشقا سبب',
+'filedelete-reason-dropdown' => '*اساس سیلمه سببی
+** یازانلار حقوقون پوزونتوسو
+** دوبلیکات فایل
+** کئیفیت‌سیز شکیل
+** ایستیفاده‌سیز فایل
+** قئیری-ائنسیکلوپئدیک شخص
+** لیسئنزیا‌سیز فایل
+** آزاد شکیلله اوز اولوندو
+** مؤلف ایستیی',
+'filedelete-edit-reasonlist' => 'سیلمک دلیل‌لرینی دَییشدیر',
+'filedelete-maintenance' => 'ساخلاماق سیراسیندا، فایل‌لاری سیلمک و قایتارماق، گئچرلی اولاراق باغلی‌دیر.',
+'filedelete-maintenance-title' => 'فایل سیلیننمه‌دی',
+
+# MIME search
+'mimesearch' => 'MIME آختار',
+'mimesearch-summary' => 'بو صحیفه، فایل‌لارین MIME-لارینا گؤره فیلترله‌مگی آچار.
+وئرمک: contenttype/subtype، میثال: <code>image/jpeg</code>.',
+'mimetype' => 'MIME تیپی:',
+'download' => 'اندیر',
+
+# Unwatched pages
+'unwatchedpages' => 'ایزلنمه‌میش صحیفه‌لر',
+
+# List redirects
+'listredirects' => 'یول‌لاندیرمالارین لیستی',
+
+# Unused templates
+'unusedtemplates' => 'ایشلدیلمه‌میش شابلونلار',
+'unusedtemplatestext' => 'بو صحیفه بوتون، {{ns:template}} آدفضاسیندا اولان و باشقا صحیفه‌لرده اولمایان صحیفه‌لری لیست ائدیر.
+شابلونلاری سیلمک‌دن اؤنجه، لوطفاً اونلارا اولان باشقا باغلانتیلاری یوخلایین.',
+'unusedtemplateswlh' => 'باشقا باغلانتیلار',
+
+# Random page
+'randompage' => 'راست‌گله صحیفه',
+'randompage-nopages' => 'بو {{PLURAL:$2|آدفضاسیندا|آدفضالاریندا}} هئچ صحیفه یوخدور: $1.',
+
+# Random redirect
+'randomredirect' => 'راست‌گله یول‌لاندیرما',
+'randomredirect-nopages' => '«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.',
+
+# 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-views-total' => 'گؤرونوشلر جمعی',
+'statistics-views-total-desc' => 'اولمایان صحیفه‌لر و اؤزل صحیفه‌لره گؤرونوشلر، داخیل ائدیلمه‌ییب‌دیر',
+'statistics-views-peredit' => 'دَییشیکلیگه گؤرونوشلر',
+'statistics-users' => 'یازیلمیش [[Special:ListUsers|ایستیفاده‌چیلر]]',
+'statistics-users-active' => 'چالیشقان ایستیفاده‌چیلر',
+'statistics-users-active-desc' => 'سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایش گؤرن ایستیفاده‌چیلر',
+'statistics-mostpopular' => 'ان چوخ گؤرونموش صحیفه‌لر',
+
+'disambiguations' => 'آیدین‌لاشدیرما صحیفه‌لرینه باغلانتیلاری اولان صحیفه‌لر',
+'disambiguationspage' => 'Template:دقیقلشدیرمه',
+'disambiguations-text' => "آشاغیداکی صحیفه‌لرده آزی بیر باغلانتی، '''بلیرلیندیمه صحیفه‌لری'''نه واردیر.
+اولا بیلر اونلاری داها اویغون صحیفه‌یه باغلاماق لازیم اولا.<br />
+بیر صحیفه، بلیرلندیرمه صحیفه‌سی کیمی اولار، اگر [[MediaWiki:Disambiguationspage]] صحیفه‌سینه باغلانمیش بیر شابلون‌دان ایستیفاده ائتسه.",
+
+'doubleredirects' => 'ایکی‌قات یول‌لاندیرمالار',
+'doubleredirectstext' => 'بو صحیفه دیگر ایستیقامتلندیرمه صحیفه‌لرینه ایستیقامتلندیرمه ائدن صحیفه‌لری سیاهی‌لار.
+هر سطرین ائهتیوا ائتدیگی کئچیدلر؛ بیرینجی و ایکینجی ایستیقامتلندیرمه، هم‌چی‌نین ایکینجی ایستیقامتلن‌دیرمک هدفی، کی بو عمومیتله بیرینجی ایستیقامتلن‌دیرمک گؤسترمه‌سی لازیم اولان "گئرچک" هدف صحیفه‌سی‌دیر.
+<del> اوستو خط لنیب </del> دوزلمیش دیر.',
+'double-redirect-fixed-move' => '[[$1]] دییشدیریلیب.
+حاضردا [[$2]]-یه ایستیقامتلنیب.',
+'double-redirect-fixed-maintenance' => '[[$1]]-دن [[$2]]-یه ایکی‌قات ایستیقامتلنمه دوزلدیلیر.',
+'double-redirect-fixer' => 'يؤنلندیرمه تعمیرجیسی',
+
+'brokenredirects' => 'خطالی ایستیقامتلندیرمه',
+'brokenredirectstext' => 'آشاغی‌داکی ایستیقامتلندیرمه‌لر مؤوجود اولمایان صحیفه‌لره کئچید وئریر:',
+'brokenredirects-edit' => 'دَییشدیر',
+'brokenredirects-delete' => 'سیل',
+
+'withoutinterwiki' => 'دیل باغلانتیلاری اولمایان صحیفه‌لر',
+'withoutinterwiki-summary' => 'آشاغیداکی صحیفه‌لر، باشقا دیل‌لره باغلانتیلاری یوخدور.',
+'withoutinterwiki-legend' => 'اؤن‌اَک',
+'withoutinterwiki-submit' => 'گؤستر',
+
+'fewestrevisions' => 'ان آز دَییشدیریلن صحیفه‌لر',
+
+# 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}} نوسخه',
+'nviews' => '{{PLURAL:$1|بیر|$1}} گؤرونوش',
+'nimagelinks' => '$1 ده{{PLURAL:$1|صحیفه‌ده}}ایستیفاده اولونمور',
+'ntransclusions' => '$1 ده{{PLURAL:$1|صحیفه‌ده}}ایستیفاده اولونور',
+'specialpage-empty' => 'بو صحیفه بوشدور',
+'lonelypages' => 'يئتیم صحیفه‌‌لر',
+'lonelypagestext' => 'آشاغی‌داکی صحیفه‌لره {{SITENAME}} سایتین‌داکی دیگر صحیفه‌لردن علاقه وئریلممیش یا دا چارپاز داخیل ائدیلممیش.',
+'uncategorizedpages' => 'بؤلمه‌سیز صحیفه‌لر',
+'uncategorizedcategories' => 'بؤلمه‌سیز بؤلمه‌لر',
+'uncategorizedimages' => 'بؤلمه‌سیز شکیل‌لر',
+'uncategorizedtemplates' => 'بؤلمه‌سیز شابلون‌لار',
+'unusedcategories' => 'ایستیفاده ائدیلمه‌میش بؤلمه‌لر',
+'unusedimages' => 'ایشلنمه‌میش فایل‌لار',
+'popularpages' => 'سئویلن صحیفه‌لر',
+'wantedcategories' => 'یسته نن بؤلمه‌لر',
+'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' => 'کئچید وئرمه‌ين صحیفه‌‌لر',
+'deadendpagestext' => 'آشاغیداکی صحیفه‌‌لردن بو ویکیپئدیياداکی دیگر صحیفه‌‌لره هئچ بیر کئچید يوخدور.',
+'protectedpages' => 'محافظه‌‌لی صحیفه‌‌لر',
+'protectedpages-indef' => 'يالنیز مدتسیز محافظه‌‌لر',
+'protectedpages-cascade' => 'یالنیز کاسکاد محافظه‌لر',
+'protectedpagestext' => 'آشاغی‌داکی صحیفه‌لر آد دییشیمینه و دَییشدیرمه‌یه باغلی‌دیر',
+'protectedpagesempty' => 'حال-حاضردا بو پارامئتره اویغون هئچ بیر محافظه‌لی صحیفه یوخ‌دور',
+'protectedtitles' => 'محافظه‌لی باش‌لیق‌لار',
+'protectedtitlestext' => 'آشاغی‌داکی باش‌لیق‌لار یارادیلماغا قارشی قوروما‌لی‌دیر',
+'protectedtitlesempty' => 'حال-حاضردا، بو پارامئترلری قورونان هئچ بیر موضوع یوخ‌دور.',
+'listusers' => 'ایستیفاده‌چی سیياهیسی',
+'listusers-editsonly' => 'يالنیز دَییشدیرمه ائدن ایستیفاده‌چیلری گؤستر',
+'listusers-creationsort' => 'يارانما تاریخینه گؤره سیرالا',
+'usereditcount' => '$1 {{PLURAL:$1|دَییشدیرمه}}',
+'usercreated' => '$1 تاریخینده، ساعات $2-ده {{GENDER:$3|یارانیب‌دیر}}',
+'newpages' => 'يئنی صحیفه‌‌‌لر',
+'newpages-username' => 'ایستیفاده‌چی آدی:',
+'ancientpages' => 'ان اسکی صحیفه‌لر',
+'move' => 'آدینی دَییشدیر',
+'movethispage' => 'بو صحیفه‌‌نین آدینی ديَیشدیر',
+'unusedimagestext' => 'آشاغی‌داکی فایل‌لار وار آنجاق هر هانسی بیر صحیفه‌ده باسدیریلمیش دئییل.
+خاهیش ائدیریک اونوتمایین کی، دیگر web سایت‌لاری بیر فایلا بیرباشا بیر اورل ایله علاقه وئره بیلر، و بونا گؤره ائففئکتیو ایستیفاده‌ده اولماسا بئله هله بورادا لیستنبیلیر.',
+'unusedcategoriestext' => 'آشاغیدا اولان بولمه لر مؤوجود اولدوغو حالدا، هئچ بیر مادده یا دا بولمه لر طرفین‌دن ایستیفاده ائدیلمیر.',
+'notargettitle' => 'وئریلمه‌يیب',
+'notargettext' => 'بو صحیفه یا یا کاربر حیاتا کئچیرمک اوچون بیر هدف صحیفه‌سی یا دا ایستیفاده‌چی‌سی بئلیرتمئدینیز.',
+'nopagetitle' => 'بئله هدف صحیفه‌سی یوخ‌دور',
+'nopagetext' => 'ایفاده ائتدیگینیز هدف صحیفه‌سی مؤوجود دئییل.',
+'pager-newer-n' => '{{PLURAL:$1|بیر داها یئنی|$1 داها یئنی}}',
+'pager-older-n' => '{{PLURAL:$1|بیر داها کؤهنه|$1 داها کؤهنه}}',
+'suppress' => 'باخان',
+'querypage-disabled' => 'پِرفورمانس اوچون بو اؤزل صحیفه باغلانیب‌دیر.',
+
+# Book sources
+'booksources' => 'کیتاب قایناقلاری',
+'booksources-search-legend' => 'کیتاب قایناقلارین آختار',
+'booksources-go' => 'گئت',
+'booksources-text' => 'آشاغیدا یئنی و ایشلنمیش کیتاب‌لار ساتان خاریجی کئچیدلرده سیز آختاردیغینیز کیتاب حاقیندا علاوه معلومات آلا بیلرسیز:',
+'booksources-invalid-isbn' => 'وئریلن ISBN اعتبارسیز کیمی گؤرونور؛ اورجینال قایناق‌دان کوپیالاما اشکالار اوچون نظارت ائدین.',
+
+# Special:Log
+'specialloguserlabel' => 'ایجراچی',
+'speciallogtitlelabel' => 'مقصد (باش‌لیق و یا ایستیفاده‌چی):',
+'log' => 'قئیدلر',
+'all-logs-page' => 'بوتون اجتماعی قئيدلر',
+'alllogstext' => '{{SITENAME}} اوچون بوتون مؤوجود قئیدلرین بیرگه گؤستریشی.
+قئید نؤوو، ایستیفاده‌چی آدی و یا تأثیر ائدیلمیش صحیفنی سئچمکله داها ایسپئسیفیک اولا بیلرسینیز.',
+'logempty' => 'ژورنالدا اويغون قئيد تاپیلمادی.',
+'log-title-wildcard' => 'بو متنله باشلایان باش‌لیق‌لاری آختار',
+'showhideselectedlogentries' => 'گؤستریش/گیزلمه سییاهه ده سئچیلمیش‌لر اوچون',
+
+# Special:AllPages
+'allpages' => 'بوتون صحیفه‌لر',
+'alphaindexline' => '$1-دن $2-یه',
+'nextpage' => 'سونراکی صحیفه‌‌ ($1)',
+'prevpage' => 'اولکی صحیفه ($1)',
+'allpagesfrom' => 'بو حرفله باشلایان صحیفه‌لری گؤستر:',
+'allpagesto' => 'بو حرفله باشلایان صحیفه لری گؤستر:',
+'allarticles' => 'بوتون صحیفه‌لر',
+'allinnamespace' => 'بوتون صحیفه‌لر ($1 صحیفه‌لری)',
+'allnotinnamespace' => 'بوتون صحیفه‌لر ( $1 ساحه‌سینده اولمایان‌لار)',
+'allpagesprev' => 'قاباقکی',
+'allpagesnext' => 'سونراکی',
+'allpagessubmit' => 'گئت',
+'allpagesprefix' => 'بورا یازدیغینیز حرف‌لرله باشلایان صحیفه‌لری سیاهی‌سینی:',
+'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' => 'بؤلمه‌لر',
+'categoriespagetext' => 'آشاغی‌داکی {{PLURAL:$1|بولمه لردهٔ|بولمه لرده}}  صحیفه‌لر، یاخود مئدیا-فایل‌لار وار.
+[[Special:UnusedCategories|ایستفاده اولمایان بولمه لر]] بورادا گؤستریلمه‌ییب.
+هم‌چی‌نین، [[Special:WantedCategories|لازیم اولان بولمه لره]] باخین.',
+'categoriesfrom' => 'شونونلا باشلایان بولمه لر باخ:',
+'special-categories-sort-count' => 'میقدارا گؤره تنزیمله',
+'special-categories-sort-abc' => 'الیفبا سیراسی ایله دوز',
+
+# Special:DeletedContributions
+'deletedcontributions' => 'سیلینمیش ایستیفاده‌چی چالیشمالاری',
+'deletedcontributions-title' => 'سیلین‌میش ایستیفاده‌چی چالیشمالاری',
+'sp-deletedcontributions-contribs' => 'فالیت',
+
+# Special:LinkSearch
+'linksearch' => 'خاریجی باغلانتی آختار',
+'linksearch-pat' => 'آختاریش اولگوسو:',
+'linksearch-ns' => 'آد فضاسی:',
+'linksearch-ok' => 'آختار',
+'linksearch-text' => '«*.wikipedia.org» کیمی نیشانلاری ایشلده بیلرسینیز.
+آزی بیر دنه «*.org» کیمی یوخاری دامنه لازیم‌دیر.<br />
+دستلکلنمیش {{PLURAL:$2|پروتوکول|پروتوکول‌لار}}: <code>$1</code> (بوش بیراخیلسا، http:// نظرده آلیناجاقدیر).',
+'linksearch-line' => '$1، $2-دن باغلانیب‌دیر',
+'linksearch-error' => 'نیشانلار یالنیز آدی اولینده گله بیلرلر.',
+
+# Special:ListUsers
+'listusersfrom' => 'بوندان باشلایاراق ایستیفاده‌چیلری گؤستر:',
+'listusers-submit' => 'گؤستر',
+'listusers-noresult' => 'هئچ ایستیفاده‌چی تاپیلمادی.',
+'listusers-blocked' => '(باغلانیب)',
+
+# Special:ActiveUsers
+'activeusers' => 'چالیشان ایستیفاده‌چیلرین لیستی',
+'activeusers-intro' => 'بوردا سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایشلر گؤرن ایستیفاده‌چیلرین لیستی گؤستریلیر.',
+'activeusers-count' => 'سون {{PLURAL:$3|بیر|$3}} گون‌ده، {{PLURAL:$1|بیر|$1}} دَییشیکلیک.',
+'activeusers-from' => 'بوندان باشلایاراق ایستیفاده‌چیلری گؤستر:',
+'activeusers-hidebots' => 'بوتلاری گیزلت',
+'activeusers-hidesysops' => 'ایداره‌چیلری گیزلت',
+'activeusers-noresult' => 'هئچ ایستیفاده‌چی تاپیلمادی.',
+
+# Special:ListGroupRights
+'listgrouprights' => 'ایستیفاده‌چی قروپ حاقلاری',
+'listgrouprights-summary' => 'آشاغیدا، بو ویکی‌ده تانیلان ایستیفاده‌چی گروپلاری و اونلارین حاقلاری گؤستریلیر.
+تک حاقلار اوچون ده، [[{{MediaWiki:Listgrouprights-helppage}}|آرتیق بیلگیلر]] اولا بیلر.',
+'listgrouprights-key' => '* <span class="listgrouprights-granted">وئریلمیش حاق</span>
+* <span class="listgrouprights-revoked">قایتاریلمیش حاق</span>',
+'listgrouprights-group' => 'قروپ',
+'listgrouprights-rights' => 'حاقلار',
+'listgrouprights-helppage' => 'Help:قروپ حاقلاری',
+'listgrouprights-members' => '(عضولرین لیستی)',
+'listgrouprights-addgroup' => '{{PLURAL:$2|گروپو|گروپلاری}} آرتیر: $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-all' => 'بوتون گروپلاری اؤز حسابینا آرتیر',
+'listgrouprights-removegroup-self-all' => 'بوتون گروپلاری اؤز حسابیندان سیل',
+
+# E-mail user
+'mailnologin' => 'گؤندرمه آدرسی یوخدور',
+'mailnologintext' => 'باشقا ایستیفاده‌چیلره ایمیل گؤندرک اوچون، [[Special:UserLogin|گیریش]] ائدیب و [[Special:Preferences|ترجیحلر]]ینیزده گئچرلی ایمیل آدرسی وئرمه‌لیسینیز.',
+'emailuser' => 'بو ایستیفاده‌چی‌یه ایمیل گؤندر',
+'emailuser-title-target' => 'بو {{GENDER:$1|ایستیفاده‌چی}}‌یه ایمیل گؤندر',
+'emailuser-title-notarget' => 'ایستیفاده‌چی‌یه ایمیل گؤندر',
+'emailpage' => 'ایستیفاده‌چی‌یه ایمیل گؤندر',
+'emailpagetext' => 'آشغیداکی فورم‌دان، بو {{GENDER:$1|ایستیفاده‌چی}}‌یه ایمیل گؤندرمک اوچون ایستیفاده ائده بیلرسینیز.
+[[Special:Preferences|اؤز ترجیحلرینیز]]ده وئرن ایمیل آدرسی، بو ایمیلین "From" یئرینده گؤستریله‌جک‌دیر و بونا گؤره ایمیلی آلان سیزه موستقیم جاواب گؤندره بیلر.',
+'usermailererror' => 'ایمیل‌دن بو خطا قایتاریلدی:',
+'defemailsubject' => '«$1» آدلی ایستیفاده‌چی‌دن، {{SITENAME}} ایمیلی',
+'usermaildisabled' => 'ایستیفاده‌چی ایمیلی باغلی‌دیر',
+'usermaildisabledtext' => 'بو ویکی‌ده باشقا ایستیفاده‌چیلره ایمیل گؤندره بیلنمه‌سینیز',
+'noemailtitle' => 'ایمیل آدرسی یوخدور',
+'noemailtext' => 'بو ایستیفاده‌چی، بیر گئچرلی ایمیل آدرسی وئرمه‌ییب‌دیر.',
+'nowikiemailtitle' => 'ایمیل ایجازه‌سی یوخدور',
+'nowikiemailtext' => 'بو ایستیفاده‌چی، باشقا ایستیفاده‌چیلردن ایمیل آلماماغینی بیلدیریب‌دیر.',
+'emailnotarget' => 'آلان اوچون، اولمایان یوخسا گئچرسیز ایستیفاده‌چی آدی.',
+'emailtarget' => 'آلانین ایستیفاده‌چی آدینی دَییشدیر',
+'emailusername' => 'ایستیفاده‌چی آدی:',
+'emailusernamesubmit' => 'گؤندر',
+'email-legend' => 'باشقا {{SITENAME}} ایستیفاده‌چیسینه ایمیل گؤندر',
+'emailfrom' => 'کیم‌دن:',
+'emailto' => 'کیمه:',
+'emailsubject' => 'قونو:',
+'emailmessage' => 'مئساژ',
+'emailsend' => 'گؤندر',
+'emailccme' => 'مئساژیمین بیر کوپیسینی ده منه ایمیل ائت.',
+'emailccsubject' => 'سیزین $1-ه مئساژینیزین کوپی‌سی: $2',
+'emailsent' => 'ایمیل گؤنده‌ریلدی',
+'emailsenttext' => 'ایمیل مئساژینیز گئنده‌ریلدی.',
+'emailuserfooter' => 'بو ایمیل، {{SITENAME}}-ده «ایستیفاده‌چی‌یه ایمیل گؤندر» ایمکانی ایله، $1-دن $2-ه گؤنده‌ریلیب‌دیر.',
+
+# User Messenger
+'usermessage-summary' => 'مئساژ گئنده‌ریلدی.',
+'usermessage-editor' => 'سیستِم مئساژ گؤندَرَنی',
+
+# Watchlist
+'watchlist' => 'ایزله‌دیگیم صحیفه‌‌لر',
+'mywatchlist' => 'ایزله‌دیکلر',
+'watchlistfor2' => '$1 اوچون $2',
+'nowatchlist' => 'ایزلمه سیاهینیز بؤش‌دور.',
+'watchlistanontext' => 'لطفاً، ایزلدیگینیز صحیفه‌لری گؤرمک و یا رئداکته ائتمک اوچون $1.',
+'watchnologin' => 'داخیل اولمامیسینیز',
+'watchnologintext' => 'ایزلمه سیاهینیزدا دییشیک‌لیک آپارماق اوچون [[Special:UserLogin|داخیل اولمالیسینیز]].',
+'addwatch' => 'ایزلمه سیاهی‌سینا علاوه ائت',
+'addedwatchtext' => '"[[:$1]]" صحیفه‌سی [[Special:Watchlist|ایزله‌دیکلرینیزه]] آرتیریلدی. بو صحیفه‌ده و ایلگیلی دانیشیق صحیفه‌سین‌ده‌کی بوتون دییشیکلیکلر اوردا گؤستریله‌جکلر.',
+'removewatch' => 'بو صحیفنی ایزلدیگیم صحیفه‌لر سیاهی‌سین‌دان چیخار',
+'removedwatchtext' => '"[[:$1]]" صحیفه‌سی [[Special:Watchlist|ایزلمه سیاهینیزدان]] چیخاریلدی.',
+'watch' => 'ایزله',
+'watchthispage' => 'بو صفحه‌نی ایزله',
+'unwatch' => 'ایزله‌مه',
+'unwatchthispage' => 'صحیفه ایزلمیی دایان‌دیر',
+'notanarticle' => 'مضمون صحیفه‌سی دئییل',
+'notvisiblerev' => 'باشقا ایستیفادی‌چی‌نین سون دییشیک‌لیگی سیلینیب',
+'watchnochange' => 'گؤستریلن واخت‌دا هئچ بیر ایزله‌دیگینیز صحیفه دَییشدیریلمه‌ییبدیر.',
+'watchlist-details' => 'دانیشیق صفحه‌لرینی سایمایاراق، {{PLURAL:$1|$1 صفحه‌نی}} ایزله‌ییرسینیز.',
+'wlheader-enotif' => '* ایمیل مکتوبلا بیلدیریش اولا بیلر.',
+'wlheader-showupdated' => "* سون گؤروشونوزدن سونرا ائدیلن دییشیکلیکلر '''قالین''' گؤستریلیبدیلر.",
+'watchmethod-recent' => 'یئنی دییشیک‌لیک‌لر ایزلنیلن صحیفه‌لر اوچون یوخلانیلیر',
+'watchmethod-list' => 'ایزلنیلن صحیفه‌لر یئنی دییشیک‌لیک‌لر اوچون یوخلانیلیر',
+'watchlistcontains' => 'ایزلمه سیاهینیزدا $1 {{PLURAL:$11|صحیفه}} وار.',
+'iteminvalidname' => "'$1 ایله باغ‌لی پروبلئم، آدی دوزگون دئییل...",
+'wlnote' => "آشاغیداکی {{PLURAL:$1|'''$1''' ديَیشیک‌لیک|'''$1'''ديَیشیک‌لیک}}  سون {{PLURAL:$2|ساعتدا|'''$2''' ساعتدا}} ائدیلمیشدیر.$3، $4",
+'wlshowlast' => 'سون $1 ساعات $2 گون گؤستر $3',
+'watchlist-options' => 'ایزله‌دیکلر سئچمه‌لری',
+
+# Displayed when you click the "watch" button and it is in the process of watching
+'watching' => 'ایزله‌نیلیر...',
+'unwatching' => 'ایزله‌مه...',
+'watcherrortext' => 'ایزلئمئ سیاهی‌سی ترجیحلرینیزی "$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-ی $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-ه باخین.',
+'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 آدلی صحیفه‌‌ $PAGETITLE تاریخینده $PAGEEDITOR طرفیندن $CHANGEDORCREATED. صحیفه‌‌نین سونونجو وئرسیياسینا باخماق اوچون $PAGETITLE_URL کئچیدیندن ایستیفاده ائدین. 
+
+$نئwپاگئ 
+
+ديَیشیکلیگی ائدن ایستیفاده‌چی‌نین ایضاهی: $PAGESUMMARY $PAGEMINOREDIT
+
+صحیفه‌‌نی ديَیشدیرن ایستیفاده‌چی‌نین علاقه‌‌ معلوماتلاری: 
+ائ-پوچت:$PAGEEDITOR_EMAIL
+ویکی:$PAGEEDITOR_WIKI
+
+سیز حاقیندا صؤحبت گئدن صحیفه‌‌يه باخانادک صحیفه‌‌دکی دیگر ديَیشیکلیکلرله باغلی باشقا بیلدیریش مکتوبو آلماياجاقسینیز. سیز همچی‌نین، ایزله‌مه سیياهینیزداکی بوتون صحیفه‌‌لرله باغلی بیلدیریش معلوماتلارینی سیله بیلرسینیز. 
+
+               {{SITENAME}} سايتی‌نین خبردارلیق سیستمی. 
+
+-- 
+ایزله‌مه سیياهیسی‌نین تنزیمله‌مه‌لرینی ديَیشمک اوچون: 
+{{canonicalurl:Special:Watchlist/edit}}
+
+ياردیم و تکلیفلرینیز اوچون: 
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'یارادیلیب',
+'changed' => 'ديَیشدی',
+
+# Delete
+'deletepage' => 'صحیفه‌‌نی سیل',
+'confirm' => 'تصدیق ائت',
+'excontent' => "کؤهنه مظمون: '$1'",
+'excontentauthor' => "ترکیب: '$1 (و'[[Special:Contributions/$2|$2]]' تاریخچه‌ده فالیتی قئید ائدیلن یئگانه ایستیفاده‌چی‌دیر)",
+'exbeforeblank' => "سیلینمه‌دن اوولکی مزمون: '$1",
+'exblank' => 'صحیفه بوش',
+'delete-confirm' => 'سیل $1',
+'delete-legend' => 'سیل',
+'historywarning' => "'خبردارلیق:' سیلینه‌جک صحیفه‌نین تاریخچه‌سینده قئید اولونموش $1 {{PLURAL::$1|دییشدیر|دییشدیرمه}} وار:",
+'confirmdeletetext' => 'بو صحیفه و یا فایل بوتون تاریخچه‌سی ایله بیرلیکده بیردفه‌لیک سیلینه‌جک. بونو [[{{MediaWiki:Policy-url}}|قایدا‌لارا]] اویغون ائتدیگینیزی و عملیاتین نتیجه‌لرینی باشا دوشدوگونوزو تسدیق ائدین.',
+'actioncomplete' => 'چالیشما سوناچاتدی',
+'actionfailed' => 'چالیشما اوغورسوز اولدو',
+'deletedtext' => '"$1" سیلیندی.
+سونونجو سیلینمه‌لره باخ: $2.',
+'dellogpage' => 'سیلمه قئیدی',
+'dellogpagetext' => 'ان سون سیلینمیش صحیفه‌لرین سیاهی‌سی.',
+'deletionlog' => 'سیلمه سییاهه‌سی',
+'reverted' => 'داها اوولکی وئرسیا برپا ائدیلدی',
+'deletecomment' => 'ندن:',
+'deleteotherreason' => 'باشقا/آرتیق دلیل:',
+'deletereasonotherlist' => 'باشقا سبب',
+'deletereason-dropdown' => '*ساس سیلمه سببی
+** یازان ایستیی
+** یازانلار حقوق پوزونتوسو
+** واندالیزم',
+'delete-edit-reasonlist' => 'سیلمک دلیل‌لرینی دَییشدیر',
+'delete-toobig' => 'بو صحیفه، $1 {{PLURAL: $1 | دنه دییشیک‌لیک | دنه دییشیک‌لیک}} ایله چوخ اوزون بیر کئچمیشه مالیک‌دیر.
+بئله صحیفه‌لرین سیلینمه‌سی، {{SITENAME}} سایتینی پوزماماق اوچون مهدودلاشدیریلماقدا‌دیر.',
+'delete-warning-toobig' => 'بو صحیفه‌‌نین بؤيوک بیر ديَیشیکلیک کئچمیشی وار، $1 {{PLURAL:$1|نسخه| نسخه}} اوزرینده. 
+بونو سیلمک {{SITENAME}} عملیاتلارینی مخدل‌ائده‌بیلیر؛ 
+دیقتله داوام ائدین.',
+
+# Rollback
+'rollback' => 'اوولکی نوسخه لر',
+'rollback_short' => 'اوولکی حالینا قایتار',
+'rollbacklink' => 'گئری‌دؤندر',
+'rollbacklinkcount' => 'گیتیرلمه $1  {{PLURAL:$1|دییشمک |دییشمک}} دییشدیرمه',
+'rollbacklinkcount-morethan' => 'گیتیرلمه آرتیق $1 {{PLURAL:$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' => "دییشیک‌لیک خلاصه‌سی: ''\" \$1''\" ایدی.",
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|دانیشیق]]) طرفین‌دن ائدیلمیش دییشیک‌لیک‌لر [[User:$1|$1]] طرفین‌دن ائدیلمیش دییشیک‌لیک‌لره قایتاریلدی.',
+'revertpage-nouser' => '(ایستیفاده‌چی آدی چیخاریلمیش) طرفین‌دن ائدیلن دییشیک‌لیک‌لر [[User:$1|$1]] طرفین‌دن ائدیلن سون دییشیک‌لییه گئری آلیندی',
+'rollback-success' => '$1 طرفین‌دن ائدیلمیش دییشدیر‌لر گئری قایتاریلدی؛ $2 طرفین‌دن یارادیلمیش سون وئرسیا برپا اولوندو.',
+
+# Edit tokens
+'sessionfailure-title' => 'گیریش خطاسی',
+'sessionfailure' => 'گیریش اوتورومونوزلا ایلگی‌لی بیر سورون وار گیبی گؤرونویور؛
+بو ائیلئم، اوتوروم گاسپینا کارشی اؤنلئم اولاراک ایپتال ائدیلدی.
+لوتفن "گئری" گیدین و گئلدیغینیز سایفایی یئنی‌دئن یوکلئیین، سونرا تئکرار دئنئیین.',
+
+# Protect
+'protectlogpage' => 'قوروما قئیدلری',
+'protectlogtext' => 'آشاغی‌داکی، صحیفه قوروما‌لارینا دییشیک‌لیک‌لرین بیر سیاهی‌سی‌دیر.
+حال-حاضردا تطبیق اولونان صحیفه قوروما‌لاری اوچون [[Special:ProtectedPages| قوروما آلتینا آلینمیش صحیفه‌لر سیاهی‌سینا]] باخا بیلرسینیز.',
+'protectedarticle' => '«[[$1]]» قوروندو',
+'modifiedarticleprotection' => '"[[$1]]" صحیفه‌سی اوچون محافظه سویه‌سی دییشیلدی',
+'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' => 'زامان بیتدی',
+'protect_expiry_invalid' => 'محافظه‌نین بیتمه واختی یانلیش‌دیر.',
+'protect_expiry_old' => 'بیتمه واختی کئچمیش‌دیر.',
+'protect-unchain-permissions' => 'محافظه‌نین علاوه پارامئترلرینی آچماق',
+'protect-text' => "سیز '$1 صحیفه‌سی‌نین محافظه سویه‌سینی گؤره و دییشه بیلرسینیز.",
+'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-summary-cascade' => 'پیلله‌لی',
+'protect-expiring' => '$1 (UTC)- تاریخینده واختی بیتیر',
+'protect-expiring-local' => '$1-ده بیتیر',
+'protect-expiry-indefinite' => 'سون سوز',
+'protect-cascade' => 'بو صحیفه‌ده ایستیفاده ائدیلن بوتون صحیفه‌لری قوروماغا آل (پیلله‌لی قوروماق)',
+'protect-cantedit' => 'بو صحیفه‌نین محافظه درجه‌سینی دییش‌دیره بیلمزسینیز، چونکی بو دییشیک‌لیک اوچون حقوقونوز یوخ‌دور.',
+'protect-othertime' => 'آیری واخت',
+'protect-othertime-op' => 'باشقا واخت',
+'protect-existing-expiry' => 'مؤوجود بیتیش زامانی: $3، $2',
+'protect-otherreason' => 'باشقا/آرتیق دلیل:',
+'protect-otherreason-op' => 'دیگر سبب',
+'protect-dropdown' => '* عمومی قوروما سبب‌لری
+** حدین‌دن آرتیق واندالیزم
+** حدین‌دن آرتیق هرزه یازماق
+** دییشیک‌لیک دؤیوشو
+** یوکسک ترافیکه صاحب صحیفه',
+'protect-edit-reasonlist' => 'محافظت دلیل‌لرینی دَییشدیر',
+'protect-expiry-options' => '1 ساهات:1 hour,1 گون:1 day,1 هفته:1 week,2 هفته:2 weeks,1 آی:1 month,3 آی:3 months,6 آی:6 months,1 ایل:1 year,سون سوز:infinite',
+'restriction-type' => 'حقوقلار',
+'restriction-level' => 'محدودیت درجه‌‌سی:',
+'minimum-size' => 'ان کوچیک بویوت',
+'maximum-size' => 'ان بویوک بویوت',
+'pagesize' => '(بایت)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'دَییشدیر',
+'restriction-move' => 'آدینی دَییشدیر',
+'restriction-create' => 'یارات',
+'restriction-upload' => 'یوکله',
+
+# Restriction levels
+'restriction-level-sysop' => 'تام محافظه',
+'restriction-level-autoconfirmed' => '(ياریم-محافظه‌‌)',
+'restriction-level-all' => 'ایستنیلن سویه',
+
+# Undelete
+'undelete' => 'سیلینمیش صحیفه‌‌لری گؤستر',
+'undeletepage' => 'سیلینمیش صحیفه‌لری گؤستر و یا برپا ائت',
+'undeletepagetitle' => "'اشاغی‌داکی، [[:$1|$1]] صحیفه‌سی‌نین سیلینمیش دییشیک‌لیک‌لرین‌دن ایبارتدیر.",
+'viewdeletedpage' => 'سیلینمیش صحیفه‌لری گؤستر',
+'undeletepagetext' => 'آشاغی‌داکی {{PLURAL:$1|صحیفه|$1 صحیفه}} سیلینمیش‌دیر اما هله آرشیودئ‌دیر و گئری گتیریله بیلر.
+آرخیو نیزام‌لی اولا‌راق تمیزلمک اولار.',
+'undelete-fieldset-title' => 'دییشیک‌لیک‌لری گئری یوکله',
+'undeleteextrahelp' => "سایفا‌لارلا بیرلیکده کئچمیشی گئری گتیرمک اوچون تصدیق قوتولارینا توخونمادان 'گئری گتیر!' دویمه‌سینه باسین. صحیفه‌نین کئچمیشینی آیری-آیری گتیرمک اوچون گئری گتیرمک ایستدیگینیز دییشیک‌لیک‌لرین تصدیق قوتولارینی سئچیب 'گئری گتیر!' دویمه‌سینه باسین. سئچیلن تسدیق قوتولارینی و سبب ساحه‌سینی یئنی‌دن قورماق اوچون 'وازگئچ دویمه‌سینه باسین.",
+'undeleterevisions' => '$1 {{PLURAL:$1 | اولوب دیر | اولدولار}} آرشیولئندی',
+'undeletehistory' => 'اگر صحیفه‌‌نی گئری گتیرسه‌نیز، بوتون رئویزيونلار کئچمیشه گئری گتیریله‌جک. 
+سیلیندیکدن سونرا عینی آدلا يئنی بیر صحیفه‌‌ يارانمیشسا، گئری گلن رئویزيونلار مؤوجود اولان صحیفه‌‌نین کئچمیشینده گؤرونه‌جک.',
+'undeleterevdel' => 'اگر اوست صحیفه‌ده سونو چلاناجاقسا یا دا فایل رئویزیونو قیسمن سیلینمیش ایسه، سیلمیی گئری آلما تطبیق اولونا بیلمز.
+بئله حال‌لاردا، ان یئنی سیلینن رئویزیونو سئچمملی یا دا گیزلمه سینی قالدیرما‌لی‌دیر.',
+'undeletehistorynoadmin' => 'بو مادده سیلینمیش‌دیر. سیلینمه سببی و سیلینمه اولینده ماددنی تشکیل ائدن ایستیفاده‌چی‌لرین دئتال‌لاری آشاغی‌داکی ایستفادچی موشخصاتی وئریلمیش‌دیر. بو سیلینمیش‌دیر دییشیک لیک متن‌لری ایسه یالنیز ایداره‌چی‌لر طرفین‌دن گؤروله بیلر.',
+'undelete-revision' => '$3 طرفین‌دن $1 صحیفه‌سی‌نین سیلینمیش دییشدیر ‌سین ($4 تاریخیندئن بری، $5 ساعتدا):',
+'undeleterevision-missing' => 'اعتبارسیز و یا ایتکین نوسخه.
+نوسخه تمیر و یا آرخیو‌دن سیلینمیش اولا بیلر یا دا صاحب اولدوغونوز علاقه اشتباه دیر.',
+'undelete-nodiff' => 'اولکی دَییشمه تاپیلمادی.',
+'undeletebtn' => 'قایتار',
+'undeletelink' => 'باخ/قایتار',
+'undeleteviewlink' => 'باخ',
+'undeletereset' => 'قور',
+'undeleteinvert' => 'سئچیلنی دؤندر',
+'undeletecomment' => 'ندن:',
+'undeletedrevisions' => 'جمعی {{PLURAL:$11|1 دییش|$1 دییشدیر}} گئری قایتاریلدی.',
+'undeletedrevisions-files' => '{{PLURAL:$1|1 نوسخه|$1 نوسخه}} و {{PLURAL:$2|1 فایل|$2 فایل}} برپا ائدیلدی',
+'undeletedfiles' => '{{PLURAL:$1|1 فایل|$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' => 'سیلمه آرخیوینده بیربیریله اؤرتوشن هئچ بیر صحیفه تاپیلمادی.',
+'undelete-filename-mismatch' => 'فایلین $1 تاریخ‌لی نوسخه سینی برپا ائتمک مومکون دئییل: فایلین آدیندا اویغونسوزلوق',
+'undelete-bad-store-key' => 'فایلین $1 تاریخ‌لی نوسخه سینی برپا ائتمک مومکون دئییل: فایل سیلینمزدن اول مؤوجود دئییلدی.',
+'undelete-cleanup-error' => 'ایستیفاده‌سیز "$1" آرشیو فایلینین سیلینمه ختاسی.',
+'undelete-missing-filearchive' => '$1 نؤمره‌لی آرشیو فایلینی برپا ائتمک مومکون دئییل، چونکی او معلومات بازاسیندا یوخ‌دور. اولا بیلر فایل آرتیق برپا اولونوب.',
+'undelete-error' => 'صحیفه برپاسیندا ختا',
+'undelete-error-short' => 'فایل سیلینرکن ختا: $1',
+'undelete-error-long' => 'فایل سیلینرکن اوزه چیخان ختا‌لار:
+
+$1',
+'undelete-show-file-confirm' => '"<nowiki>$1</nowiki>" فایلینین $2 $3 تاریخ‌لی سیلینمیش بیر دییشدیر ‌سینی گؤرمک ایستدیگینیزدن اطمیناننیز وار می؟',
+'undelete-show-file-submit' => 'بلی',
+
+# Namespace form on various pages
+'namespace' => 'آد فضاسی:',
+'invert' => 'سئچیلنی دؤندر',
+'tooltip-invert' => 'بو قوتونی علامتله یین تا انتخاب اولان آد فضا سینین ایچری صحیفه لری دییشیک لیک لری(و اوبیری علامتلنمیش فضالار) گیزله نه آدی',
+'namespace_association' => 'علاقه‌لی آد ساحه‌سی',
+'tooltip-namespace_association' => 'بو قوتونو علامت له ین یالنیز آد بحث فضاسی یا مرتبط اولان آد فضاسی ایله انتخاب اولا',
+'blanknamespace' => '(آنا)',
+
+# Contributions
+'contributions' => '{{GENDER:$1|ایستیفاده‌چی}} چالیشمالاری',
+'contributions-title' => '$1 ایستیفاده‌چی چالیشمالاری',
+'mycontris' => 'چالیشمالار',
+'contribsub2' => '$1 اوچون ($2)',
+'nocontribs' => 'بو موشخصاتا اویغون دییشدیر تاپیلمادی',
+'uctop' => '(یوخاری)',
+'month' => 'بو آی‌دان (و اؤنجه‌سی):',
+'year' => 'بو ایل‌دن (و اؤنجه‌سی):',
+
+'sp-contributions-newbies' => 'یالنیز یئنی ایستیفاده‌چیلرین چالیشمالارینی گؤستر',
+'sp-contributions-newbies-sub' => 'یئنی ایستیفاده‌چی‌لر اوچون',
+'sp-contributions-newbies-title' => 'یئنی حساب‌لار اوچون ایستیفاده‌چی فالیت‌لری',
+'sp-contributions-blocklog' => 'باغلاما قئیدلری',
+'sp-contributions-deleted' => 'سیلینمیش ایستیفاده‌چی چالیشمالاری',
+'sp-contributions-uploads' => 'یوکله‌نَنلر',
+'sp-contributions-logs' => 'قئیدلر',
+'sp-contributions-talk' => 'دانیشیق',
+'sp-contributions-userrights' => 'ایستیفاده‌چی حاقلارین ایداره‌ ائتمه‌سی',
+'sp-contributions-blocked-notice' => 'بو ایستیفاده‌چی حال-حاضردا بلوکلانمیش‌دیر.
+بلوکلاما قئیدلری‌نین سونونجوسو آشاغیدا گؤستریلمیش‌دیر:',
+'sp-contributions-blocked-notice-anon' => 'بو آی پی-عنوان حال-حاضردا باغلانمیش ‌دیر.
+بالانما قئیدلری‌نین سونونجوسو آشاغیدا گؤستریلمیش‌دیر:',
+'sp-contributions-search' => 'چالیشمالاری آختار',
+'sp-contributions-username' => 'آی‌پی آدرسی ویا ایستیفاده‌چی آدی:',
+'sp-contributions-toponly' => 'تکجه سون نوسخه اولان دییشیکلری گؤستر',
+'sp-contributions-submit' => 'آختار',
+
+# What links here
+'whatlinkshere' => 'بو صحیفه‌یه باغلانتیلار',
+'whatlinkshere-title' => '«$1»-ه باغلانان صحیفه‌لر',
+'whatlinkshere-page' => 'صحیفه:',
+'linkshere' => "آشاغیداکی صحیفه‌لر '''[[:$1]]'''-ه باغلانیب:",
+'nolinkshere' => "'''[[:$1]]'''-ه هئچ بیر صحیفه باغلانماییب‌دیر.",
+'nolinkshere-ns' => "سئچیلمیش آدفضاسیندا، هئچ صحیفه '''[[:$1]]'''-ه باغلانتی‌سی یوخدور.",
+'isredirect' => 'یوللاندیرما صحیفه‌سی',
+'istemplate' => 'داخیل اولموش',
+'isimage' => 'فایلا باغلانتی',
+'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-filters' => 'سۆزگَجلر',
+
+# Block/unblock
+'autoblockid' => 'اوتوماتیک باغلانما #$1',
+'block' => 'ایستیفادچینی باغلاما',
+'unblock' => 'ایستیفاده‌چی‌نین باغلانماسین گؤتور',
+'blockip' => 'ایستیفاده چی نی باغلا',
+'blockip-title' => 'ایستیفادچی نی باغلا',
+'blockip-legend' => 'ایستیفادچی نی باغلا',
+'blockiptext' => 'آشاغی‌داکی فورمو ایستیفاده ائده‌رک مویین بیر ایپنین و یا قئیدیات‌دان کئچمیش ایستیفاده‌چی‌نین دییشیک‌لیک ائتمه‌سینی مانعه تؤره‌ده بیلرسینیز. بو یالنیز واندالیزمی قارشی‌سینی آلماق اوچون و [[{{MediaWiki:Policy-url}}|قایدا‌لارا]] اویغون اولا‌راق ائدیلمه‌لی. آشاغییا موتلق قاداغا ایله علاقه‌دار بیر شرح یازین. (نومونه:-بو-صحیفه‌لرده واندالیزم ائتمیش‌دیر).',
+'ipadressorusername' => 'آی-پی عونوانی و یا ایستیفاده‌چی آدی',
+'ipbexpiry' => 'بیتمه مدتی:',
+'ipbreason' => 'ندن:',
+'ipbreasonotherlist' => 'باشقا سبب',
+'ipbreason-dropdown' => '*باغلانما سبب‌لری:
+** یالان معلومات‌لارین علاوه ائدیلمه‌سی
+** صحیفه‌نین مزمونونون سیلینمه‌سی
+** خاریجی سایت‌لارا ایسپام-کئچیدلر
+** صحیفه‌یه معنا‌سیز و یارارسیز علاوه‌لره گؤره
+** حده و تعقیب‌لره گؤره
+** تحقیره گؤره
+** چوخسای‌لی حساب‌دان سوی ایستیفاده‌یه گؤره
+** قاداغان اولونموش ایستیفاده‌چی آدینا گؤره',
+'ipb-hardblock' => 'بو ای پی-ده ایجلاس آچمیش ایستیفاده‌چی‌لرین دییشیک‌لیک ائتمه‌سینی تدبیر',
+'ipbcreateaccount' => 'حساب آچمانی محدودلاش‌دیر',
+'ipbemailban' => 'ایستیفاده‌چی‌نین ایمیل گؤندرمه‌سینه مانع اول',
+'ipbenableautoblock' => 'مؤوجود اولان مانعه تؤرتمه‌لری گؤستر...',
+'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' => 'آیری',
+'ipbotherreason' => 'آیری سبب/آرتیق:',
+'ipbhidename' => 'ایستیفاده‌چی آدینی دییشدیر‌لرده و سیاهی‌لاردا گیزلت',
+'ipbwatchuser' => 'بو ایستیفاده‌چی‌نین دانیشیق و ایستیفاده‌چی صحیفه‌سینی ایزله',
+'ipb-disableusertalk' => 'بو ایستیفاده‌چی باغلی اولارکن اؤز دانیشیق صحیفه‌سینده دییشدیر ائتمه‌سینی اوز الیله قاباقین آلما',
+'ipb-change-block' => 'بو سبب‌لرله ایستیفادچینی یئنی‌دن باغلا',
+'ipb-confirm' => 'بلوکو تصدیقله',
+'badipaddress' => 'سهو آی پی',
+'blockipsuccesssub' => 'باغلاندی',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] باغلاندی.<br />
+باخ [[Special:BlockList|آی پی باغلانماق سیاهی‌سی]] باغلانمیش آی پ-لر.',
+'ipb-blockingself' => 'اؤزونوزو باغلاماق حالیندا سیز.! بونو ائتمک ایستدیگینیزدن اطمینانییز وار می؟',
+'ipb-confirmhideuser' => 'ایستیفادچینی باغلاماق و دییشدیر سیاهی‌سین‌دان اونون آدینی سیلمک اوزرسینیز. بونو ائتمک ایستدیگینیزدن اطمینانیز وار می؟',
+'ipb-edit-dropdown' => 'باغلاما سبب‌لرینی دییشدیر',
+'ipb-unblock-addr' => '$1 آچیلدی',
+'ipb-unblock' => 'ایستیفاده چی نین یا دا آی پی نین آچیلماسی',
+'ipb-blocklist' => 'مؤوجود بلوکلاری گؤستر',
+'ipb-blocklist-contribs' => '$1 ایستیفاده‌چی فعالیتلری',
+'unblockip' => 'ایستیفاده‌چی‌نین باغلانماسین گؤتور',
+'unblockiptext' => 'اولجه‌دن باغلانمیش بیر ای پی عنوانینا و یا ایستیفاده‌چی آدینا یازما گئری وئرمک اوچون آشاغی‌داکی فورمادا ایستیفاده ائدین.',
+'ipusubmit' => 'بو بلوکو گؤتور',
+'unblocked' => '[[User:$1|$1]]  - نین بلوکو گؤتورولدو',
+'unblocked-range' => '$1-نین بلوکو گؤتورولدو',
+'unblocked-id' => '$1-نین بلوکو گؤتورولدو',
+'blocklist' => 'بلوکلانمیش ایستیفاده‌چیلر',
+'ipblocklist' => 'باغلانمیش ایستیفاده‌چیلر',
+'ipblocklist-legend' => 'بلوکلانمیش ایستیفاده‌چینی آختار',
+'blocklist-userblocks' => 'حساب بلوکلارینی گیزلت',
+'blocklist-tempblocks' => 'مووققتی بلوکلاری گیزله',
+'blocklist-addressblocks' => 'تک ای‌پی بلوکلارینی گیزله',
+'blocklist-rangeblocks' => 'ایندیکی بلوکلاری گیزله',
+'blocklist-timestamp' => 'واخت',
+'blocklist-target' => 'هدف',
+'blocklist-expiry' => 'بیتیش تاریخی',
+'blocklist-by' => 'بلوکلامیش ایداره‌چی',
+'blocklist-params' => 'بلوک پارامئترلری',
+'blocklist-reason' => 'نَدَن‌لیک',
+'ipblocklist-submit' => 'آختار',
+'ipblocklist-localblock' => 'يئرلی بلوک',
+'ipblocklist-otherblocks' => 'باشقا {{PLURAL:$1|بلوکلاما|بلوکلامالار}}',
+'infiniteblock' => 'سون سوز',
+'expiringblock' => 'سون تاریخ $1 ساعت $2',
+'anononlyblock' => 'يالنیز تانیش‌سیزایستیفاده‌چی',
+'noautoblockblock' => 'آوتوبلوکلاما غيری مومکوندور',
+'createaccountblock' => 'حساب یاراتماق اولماز',
+'emailblock' => 'ائ-مایل بلوکلانیب',
+'blocklist-nousertalk' => 'دانیشیق صحیفه‌‌سینی دَییشدیره بیلمزسیز.',
+'ipblocklist-empty' => 'بلوک سیياهیسی بوشدور.',
+'ipblocklist-no-results' => 'طلب اولونان ای‌پی اونوانی و يا ایستیفاده‌چی بلوکلانمادی.',
+'blocklink' => 'باغلا',
+'unblocklink' => 'بلوکلامانی قالدیر',
+'change-blocklink' => 'بلوکلامانی ديَیشدیر',
+'contribslink' => 'چالیشمالار',
+'emaillink' => 'ایمیل گؤندر',
+'autoblocker' => 'آوتوماتیک اولا‌راق باغلانمیسینیز. چونکی، قیسا مدت اول سیزین ای پی-عنوانینیز "آوتوماتیک اولا‌راق بلوکلانمیسینیز. چونکی، قیسا مدت اول سیزین ایپ-اونوانینیز "[[User:$1|$1]]" طرفین‌دن ایستیفاده ائدیلمیش‌دیر.
+$1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
+'blocklogpage' => 'باغلاما قئیدلری',
+'blocklog-showlog' => 'بو ایستیفاده‌چی داها اول بلوکلانمیش‌دیر. بلوکلاما گونده‌لیگی رئفئرانس اوچون آشاغیدا گؤستریلیب:',
+'blocklog-showsuppresslog' => 'بو ایستیفاده‌چی داها اول باغلانمیش‌دیر. باغلانما گونده‌لیگی رئفئرانس اوچون آشاغیدا گؤستریلیب:',
+'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' => 'آوتوبلوکلاما غيری مومکوندور',
+'block-log-flags-noemail' => 'ائ-مایل بلوکلانیب',
+'block-log-flags-nousertalk' => 'دانیشیق صحیفه‌‌سینی دَییشدیره بیلمزسیز.',
+'block-log-flags-angry-autoblock' => 'آوتوبلوک قوووه‌ددیر',
+'block-log-flags-hiddenname' => 'ایستیفاده‌چی آدی گیزلی‌دیر',
+'range_block_disabled' => 'ایداره‌چیلره دیاپازونو بلوکلاماق قاداغاندیر.',
+'ipb_expiry_invalid' => 'بیتمه واختی سهودیر',
+'ipb_expiry_temp' => 'گیزلی ایستیفاده‌چی آدی بلوکلاما‌لاری مدت‌سیز اولما‌لی‌دیر.',
+'ipb_hide_invalid' => 'ایستیفاده‌چی هئسابینلن گیزلدیلمه‌سی قئیری-مومکون‌دور؛ حددن چوخ رئداکته‌سی وار.',
+'ipb_already_blocked' => '"$1" آرتیق بلوکلانیب',
+'ipb-needreblock' => '$1 آرتیق باغلانیب.
+باغلاما شرط‌لرینی دییشمک ایستییرسینیز؟',
+'ipb-otherblocks-header' => 'آیری {{PLURAL:$1|باغلانماا|باغلاما‌لار}}',
+'unblock-hideuser' => 'ایستیفاده‌چی آدی گیزلی اولدوغو اوچون، بی باغلامانی گؤتوره بیلمزسینیز.',
+'ipb_cant_unblock' => 'ختا: باغلاما آی دی سی $1 تاپیلمادی. باغلامانین گؤتورولمه‌سی مومکون‌دور.',
+'ipb_blocked_as_range' => 'خطا: $1 ای پی عنوانی بیرباشا مانعه و مانعه تؤرتمه آزالدیلماسینا یول وئریلمیر.
+آنجاق، بو عنوان $2 آرا‌لیغینین پارچاسی اولا‌راق مانعه تؤردیلمیش، دئکابر مانعه تؤرتمه‌سینی قال‌دیرا.',
+'ip_range_invalid' => 'یانلیش ای پی',
+'ip_range_toolarge' => '/ $1 بلوک‌دان داها بؤیوک بازه باغلانمالارینا ایجازه وئریلمیر.',
+'blockme' => 'منی باغلا',
+'proxyblocker' => 'پروکسی باغلییان',
+'proxyblocker-disabled' => 'بو ایش باغلانیب دیر.',
+'proxyblockreason' => 'ای پی آدرئسینیز آچیق بیر پروکسی اولدوغو اوچون مانعه تؤردیلدی.
+خاهیش ائدیریک اینتئرنئت سئویش تعمین ایله یا دا تئکنیکی دستک ایله علاقه قورون و بو جدی تهلوکه‌سیزلیک پروبلئمین‌دن خبردار ائدین.',
+'proxyblocksuccess' => 'اولدو.',
+'sorbsreason' => 'ای پی عنوانینیز، {{SITENAME}} سایتی طرفین‌دن ایستیفاده ائدیلن DNSBL آچیق پروکسی اولا‌راق اولونموش.',
+'sorbs_create_account_reason' => 'ایپ اونوانینیز {{SITENAME}} سایتی طرفین‌دن ایستیفاده ائدیلن DNSBL آچیق پروکسی اولا‌راق اولونموش.
+حساب میدانا گتیره بیلمز',
+'cant-block-while-blocked' => 'سیز ائنگئللیيکئن باشقا ایستیفاده‌چیلری مانعه تؤره‌ده بیلمزسینیز.',
+'cant-see-hidden-user' => 'قارشیسینی آلماق ایسته‌دیگینیز ایستیفاده‌چی اونسوز دا مانعه تؤره‌دیلمیش و گیزلنمیش. کوللانیجیگیزلئ ایجازه‌نیز اولمادیغی اوچون، ایستیفاده‌چی‌نین قارشیسی‌نین آلینماسینی گؤره بیلمز يا دا ديَیشدیره.',
+'ipbblocked' => 'دیگر ایستیفاده‌چیلری مانعه تؤره‌ده بیلمز يا دا مانعه تؤرتمه‌سینی قالدیرا بیلمز، چونکی اؤزونوز ائنگئللئنمیشسیز',
+'ipbnounblockself' => 'اؤز بوولوکلانمانیزی کالدیرمانیزا ایجازه وئریلمیر',
+
+# Developer tools
+'lockdb' => 'وئریلن‌لر بازاسینی باغلا',
+'unlockdb' => 'وئریلن‌لر بازاسین‌دان باغلانتی سین گؤتور',
+'lockdbtext' => 'وئریلنلر بازاسینی کیلیدله‌مک؛ بوتون ایستیفاده‌چیلرین صحیفه‌‌لری، سئچیملرینی و ایزلئمئ سیياهیلارینی ديَیشدیرمه‌لرینی و وئریلنلر بازاسیندا ديَیشیکلیک طلب ائدن دیگر شئيلری تخیره آلیر. 
+خاهیش ائدیریک ائتمک ایسته‌دیگینیزین بو اولدوغونو و باخیم ایشلرینیز بیتدیگینده وئریلنلر بازاسینی ایشه سالماغی تسدیق ائدین.',
+'unlockdbtext' => 'وئریلنلر بازاسی‌نین کیلیدینی آچماق؛ بوتون ایستیفاده‌چیلره صحیفه‌‌لری، سئچیملرینی و ایزلئمئ سیياهیلارینی ديَیشدیرمه‌لرینی و وئریلنلر بازاسیندا ديَیشیکلیک طلب ائدن دیگر شئيلری ائده بیلمه قابیلیتینی گئری وئرر. 
+خاهیش ائدیریک ائتمک ایسته‌دیگینیزین بو اولدوغونو تسدیق ائدین.',
+'lockconfirm' => 'بلی، من حقیقتن وئریلن‌لر بازاسینین باغلاماق ایستییرم.',
+'unlockconfirm' => 'بلی، من حقیقتن وئریلن‌لر بازاسینین باغلانمانی آچماق ایستییرم.',
+'lockbtn' => 'وئریلن‌لر بازاسینی باغلا',
+'unlockbtn' => 'وئریلن‌لر بازاسین‌دان باغلانتی سین گؤتور',
+'locknoconfirm' => 'تصدیق قوتوسونو سئچمئدینیز.',
+'lockdbsuccesssub' => 'وئریلن‌لر بازاسی باغلانیب',
+'unlockdbsuccesssub' => 'باغلانما وئریلن‌لر بازاسی گوتورلنیب',
+'lockdbsuccesstext' => 'وئریلن‌لر بازاسی کیلیدلندی. <br />
+باخیمین ایشلرینیز بیتدیگینده وئریلن‌لر بازاسینین [[Special:UnlockDB| کیلیدینی آچماغی]] اونوتمایین.',
+'unlockdbsuccesstext' => 'وئریلن‌لر بازاسی باغلانمیش آولا بیلر.',
+'lockfilenotwritable' => 'وئریلن‌لر بازاسی کیلیدلمه فایلی یازیلا دئییل.
+بو، وئریلن‌لر بازاسینی کیلیدله‌ییب آچا بیلمک اوچون، وئب سئروئری طرفین‌دن یازیلا اولما‌لی‌دیر.',
+'databasenotlocked' => 'وئریلن‌لر بازاسی باغلانماییب.',
+'lockedbyandtime' => '({{Gender: $1 | $1}} طرفین‌دن  $2 $3 اعتبار ایله)',
+
+# Move page
+'move-page' => '$1 داشینیر',
+'move-page-legend' => 'صحیفه‌نین آدینی دییش',
+'movepagetext' => "آشاغی‌داکی فورمدان ایستیفاده ائتمک، صحیفه‌نین آدینی، بوتون تاریخچه‌سینی ده کؤچورمک‌له، یئنی باشلیغا دییشه‌جک.
+اسکی باشلیق یئنی باشلیغا یول‌لاندیریلاجاق‌دیر.
+اسکی صحیفه‌یه اولان یول‌لاندیرماقلاری، اوتوماتیک گونجل‌له‌یه بیلرسینیز.
+بو سئچیمی ائتمه‌دیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق یول‌لاندیرمالاری]] یوخلاماغی یاددان چیخارمایین.
+باغلانتیلاری اویغون یئره یول‌لاندیرماسیندان آرخایین اولماق، سیزین مسئولیتینیزده‌دیر.
+
+نظره آلین کی، هدف باشلیق آلتیندا بیر صحیفه مؤوجود اولسا، یئردییشمه '''باش توتمایاجاق'''، مگر بوکی او صحیفه یول‌لاندیرما اولا و اؤنجه دَییشمه گئچمیشی ده اولمایا. بو او دئمک‌دیر کی، سهواً آدینی دییشدیگینیز صحیفه‌لری گئری قایتارا بیلمک اولار، بونونلا یاناشی آرتیق مؤوجود اولان صحیفه‌نین اوزرینه باشقا صحیفه یازا بیلمزسینیز.
+
+'''خبردارلیق!'''
+بو یئردییشمه مشهور صحیفه اوچون اساس‌لی و گؤزلنیلمز اولا بیلر؛ اونا گؤره ده بو دییشیک‌لیگی یئرینه یئتیرمزدن اول، بونون مومکون نتیجه‌لرینی باشا دوشدوگونوزدن آرخایین اولون.",
+'movepagetext-noredirectfixer' => "آشاغی‌داکی فورمو دول‌دورماق بیر صحیفنی یئنی‌دن آدلاندیریر، بوتون کئچمیشینی یئنی آدا داشیییر.
+کؤهنه مؤوزو یئنی باشلیغا بیر ایستیقامتلندیرمه صحیفه‌سی اولار.
+[[Special:DoubleRedirects|جوت]] یا دا [[Special:BrokenRedirects|نوزوک ایستیقامتلندیرمه‌لر]] صحیفه‌لرینی ایداره ائدین.
+علاقه‌لرین گئتمه‌لری لازیم اولان یئرلره گئتدیک‌لرینی عمین اولماق سیزین سوروملولوغونوزدا‌دیر.
+
+یئنی باش‌لیقدا مؤوجود بیر صحیفه وارسا، بوش یا دا بیر ایستیقامتلندیرمه اولمادیقجا و دییشیک‌لیک کئچمیشی اولمادیغی تق‌دیرده، سهیف 'تاشینمایاجاکتیر.
+بو بو معنانی وئرر، بیر صحیفنی اشتباه ائتسه‌نیز صحیفنی کؤهنه آدییلا یئنی‌دن آدلان‌دیرا بیلریک، بو مؤوجود صحیفه‌نین اوزرینه یازماز.
+
+' 'خبردارلیق!'
+بو مشهور بیر صحیفه اوچون تأثیرلی و گؤزلنیلمز بیر دییشیک‌لیک اولا بیلر؛
+خاهیش ائدیریک راتیفیکاسیا ائتمه‌دن اول بونون نتیجه‌لرینی آنلادیغینیزدان امین اولون.",
+'movepagetalktext' => "اویغون دانیشیق صحیفه‌سی آوتوماتیک حرکت ائده‌جک 'گر:'
+* بوش اولمایان دانیشیق صحیفه‌سی یئنی آدلا آرتیق مؤوجوددورسا، و یا
+* سیز بایراغی آشاغی‌دان گؤتورسه‌نیز.
+
+همین حال‌لاردا ، احتیاج یارانارسا سیز صحیفه‌لری الله بیرلش‌دیرمک مجبوریتینده قالاجاقسینیز",
+'movearticle' => 'صحیفه‌نین آدینی دییش‌دیر',
+'moveuserpage-warning' => "' 'خبردارلیق:' بیر ایستیفاده‌چی صحیفه‌سینی داشیماق اوزرسینیز. خاهیش ائدیریک یالنیز صحیفه‌نین تاشیناجاغینا، آنجاق ایستیفاده‌چی‌نین یئنی‌دن آدلاندیریلمایاجاغینا دقت ائدین.",
+'movenologin' => 'سیستئمده دئییلسینیز',
+'movenologintext' => 'صحیفه‌نین آدینی دییشیک‌لیک اوچون قئیدیات‌لی و [[Special:UserLogin|سیستئمه]] داخیل اولمانیز لازیم‌دیر.',
+'movenotallowed' => 'سیز صحیفه‌لرین آدینی دییشه بیلمزسینیز.',
+'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' => 'یؤنلندیرمه‌نین یارادیلماسینین قارشییس آلیندی.',
+'articleexists' => 'بو آددا صحیفه آرتیق مؤوجوددور و یا سیزین سئچدیگینیز آد اویغون دئییل.
+زحمت اولماسا باشقا آد سئچین.',
+'cantmove-titleprotected' => 'بیر صحیفنی بو مؤوقئیه داشییا بیلمز، چونکی یئنی موضونون یارادیلماسی قورونور',
+'talkexists' => "'صحیفه‌نین آدی دییشدی، لاکین دانیشیق صحیفه‌سی یئنی آدلا اولدوغو اوچون دییشه بیلمیر. زحمت اولماسا، اونون آدینی اؤزونوز دییشین.'",
+'movedto' => 'داشیندی :',
+'movetalk' => 'بو صحیفه‌نین دانیشیق صحیفه‌سی‌نین ده آدینی دییش‌دیر.',
+'move-subpages' => 'یاریم صحیفه‌لری کؤچور ($1-ا قدر)',
+'move-talk-subpages' => 'دانیشیق صحیفه‌لری‌نین آلت صحیفه‌لرینی کؤچور ($1-ا قدر)',
+'movepage-page-exists' => '$1 مادده‌سی اونسوز دا وار اولماقدا‌دیر، و آوتوماتیک اولا‌راق یئنی‌دن یازیلا بیلمز.',
+'movepage-page-moved' => '$1 صحیفه‌سی $2 صحیفه‌سینه کؤچورولوب.',
+'movepage-page-unmoved' => '$1 صحیفه‌سی $2 صحیفه‌سینه کؤچوروله بیلینمیر.',
+'movepage-max-pages' => 'ان چوخ $1 {{PLURAL:$1|صحیفه |صحیفه}} داشیندی و داها چوخو آوتوماتیک اولا‌راق تاشیناماز.',
+'movelogpage' => 'آد ديیشدیرمک قئیدی',
+'movelogpagetext' => 'آشاغیدا اولان سیاهی آدی دییشدیریلمیش صحیفه‌لری گؤستریر.',
+'movesubpage' => '{{PLURAL:$1|آلتینداکی صحیفه}}',
+'movesubpagetext' => 'بو صحیفه‌نین آشاغیدا گؤستریلن $1 {{PLURAL: $1 | آلت صحیفه سی | آلت صحیفه اسی}} وار.',
+'movenosubpage' => 'بو صحیفه‌نین آلت صحیفه‌سی یوخ‌دور.',
+'movereason' => 'ندن:',
+'revertmove' => 'قایتار',
+'delete_and_move' => 'سیل و آپار',
+'delete_and_move_text' => '==هازیرکی مقاله‌نین سیلینمه‌سی لازیم‌دیر==
+
+«[[:$1]]» مقاله‌سی مؤوجوددور. بو دییشیکلیگین یئرینه یئتیریله بیلمه‌سی اوچون همین مقاله‌نین سیلینمه‌سینی ایستییرسینیزمی؟',
+'delete_and_move_confirm' => 'بلی، صحیفنی سیل',
+'delete_and_move_reason' => '«[[$1]]» آد دَییشمه ‌یه یئر آچماق اوچون سیلینمیش‌دیر',
+'selfmove' => 'صحیفه‌نین هازیرکی آدی ایله دییشمک ایستنیلن آد عینی‌دیر. بو عملیات یئرینه یئتیریله بیلمز.',
+'immobile-source-namespace' => '"$1" آد آرالیغیندا صحیفه آدلاری دییشمیر.',
+'immobile-target-namespace' => 'سهی‌لرین "$1" آد آرا‌لیغینا داشینماسی قئیری-مومکون‌دور',
+'immobile-target-namespace-iw' => 'ویکیلر اراسی علاقه، صحیفه داشیماسی اوچون اعتبارلی بیر هدف دئییل.',
+'immobile-source-page' => 'بو صحیفه‌نین آدی دییش‌دیریله بیلمز.',
+'immobile-target-page' => 'بو هدف باش‌لیغینا داشینمیر.',
+'bad-target-model' => 'هدف فرق‌لی بیر مزمون مودئل ایستیفاده ائدیر. $1 $2 مومکون دئییل.',
+'imagenocrossnamespace' => 'قئيری-فايل آد ایماگئ کؤچورمه يوخدور',
+'nonfile-cannot-move-to-file' => 'فایل اولمایان‌لار، فایل آد ساحه‌سینه تاشیناماز',
+'imagetypemismatch' => 'یئنی فایل علاوه‌سی تیپیله بیربیر لر ایله دوز دئمیر',
+'imageinvalidfilename' => 'سئچیلمیش فایل آدی کئچرسیزدیر.',
+'fix-double-redirects' => 'اوریژینال باشلیغا ایشاره ائدن گیزلت یوکله',
+'move-leave-redirect' => 'آرخادا بیر ایستیقامتلندیرمه بوراخ',
+'protectedpagemovewarning' => "'''خبردارلیق:''' بو صحیفه محافظه ائدیلدیگی اوچون اونون آدینی یالنیز ایداره‌چی‌لر دییشه بیلرلر.",
+'semiprotectedpagemovewarning' => "'''قئید:' بو صحیفه کیلیدلنمیش، یالنیز قئیدیات‌لی ایستیفاده‌چی‌لر داشییا بیلر.
+سون گونده‌لیک گیردی‌سی ایستیناد مقصدلی آشاغیدا وئریلمیش‌دیر:",
+'move-over-sharedrepo' => '== فایل مؤوجود ==
+[[:$1]] پایلاشیلمیش هوووزدا مؤوجود. بیر فایلی بو باشلیغا داشیماق پایلاشیلمیش فایلین اوستونه گله‌جک.',
+'file-exists-sharedrepo' => 'سئچیلن آد پایلاشیلمیش بیر هوووزدا اونسوز دا مؤوجود.
+خاهیش ائدیریک باشقا بیر آد سئچین.',
+
+# Export
+'export' => 'صحیفه‌‌لری ائشیگه چیخارت',
+'exporttext' => 'مویین بیر صحیفه و یا صحیفه کومانداسینین متنی و دییشدیرمه کئچمیشینی خمل ایله ساری‌لی اولا‌راق خاریجه کؤچوره بیلرسینیز.
+بو، مئدیاویکی ایستیفاده باشقا بیر ویکی [[Special:Import|ایچه کؤچورمه صحیفه‌سی]] ایله ایچه کؤچوروله بیلر.
+
+صحیفه‌لری خاریجه کؤچورمک اوچون، باش‌لیق‌لاری آشاغی‌داکی متن قوتوسونا داخیل ائدین، هر سطره بیر دنه، و کؤهنه سوروملئرلئ بیرلیکده ایندیکی وئرسیاسی، صحیفه کئچمیشی سطرلرینی، یا دا سون دییشیک‌لیک ملوماتییلا بیرلیکده آکتوال وئرسیاسی ایسته‌ییب ایستمدیگینیزی قئید ائدین.
+
+سونونجو حالدا، بیر لینک ده ایستیفاده ائده بیلرسینیز، هؤر: "[[{{MediaWiki:Mainpage}}]]" صحیفه‌سی اوچون [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].',
+'exportall' => 'بوتون صحیفه‌لری خاریجه کؤچور',
+'exportcuronly' => 'بوتون تاریخچنی دئییل، یالنیز حال-هازیرکی نوسخه نی داخیل ائت',
+'exportnohistory' => 'هدف‌لنن قایناق صحیفه‌سی (ایسته‌یه باغ‌لی):',
+'exportlistauthors' => 'هر صحیفه‌‌ اوچون دَییشدیرمه ائدن سیياهیسینی اؤزونده ساخلايین',
+'export-submit' => 'ایخراج',
+'export-addcattext' => 'صحیفه‌لری بو بولمه دن علاوه ائت:',
+'export-addcat' => 'آرتیر',
+'export-addnstext' => 'صحیفه‌لری آدلار فزاسین‌دان علاوه ائت:',
+'export-addns' => 'آرتیر',
+'export-download' => 'فایلی قئید ائت',
+'export-templates' => 'شابلون‌لاری داخیل ائت',
+'export-pagelinks' => 'باغ‌لی صحیفه‌لری داخیل درین‌لیک:',
+
+# Namespace 8 related
+'allmessages' => 'سیستئم معلومات‌لاری',
+'allmessagesname' => 'آد',
+'allmessagesdefault' => 'دفالت دانیشیق متنی',
+'allmessagescurrent' => 'ایندیکی متن',
+'allmessagestext' => 'بو مئدیا ویکی-ده اولان سیستئم مئساژلارینین سیاهی‌سی‌دیر. اگر مئدیا ویکی-نی لوکاللاش‌دیرماق ایشینده کؤمک ائتمک ایسییرسینیزسه، لطفاً [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ا باش چکین.',
+'allmessagesnotsupportedDB' => "'''\$ wgUseDatabaseMessages''' باغ‌لی اولدوغو اوچون '{{ns:special}}: Allmessages ایستیفاده‌یه آچیق دئییل.",
+'allmessages-filter-legend' => 'سۆزگَج',
+'allmessages-filter' => 'خصوصی ائتمک وضعیتینه گؤره فیلترلی:',
+'allmessages-filter-unmodified' => 'دییشدیریلممیش',
+'allmessages-filter-all' => 'بوتون',
+'allmessages-filter-modified' => 'دییشدیریلمیش',
+'allmessages-prefix' => 'اؤنک ایله فیلترلی:',
+'allmessages-language' => 'دیل:',
+'allmessages-filter-submit' => 'گئت',
+
+# Thumbnails
+'thumbnail-more' => 'بؤیوت',
+'filemissing' => 'فایل تاپیلمادی',
+'thumbnail_error' => 'کیچیک شکیل یاراتما خطاسی: $1',
+'djvu_page_error' => 'DjVu صحیفه‌سی الچاتمازدیر',
+'djvu_no_xml' => 'DjVu اوچون XML فایلی آلماق مومکون دئییل.',
+'thumbnail-temp-create' => 'ائلمک اولماز بارماق اولچوسوجه موقت فایل دوزتمک اولا',
+'thumbnail-dest-create' => 'باجاریقسیز تعییناتا باش بارماغین دیرناغینی خلاص ائتمک اوچون',
+'thumbnail_invalid_params' => 'اعتبارسیز کیچیک شکیل پارامئترلری',
+'thumbnail_dest_directory' => 'هدف قورو‌لوغو یارادیلا بیلمیر',
+'thumbnail_image-type' => 'گؤرونوش نؤع دستکله‌نیلمیر',
+'thumbnail_gd-library' => "' 'قئید:' صحیفه‌لرین بوتون کئچمیشینی بو فورملا خاریجه اؤتورولمه‌سی، پئرفورمانس سبب‌لرین‌دن اؤتری دؤوره خاریجی بوراخیلمیش‌دیر.$1",
+'thumbnail_image-missing' => 'بئله گؤرونور کی، $1 فایلی یوخ‌دور',
+
+# Special:Import
+'import' => 'صحیفه‌لری ایدخال ائت',
+'importinterwiki' => 'ویکیلر اراسی چیخارما',
+'import-interwiki-text' => 'ایچه کؤچورمک اوچون بیر wiki و صحیفه باش‌لیغی سئچین.
+رئویزیون تاریخ‌لری و یازارلارین آدلاری قورونا‌جاق.
+بوتون ویکیلئراراسی ایچه کؤچورمه حرکت‌لری [[Special:Log/import|ایچه کؤچورمه گوندلیگینده]] یازیلماقدا‌دیر.',
+'import-interwiki-source' => 'قایناق ویکی/صحیفه:',
+'import-interwiki-history' => 'صحیفه‌نین دییشمه تاریخچه‌لری‌نین هامی‌سینی کؤچور',
+'import-interwiki-templates' => 'بوتون شابلون‌لارلا بیرلیکده',
+'import-interwiki-submit' => 'ایچری توکمه اولسون',
+'import-interwiki-namespace' => 'هدف آد ساحه‌سی:',
+'import-interwiki-rootpage' => 'هدف‌لنن قایناق صحیفه‌سی (ایسته‌یه باغ‌لی):',
+'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>',
+'importunknownsource' => 'بیلینمه‌ین ایچری کؤچورمه قایناق نؤوو',
+'importcantopen' => 'ایچری توکمه فایل پرونده لری آچیلمادی',
+'importbadinterwiki' => 'یانلیش اینتئرویکی کئچیدی',
+'importnotext' => 'بوش و یا متن یوخ‌دور',
+'importsuccess' => 'ایچری توکمه باشا چاتدی!',
+'importhistoryconflict' => 'اوست-اوسته دوشمه‌ین کئچمیش رئویزیونو مؤوجود (بو صحیفه داها اول‌دن ایچه کؤچورولموش اولا بیلر)',
+'importnosources' => 'هئچ ویکیلئراراسی ایچه کؤچورمه قایناغی تعیین و بیرباشا کئچمیش یوکلملری دؤوره خاریجی.',
+'importnofile' => 'بیر کؤچورمه فایلی یوکلنمدی.',
+'importuploaderrorsize' => 'ایچه کؤچورولموش فایلین یوکلنمه‌سی اوغورسوز اولدو.
+فایل، ایجازه وئریلن یوکلمه اؤلچوسون‌دن بؤیوک.',
+'importuploaderrorpartial' => 'ایچه کؤچورولموش فایلین یوکلنمه‌سی اوغورسوز اولدو.
+فایلین یالنیز بیر قیسیمی یوکلندی.',
+'importuploaderrortemp' => 'ایچه کؤچورولن فایلین یوکلنمه‌سی اوغورسوز اولدو.
+مووققتی فایل ایتکین.',
+'import-parse-failure' => 'اکس ام ال ایچری کؤچورمه ییغماسی موفقیت‌سیز',
+'import-noarticle' => 'یوکلمگه صحیفه یوخدور!',
+'import-nonewrevisions' => 'بوتون نوسخه لر اول‌دن ایچه کؤچورولموش.',
+'xml-error-string' => '$1 $2 سترینده، $3 سوتونوندا ($4 بایت): $5',
+'import-upload' => 'XML-وئریلنی یوکله',
+'import-token-mismatch' => 'سئانس معلومات‌لارینین ایتیریلمه‌سی. لطفاً، یئنی‌دن جهد ائدین.',
+'import-invalid-interwiki' => 'گؤستریلن ویکی‌دن کؤچورمک مومکون دئییل',
+'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 نوسخه‌سی سِریالیزه‌لیقدان چیخاردیلانمادی. بو نوسخه، $4 کیمی سِریالیزه اولان $3 مودِلینی ایشلدمگه بیلدیریلدی.',
+'import-options-wrong' => '{{PLURAL:$2|جزئیات| جزئیات}} یانلیش: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'وئریلن کؤک صحیفه‌‌سی اعتبارسیز آددیر.',
+'import-rootpage-nosubpage' => 'آد فضا سی  "$1" آنا باسئ ٔآلت صحیفه اوچون اجازه وئرمیر.',
+
+# Import log
+'importlogpage' => 'چیخاریلما گونده‌لیگی',
+'importlogpagetext' => 'باشقا ویکیلردن، دَییشیکلیک گئچمیشلریله بیرلیک‌ده گتیریلمیش صحیفه‌لر.',
+'import-logentry-upload' => '[[$1]]-ی فایل یوکله‌مکله گتیردی',
+'import-logentry-upload-detail' => '{{PLURAL:$1|بیر|$1}} نوسخه',
+'import-logentry-interwiki' => '$1-ی ویکی‌آراسی ائتدی',
+'import-logentry-interwiki-detail' => '$2-دن {{PLURAL:$1|بیر|$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 تِست ائتمه سندلندیرمه‌لری]نه باخین.',
+'javascripttest-qunit-heading' => 'مئدیاویکی جاوااسکریپت QUnit تِست مجموعه‌سی',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'ایستیفاده‌چی صفحه‌نیز',
+'tooltip-pt-anonuserpage' => 'سیز او آی‌پی آدرسیله دَییشیکلیک ائتدیگینیز ایستیفاده‌چی صحیفه‌سی',
+'tooltip-pt-mytalk' => 'دانیشیق صحیفه‌نیز',
+'tooltip-pt-anontalk' => 'بو آی‌پی آدرسینین دَییشیکلیکلرینه گؤره دانیشیق',
+'tooltip-pt-preferences' => 'ترجیحلرینیز',
+'tooltip-pt-watchlist' => 'دییشمکلرینی ایزله‌دیگینیز صفحه‌لرین سیاهی‌سی',
+'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-undelete' => 'بو صحیفه‌‌نین محافظه‌‌سینی کنارلاشدیر',
+'tooltip-ca-move' => 'بو صحیفه‌‌نین آدینی ديَیشدیر',
+'tooltip-ca-watch' => 'بو صحیفه‌‌نی ایزله',
+'tooltip-ca-unwatch' => 'بو صفحه‌نی ایزله‌دیگینیز صفحه‌لردن قالدیرین',
+'tooltip-search' => '{{SITENAME}}-دا آختار',
+'tooltip-search-go' => 'اولورسا بو آددا بیر صحیفه‌یه گئت',
+'tooltip-search-fulltext' => 'بو یازی اولان صحیفه‌لری آختار',
+'tooltip-p-logo' => 'آنا صحیفه‌یه باخ',
+'tooltip-n-mainpage' => 'آنا صحیفه‌‌یه باخین',
+'tooltip-n-mainpage-description' => 'آنا صحیفه‌یه باخین',
+'tooltip-n-portal' => 'پروژه‌ یه گؤره، سیز نه ایش گوره بیلرسیز، هاردا نه‌لری تاپا بیلرسیز',
+'tooltip-n-currentevents' => 'ایندیکی اولایلارا ایلگیلی بیلگیلر تاپ',
+'tooltip-n-recentchanges' => 'بو ویکی‌ده سون دَییشیکلرین لیستی',
+'tooltip-n-randompage' => 'بیر راست‌گله صحیفه گتیر',
+'tooltip-n-help' => 'آنلاماق یئری',
+'tooltip-t-whatlinkshere' => 'بورایا باغلانان بوتون ویکی صحیفه‌لرین لیستی',
+'tooltip-t-recentchangeslinked' => 'بو صحیفه‌دن باغلانان صحیفه‌لرین سون دَییشیکلیکلری',
+'tooltip-feed-rss' => 'بو صحیفه‌‌ اوچون آراس‌اس يايیمی',
+'tooltip-feed-atom' => 'بو صحیفه‌‌ اوچون آتوم يايیمی',
+'tooltip-t-contributions' => 'بو ایستیفاده‌چی‌نین وئردیگی دییشیکلر سیاهی‌سی',
+'tooltip-t-emailuser' => 'بو ایستیفاده‌چی‌یه بیر ایمیل گؤندر',
+'tooltip-t-upload' => 'فایل‌لار یوکله',
+'tooltip-t-specialpages' => 'بوتون اؤزل صحیفه‌لرین لیستی',
+'tooltip-t-print' => 'بو صحیفه‌‌نین چاپ ائدیلن نوسخه‌سی',
+'tooltip-t-permalink' => 'صحیفه‌نین بو نوسخه‌سینه دَییشیلمز باغلانتی',
+'tooltip-ca-nstab-main' => 'مقاله‌یه باخین',
+'tooltip-ca-nstab-user' => 'ایستیفاده‌چی صفحه‌سینه باخ',
+'tooltip-ca-nstab-media' => 'مئدیا-فايل',
+'tooltip-ca-nstab-special' => 'بو بیر اؤزل صحیفه‌دیر، سیز اونو دَییشدیره بیلمزسیز',
+'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' => 'بو دییشیگی کیچیک دییشیک کیمی قئید ائت',
+'tooltip-save' => 'ديَیشیکلیکلرینیزی قئيد ائدین',
+'tooltip-preview' => 'لوطفاً صحیفه‌نی قئید ائتمک‌دن اؤنجه، دییشیکلرینیزی سیناق گؤستریش ایله باخین!',
+'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' => '{{SITENAME}} سایتینین آنونیم {{PLURAL:$1|یستیفادچیسی|یستیفاده‌چی‌لری}}',
+'siteuser' => '{{SITENAME}} ایستیفاده‌چی‌سی $1',
+'anonuser' => '{{SITENAME}} آنونیم ایستیفاده‌چی‌سی $1',
+'lastmodifiedatby' => 'بۇ صحیفه‌‌ سوْنونجو دفعه‌‌ $1، $2 تاریخینده دَییشیلیب.',
+'othercontribs' => '$1-این ایشینه اساسلانیب.',
+'others' => 'آیریلار',
+'siteusers' => '{{SITENAME}} {{PLURAL:$2|وسئر|یستیفاده‌چی}} $1',
+'anonusers' => '{{SITENAME}} آنونیم {{PLURAL:$2|وسئر|یستیفاده‌چی}} $1',
+'creditspage' => 'صحیفه اعتبارلاری',
+'nocredits' => 'بو صحیفه اوچون هئچ بیر اعتیبار بیلگیلری ال‌ده دئییل.',
+
+# Spam protection
+'spamprotectiontitle' => 'فایداسیز یازما قوروما فیلتری',
+'spamprotectiontext' => 'سیز قئید ائتمک ایسته‌دیگینیز یازینین قاباغی، اِسپم فیلتِریله، آلیندی.
+بو ایش، اوندا ائشیک قره‌لیست‌ده اولان بیر سایتا باغلانتی وئرمک اوچون اولا بیلر.',
+'spamprotectionmatch' => 'بو یازی، بیزیم اِسپم فیلتِریمیزی ایشه سالان‌دیر: $1',
+'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-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' => 'بو صحیفه‌یه یول‌لاندیرمالار',
+'pageinfo-subpages-name' => 'بو صحیفه‌نین آلت‌صحیفه‌لری',
+'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|بیر|$2}} یول‌لاندیرما؛ {{PLURAL:$3|بیر|$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}} سؤزجوک ($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' => 'بیلگی',
+'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-myskin' => 'منیم قابیغیم',
+
+# Patrolling
+'markaspatrolleddiff' => 'ایداره ائدیلمیش اولا‌راق ایشاره‌له',
+'markaspatrolledtext' => 'صحیفنی پاتروللانمیش کیمی ایشاره‌له',
+'markedaspatrolled' => 'یوخلانیلدی',
+'markedaspatrolledtext' => '[[:$1]] اوچون سئچیلمیش نوسخه گؤزدن کئچیریله‌رک ایشاره‌لندی.',
+'rcpatroldisabled' => 'سون دییشیک‌لیک‌لرین پاتروللانماسی قاداغان‌دیر',
+'rcpatroldisabledtext' => 'سون دییشیک‌لیک‌لرین یوخلانیلماسی حال-حاضردا مومکون دئییل.',
+'markedaspatrollederror' => 'یوخلانمادی',
+'markedaspatrollederrortext' => 'موشاهیده کیمی ایشاره‌لمک اوچون بیر رئویزیون ائتملیسینیز.',
+'markedaspatrollederror-noautopatrol' => 'اؤز دییشیک‌لیک‌لرینیزی یوخلاییب ایشاره‌له‌یه بیلمزسینیز.',
+'markedaspatrollednotify' => '$1-اوستونده ديَیشیکلیک قئيد ائدیلمیشدیر، نئجه کی پاترول کئشیگی چکدی.',
+'markedaspatrollederrornotify' => 'دولانماق برچسبی مووفقیت سیز اولدو',
+
+# Patrol log
+'patrol-log-page' => 'پاترول گونده‌لیگی',
+'patrol-log-header' => 'بو یوخلانمیش دییشیک‌لیک‌لرین گونده‌لیگی‌دیر.',
+'log-show-hide-patrol' => '$1 پاترول گونده‌لیگی',
+
+# Image deletion
+'deletedrevision' => 'کؤهنه نوسخه لری سیلیندی $1.',
+'filedeleteerror-short' => 'فایل سیلینرکن ختا: $1',
+'filedeleteerror-long' => 'فایل سیلینرکن اوزه چیخان ختا‌لار:
+
+$1',
+'filedelete-missing' => '"$1" فایلی مؤوجود اولمادیغین‌دان سیلینه بیلینمیر.',
+'filedelete-old-unregistered' => 'گؤستریلن فایل نوسخه سی "$1" وئریلن‌لر بازاسیندا یوخ‌دور.',
+'filedelete-current-unregistered' => 'گؤستریلن "$1" فایلی وئریلن‌لر بازاسیندا یوخ‌دور.',
+'filedelete-archive-read-only' => '"$1" کاتالوقونون آرشیوی وئب-سئروئر یازی‌لاری اوچون باغلی‌دیر.',
+
+# Browsing diffs
+'previousdiff' => 'اسکی دَییشدیرمه',
+'nextdiff' => 'یئنی دَییشدیرمه',
+
+# Media information
+'mediawarning' => "'''خبردارلیق: بو ​​فایل نوعو پیس نیت‌لی کودلار اولا بیلر.
+بونو ایشلتمک، سیستئمینیزی تهلوکه‌یه آتا بیلر.",
+'imagemaxsize' => "شکیلین ماکسیمال توتومو:<br />(فایلین تصویری صحیفه‌لری اوچون)'",
+'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، میمئ نؤوو: $4، $5 {{PLURAL:$5|صحیفه| صحیفه}}',
+'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.',
+'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' => 'یئنی فایل‌لارین سیاهی‌سی',
+'imagelisttext' => "آشاغی‌داکی سیاهی '$2 گؤره دوزولموش {{PLURAL:$1|ادد فایلی| ادد فای‌لی}} گؤستریر.",
+'newimages-summary' => 'بو خصوصی صحیفه، ان سون یوک‌لنن فایل‌لاری گؤستریر.',
+'newimages-legend' => 'سۆزگَج',
+'newimages-label' => 'فایلین (و یا اونون بیر حیسه‌سی‌نین) آدی:',
+'showhidebots' => '($1 روبات دییشدیر)',
+'noimages' => 'هئچ نیی گؤرممک.',
+'ilsubmit' => 'آختار',
+'bydate' => 'تاریخین اوستوندن',
+'sp-newimages-showfrom' => '$1، $2 تاریخی اعتباری ایله یئنی فایل‌لاری گؤستر',
+
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{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' => 'ایندی',
+
+# Bad image list
+'bad_image_list' => 'فورمت بئله اولمالیدیر:
+
+يالنیز لیست آیتِملری (* ایله باشلايان سطرلر) نظره آلینیر.
+سطرده‌کی ایلک باغلانتی، بیر پیس فایلا باغلانان اولمالیدیر.
+ائله بو سطرده سونراکی باغلانتیلار استثنا حساب اولونور. مثلاً، فايل صحیفه‌ده سطرین ایچینده گؤرونه بیلر.',
+
+# Metadata
+'metadata' => 'مِتابیلگیلر',
+'metadata-help' => 'بۇ فايلدا فوْتوْاپارات و يا سکانئرله علاوه‌‌ اوْلونموش معلوماتلار وار. اگر فايل سوْنرادان دَییشدیریلیبسه، بعضی پارامئترلر بۇ شکیلده گؤستریلنلردن فرقلی اوْلا بیلر.',
+'metadata-expand' => 'جزئیات معلومات‌لاری گؤستر',
+'metadata-collapse' => 'جزئیات معلومات‌لاری گیزلت',
+'metadata-fields' => 'بو صحیفه‌‌ده سیرالانان ائخیف مئتاداتا ساحه‌‌لری شکیل گؤرونوش صحیفه‌‌لرینده مئتاداتا جدوه‌لی چؤکدويونده ایستیفاده ائدیلیر. دیگرلری وارسايیلان اولاراق گیزلنه‌جکدیر. 
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude',
+
+# EXIF tags
+'exif-imagewidth' => 'گئنیش‌لیک',
+'exif-imagelength' => 'اوزوناسی',
+'exif-bitspersample' => 'هر جز دا نقطه',
+'exif-compression' => 'سیخیلمامیش',
+'exif-photometricinterpretation' => 'نقاطین بیرلشمه‌سی',
+'exif-orientation' => 'جهت',
+'exif-samplesperpixel' => 'اجزا سایی س',
+'exif-planarconfiguration' => 'معلومات نیزامی',
+'exif-ycbcrsubsampling' => 'Y-C آلت نومونه نیسبتی',
+'exif-ycbcrpositioning' => 'Y و C یئرلشمه سیراسی',
+'exif-xresolution' => 'اوفیقی سئچیلمک',
+'exif-yresolution' => 'عمودی سئچیلمک',
+'exif-stripoffsets' => 'شکیل معلومات مؤوقئیی',
+'exif-rowsperstrip' => 'هر بلوک‌داکی سطرلرین سایی',
+'exif-stripbytecounts' => 'بایت هر نوار فشرده ده',
+'exif-jpeginterchangeformat' => 'جابه‌جایی نسبت به JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'JPEG معلومات بازاسینین بایت‌لاری',
+'exif-whitepoint' => 'آغ نقطه کروماتیغی',
+'exif-primarychromaticities' => 'اولویت رنگ آلماقلاری',
+'exif-ycbcrcoefficients' => 'رنگ آرا‌لیغی چئویرمه ماتریس امسا‌لی',
+'exif-referenceblackwhite' => 'آغ قارا جفت مقادیر مرجع',
+'exif-datetime' => 'فایلین دییشمه‌سی تاریخی و واختی',
+'exif-imagedescription' => 'شکیل باشلیقی',
+'exif-make' => 'کامئرا دوزلدنی',
+'exif-model' => 'کامئرا مود‌لی',
+'exif-software' => 'پروقرام تمیناتی',
+'exif-artist' => 'یازار',
+'exif-copyright' => 'یازانلار حقوقو صاحبی',
+'exif-exifversion' => 'exif نوسخه سی',
+'exif-flashpixversion' => 'دستک‌لنن Flashpix نوسخه سی',
+'exif-colorspace' => 'رنگ ساحه‌سی',
+'exif-componentsconfiguration' => 'هر بیلشنین معناسی',
+'exif-compressedbitsperpixel' => 'شکیل سیخیشدیرما فورماتی',
+'exif-pixelydimension' => 'شکیلین انی',
+'exif-pixelxdimension' => 'شکیلین اوزوناسی',
+'exif-usercomment' => 'استفادچی شرحی',
+'exif-relatedsoundfile' => 'حاقیندا سس لی فایل',
+'exif-datetimeoriginal' => 'اورژینال یاراتما زامانی',
+'exif-datetimedigitized' => 'دیجیتالی‌ اولان تاریخ و زمانی',
+'exif-subsectime' => 'آلت-ایکینجی واخت',
+'exif-subsectimeoriginal' => 'اورژینال آلت-ایکینجی واخت',
+'exif-subsectimedigitized' => 'دیژیتالیز آلت-ایکینجی واخت',
+'exif-exposuretime' => 'چکیلیش مدتی',
+'exif-exposuretime-format' => '$1 سانییه ($2)',
+'exif-fnumber' => 'ف نؤمره‌سی',
+'exif-exposureprogram' => 'پوزا برنامه سی',
+'exif-spectralsensitivity' => 'طیفی حساس‌لیق',
+'exif-isospeedratings' => 'ایزو سرعت درجه سی',
+'exif-shutterspeedvalue' => 'آپکس شاتر سرعتی',
+'exif-aperturevalue' => 'آپکس دیافراگم اندازه سی',
+'exif-brightnessvalue' => 'آپکس پارلاقی',
+'exif-exposurebiasvalue' => 'ایشیق وئرمه خطاسی',
+'exif-maxaperturevalue' => 'یئرین ان چوخ آچیقلیغی',
+'exif-subjectdistance' => 'سوژهه قدر مسافه',
+'exif-meteringmode' => 'اؤلچمک دورومو',
+'exif-lightsource' => 'ایشیق قایناقی',
+'exif-flash' => 'فلاش',
+'exif-focallength' => 'فوکوس مسافه‌سی',
+'exif-subjectarea' => 'جسمین مساحتی',
+'exif-flashenergy' => 'فلاش ائنئرژی‌سی',
+'exif-focalplanexresolution' => 'صفحهٔ کانونی سویه X هللولما دقیق‌لیگی',
+'exif-focalplaneyresolution' => 'صفحهٔ کانونی ده تفکیک‌پذیری Y',
+'exif-focalplaneresolutionunit' => 'کانونی صحیفه نین بیربیرندن سئچمه واحدی',
+'exif-subjectlocation' => 'سوژه یئری',
+'exif-exposureindex' => 'ایشیق شاخیصی',
+'exif-sensingmethod' => 'قبول ائتمه مئتودو',
+'exif-filesource' => 'فایل قایناقی',
+'exif-scenetype' => 'صحنه تیپی',
+'exif-customrendered' => 'شخصی شکیل عملیاتی',
+'exif-exposuremode' => 'ایشیق وئرمه حالتی',
+'exif-whitebalance' => 'آغ بالانسی',
+'exif-digitalzoomratio' => 'یاخینلاشدیرما نیسبتی (زوم)',
+'exif-focallengthin35mmfilm' => '35 میلی متر-لیک فیلمده مرکز اوزاق‌لیغی',
+'exif-scenecapturetype' => 'سهنه توتما تیپی',
+'exif-gaincontrol' => 'سهنه ایداره‌سی',
+'exif-contrast' => 'کونتراست',
+'exif-saturation' => 'دویموشلوق',
+'exif-sharpness' => 'کسکین‌لیک',
+'exif-devicesettingdescription' => 'دسگاهین تنظیم لر تعریف‌لری',
+'exif-subjectdistancerange' => 'سوژه نین مسافه محدوده سی',
+'exif-imageuniqueid' => 'شکیل خصوصی شخصیتی',
+'exif-gpsversionid' => 'جی پی اس ائتیکئت نوسخه سی',
+'exif-gpslatituderef' => 'شیمال و یا جنوب جغرافیایی ائنی',
+'exif-gpslatitude' => 'جغرافیایی ائنی',
+'exif-gpslongituderef' => 'جغرافیایی شرق و یا قرب اوزونلوقو',
+'exif-gpslongitude' => 'جغرافیایی اوزوناسی',
+'exif-gpsaltituderef' => 'اوجالیق یئری',
+'exif-gpsaltitude' => 'يوکسکلیک',
+'exif-gpstimestamp' => 'جی پی اس واختی (آتوم ساعتی)',
+'exif-gpssatellites' => 'اؤلچمک اوچون ایستیفاده ائتدیگی پئیک‌لر',
+'exif-gpsstatus' => 'ایستاتوسو قبول ائدن',
+'exif-gpsmeasuremode' => 'اؤلچمه اوصولو',
+'exif-gpsdop' => 'اؤلچونون دقیقلیگی',
+'exif-gpsspeedref' => 'سرعت اونیتی',
+'exif-gpsspeed' => 'چی پی اس قبولئدیجی‌نین سرعتی',
+'exif-gpstrackref' => 'جهت حرکتی اوچون قایناق',
+'exif-gpstrack' => 'ایدارئتمه مئخانیزمی',
+'exif-gpsimgdirectionref' => 'شکیل جهتی اوچون قایناق',
+'exif-gpsimgdirection' => 'شکلین ایستیقامتی',
+'exif-gpsmapdatum' => 'نقشه‌گوتورمک اطلاعاتی ژئودزیک',
+'exif-gpsdestlatituderef' => 'جغرافیایی ائنی مقصد اوچون قایناق',
+'exif-gpsdestlatitude' => 'ائن دایره‌سی‌نین تعیین اولونماسی',
+'exif-gpsdestlongituderef' => 'جغرافیایی اوزوناسی مقصد اوچون قایناق',
+'exif-gpsdestlongitude' => 'اوزونلوق دایره‌سی‌نین تعیین اولونماسی',
+'exif-gpsdestbearingref' => 'مقصد جهتی اوچون قایناق',
+'exif-gpsdestbearing' => 'اوبيئکتین پئلئنقی',
+'exif-gpsdestdistanceref' => 'قایناق فاصله مقصد چان',
+'exif-gpsdestdistance' => 'مسافه',
+'exif-gpsprocessingmethod' => 'چی پی اس پردازیشینین آدی',
+'exif-gpsareainformation' => 'چی پی اس ساحه‌نین آدی',
+'exif-gpsdatestamp' => 'چی پی اس زامانی',
+'exif-gpsdifferential' => 'چی پی اس ین جزئی اصلاحی',
+'exif-jpegfilecomment' => 'JPEG شکیل شرحی',
+'exif-keywords' => 'آچار سؤزلر',
+'exif-worldregioncreated' => 'شکلین چکیلدیگی دونيا یئرلری',
+'exif-countrycreated' => 'شکلین چکیلدیگی اؤلکه',
+'exif-countrycodecreated' => 'شکلین چکیلدیگی اؤلکه‌نین کودو',
+'exif-provinceorstatecreated' => 'شکلین چکیلدیگی ایالت،آدی',
+'exif-citycreated' => 'شکلین چکیلدیگی شهر',
+'exif-sublocationcreated' => 'شکلین چکیلدیگی شهرین بخش آدی',
+'exif-worldregiondest' => 'تصویر ائدیلمیش دونیا بؤلگه‌سی',
+'exif-countrydest' => 'تصویر اولونموش اؤلکه',
+'exif-countrycodedest' => 'تصویر ائدیلمیش اؤلکه‌نین کودو',
+'exif-provinceorstatedest' => 'تصویر ائدیلمیش بؤلگه یاخود ایشتات',
+'exif-citydest' => 'تصویر ائدیلمیش شهر',
+'exif-sublocationdest' => 'تصویر ائدیلمیش شهر بؤلگه‌سی',
+'exif-objectname' => 'قیسا باشلیق',
+'exif-specialinstructions' => 'خصوصی دستور عمل لر',
+'exif-headline' => 'باشلیق',
+'exif-credit' => 'تعمین ائدیچی',
+'exif-source' => 'قایناق',
+'exif-editstatus' => 'شکلین دییشدیرمه وضعیته',
+'exif-urgency' => 'ضروری‌لیک',
+'exif-fixtureidentifier' => 'ستون آدی',
+'exif-locationdest' => 'تصویر ائدیلمیش اراضی',
+'exif-locationdestcode' => 'تصویر ائدیلمیش یئرین کودو',
+'exif-objectcycle' => 'شکلین نظرده توتولدوغو زمان حیسه‌سی',
+'exif-contact' => 'تماس معلوماتی',
+'exif-writer' => 'یازیچی',
+'exif-languagecode' => 'دیل',
+'exif-iimversion' => 'IIM نوسخه سی',
+'exif-iimcategory' => 'بؤلمه',
+'exif-iimsupplementalcategory' => 'علاوه بولمه لر',
+'exif-datetimeexpires' => 'سونرا ایشلتمه',
+'exif-datetimereleased' => 'چیخیش تاریخی',
+'exif-originaltransmissionref' => 'اصلی تاشیماق یئر کودو',
+'exif-identifier' => 'تانیتدیران',
+'exif-lens' => 'ایستیفاده اولونموش لنز',
+'exif-serialnumber' => 'کامئرانین سئریال نؤمره‌سی',
+'exif-cameraownername' => 'کامئرانین صاحبی',
+'exif-label' => 'نیشان',
+'exif-datetimemetadata' => 'سون دَییشیکلر تاریخی',
+'exif-nickname' => 'شکلین قئيری-رسمی آدی',
+'exif-rating' => 'قیيمت (5 اوزرینده)',
+'exif-rightscertificate' => 'ایداره‌چی گوواهی حاقی',
+'exif-copyrighted' => 'ستاتوسون یازانلار حقوقو',
+'exif-copyrightowner' => 'یازانلار حقوقو صاحبی',
+'exif-usageterms' => 'ایستیفاده قايداسی',
+'exif-webstatement' => 'اینتئرنئتده مؤلف‌لیک حقوق‌لاری قایدا‌لاری',
+'exif-originaldocumentid' => 'تانیشچی تکجه سند',
+'exif-licenseurl' => 'مؤلف حقوقو اینترنت آدرسی تکثیر حقی اوچون',
+'exif-morepermissionsurl' => 'آلتئرناتیو لیسئنزیيا بیلگی‌لری',
+'exif-attributionurl' => 'بو ایشی یئنی‌دن ایستیفاده لطفاً علاقه وئرین',
+'exif-preferredattributionname' => 'ایستیفاده ائدیلنده لطفاً علاقه وئرین',
+'exif-pngfilecomment' => 'PNG شکیل شرحی',
+'exif-disclaimer' => 'مسئولیتدن ایمتیناع',
+'exif-contentwarning' => 'متن خبردارلیغی',
+'exif-giffilecomment' => 'GIF شکیل شرحی',
+'exif-intellectualgenre' => 'اوبیئکتین تیپی',
+'exif-subjectnewscode' => 'مؤوضونون کودو',
+'exif-scenecode' => 'IPTC صحنه‌‌ کودو',
+'exif-event' => 'تصویر ائدیلمیش حادثه‌‌',
+'exif-organisationinimage' => 'تصویر ائدیلمیش قوروملار',
+'exif-personinimage' => 'تصویر ائدیلمیش شخص',
+'exif-originalimageheight' => 'شکیلین کسیلمه دن اوولکی اوجالیقی',
+'exif-originalimagewidth' => 'شکیلین کسیلمه دن اوولکی گئنیش‌لیگی',
+
+# EXIF attributes
+'exif-compression-1' => 'سیخیلمامیش',
+'exif-compression-2' => 'پسوورد قویماق سی‌سی‌آی‌تی‌تی ۳  گروه دا بیر بعدی هافمن روشی ایله اوزوناسی اوستونده دییشیلیب',
+'exif-compression-3' => 'رمز قرار وئرمک سی‌سی‌آی‌تی‌تی قروپ ۳',
+'exif-compression-4' => 'رمز قرار وئرمک سی‌سی‌آی‌تی‌تی قروپ 4',
+
+'exif-copyrighted-true' => 'مؤلف‌لیک حقوقو ایله قورونور',
+'exif-copyrighted-false' => 'عمومی دامنه',
+
+'exif-unknowndate' => 'تانینمامیش تاریخ',
+
+'exif-orientation-1' => 'نورمال',
+'exif-orientation-2' => 'یاتای چئویریلیب',
+'exif-orientation-3' => '۱۸۰ درجه دؤنده‌ریلیب',
+'exif-orientation-4' => 'دیکَی چئویریلیب',
+'exif-orientation-5' => '۹۰ درجه ساعات عکسی دؤنده‌ریلیب و دیکَی چئویریلیب',
+'exif-orientation-6' => '۹۰ درجه ساعات عکسی دؤنده‌ریلیب',
+'exif-orientation-7' => '۹۰ درجه ساعات یولوندا دؤنده‌ریلیب و دیکَی چئویریلیب',
+'exif-orientation-8' => '۹۰ درجه ساعات یولوندا دؤنده‌ریلیب',
+
+'exif-planarconfiguration-1' => 'قالین فورمت',
+'exif-planarconfiguration-2' => 'دوزلمه فورمت',
+
+'exif-colorspace-65535' => 'تنظیم‌لنمه‌میش',
+
+'exif-componentsconfiguration-0' => 'یوخدور',
+
+'exif-exposureprogram-0' => 'تانیملانماییب',
+'exif-exposureprogram-1' => 'ال ایله',
+'exif-exposureprogram-2' => 'نورمال پروقرام',
+'exif-exposureprogram-3' => 'آچیقلیق اوستونلوگو',
+'exif-exposureprogram-4' => 'شاتیر اوستونلوگو',
+'exif-exposureprogram-5' => 'یارادیجی پروقرام (میدان درینلیگینه اَییلمیش)',
+'exif-exposureprogram-6' => 'حرکت پروقرامی (شاتیر سورعتینه اَییلمیش)',
+'exif-exposureprogram-7' => 'پورتره دورومو (دالیلاری فوکوس‌دا اولمایان یاخین عکسلر اوچون)',
+'exif-exposureprogram-8' => 'منظره دورومو (دالیلاری فوکوس‌دا اولان منظره عکسلری اوچون)',
+
+'exif-subjectdistance-value' => '$1 متر',
+
+'exif-meteringmode-0' => 'بیلینمه‌ین',
+'exif-meteringmode-1' => 'اورتا',
+'exif-meteringmode-2' => 'وسطی آغیر اورتا',
+'exif-meteringmode-3' => 'بیر-نوقطه‌لی',
+'exif-meteringmode-4' => 'نئچه-نوقطه‌لی',
+'exif-meteringmode-5' => 'اؤرنک',
+'exif-meteringmode-6' => 'قیسمی',
+'exif-meteringmode-255' => 'باشقا',
+
+'exif-lightsource-0' => 'بیلینمه‌ین',
+'exif-lightsource-1' => 'گون‌ایشیغی',
+'exif-lightsource-2' => 'فلورسانت',
+'exif-lightsource-3' => 'تنگستن (ایستی‌سیز ایشیق)',
+'exif-lightsource-4' => 'فلاش',
+'exif-lightsource-9' => 'یاخشی هاوا',
+'exif-lightsource-10' => 'بولودلو هاوا',
+'exif-lightsource-11' => 'کؤلگه',
+'exif-lightsource-12' => 'گون‌ایشیغی فلورسانت (D 5700 – 7100K)',
+'exif-lightsource-13' => 'گون آغ فلورسانت (N 4600 – 5400K)',
+'exif-lightsource-14' => 'سرین آغ فلورسانت (W 3900 – 4500K)',
+'exif-lightsource-15' => 'آغ فلورسانت (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'A ایستاندارد ایشیق',
+'exif-lightsource-18' => 'B ایستاندارد ایشیق',
+'exif-lightsource-19' => 'C ایستاندارد ایشیق',
+'exif-lightsource-24' => 'ISO ایستودیو تنگستنی',
+'exif-lightsource-255' => 'باشقا ایشیق قایناغی',
+
+# Flash modes
+'exif-flash-fired-0' => 'فلاش یاندیریلمادی',
+'exif-flash-fired-1' => 'فلاش یاندیریلدی',
+'exif-flash-return-0' => 'دؤنن ایشیق بیلن فونکسیاسی یوخدور',
+'exif-flash-return-2' => 'دؤنن ایشیق بیلیننمه‌دی',
+'exif-flash-return-3' => 'دؤنن ایشیق بیلیندی',
+'exif-flash-mode-1' => 'زورلو فلاش یاندیریلماسی',
+'exif-flash-mode-2' => 'زورلو فلاش یاندیریلماماسی',
+'exif-flash-mode-3' => 'اوتوماتیک دوروم',
+'exif-flash-function-1' => 'فلاش یوخدور',
+'exif-flash-redeye-1' => 'قیرمیز-گؤز آزالتما دورومو',
+
+'exif-focalplaneresolutionunit-2' => 'اینچ',
+
+'exif-sensingmethod-1' => 'تاندیریلمامیش',
+'exif-sensingmethod-2' => 'بیر چیپ‌لی رنگ ساحه سِنسورو',
+'exif-sensingmethod-3' => 'ایکی چیپ‌لی رنگ ساحه سِنسورو',
+'exif-sensingmethod-4' => 'اوچ چیپ‌لی رنگ ساحه سِنسورو',
+'exif-sensingmethod-5' => 'سیرالی رنگ ساحه سِنسورو',
+'exif-sensingmethod-7' => 'اوچ-خط‌لی سِنسور',
+'exif-sensingmethod-8' => 'بیر چیپ‌لی رنگ خط سِنسورو',
+
+'exif-filesource-3' => 'دیجیتال کامئرا',
+
+'exif-scenetype-1' => 'موستقیم سالینمیش عکس',
+
+'exif-customrendered-0' => 'نورمال پروسِس',
+'exif-customrendered-1' => 'اؤزل پروسِس',
+
+'exif-exposuremode-0' => 'اوتو ایشیق-توتما',
+'exif-exposuremode-1' => 'ال ایله ایشیق-توتما',
+'exif-exposuremode-2' => 'اوتو دیرَکلندیرمه',
+
+'exif-whitebalance-0' => 'اوتوماتیک آغ رنگی بالانسلاندیرماسی',
+'exif-whitebalance-1' => 'ای ایله آغ رنگ بالانسلاندیرماسی',
+
+'exif-scenecapturetype-0' => 'ایستاندارد',
+'exif-scenecapturetype-1' => 'منظره',
+'exif-scenecapturetype-2' => 'پورتره',
+'exif-scenecapturetype-3' => 'گئجه گؤرونوشو',
+
+'exif-gaincontrol-0' => 'هئچ',
+'exif-gaincontrol-1' => 'آز-آلماغی آرتیر',
+'exif-gaincontrol-2' => 'چوخ-آلماغی آرتیر',
+'exif-gaincontrol-3' => 'آز-آلماغی آزالت',
+'exif-gaincontrol-4' => 'چوخ-آلماغی آزالت',
+
+'exif-contrast-0' => 'نورمال',
+'exif-contrast-1' => 'یوموشاق',
+'exif-contrast-2' => 'بَرک',
+
+'exif-saturation-0' => 'نورمال',
+'exif-saturation-1' => 'آشاغی دویدورما',
+'exif-saturation-2' => 'یوخاری دویدورما',
+
+'exif-sharpness-0' => 'نورمال',
+'exif-sharpness-1' => 'یوموشاق',
+'exif-sharpness-2' => 'بَرک',
+
+'exif-subjectdistancerange-0' => 'بیلینمه‌ین',
+'exif-subjectdistancerange-1' => 'ماکرو',
+'exif-subjectdistancerange-2' => 'یاخین گؤرونوش',
+'exif-subjectdistancerange-3' => 'اوزاق گؤرونوش',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'قوزئی عرض درجه‌سی',
+'exif-gpslatitude-s' => 'گونئی عرض درجه‌سی',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'دوغو عرض درجه‌سی',
+'exif-gpslongitude-w' => 'باتی عرض درجه‌سی',
+
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '{{PLURAL:$1|بیر|$1}} متر دنیز سویه‌سیندن یوخاری',
+'exif-gpsaltitude-below-sealevel' => '{{PLURAL:$1|بیر|$1}} متر نیز سویه‌سیندن آشاغی',
+
+'exif-gpsstatus-a' => 'اؤلچمه یئکونلاشماییب',
+'exif-gpsstatus-v' => 'وئریلن‌لری اؤتورمک اوچون حاضردیر',
+
+'exif-gpsmeasuremode-2' => '2-اؤلچولو اولچو',
+'exif-gpsmeasuremode-3' => '3-اؤلچولو اولچو',
+
+# Pseudotags used for GPSSpeedRef
+'exif-gpsspeed-k' => 'کیلومتر ساهات دا',
+'exif-gpsspeed-m' => 'مایل ساهات دا',
+'exif-gpsspeed-n' => 'دویون',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'کیلومتر',
+'exif-gpsdestdistance-m' => 'مایل',
+'exif-gpsdestdistance-n' => 'دنیز مایلی',
+
+'exif-gpsdop-excellent' => 'علا($1)',
+'exif-gpsdop-good' => 'یاخشی($1)',
+'exif-gpsdop-moderate' => 'متوسط($1)',
+'exif-gpsdop-fair' => 'نه چوخ یاخشی ($1)',
+'exif-gpsdop-poor' => 'ضعیف ($1)',
+
+'exif-objectcycle-a' => 'فقظ صوبح',
+'exif-objectcycle-p' => 'فقط آخشام',
+'exif-objectcycle-b' => 'گوندوزلر و آخشام‌لار',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'دوغرو جهت',
+'exif-gpsdirection-m' => 'مغناطیسی جهت',
+
+'exif-ycbcrpositioning-1' => 'مرکزلشدیریلمیش',
+'exif-ycbcrpositioning-2' => 'اشتراکه',
+
+'exif-dc-contributor' => 'مشارکت ائدنلر',
+'exif-dc-coverage' => 'مئدیانین مکان و زامان چرچیوه‌سی',
+'exif-dc-date' => 'تاریخ لر',
+'exif-dc-publisher' => 'یایمچی',
+'exif-dc-relation' => 'علاقه‌لی مئدیا',
+'exif-dc-rights' => 'حاقلار',
+'exif-dc-source' => 'قیناق مئدیا',
+'exif-dc-type' => 'مئدیانین تیپی',
+
+'exif-rating-rejected' => 'رد ائدیلدی',
+
+'exif-isospeedratings-overflow' => '65535-دن بؤیوک‌دور',
+
+'exif-iimcategory-ace' => 'هنر، مدنیت و ایلنجه',
+'exif-iimcategory-clj' => 'جنایت و قانون',
+'exif-iimcategory-dis' => 'فاجعه و قزا‌لار',
+'exif-iimcategory-fin' => 'ایقتصاد و تجارت',
+'exif-iimcategory-edu' => 'تحصیل',
+'exif-iimcategory-evn' => 'یاشام محیطی',
+'exif-iimcategory-hth' => 'ساغللیک',
+'exif-iimcategory-hum' => 'اینسان ماراق‌لاری',
+'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-iimcategory-wea' => 'هوا',
+
+'exif-urgency-normal' => 'نورمال($1)',
+'exif-urgency-low' => 'آز ($1)',
+'exif-urgency-high' => 'چوخ($1)',
+'exif-urgency-other' => 'ایستیفاده‌چی طرفین‌دن مویین اولونموش بیرینجی‌لیک ($1)',
+
+# External editor support
+'edit-externally' => 'بو فایلی خاریجی یازیلیم‌لا دَییشدیر',
+'edit-externally-help' => '(آرتیق بیلگیلر اوچون [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] صحیفه‌سینه باخ)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'بوتون',
+'namespacesall' => 'بوتون',
+'monthsall' => 'بوتون',
+'limitall' => 'بوتون',
+
+# E-mail address confirmation
+'confirmemail' => 'ایمیل-پوست اونوانینی تصدیق ائت',
+'confirmemail_noemail' => '[[Special:Preferences|ایستیفاده‌چی ترجیه لرینی]] تعیین اولونموش اویغون بیر ایمیل عنوانینیز یوخ.',
+'confirmemail_text' => 'ویکینین ایمیل اعتباری کوللانمابیلمئک اوچون، اول ایمیل عنوانینیزین تصدیقلنمه‌سی لازیم‌دیر.
+اونوانینیزا تسدیق ائ-پوچت گؤندرمک اوچون آشاغی‌داکی بوتونو تیکلایین.
+گؤندریله‌جک ایسماریج‌لار اونوانینیزی تسدیقلمک اوچون براوزئری ایله سیز گیریش ایمکانینیز، تسدیق کودو ائهتیوا ائدن بیر علاقه اولا‌جاق؛
+لینکی تاراییجینیدا آچین و ایمیل عنوانینیزین اعتبارلی‌لیغینی یوخلایین.',
+'confirmemail_pending' => 'بیر تسدیقلمه کودو سیزه اونسوز دا ایمیلندی؛
+اگر حسابینیزی یئنی آچ بیلسنیز، یئنی بیر کود ایستمه‌یه ایشدن اول گلمه‌سینی بیر آز گؤزلمیی ایسته‌یه بیلرسینیز.',
+'confirmemail_send' => 'تسدیق کودو گؤندر',
+'confirmemail_sent' => 'تصدیق ایمیل مکتوبو گؤندریلدی.',
+'confirmemail_oncreate' => 'بیر تصدیقله‌مه کودو ائ-پوست اونوانینیزا گؤندریلدی. 
+گیریش ائتمک اوچون بو کود لازیملی دئيیل، آنجاق بو ویکیدئکی هر هانسی بیر ائ-پوست اساسلی خصوصیتی دؤوره‌يه سوخماق اوچون بونو تعمین ائتمک مجبوریتینده‌سینیز.',
+'confirmemail_sendfailed' => '{{SITENAME}} تسدیق مای‌لی گؤندره. اعتبارسیز کاراکتئرلر اولا بیلر اونوانی نظارت ائدین
+
+مایل پروقرامی قایتاردی: $1',
+'confirmemail_invalid' => 'خطاتسدیقله‌مه کودو. کودون واختی کئچمیش اولا بیلر.',
+'confirmemail_needlogin' => 'ائ-پوست اونوانینیزین تسدیق‌لنمه‌سی اوچون $1 لازیمدیر.',
+'confirmemail_success' => 'ایمیل اونوانینیز ایندی تسدیق ائدیلدی.
+سیز ایندی [[Special:UserLogin|حئساب آچاراق]] ویکیدن لذت آپارین.',
+'confirmemail_loggedin' => 'ایمیل‌نیز ایندی تسدیق ائدیلدی.',
+'confirmemail_error' => 'قئید بیلینمه‌ين بیر خطا اوچون قئید اولونمادی.',
+'confirmemail_subject' => '{{SITENAME}} ایمیل تسدیق ائتمه',
+'confirmemail_body' => 'بیری، احتیماللا سیز، $1 ایپ اونوانیندان، 
+{{SITENAME}} سايتیندا بو ائ-پوچت اونوانی ایله $2 حسابینی آچدی. 
+
+بو حسابین حقیقتن سیزه عاید اولدوغونو تسدیق و {{SITENAME}} سايتینداکی 
+ائ-پوست فونکسیيالارینی آکتیو حالا گتیرمک اوچون آشاغیداکی علاقه‌‌نی تارايیجینیزدا آچین. 
+
+$3 
+
+اگر حسابی سیز * آچمادیيسانیز *، ائ-پوچت اونوانی دوغرولاماسینی 
+لغو ائتمک اوچون آشاغیداکی علاقه‌‌نی تعقیب ائدین: 
+
+$5 
+
+بو تسدیق کودو $4 تاریخینه قدر اعتبارلی اولاجاق.',
+'confirmemail_body_changed' => 'بیری، ائحتیماللا سیز، $1 ایپ اونوانین‌دان،
+{{SITENAME}} سایتیندا "$2" حسابی اوچون ایمیل اونوانینی دییشدیردی.
+
+بو حسابین حقیقتن سیزه عاید اولدوغونو تسدیق و {{SITENAME}} سایتین‌داکی
+ایمیل فونکسیا‌لارینی تکرار آکتیو حالا گتیرمک اوچون آشاغی‌داکی علاقنی تاراییجینیزدا آچین.:
+
+$3
+
+اگر حساب سیزه عاید * دئییلسه *، ائ-پوچت اونوانی دوغرولاماسینی
+لغو ائتمک اوچون آشاغی‌داکی علاقنی تعقیب ائدین:
+
+$5
+
+بو تسدیق کودو $4 تاریخینه قدر اعتبارلی اولا‌جاق.',
+'confirmemail_body_set' => 'بیری $1 ای‌پی آدرئسیيلئ{{SITENAME}} سايتیندا "$2" ایستیفاده‌چی حسابی ایمیل اونوانی اولاراق بو ایمیل  اونوانینی ایفاده ائتدی. 
+
+اگر بو عملیاتی ائدن سیزسینیزسه و {{SITENAME}} سايتینداکی ایمیل  فونکسیيالارینی تکرار آکتیو ائتمک ایسته‌يیرسینیزسه آشاغیداکی علاقه‌‌نی تارايیجینیزدا آچمانیز لازیمدیر: 
+
+$3 
+
+اگر بو عملیاتی ائدن سیز دئيیلسینیزسه و بئله بیر عضولويونوز يوخسا ایمیل  تسدیق عملیاتینی لغو ائتمک اوچون آشاغیداکی علاقه‌‌نی تارايیجینیزدا آچمانیز لازیمدیر: 
+
+$5 
+
+بو تسدیق کودو $4 تاریخینه قدر اعتبارلیدیر.',
+'confirmemail_invalidated' => 'ایمیل تصدیقلنمه‌سی دایاندیریلدی',
+'invalidateemail' => 'ایمیل تصدیقلنمه‌سین‌دن ایمتینا',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[«Interwiki transcluding»دن چیخیلمیش‌دیر]',
+'scarytranscludefailed' => '[$1اوچون شابلون آلیشی موفقیت‌سیز اولدو]',
+'scarytranscludefailed-httpstatus' => '[چاغریش $1 شابلون اوچون اولا بیلمه دی: اچ‌تی‌تی‌پی خطاسی $2]',
+'scarytranscludetoolong' => '[آدرس(URL)اوزوندور]',
+
+# Delete conflict
+'deletedwhileediting' => "'''دیققت!''' بو صحیفه‌‌ سیز دَییشدیرمه‌ائتمه‌يه باشلادیقدان سونرا سیلینمیشدیر!",
+'confirmrecreate' => "بو صحیفنی [[User:$1|$1]] ([[User talk:$1|مئساژ]]) ایستیفاده‌چی‌سی سیز صحیفه‌ده دییشیک‌لیک ائدرکن سیلمیشتیر، سببی:
+:' $2
+صحیفنی باش‌دان آچماق ایسیتیورسانیز، لطفاً تسدیق ائدین.",
+'confirmrecreate-noreason' => '[[User:$1|$1]] ([[User talk:$1|دانیشیق]]) آدلی ایستیفاده‌چی، سیز ديَیشیکلیک ائتمه‌يه باشلادیقدان سونرا بو صحیفه‌‌نی سیلدی. خاهیش ائدیریک بو صحیفه‌‌نی حقیقتن يئنیدن ياراتماق ایسته‌دیگینیزی تسدیق ائدین.',
+'recreate' => 'يئنیله‌مک',
+
+# action=purge
+'confirm_purge_button' => 'اولدو',
+'confirm-purge-top' => 'بو صحیفه‌‌ کئشدن (cache) سیلینسین؟',
+'confirm-purge-bottom' => 'بیر صحیفه‌‌نی لغو ائتمک کئشی تمیزله‌ير و ان آکتوال دیستریبوتیوین گؤرونمه‌سینه مجبور ائدر.',
+
+# action=watch/unwatch
+'confirm-watch-button' => 'اولدو',
+'confirm-watch-top' => 'بو صفحه‌نی ایزله‌دیکلرینیزه آرتیریلدی',
+'confirm-unwatch-button' => 'اولدو',
+'confirm-unwatch-top' => 'بو صفحه‌نی ایزله‌دیگینیز صفحه‌لردن قالدیریلدی',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; اولکی صحیفه‌‌',
+'imgmultipagenext' => 'سونراکی صحیفه‌‌ &rarr;',
+'imgmultigo' => 'گئت!',
+'imgmultigoto' => '$1 صحیفه‌‌يه گئت',
+
+# Table pager
+'ascending_abbrev' => 'آرتما سیراسینا گؤره',
+'descending_abbrev' => 'آزالما سیراسینا گؤره',
+'table_pager_next' => 'سونراکی صحیفه',
+'table_pager_prev' => 'قاباغکی صحیفه',
+'table_pager_first' => 'ایلک صحیفه‌‌',
+'table_pager_last' => 'سون صحیفه‌‌',
+'table_pager_limit' => 'صحیفه‌‌ده $1 مؤوقئ سرگیله',
+'table_pager_limit_label' => 'هر صحیفه‌ده اولان موردلر سایی‌سی',
+'table_pager_limit_submit' => 'گئت',
+'table_pager_empty' => 'نتیجه سیز',
+
+# Auto-summaries
+'autosumm-blank' => 'صحیفه‌‌نی بوشالتدی',
+'autosumm-replace' => "صحیفه‌‌نین مظمونو ' $1' يازیسی ایله ديَیشدیریلدی",
+'autoredircomment' => '[[$1]] صحیفه‌‌سینه ایستیقامتلندیریلیر',
+'autosumm-new' => "صحیفه‌‌نی ' $1' ایله يارات",
+
+# Live preview
+'livepreview-loading' => 'یوکلنیر...',
+'livepreview-ready' => 'گؤزله... حاضردیر!',
+'livepreview-failed' => 'جانلی اؤنیزلئمئ موفقیتسیز! نورمال سینیق گوستریشی کولانین.',
+'livepreview-error' => 'علاقه‌‌ موفقیتسیز:$1 "$2". 
+نورمال سینیق گوستریشی کولانین.',
+
+# Friendlier slave lag warnings
+'lag-warn-normal' => '$1 {{PLURAL: $1 | سانیيه‌دن | سانیيه‌ده}} يئنی ديَیشیکلیکلر بو سیياهیدا گؤرولمه‌يه.',
+'lag-warn-high' => 'وئریلنلر بازاسی سونوجوسونداکی هددیندن آرتیق گئجیکمه‌دن گؤره، $1 {{PLURAL:$1 | سانیيه‌دن | سانیيه‌دن}} يئنی ديَیشیکلیکلر بو سیياهیدا گؤرونمئيئبیلیر.',
+
+# Watchlist editor
+'watchlistedit-numitems' => 'ایزلئمئ صحیفه‌‌نیزده {{PLURAL:$1|1 باشلیق|$1 باشلیق}} وار، دانیشیق صحیفه‌‌لری چیخماق شرطیله.',
+'watchlistedit-noitems' => 'ایزله‌مه سیياهینیز بوشدور.',
+'watchlistedit-normal-title' => 'ایزله‌دیگیم صحیفه‌‌لری دَییشدیر',
+'watchlistedit-normal-legend' => 'ایزله‌مه سیياهیسیندان باشلیقلارین سیلینمه‌سی',
+'watchlistedit-normal-explain' => 'ایزله‌مه سیياهینیزدا باشلیقلار آشاغیدا گؤستریلمیشدیر. 
+بیر باشلیغی چیخارماق اوچون، يانینداکی قوتوجوغو ایشارله‌يین و «{{int:Watchlistedit-normal-submit}}» دويمه‌سینی باسین. 
+[[Special:EditWatchlist/raw|سطرلر سیياهیسینی]] ده تشکیل ائده بیلرسینیز',
+'watchlistedit-normal-submit' => 'باشلیقین سیلینمه‌سی',
+'watchlistedit-normal-done' => '{{PLURAL:$1|$1 صحیفه‌‌}} ایزله‌مه صحیفه‌‌لرینیزدن سیلیندی:',
+'watchlistedit-raw-title' => 'چیی ایزله‌دیکلری دَییشدیر',
+'watchlistedit-raw-legend' => 'چیی ایزله‌دیکلری دَییشدیر',
+'watchlistedit-raw-explain' => 'ایزله‌مه سیياهینیزدا باشلیقلار آشاغیدا گؤستریلیر. هر سطرده بیر باشلیق اولماق عذره، باشلیقلاری علاوه‌‌ ائده‌رک يا دا سیله‌رک سیياهینی تشکیل ائده بیلرسینیز. 
+بیتدیگینده «{{int:Watchlistedit-raw-submit}}» يئ تیکلايینیز. 
+آيریجا [[Special:EditWatchlist|استاندارت تنزیمله‌مه صحیفه‌‌سینی]] دا ایستیفاده ائده بیلرسینیز.',
+'watchlistedit-raw-titles' => 'باشلیقلار:',
+'watchlistedit-raw-submit' => 'ایزلدیگیم صحیفه‌لرین سیاهی‌سینین یئنی‌لنمه‌سی',
+'watchlistedit-raw-done' => 'ایزله‌دیکلرینیز گونجل‌لندی.',
+'watchlistedit-raw-added' => '{{PLURAL:$1|بیر|$1}} باشلیق آرلیریلدی:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|بیر|$1}} باشلیق چیخاریلدی:',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'ایلگیلی دَییشیکلیکلره باخین',
+'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» دفالت آچارینی گئچرسیز ائدیر.",
+
+# Special:Version
+'version' => 'نوسخه‌',
+'version-extensions' => 'قورولموش گنیشلندیرمه‌لر',
+'version-specialpages' => 'اؤزل صحیفه‌لر',
+'version-parserhooks' => 'آیریشدیران چنگل‌لری',
+'version-variables' => 'دَییشینلر',
+'version-antispam' => 'اِسپم اؤنله‌مه',
+'version-skins' => 'قابیقلار',
+'version-other' => 'آیری',
+'version-mediahandlers' => 'مئدیا ایشلدنلری',
+'version-hooks' => 'چنگل‌لر',
+'version-extension-functions' => 'علاوه‌‌ فوبکسیيالار',
+'version-parser-extensiontags' => 'آیریشدیران گنیشلندیرمه اِتیکِتلری',
+'version-parser-function-hooks' => 'آیریشدیران فونکسیا چنگل‌لری',
+'version-hook-name' => 'چنگه‌لین آدی',
+'version-hook-subscribedby' => 'طرفیندن گیریش‌‌میش',
+'version-version' => '(نسخه $1)',
+'version-license' => 'لیسانس',
+'version-poweredby-credits' => "بو wیکی ' ''[//www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیله‌رک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
+'version-poweredby-others' => 'آیریلار',
+'version-credits-summary' => 'بو ایستفاده چیلر دییشدیر لرینه گوره [[Special:Version|مئدیاویکی]] تانیش ائدیرم.',
+'version-license-info' => 'مئدیاویکی بیر اؤزگور یازیلیم‌دیر؛ سیز اونو، اؤزگور یازیلیم قورولوشو یایان GNU گنل عمومی لیسانسی اساسی‌له یئنی‌دن داغیدیب یوخسا دَییشه بیلرسینیز؛ یا لیسانسین ۲-نجی نوسخه‌سی، یا دا (اؤز سئچدیگینیزله) هر هانکی سونراکی نوسخه‌سی.
+
+مئدیاویکی، فایدالی اولماق اومودویله داغینیب‌دیر، اما هئچ قارانتی‌سی یوخدور؛ حتی تیجارت یا بیر ایشه اویغون اولماق قارانتی‌سی ده یوخدور.باشقا بیلگیلر اوچون GNU گنل عمومی لیسانسینا باخین.
+
+سیز گرک بو یازیلیم‌لا، [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU گنل عمومی لیسانسی]نین بیر نوسخه‌نی‌ده آلمیش اولاسینیز؛ ائله اولماسا، [//www.gnu.org/licenses/old-licenses/gpl-2.0.html اونو آنلاین اوخویون]، یوخسا اؤزگور یازیلیم قورولوشونا بو آدرس‌ده یازین: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301',
+'version-software' => 'يوکلو پروقرام',
+'version-software-product' => 'محصول',
+'version-software-version' => 'نوسخه‌',
+'version-entrypoints' => 'گیریش نقطه‌‌سی‌نین آدرسی',
+'version-entrypoints-header-entrypoint' => 'گیریش نقطه‌‌سی',
+'version-entrypoints-header-url' => 'اینترنت آدرسی',
+
+# Special:FilePath
+'filepath' => 'فايل يولو',
+'filepath-page' => 'فایل:',
+'filepath-submit' => 'گئت',
+'filepath-summary' => 'بو اؤزل صحیفه‌‌ بیر فايل اوچون تام يولو گتیرر. 
+شکیللر تام تصویرین گؤستریلیر، دیگر فايل نؤولری ایله باغلی پروقراملاری بیرباشا ایشه باشلايیر.',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch' => 'دوبلیکات فايل آختاریشی',
+'fileduplicatesearch-summary' => 'تعمین ائتمک ديَری دؤشه‌مه‌سینده بنزر فايللاری آختار.',
+'fileduplicatesearch-legend' => 'Dublikatı axtar',
+'fileduplicatesearch-filename' => 'فايل آدی:',
+'fileduplicatesearch-submit' => 'آختار',
+'fileduplicatesearch-info' => '$1 × $2 پیکسِل<br />فایل اؤلچوسو: $3<br />MIME نوعو: $4',
+'fileduplicatesearch-result-1' => '«$1» فایلینین هئچ بیر عینی کوپیسی یوخدور.',
+'fileduplicatesearch-result-n' => '«$1» فایلینین، {{PLURAL:$2|بیر|$2}} عینی کوپیسی واردیر.',
+'fileduplicatesearch-noresults' => '"$1" آدیندا فایل تاپیلمادی.',
+
+# Special:SpecialPages
+'specialpages' => 'اؤزل صحیفه‌لر',
+'specialpages-note' => '----
+* نورمال اؤزل صحیفه‌لر.
+* <span class="mw-specialpagerestricted">محدودلاشدیریلمیش اؤزل صحیفه‌لر.</span>',
+'specialpages-group-maintenance' => 'جاری مروزه‌لر',
+'specialpages-group-other' => 'دیگر خصوصی صحیفه‌لر',
+'specialpages-group-login' => 'گیریش / حساب یاراد',
+'specialpages-group-changes' => 'سون دییشیک‌لیک‌لر و قئیدلر',
+'specialpages-group-media' => 'مئدیا مروزه‌لری و یوکلمه‌لر',
+'specialpages-group-users' => 'ایستیفاده‌چی‌لر و حاقلار',
+'specialpages-group-highuse' => 'ان چوخ ایستیفاده ائدیلن صحیفه‌لر',
+'specialpages-group-pages' => 'صحیفه‌لرین سیاهی‌لاری',
+'specialpages-group-pagetools' => 'صحیفه آلتلری',
+'specialpages-group-wiki' => 'ویکی بیلگیلری و آلت‌لری',
+'specialpages-group-redirects' => 'خصوصی ایستیقامتلندیرمه صحیفه‌لری',
+'specialpages-group-spam' => 'هرزه یازماق آلت‌لری',
+
+# Special:BlankPage
+'blankpage' => 'بوش صحیفه',
+'intentionallyblankpage' => 'بو صحیفه خصوصیله بوش‌دور.',
+
+# External image whitelist
+'external_image_whitelist' => ' #بو سطری اولدوغو کیمی بوراخین <pre>
+#دوزگون ایفاده (رِقولار اِکسپرِشِن) پارچالارینی (یالنیز // آراسیندا اولان قیسمی) آشاغی‌يا قویون
+#بونلار ائشیک‌ده‌کی عکسلرین آدرسلریله تطبیق اولاجاقلار
+#تطبیق اولانلار، عکس کیمی گؤستریله‌جکلر، اولمایانلارا یالنیز بیر باغلانتی گؤستریله‌جکدیر
+#بو # نیشانی ایله باشلایان سطرلر، شرح کیمی نظرده توتولاجاقلار
+#بو حرفلرین کیچیک/بؤیوک اولماغینا حساس دئییل
+
+#بوتون دوزگون ایفاده پارچالارینی، بو سطرین اوستونه قویون. بو سطری اولدوغو کیمی بوراخین</pre>',
+
+# Special:Tags
+'tags' => 'مومکون دییشیک‌لیک ائتیکئت‌لری',
+'tag-filter' => '[[Special:Tags|اِتیکِت]] سۆزگُجی:',
+'tag-filter-submit' => 'سۆزگَج',
+'tags-title' => 'یاپیشقان',
+'tags-intro' => 'بو صحیفه، یازیلیم دَییشدیرمه‌لری نیشانلایان اِتیکِتلری و اونلارین آنلاملارینی گؤستریر.',
+'tags-tag' => 'یاپیشقان آدی',
+'tags-display-header' => 'ديَیشیکلیک لیستئلئریندئکی گؤرونوش',
+'tags-description-header' => 'آنلامینین تام آچیقلاماسی',
+'tags-hitcount-header' => 'یاپیشقانلی دییشیک‌لیک‌لر',
+'tags-edit' => 'دَییشدیر',
+'tags-hitcount' => '$1 {{PLURAL:$1|دییشیکلیک|دییشیک‌لیک}}',
+
+# Special:ComparePages
+'comparepages' => 'صحیفه‌لری قارشی‌لاش‌دیر',
+'compare-selector' => 'صحیفه دییشدیر‌لرینی قارشی‌لاش‌دیر',
+'compare-page1' => 'صحیفه 1',
+'compare-page2' => 'صحیفه 2',
+'compare-rev1' => 'نوسخه ۱',
+'compare-rev2' => 'نوسخه ۲',
+'compare-submit' => 'قارشی‌لاش‌دیر',
+'compare-invalid-title' => 'وئردیگینیز باشلیق گئچرسیزدیر.',
+'compare-title-not-exists' => 'وئردیگینیز باشلیق یوخدور.',
+'compare-revision-not-exists' => 'بَلیرتدیگینیز نوسخه یوخدور.',
+
+# Database error messages
+'dberr-header' => 'بو ویکی‌ده بیر ایشکال وار',
+'dberr-problems' => 'عوذر ایسته‌ییریک!
+بو سایت‌دا تِکنیکی ایشکال‌لار واردیر.',
+'dberr-again' => 'بیر نئچه دقیقه دؤزوب سونرا یئنی‌دن یوکله‌یین.',
+'dberr-info' => '(دیتابیس خیدمت‌چیسی‌یه باغلانماق اولونمادی: $1)',
+'dberr-usegoogle' => 'بو آرادا، گوگل‌ده آختارابیلرسینیز.',
+'dberr-outofdate' => 'دیقت ائدین کی اوردا بیزیم سایتیمیزین ایندِکسی کؤهنه اولا بیلر.',
+'dberr-cachederror' => 'بو ایسته‌نیلن صحیفه‌نین بیر کَش اولونموش کوپی‌سیدیر و کؤهنه اولا بیلر.',
+
+# HTML forms
+'htmlform-invalid-input' => 'سیزین بعضی وئردیکلرینیزله ایلگی‌لی موشکول‌لر وار',
+'htmlform-select-badoption' => 'سیز وئردیگینیز دَیَر، گئچرلی دئییل.',
+'htmlform-int-invalid' => 'سیز وئردیگینیز دَیَر، بیر تام عدد دئییل.',
+'htmlform-float-invalid' => 'سیز وئردیگینیز دَیَر، بیر عدد دئییل.',
+'htmlform-int-toolow' => 'سیز وئردیگینیز دَیَر، $1 آشاغی حدین‌دن آزدیر',
+'htmlform-int-toohigh' => 'سیز وئردیگینیز دَیَر، $1 یوخاری حدین‌دن چوخدور',
+'htmlform-required' => 'بو دَیَر لازیم‌دیر',
+'htmlform-submit' => 'گؤندر',
+'htmlform-reset' => 'دَییشیکلیکلری قایتار',
+'htmlform-selectorother-other' => 'باشقا',
+
+# SQLite database support
+'sqlite-has-fts' => '$1 بوتون یازی آختارما دستگی‌له',
+'sqlite-no-fts' => '$1 بوتون یازی آختارماماق‌لا',
+
+# New logging system
+'logentry-delete-delete' => '$1، $3 صحیفه‌سینی سیلدی',
+'logentry-delete-restore' => '$1، $3 صحیفه‌سینی قایتاردی',
+'logentry-delete-event' => '$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} دَییشدیردی: $4',
+'logentry-delete-revision' => '$1، $3 صحیفه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} دَییشدیردی: $4',
+'logentry-delete-event-legacy' => '$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی دَییشدیردی',
+'logentry-delete-revision-legacy' => '$1، $3 صحیفه‌سینده نوسخه‌لرین گؤرونوشلرینی دَییشدیردی',
+'logentry-suppress-delete' => '$1، $3 صحیفه‌سینی یاتیردی',
+'logentry-suppress-event' => '$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} گیزلینجه دَییشدیردی: $4',
+'logentry-suppress-revision' => '$1، $3 صحیفه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} گیزلینجه دَییشدیردی: $4',
+'logentry-suppress-event-legacy' => '$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی گیزلینجه دَییشدیردی',
+'logentry-suppress-revision-legacy' => '$1، $3 صحیفه‌سینده نوسخه‌لرین گؤرونوشلرینی گیزلینجه دَییشدیردی',
+'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 اوستونه آپاردی',
+'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-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]» صحیفه‌سینه آرتیریلاجاق‌دیر.',
+'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' => 'بو خیدمتچی‌ده، اینترنت آدرسی‌له فایل یوکله‌مک یاساقلانیب‌دیر.',
+'api-error-duplicate' => 'بو یاست‌دا، همن بیلگیلرله، باشقا {{PLURAL:$1|[$2 فایل]|[$2 فایل‌لار]}} واردیر.',
+'api-error-duplicate-archive' => 'بو یاست‌دا، همن بیلگیلرله، باشقا {{PLURAL:$1|[$2 فایل]|[$2 فایل‌لار]}} وار ایدی، اما {{PLURAL:$1|سیلینیب‌دیر|سیلینیبلر}}.',
+'api-error-duplicate-archive-popup-title' => 'تیکرارلانمیش {{PLURAL:$1|فایل|فایل‌لار}}، اؤنجه‌دن {{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' => 'سیز وئردیگینیز دَییشیکلیکلرین قاباغی، بیر extension ایله قاباغی آلیندی.',
+'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-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' => '{{PLURAL:$1|بیر|$1}} ثانیه',
+'duration-minutes' => '{{PLURAL:$1|بیر|$1}} دقیقه',
+'duration-hours' => '{{PLURAL:$1|بیر|$1}} ساعات',
+'duration-days' => '{{PLURAL:$1|بیر|$1}} گون',
+'duration-weeks' => '{{PLURAL:$1|بیر|$1}} هفته',
+'duration-years' => '{{PLURAL:$1|بیر|$1}} ایل',
+'duration-decades' => '{{PLURAL:$1|بیر|$1}} اون‌ایل',
+'duration-centuries' => '{{PLURAL:$1|بیر|$1}} یوز-ایل',
+'duration-millennia' => '{{PLURAL:$1|بیر|$1}} مین‌ایل',
+
+);
index 7c527d6..c978f66 100644 (file)
@@ -277,8 +277,8 @@ $messages = array(
 'newwindow' => '(яңы биттә)',
 'cancel' => 'Бөтөрөргә',
 'moredotdotdot' => 'Дауамы...',
-'mypage' => 'ШÓ\99Ñ\85Ñ\81и Ð±ит',
-'mytalk' => 'Минең менән әңгәмә',
+'mypage' => 'Ð\91ит',
+'mytalk' => 'Әңгәмә',
 'anontalk' => 'Был IP-адресының фекер алышыу бите',
 'navigation' => 'Төп йүнәлештәр',
 'and' => '&#32;һәм',
@@ -300,7 +300,7 @@ $messages = array(
 'vector-action-protect' => 'Һаҡларға',
 'vector-action-undelete' => 'Тергеҙергә',
 'vector-action-unprotect' => 'Һаҡлауҙы үҙгәртергә',
-'vector-simplesearch-preference' => 'Ð\9aиңÓ\99йÑ\82елгÓ\99н эҙләү тәҡдимдәрен ҡулланырға ("Векторлы" күренеш өсөн генә)',
+'vector-simplesearch-preference' => 'ЯбайлаÑ\88Ñ\82Ñ\8bÑ\80Ñ\8bлÒ\93ан эҙләү тәҡдимдәрен ҡулланырға ("Векторлы" күренеш өсөн генә)',
 'vector-view-create' => 'Яһау',
 'vector-view-edit' => 'Үҙгәртергә',
 'vector-view-history' => 'Тарихты ҡарау',
@@ -310,6 +310,7 @@ $messages = array(
 'namespaces' => 'Исем арауыҡтары',
 'variants' => 'Варианттар',
 
+'navigation-heading' => 'Навигация',
 'errorpagetitle' => 'Хата',
 'returnto' => '$1 битенә ҡайтыу.',
 'tagline' => '{{SITENAME}} проектынан',
@@ -463,7 +464,7 @@ $1',
 'error' => 'Хата',
 'databaseerror' => 'Мәғлүмәттәр базаһы хатаһы',
 'dberrortext' => 'Мәғлүмәттәр базаһына ебәрелгән һорауҙа синтаксис хатаһы табылды.
-Был программала хата булыу мөмкинселеген күрһәтә.
+Был программала хата булыу мөмкинлеген күрһәтә.
 Мәғлүмәттәр базаһына ебәрелгән һуңғы һорау:
 <blockquote><tt>$1</tt></blockquote>
 <tt>«$2»</tt> функцияһынан.
@@ -523,7 +524,8 @@ $1',
 'protectedpagetext' => 'Был бит мөхәррирләү өсөн ябыҡ.',
 'viewsourcetext' => 'Һеҙ был биттең сығанаҡ текстын ҡарай һәм күсермәһен ала алаһығыҙ:',
 'viewyourtext' => "Был биттәге '''үҙгәртеүҙәрегеҙҙең''' сығанаҡ текстын ҡарай һәм күсермәһен ала алаһығыҙ:",
-'protectedinterface' => 'Был биттә программа арайөҙө белдереүҙәре бар. Вандализмға ҡаршы көрәш сәбәпле, был битте үҙгәртеү тыйыла.',
+'protectedinterface' => 'Был биттә программаның интерфейс хәбәре бар. Вандализм осраҡтарын булдырмау өсөн, был битте үҙгәртеү тыйыла.
+Был хәбәрҙең тәржемәһен өҫтәү йәки үҙгәртеү өсөн, зинһар, MediaWiki проектының [//translatewiki.net/ translatewiki.net] локалләштереү сайтын ҡулланығыҙ.',
 'editinginterface' => "'''Иғтибар.''' Һеҙ программаның арайөҙ тексты булған битте мөхәррирләйһегеҙ.
 Уны үҙгәртеү, башҡа ҡулланыусыларҙын арайөҙ күренешен үҙгәртәсәктер.
 Тәржемә өсөн [//translatewiki.net/wiki/Main_Page?setlang=ba translatewiki.net] адресын, MediaWiki-ны локалләштереү проектын ҡулланыу яҡшыраҡ буласаҡтыр.",
@@ -554,9 +556,9 @@ $2',
 
 Һеҙ {{SITENAME}} проектында аноним рәүештә дауам итә йәки <span class='plainlinks'>[$1 яңынан таныла]</span> алаһығыҙ (үҙ йәки башҡа исем менән).
 Ҡайһы бер биттәр һеҙ системала танылған һымаҡ күренергә мөмкин, уны бөтөрөү өсөн браузер кэшын таҙартығыҙ.",
-'welcomecreation' => '== Рәхим итегеҙ, $1! ==
-Иҫәп яҙыуығыҙ яһалды.
-Шәхси [[Special:Preferences|көйләүҙәрегеҙҙе]] үҙегеҙгә уңайлы итеп үҙгәртергә онотмағыҙ.',
+'welcomeuser' => 'Рәхим итегеҙ $1!',
+'welcomecreation-msg' => 'Иҫәп яҙыуығыҙ яһалды.
+Шәхси [[Special:Preferences|{{SITENAME}} көйләүҙәрен]] үҙегеҙгә уңайлы итеп үҙгәртергә онотмағыҙ.',
 'yourname' => 'Ҡатнашыусы исеме',
 'yourpassword' => 'Һеҙҙең пароль',
 'yourpasswordagain' => 'Паролде ҡабаттан яҙыу',
@@ -703,6 +705,7 @@ $2
 'changeemail-oldemail' => 'Хәҙерге электрон почта адресы:',
 'changeemail-newemail' => 'Яңы электрон почта адресы:',
 'changeemail-none' => '(юҡ)',
+'changeemail-password' => '{{SITENAME}} прокты өсөн паролегеҙ:',
 'changeemail-submit' => 'Адресты үҙгәртергә',
 'changeemail-cancel' => 'Кире алырға',
 
@@ -797,8 +800,8 @@ $2
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тап килгән журнал яҙмаларын таба]
 йәки '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} бындай исемле яңы бит яһай]'''</span> алаһығыҙ.",
 'noarticletext-nopermission' => 'Хәҙерге ваҡытта был биттә текст юҡ.
-ҺеÒ\99 Ð±Ð°Ñ\88ҡа Ð¼Ó\99Ò¡Ó\99лÓ\99ләрҙә [[Special:Search/{{PAGENAME}}|был исемде]] йәки
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналдағы яҙмаларҙы] эҙләй алаһығыҙ.</span>',
+ҺеÒ\99 Ð±Ð°Ñ\88ҡа Ð±Ð¸Ñ\82Ñ\82әрҙә [[Special:Search/{{PAGENAME}}|был исемде]] йәки
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналдағы яҙмаларҙы] эҙләй алаһығыҙ, тик һеҙҙең бит яһау хоҡуғығыҙ юҡ.</span>',
 'missing-revision' => '"{{PAGENAME}}" исемле биттең $1 номерлы өлгөһө юҡ.
 
 Был хәл, ғәҙәттә, юйылған биткә яһалған һылтанманын ваҡыты үтеүенән барлыҡҡа килә.
@@ -806,11 +809,10 @@ $2
 'userpage-userdoesnotexist' => '«<nowiki>$1</nowiki>» иҫәп яҙыуы юҡ. Һеҙ бындай бит яһарға йәки битте үҙгәртергә теләһәгеҙ яңынан тикшерегеҙ.',
 'userpage-userdoesnotexist-view' => '«$1» исемле иҫәп яҙыуы юҡ.',
 'blocked-notice-logextract' => 'Хәҙергә был ҡатнашыусы ябылған. Һуңғы ҡулланыусы ябыу яҙмаһы:',
-'clearyourcache' => "'''Иҫкәрмә:''' Битте һаҡлағандан һуң үҙгәртеүҙерегеҙ күренһен өсөн браузерығыҙҙың кэшын таҙартығыҙ.
-* '''Firefox / Safari:''' ''Shift'' төймәһенә баҫып, ебәрмәйенсә, ҡоралдар панелендәге ''Яңыртырға'' төймәһенә баҫығыҙ, йәки ''Ctrl-F5'' йәки ''Ctrl-R'' (Mac-та ''⌘-R'') төймәләренә баҫығыҙ.
+'clearyourcache' => "'''Иҫкәрмә:''' Битте һаҡлағандан һуң үҙгәртеүҙерегеҙ күренһен өсөн, браузерығыҙҙың кэшын таҙартығыҙ.
+* '''Firefox / Safari:''' ''Shift'' төймәһенә баҫып, ебәрмәйенсә, ''Яңыртырға'' төймәһенә баҫығыҙ, йәки ''Ctrl-F5'' йә ''Ctrl-R'' (Mac-та ''⌘-R'') төймәләренә баҫығыҙ
 * '''Google Chrome:''' ''Ctrl-Shift-R'' төймәһенә баҫығыҙ (Mac-та ''⌘-Shift-R'')
 * '''Internet Explorer:''' ''Ctrl'' төймәһенә баҫып, ебәрмәйенсә, ''Яңыртырға'' төймәһенә баҫығыҙ, йәки ''Ctrl-F5'' төймәһенә баҫығыҙ
-* '''Konqueror:''' ''Яңыртырға'' йәки ''F5'' төймәһенә баҫығыҙ
 * '''Opera:''' ''Ҡоралдар → Көйләүҙәр' менюһында кеш таҙартыуҙы һайлағыҙ",
 'usercssyoucanpreview' => "'''Кәңәш:''' Яңы CSS-файлды һаҡларҙан алда тикшерер өсөн \"{{int:showpreview}}\" төймәһенә баҫығыҙ.",
 'userjsyoucanpreview' => "'''Кәңәш:''' Яңы JS-файлды һаҡларҙан алда тикшерер өсөн \"{{int:showpreview}}\" төймәһенә баҫығыҙ.",
@@ -825,7 +827,7 @@ $2
 'note' => "'''Иҫкәрмә:'''",
 'previewnote' => "'''Ҡарап сығыу өлгөһө, әлегә үҙгәрештәр яҙҙырылмаған!'''
 Һеҙҙең үҙгәртеүҙәр әле яҙылмаған!",
-'continue-editing' => 'Мөхәррирләүҙе дауам итергә',
+'continue-editing' => 'Мөхәррирләү өлкәһенә күсергә',
 'previewconflict' => 'Әлеге алдан ҡарау, мөхәррирләү тәҙрәһенең өҫтөндә, һаҡланғандан һуң текстың нисек күренәсәген күрһәтә.',
 'session_fail_preview' => "'''Ҡыҙғанысҡа ҡаршы, һеҙҙең ултырыш идентификаторығыҙ юғалды. Һөҙөмтәлә үҙгәртеүҙәрегеҙ ҡабул ителмәйәсәк.
 Зинһар, тағы бер тапҡыр ҡабатлағыҙ.
@@ -880,7 +882,6 @@ $2
 'template-protected' => '(һаҡланған)',
 'template-semiprotected' => '(өлөшләтә һаҡланған)',
 'hiddencategories' => 'Был бит $1 {{PLURAL:$1|йәшерен категорияға}} керә:',
-'nocreatetitle' => 'Биттәр яһау сикләнгән',
 'nocreatetext' => '{{SITENAME}}, яңы бит яһауҙы рөхсәт итмәгән.
 Һеҙ кире ҡайта һәм булған битте мөхәррирләй, [[Special:UserLogin|системала таныла йәки яңы иҫәп яҙыуы яһай]] алаһығыҙ.',
 'nocreate-loggedin' => 'Яңы биттәр яһау хоҡуғығыҙ юҡ.',
@@ -905,6 +906,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' => "'''Иғтибар:''' был биттә хәтерҙе күп ҡулланыусы функциялар ныҡ күп.
@@ -1061,7 +1071,9 @@ $1",
 'revdelete-only-restricted' => '$2, $1 ваҡытлы яҙманы йәшереүҙә хата: башҡа йәшереү көйләүҙәренең береһен һайламайынса яҙманы хәкимдәрҙән йәшерә алмайһығыҙ.',
 'revdelete-reason-dropdown' => '* Ғәҙәттәге юйыу сәбәптәре
 ** Авторлыҡ хоҡуҡтарын боҙоу
-** Урынһыҙ шәхси мәғлүмәттәр',
+** Урынһыҙ комментарий йәки шәхси мәғлүмәт
+** Урынһыҙ ҡулланыусы исеме
+** Ялған булыуы ихтимал мәғлүмәт',
 'revdelete-otherreason' => 'Башҡа/өҫтәмә сәбәп:',
 'revdelete-reasonotherlist' => 'Башҡа сәбәп',
 'revdelete-edit-reasonlist' => 'Сәбәптәр исемлеген мөхәррирләргә',
@@ -1192,7 +1204,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Көйләүҙәр',
-'mypreferences' => 'Көйләүҙәрем',
+'mypreferences' => 'Көйләүҙәр',
 'prefs-edits' => 'Төҙәтеүҙәр һаны:',
 'prefsnologin' => 'Танылмағанһығыҙ',
 'prefsnologintext' => 'Ҡатнашыусы көйләүҙәрен үҙгәртеү өсөн, һеҙ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}танылырға]</span> тейешһегеҙ.',
@@ -1255,7 +1267,7 @@ $1",
 'timezoneregion-indian' => 'Һинд океаны',
 'timezoneregion-pacific' => 'Тымыҡ океан',
 'allowemail' => 'Башҡа ҡулланыусыларҙан электрон хат алыуҙы рөхсәт итергә',
-'prefs-searchoptions' => 'Эҙләү көйләүҙәре',
+'prefs-searchoptions' => 'Эҙләү',
 'prefs-namespaces' => 'Исем арауыҡтары',
 'defaultns' => 'Юғиһә киләһе исем арауыҡтарында эҙләргә:',
 'default' => 'ғәҙәттәге',
@@ -1268,9 +1280,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' => 'Тышҡы күренештә ҡулланылған тел:',
@@ -1421,12 +1433,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' => 'Был битте уҡыу',
@@ -1469,7 +1482,7 @@ $1",
 'nchanges' => '$1 {{PLURAL:$1|үҙгәртеү|үҙгәртеү}}',
 'recentchanges' => 'Һуңғы үҙгәртеүҙәр',
 'recentchanges-legend' => 'Һуңғы үҙгәртеүҙәр көйләүҙәре',
-'recentchanges-summary' => '{{grammar:genitive|{{SITENAME}}}}. биттәрендә индерелгән һуңғы үҙгәртеүҙәр исемлеге',
+'recentchanges-summary' => 'Төрлө биттәрҙә эшләнгән һуңғы үҙгәртеүҙәр исемлеге',
 'recentchanges-feed-description' => 'Был таҫмалағы һуңғы үҙгәртеүҙәрҙе күҙәтеп барырға',
 'recentchanges-label-newpage' => 'Был үҙгәртеү яңы бит яһаны',
 'recentchanges-label-minor' => 'Был әҙ үҙгәреш',
@@ -1658,6 +1671,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 адресына яһап булманы.',
@@ -1674,7 +1688,7 @@ $1',
 'backend-fail-internal' => '$1 һаҡлағысында билдәһеҙ хата килеп сыҡты',
 'backend-fail-contenttype' => 'Файлды $1 адресына һаҡлар өсөн уның эстәлеге төрөн билдәләп булманы.',
 'backend-fail-batchsize' => 'Һаҡлағыс $1 {{PLURAL:$1|файл операцияһынан|файл операцияһынан}} бер блок алды, сикләү һаны: $2 {{PLURAL:$1|операция|операция}}.',
-'backend-fail-usable' => 'Хоҡуҡтар етмәгәнлектән йәки кәрәкле папкалар булмағанлыҡтан $1 файлын яҙып булманы.',
+'backend-fail-usable' => 'ХоҡÑ\83Ò¡Ñ\82аÑ\80 ÐµÑ\82мÓ\99гÓ\99нлекÑ\82Ó\99н Ð¹Ó\99ки ÐºÓ\99Ñ\80Ó\99кле Ð¿Ð°Ð¿ÐºÐ°Ð»Ð°Ñ\80 Ð±Ñ\83лмаÒ\93анлÑ\8bÒ¡Ñ\82ан $1 Ñ\84айлÑ\8bн Ñ\83Ò¡Ñ\8bп Ð¹Ó\99ки Ñ\8fÒ\99Ñ\8bп Ð±Ñ\83лманÑ\8b.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '"$1" мәғлүмәт базаһы журналына тоташып булманы.',
@@ -1810,6 +1824,7 @@ $1',
 'uploadnewversion-linktext' => 'Был файлдың яңы версияһын тейәргә',
 'shared-repo-from' => '$1 базаһынан',
 'shared-repo' => 'дөйөм һаҡлағыс',
+'upload-disallowed-here' => 'Һеҙ был файлды ҡабаттан яҙҙыра алмайһығыҙ.',
 
 # File reversion
 'filerevert' => '$1 өлгөһөнә ҡайтыу',
@@ -1919,6 +1934,7 @@ $1',
 # 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|өлгө|өлгө}}',
@@ -1947,6 +1963,7 @@ $1',
 'mostlinkedtemplates' => 'Иң күп һылтанма яһалған ҡалыптар',
 'mostcategories' => 'Күп категорияларға кертелгән биттәр',
 'mostimages' => 'Иң күп һылтанма яһалған рәсемдәр',
+'mostinterwikis' => 'Иң күп интервики-һылтанмалы биттәр',
 'mostrevisions' => 'Иң күп үҙгәртеү яһалған биттәр',
 'prefixindex' => 'Исемдәре башында ҡушымта торған биттәр',
 'prefixindex-namespace' => 'Префикслы бар биттәр ( $1 исемдәр арауығы)',
@@ -2046,7 +2063,7 @@ $1',
 'linksearch-ok' => 'Эҙләү',
 'linksearch-text' => '<code>*.wikipedia.org</code> һымаҡ төркөм билдәләрен ҡулланырға була.
 Кәмендә, өҫкө кимәл домен кәрәк. Мәҫәлән, <code>*.org</code><br />
¢ÐµÑ\80Ó\99клÓ\99нгÓ\99н Ð¿Ñ\80оÑ\82околдаÑ\80: <code>$1</code> (Ñ\8dÒ\99лÓ\99үегеÒ\99Ò\99Ó\99 Ð±Ñ\83лÒ\93андаÑ\80Ò\99Ñ\8bÒ£ Ð±ÐµÑ\80еһен Ð´Ó\99 Ó©Ò«Ñ\82Ó\99мÓ\99геÒ\99)',
\9cөмкин Ð±Ñ\83лÒ\93ан Ð¿Ñ\80оÑ\82околдаÑ\80: <code>$1</code> (беÑ\80 Ð¿Ñ\80оÑ\82окол Ð´Ð° ÐºÒ¯Ñ\80Ò»Ó\99Ñ\82елмÓ\99Ò»Ó\99, http:// Ò¡Ñ\83лланÑ\8bла)',
 'linksearch-line' => '$1 адресына $2 битенән һылтанма яһалған',
 'linksearch-error' => 'Төркөм билдәләре URL адрестың башында ғына ҡулланыла ала.',
 
@@ -2065,10 +2082,6 @@ $1',
 'activeusers-hidesysops' => 'Хәкимдәрҙе йәшерергә',
 'activeusers-noresult' => 'Ҡатнашыусылар табылманы',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Яңы ҡулланыусы яҙмалары',
-'newuserlogpagetext' => 'Яңы теркәлгән ҡатнашыусылар яҙмалары журналы.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ҡатнашыусылар төркөмө хоҡуҡтары',
 'listgrouprights-summary' => 'Түбәндә был вики-проектта билдәләнгән ҡатнашыусы төркөмдәре килтерелгән һәм уларҙың хоҡуҡтары күрһәтелгән.
@@ -2092,8 +2105,10 @@ $1',
 'mailnologin' => 'Хат ебәреү өсөн адрес юҡ',
 'mailnologintext' => 'Башҡа ҡатнашыусыларға хат ебәреү өсөн, һеҙ [[Special:UserLogin|танылырға]] һәм [[Special:Preferences|көйләүҙәрегеҙҙә]] ысын электрон адрес почтаһы кереткән булырға тейешһегеҙ.',
 'emailuser' => 'Ҡатнашыусыға хат',
+'emailuser-title-target' => '{{GENDER:$1|Ҡатнашыусыға}} хат яҙыу',
+'emailuser-title-notarget' => 'Ҡатнашыусыға хат',
 'emailpage' => 'Ҡатнашыусыға хат',
-'emailpagetext' => 'Был ҡатнашыусыға электрон почта аша хат ебәреү өсөн, һеҙ түбәндәге форманы ҡуллана алаһығыҙ.
+'emailpagetext' => 'Был {{GENDER:$1|ҡатнашыусы}} электрон почта аша хат ебәреү өсөн, һеҙ түбәндәге форманы ҡуллана алаһығыҙ.
 Яуап өсөн адрес булараҡ һеҙ [[Special:Preferences|көйләүҙәрегеҙҙә]] күрһәткән электрон почта адресы күрһәтеләсәк, шулай итеп, хатты алыусы һеҙгә тура яуап ебәрә аласаҡ.',
 'usermailererror' => 'Хат ебәргән ваҡытта хата килеп сыҡты:',
 'defemailsubject' => '{{SITENAME}} — $1 ҡулланыусыһынан хат',
@@ -2132,8 +2147,8 @@ $1',
 'watchnologin' => 'Үҙегеҙҙе танытырға кәрәк',
 'watchnologintext' => 'Күҙәтеү исемлегегеҙҙе мөхәррирләү өсөн, һеҙгә [[Special:UserLogin|танылырға]] кәрәк.',
 'addwatch' => 'Күҙәтеү исемлегенә өҫтәргә',
-'addedwatchtext' => "\"[[:\$1]]\" бите [[Special:Watchlist|күҙәтеү исемлегегеҙгә]] өҫтәлде.
-Был биттә һәм уның фекер алышыу битендә бөтә буласаҡ үҙгәртеүҙәр исемлектә һәм [[Special:RecentChanges|һуңғы үҙгәртеүҙәр]] исемлегендә уларҙы еңелерәк табыу өсөн '''ҡалын яҙыу''' менән күрһәтеләсәк.",
+'addedwatchtext' => '"[[:$1]]" бите [[Special:Watchlist|күҙәтеү исемлегегеҙгә]] өҫтәлде.
+Был биттә һәм уның фекер алышыу битендә буласаҡ бар үҙгәртеүҙәр ундағы исемлектә күрһәтеләсәк.',
 'removewatch' => 'Күҙәтеү исемлегенән сығарырға',
 'removedwatchtext' => '«[[:$1]]» бите [[Special:Watchlist|күҙәтеү исемлегегеҙҙән]] сығарылды.',
 'watch' => 'Күҙәтергә',
@@ -2161,25 +2176,29 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} проектының белдереү хеҙмәте',
 'enotif_reset' => 'Бөтә биттәрҙе ҡаралған тип билдәләргә',
-'enotif_newpagetext' => 'Был яңы бит.',
 'enotif_impersonal_salutation' => '{{SITENAME}} проектының ҡатнашыусыһы',
-'changed' => 'үҙгәртелгән',
-'created' => 'булдырылды',
-'enotif_subject' => '{{SITENAME}} проектының $PAGETITLE бите $PAGEEDITOR тарафынан $CHANGEDORCREATED',
+'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
+Мөхәррирләү аңлатмаһы: $PAGESUMMARY $PAGEMINOREDIT
 
 Үҙгәртеүсе менән бәйләнеш өсөн:
-эл. почта: $PAGEEDITOR_EMAIL
²Ð¸ÐºÐ¸: $PAGEEDITOR_WIKI
+Эл. почта адресы: $PAGEEDITOR_EMAIL
\92ики Ð±Ð¸Ñ\82е: $PAGEEDITOR_WIKI
 
 Әгәр һеҙ был битте ҡарамаһағыҙ, бынан һуң буласаҡ үҙгәртеүҙәр тураһында белдереү алмаясаҡһығыҙ. 
 Һеҙ шулай уҡ күҙәтеү исемлегегеҙҙәге бар биттәр өсөн белдереү көйләүен һүндерә алаһығыҙ.
@@ -2190,14 +2209,16 @@ $NEWPAGE
 Электрон почта белдереүҙәрен көйләү өсөн:
 {{canonicalurl:{{#special:Preferences}}}}
 
-Күҙәтеү исемлеге көйләүҙәрен үҙгәртергә:
+Күҙәтеү исемлеге көйләүҙәрен үҙгәртер өсөн:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Битте һеҙҙең күҙәтеү исемлегенән юйырға
+Битте һеҙҙең күҙәтеү исемлегенән юйыр өсөн:
 $UNWATCHURL
 
 Кире бәйләнеш һәм ярҙам:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'булдырылды',
+'changed' => 'үҙгәртелгән',
 
 # Delete
 'deletepage' => 'Битте юйырға',
@@ -2351,8 +2372,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|юйыу яҙмалары журналын]] ҡарағыҙ.",
@@ -2384,9 +2405,9 @@ $1',
 'blanknamespace' => '(Төп)',
 
 # Contributions
-'contributions' => 'Ҡатнашыусы өлөшө',
+'contributions' => '{{GENDER:$1|Ҡатнашыусы}} өлөшө',
 'contributions-title' => '$1 исемле ҡулланыусының кереткән өлөшө',
-'mycontris' => 'Башҡарған эштәр',
+'mycontris' => 'Өлөш',
 'contribsub2' => '$1 ($2) өсөн',
 'nocontribs' => 'Күрһәтелгән шарттарға яуап биргән үҙгәртеүҙәр табылманы.',
 'uctop' => '(аҙаҡҡы)',
@@ -2427,7 +2448,7 @@ $1',
 'whatlinkshere-hideredirs' => 'Йүнәлтеүҙәрҙе $1',
 'whatlinkshere-hidetrans' => 'Ҡушылғандарҙы $1',
 'whatlinkshere-hidelinks' => 'Һылтанмаларҙы $1',
-'whatlinkshere-hideimages' => 'Рәсем өсөн һылтанматарҙы $1',
+'whatlinkshere-hideimages' => 'файл һылтанмаларын $1',
 'whatlinkshere-filters' => 'Һайлау',
 
 # Block/unblock
@@ -2662,6 +2683,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 +2760,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 +2796,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' => 'Тейәү яҙмалары журналы',
@@ -2891,12 +2918,43 @@ The wiki server cannot provide data in a format your client can read.',
 
 # 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-robot-index' => 'Индекслана',
+'pageinfo-robot-noindex' => 'Индексланмай',
 'pageinfo-views' => 'Ҡарау һаны',
-'pageinfo-watchers' => 'Күҙәтеүселәр һаны',
-'pageinfo-edits' => 'Төҙәтеү һаны',
+'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-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' => 'Йүнәлтеү',
+'pageinfo-redirectsto-info' => 'мәғлүмәт',
+'pageinfo-contentpage' => 'Эстәлек бите тип иҫәпләнә',
+'pageinfo-contentpage-yes' => 'Эйе',
+'pageinfo-protect-cascading' => 'Бынан башлап һикәлтәле һаҡлау',
+'pageinfo-protect-cascading-yes' => 'Эйе',
+'pageinfo-protect-cascading-from' => 'Бынан башлап һикәлтәле һаҡлау',
 
 # Skin names
 'skinname-standard' => 'Классик',
@@ -2917,6 +2975,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' => 'Тикшереү яҙмалары журналы',
@@ -2949,6 +3009,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.',
@@ -2958,6 +3020,9 @@ $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' => 'Яңы файлдар йыйылмаһы',
@@ -2977,6 +3042,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 сәғәт|$1 сәғәт}}',
 'days' => '{{PLURAL:$1|$1 көн|$1 көн}}',
 'ago' => '$1 элек',
+'just-now' => 'яңы ғына',
 
 # Bad image list
 'bad_image_list' => 'Формат киләһе рәүештә булырға тейеш:
@@ -3426,16 +3492,16 @@ $1',
 'confirmemail_loggedin' => 'Һеҙҙең электрон почта адресығыҙ раҫланды.',
 'confirmemail_error' => 'Электрон почта адресын раҫлаған ваҡытта хата килеп сыҡты.',
 'confirmemail_subject' => '{{SITENAME}} электрон почта адресын раҫлау',
-'confirmemail_body' => 'Кемдер, бәлки һеҙҙер, $1 IP адресынан 
-{{SITENAME}}  проектында ошо электрон почта адресы менән "$2" иҫәп яҙмаһын теркәгән.
+'confirmemail_body' => 'Кемдер, бәлки һеҙҙер, $1 IP адресынан {{SITENAME}} проектында 
+ошо электрон почта адресы менән "$2" иҫәп яҙмаһын теркәгән.
 
-Был иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау өсөн һәм
-{{SITENAME}} проектында элетрон почта мөмкинлектәрен тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ:
+Был иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау өсөн һәм {{SITENAME}} проектында электрон почта 
+мөмкинлектәрен тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ:
 
 $3
 
-Әгәр һеҙ иҫәп яҙмаһын *булдырмағанһығыҙ* икән,
-электрон почта адресын раҫлауҙы үтҡәрмәү өсөн т үбәндәге һылтанманы асығыҙ:
+Әгәр һеҙ иҫәп яҙмаһын *булдырмағанһығыҙ* икән, электрон почта 
+адресын раҫлауҙы үткәрмәү өсөн түбәндәге һылтанманы асығыҙ:
 
 $5
 
@@ -3444,12 +3510,12 @@ $5
 {{SITENAME}}  проектында "$2" иҫәп яҙмаһының электрон почта адресын ошо адресҡа үҙгәрткән.
 
 Был иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау өсөн һәм
-{{SITENAME}} проектында элетрон почта мөмкинлектәрен яңынан тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ:
+{{SITENAME}} проектында электрон почта мөмкинлектәрен яңынан тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ:
 
 $3
 
 Әгәр һеҙ иҫәп яҙмаһын *булдырмағанһығыҙ* икән,
-электрон почта адресын раҫлауҙы үтҡәрмәү өсөн т үбәндәге һылтанманы асығыҙ:
+электрон почта адресын раҫлауҙы үткәрмәү өсөн түбәндәге һылтанманы асығыҙ:
 
 $5
 
@@ -3458,12 +3524,12 @@ $5
 {{SITENAME}}  проектында "$2" иҫәп яҙмаһының электрон почта адресын ошо адрес итеп билдәләгән.
 
 Был иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау өсөн һәм
-{{SITENAME}} проектында элетрон почта мөмкинлектәрен яңынан тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ:
+{{SITENAME}} проектында электрон почта мөмкинлектәрен яңынан тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ:
 
 $3
 
 Әгәр иҫәп яҙмаһы һеҙҙеке *түгел* икән,
-электрон почта адресын раҫлауҙы үтҡәрмәү өсөн т үбәндәге һылтанманы асығыҙ:
+электрон почта адресын раҫлауҙы үткәрмәү өсөн түбәндәге һылтанманы асығыҙ:
 
 $5
 
@@ -3474,6 +3540,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[Интервики индереү мөмкинлеге һүндерелгән]',
 'scarytranscludefailed' => '[$1 ҡалыбына мөрәжәғәт итеү хатаһы]',
+'scarytranscludefailed-httpstatus' => '[$1 өсөн ҡалып алып булманы: HTTP $2]',
 'scarytranscludetoolong' => '[URL адрес бигерәк оҙон]',
 
 # Delete conflict
@@ -3558,7 +3625,7 @@ $5
 'watchlisttools-raw' => 'Текст һымаҡ үҙгәртеү',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|фекер алышыу]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|әңгәмә]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'Билдәһеҙ "$1" киңәйтеү тегы',
@@ -3584,6 +3651,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 рөхсәтнамәһе тураһында уҡығыҙ.
@@ -3724,11 +3792,15 @@ 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 автоматик рәүештә $2 икән, $3 ителде.',
+'rightsnone' => '(юҡ)',
 
 # Feedback
 'feedback-bugornote' => 'Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].
index ac4f2d5..db8921a 100644 (file)
@@ -25,7 +25,7 @@ $fallback = 'de';
 $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',
@@ -81,85 +81,85 @@ $messages = array(
 'editfont-serif' => 'Schrift mid Serifen',
 
 # Dates
-'sunday' => 'Sunndog',
+'sunday' => 'Sundog',
 'monday' => 'Mondog',
 'tuesday' => 'Deansdog',
 'wednesday' => 'Midwoch',
-'thursday' => 'Dunnersdog',
+'thursday' => 'Dunasdog',
 'friday' => 'Freidog',
-'saturday' => 'Såmsdog',
+'saturday' => 'Samsdog',
 'sun' => 'Su',
 'mon' => 'Mo',
 'tue' => 'De',
 'wed' => 'Mi',
 'thu' => 'Du',
 'fri' => 'Fr',
-'sat' => 'Så',
-'january' => 'Jänner',
+'sat' => 'Sa',
+'january' => 'Jenna',
 'february' => 'Feba',
-'march' => 'März',
-'april' => 'Aprü',
+'march' => 'Meaz',
+'april' => 'Aprui',
 'may_long' => 'Mai',
 'june' => 'Juni',
 'july' => 'Juli',
 'august' => 'August',
-'september' => 'September',
+'september' => 'Septemba',
 'october' => 'Oktoba',
 'november' => 'Novemba',
-'december' => 'Dezember',
-'january-gen' => 'Jänner',
-'february-gen' => 'Feewer',
-'march-gen' => 'März',
-'april-gen' => 'Aprü',
+'december' => 'Dezemba',
+'january-gen' => 'Jenna',
+'february-gen' => 'Feba',
+'march-gen' => 'Meaz',
+'april-gen' => 'Aprui',
 'may-gen' => 'Mai',
 'june-gen' => 'Juni',
 'july-gen' => 'Juli',
 'august-gen' => 'August',
-'september-gen' => 'September',
-'october-gen' => 'Oktower',
-'november-gen' => 'November',
-'december-gen' => 'Dezember',
-'jan' => 'Jän.',
-'feb' => 'Few.',
-'mar' => 'Mär.',
+'september-gen' => 'Septemba',
+'october-gen' => 'Oktoba',
+'november-gen' => 'Novemba',
+'december-gen' => 'Dezemba',
+'jan' => 'Jen.',
+'feb' => 'Feb.',
+'mar' => 'Mea.',
 'apr' => 'Apr.',
 'may' => 'Mai',
 'jun' => 'Jun.',
 'jul' => 'Jul.',
 'aug' => 'Aug.',
 'sep' => 'Sep.',
-'oct' => 'Ókt.',
-'nov' => 'Nóv.',
+'oct' => 'Okt.',
+'nov' => 'Nov.',
 'dec' => 'Dez.',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategorie|Kategorien}}',
-'category_header' => 'Seiten in da Kategorie „$1“',
-'subcategories' => 'Unterkategorien',
+'pagecategories' => '{{PLURAL:$1|Kategorie|Kategorina}}',
+'category_header' => 'Seitn in da Kategorie „$1“',
+'subcategories' => 'Untakategorina',
 'category-media-header' => 'Medien in da Kategorie „$1“',
-'category-empty' => "''De Kategorie enthoit im Moment koane Seiten und koane Medien ned.''",
-'hidden-categories' => '{{PLURAL:$1|Vasteckte Kategorie|Vasteckte Kategorien}}',
+'category-empty' => "''De Kategorie enthoit im Moment koane Seitn und koane Medien ned.''",
+'hidden-categories' => '{{PLURAL:$1|Vasteckte Kategorie|Vasteckte Kategorina}}',
 'hidden-category-category' => 'Vasteckte Kategorie',
-'category-subcat-count' => '{{PLURAL:$2|De Kategorie enthoit netter de foigande Unterkategorie:|{{PLURAL:$1|De foigande Unterkategorie is oane voh insgsåmt $2 Unterkategorien in derer Kategorie:|Voh insgsåmt $2 Unterkategorien in derer Kategorie wern $1 åzoagt:}}}}',
+'category-subcat-count' => '{{PLURAL:$2|De Kategorie enthoit nua de foigande Untakategorie:|{{PLURAL:$1|De foigande Untakategorie is oane vo insgsamt $2 Untakategorina in dea Kategorie:|Vo insgsamt $2 Untakategorina in dea Kategoriewean $1 zoagt:}}}}',
 'category-subcat-count-limited' => 'In de Kategorie {{PLURAL:$1|is de foigande Unterkategorie|san de foiganden Unterkategorien}} eihsortird:',
-'category-article-count' => '{{PLURAL:$2|De Kategorie enthoit foigernde Seiten:|{{PLURAL:$1|Foigernde Seiten is aane voh insgsåmt $2 Seiten in derer Kategorie:|Es wern $1 voh insgsåmt $2 Seiten in derer Kategorie åzaagt:}}}}',
+'category-article-count' => '{{PLURAL:$2|De Kategorie enthoit foigande Seitn:|{{PLURAL:$1|Foigande Seitn is oane vo insgsamt $2 Seitn in dear Kategorie:|Es wern $1 voh insgsamt $2 Seitn in dea Kategorie zoagt:}}}}',
 'category-article-count-limited' => 'De {{PLURAL:$1|foigande Seiten is|foiganden $1 Seiten san}} in derer Kategorie enthoiden:',
-'category-file-count' => '{{PLURAL:$2|Dé Kategorie enthoit fóigernde Daatei:|{{PLURAL:$1|Fóigernde Daatei is oane voh insgsåmmt $2 Daatein in derer Kategorie:|Es wern $1 voh insgsåmt $2 Daatein in derer Kategorie åzoagt:}}}}',
+'category-file-count' => '{{PLURAL:$2|De Kategorie enthoid foigende Datei:|{{PLURAL:$1|Foigende Datei is oane vo insgsamt $2 Datein in dera Kategorie:|Es wean $1 von insgsamt $2 Datein in dera Kategorie ozoagt:}}}}',
 'category-file-count-limited' => "{{PLURAL:$1|D' foingde Datei is|De foingden $1 Datein san}} in de Kategorie eisortird:",
-'listingcontinuesabbrev' => '(Furtsétzung)',
+'listingcontinuesabbrev' => '(Fortsetzung)',
 'index-category' => 'Indizirde Seiten',
-'noindex-category' => 'Néd-indizirde Seiten',
+'noindex-category' => 'Ned-indiziade Seitn',
 'broken-file-category' => 'Seiten mid kaputte Daateilinks',
 
 'about' => 'Iba',
 'article' => 'Artike',
-'newwindow' => '(werd in am neichen Fenster aufgmocht)',
-'cancel' => 'Obbrecher',
+'newwindow' => '(wean in an neichn Fensta afgmocht)',
+'cancel' => 'Obbrecha',
 'moredotdotdot' => 'Merer',
 'mypage' => 'Eigerne Seiten',
 'mytalk' => 'Mei Dischkurs',
 'anontalk' => 'Dischkrirseiten voh derer IP-Adress',
-'navigation' => 'Navigazión',
+'navigation' => 'Navigation',
 'and' => '&#32;und',
 
 # Cologne Blue skin
@@ -169,63 +169,63 @@ $messages = array(
 'qbpageoptions' => 'Seitenopzionen',
 'qbmyoptions' => 'Meine Seiten',
 'qbspecialpages' => 'Speziaalseiten',
-'faq' => 'Heiffige Frong',
+'faq' => 'Oft gstejte Frong',
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-addsection' => 'Obschnit dazuafyng',
-'vector-action-delete' => 'Leschen',
-'vector-action-move' => 'Vaschiam',
+'vector-action-addsection' => 'An Obschnitt dazua doa',
+'vector-action-delete' => 'Leschn',
+'vector-action-move' => 'Vaschiabm',
 'vector-action-protect' => 'Schitzn',
 'vector-action-undelete' => 'Wiederherstön',
 'vector-action-unprotect' => 'freigeem',
 'vector-simplesearch-preference' => 'Daweiterte Suachvurschläg aktivirn (netter Vector)',
-'vector-view-create' => 'Erstön',
-'vector-view-edit' => 'Werkeln',
-'vector-view-history' => 'Versiónsgschicht',
-'vector-view-view' => 'Leesen',
+'vector-view-create' => 'Aufbaun',
+'vector-view-edit' => 'Werkln',
+'vector-view-history' => 'Gschicht oschaugn',
+'vector-view-view' => 'Lesn',
 'vector-view-viewsource' => 'Quejtext ozoagn',
-'actions' => 'Akziónen',
+'actions' => 'Aktiona',
 'namespaces' => 'Namasramm',
-'variants' => 'Varianten',
+'variants' => 'Variantn',
 
-'errorpagetitle' => 'Feeler',
-'returnto' => 'Zruck zua da Seiten $1.',
+'errorpagetitle' => 'Fehla',
+'returnto' => 'Zruck za da Seitn $1.',
 'tagline' => 'Aus {{SITENAME}}',
-'help' => 'Hüf und Frong?',
+'help' => 'Huif',
 'search' => 'Suach',
-'searchbutton' => 'Suachen',
+'searchbutton' => 'Suacha',
 'go' => 'Ausfyrn',
-'searcharticle' => 'Artiké',
-'history' => 'Versiónen',
-'history_short' => 'Versionen/Autorn',
+'searcharticle' => 'Artikl',
+'history' => 'Versiona',
+'history_short' => 'Gschicht oschaugn',
 'updatedmarker' => '(gänderd)',
 'printableversion' => 'Druckversion',
-'permalink' => 'Permanenter Link',
+'permalink' => 'Permanenta Link',
 'print' => 'Drucken',
 'view' => 'Leesen',
-'edit' => 'werkeln',
-'create' => 'Erstön',
+'edit' => 'Werkln',
+'create' => 'Aufbaun',
 'editthispage' => 'Seiten beorweiten',
 'create-this-page' => 'Seiten erstön',
-'delete' => 'léschen',
+'delete' => 'Leschn',
 'deletethispage' => 'De Seiten leschen',
 'undelete_short' => '{{PLURAL:$1|1 Version|$1 Versionen}} wiederherstön',
 'viewdeleted_short' => '{{PLURAL:$1|Oah geléschde Versión|$1 geléschde Versiónen}} åschauh',
-'protect' => 'Schytzen',
-'protect_change' => 'ändern',
+'protect' => 'Schitzn',
+'protect_change' => 'endan',
 'protectthispage' => 'Seiten schytzen',
 'unprotect' => 'freigeem',
 'unprotectthispage' => 'Seitenschutz ändern',
-'newpage' => 'Neiche Seiten',
+'newpage' => 'Neiche Seitn',
 'talkpage' => 'De Seiten bsprecher',
 'talkpagelinktext' => 'Dischkrian',
 'specialpage' => 'Speziaalseiten',
-'personaltools' => 'Persénlichs Werkzeig',
+'personaltools' => 'Mei Werkzeig',
 'postcomment' => 'Neicher Obschnit',
 'articlepage' => 'Seiteninhoid åzoang',
 'talk' => 'Dischkrian',
-'views' => 'Åsichten',
+'views' => 'Osichtn',
 'toolbox' => 'Werkzeigkisten',
 'userpage' => 'Benutzerseiten',
 'projectpage' => 'Projektseiten åzoang',
@@ -235,14 +235,14 @@ $messages = array(
 'viewhelppage' => 'Hüfeseiten åzoang',
 'categorypage' => 'Kategorieseiten åzoang',
 'viewtalkpage' => 'Diskussion',
-'otherlanguages' => 'Ånderne Sproochen',
-'redirectedfrom' => '(Weidergloatt voh $1)',
+'otherlanguages' => 'Andane Sprochn',
+'redirectedfrom' => '(Weidagloadt vo $1)',
 'redirectpagesub' => 'Weiderloatung',
-'lastmodifiedat' => 'Dé Seiten is zlétzd am $1 um $2 gänderd worn.',
+'lastmodifiedat' => 'De Seitn is zletzt am $1 um $2 gendad worn.',
 'viewcount' => 'Dé Seiten do is bis iatz {{PLURAL:$1|oahmoi|$1-moi}} obgruaffm worn.',
 'protectedpage' => 'Gschytzde Seiten',
-'jumpto' => 'Wexeln zua:',
-'jumptonavigation' => 'Navigazión',
+'jumpto' => 'Wexln za:',
+'jumptonavigation' => 'Navigation',
 'jumptosearch' => 'Suach',
 'view-pool-error' => "Tschuidige, dé Server san im Moment ywerlostt.
 Zvü Leid vasuachen, dé Seiten do z' bsuachen.
@@ -255,23 +255,23 @@ $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' => 'Iba {{SITENAME}}',
-'aboutpage' => 'Project:Ywer',
+'aboutpage' => 'Project:Iba',
 'copyright' => 'Da Inhoid is unter da $1 vafiagbor.',
-'copyrightpage' => '{{ns:project}}:Urheewerrechte',
+'copyrightpage' => '{{ns:project}}:Urhebarecht',
 'currentevents' => 'Aktuelle Ereigniss',
 'currentevents-url' => 'Project:Aktuelle Ereigniss',
 'disclaimers' => 'Impressum',
 'disclaimerpage' => 'Project:Impressum',
-'edithelp' => 'Beorweitungshüfm',
-'edithelppage' => 'Help:Beorweitungshüfm',
+'edithelp' => 'Huif fias Werkln',
+'edithelppage' => 'Help:Werkln',
 'helppage' => 'Help:Inhoidsvazeichnis',
 'mainpage' => 'Hoamseitn',
-'mainpage-description' => 'Hauptseiten',
+'mainpage-description' => 'Hoamseitn',
 'policy-url' => 'Project:Richtlinien',
 'portal' => 'Autornportal',
 'portal-url' => 'Project:Autornportal',
-'privacy' => 'Daatenschutz',
-'privacypage' => 'Project:Daatenschutz',
+'privacy' => 'Datnschutz',
+'privacypage' => 'Project:Datnschutz',
 
 'badaccess' => 'Koane ausreichenden Rechtt',
 'badaccess-group0' => "Du host néd d' daforderliche Berechtigung fyr dé Akzión do.",
@@ -282,17 +282,17 @@ $1",
 Schaug auf [[Special:Version|Versiónsseiten]]",
 
 'ok' => 'Passt',
-'retrievedfrom' => 'Voh „$1“',
+'retrievedfrom' => 'Vh „$1“',
 'youhavenewmessages' => 'Du host $1 ($2).',
 'newmessageslink' => 'neiche Nochrichtn',
 'newmessagesdifflink' => 'Letzte Endarung',
 'youhavenewmessagesmulti' => 'Du host neiche Nochrichtn: $1',
 'editsection' => 'Werkln',
-'editold' => 'werkeln',
-'viewsourceold' => 'Quötext åzoang',
+'editold' => 'Werkln',
+'viewsourceold' => 'Quejtext ozoagn',
 'editlink' => 'werkln',
-'viewsourcelink' => 'an Quötext åschauh',
-'editsectionhint' => 'Obschnit beorweiden: $1',
+'viewsourcelink' => 'In Quejtext ozoagn',
+'editsectionhint' => 'Obschnitt beorbatn: $1',
 'toc' => 'Inhoidsvazeichnis',
 'showtoc' => 'Åzoang',
 'hidetoc' => 'vastecken',
@@ -305,22 +305,22 @@ Schaug auf [[Special:Version|Versiónsseiten]]",
 'feed-invalid' => 'Néd gütiger Feed-Abonnement-Typ.',
 'feed-unavailable' => 'Es steengern koane Feeds zur Vafiagung.',
 'site-rss-feed' => 'RSS-Feed fyr $1',
-'site-atom-feed' => 'Atom-Feed fyr $1',
+'site-atom-feed' => 'Atom-Feed fia $1',
 'page-rss-feed' => 'RSS-Feed fyr „$1“',
-'page-atom-feed' => 'Atom-Feed fyr „$1“',
+'page-atom-feed' => 'Atom-Feed fia „$1“',
 'red-link-title' => '$1 (de Seitn gibts ned)',
 'sort-descending' => 'Obsteigend sortiern',
 'sort-ascending' => 'Aufsteigend sortiern',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Seiten',
-'nstab-user' => 'Benutzerseiten',
+'nstab-main' => 'Seitn',
+'nstab-user' => 'Nutzaseitn',
 'nstab-media' => 'Meedienseiten',
 'nstab-special' => 'Spezialseitn',
-'nstab-project' => 'Projektseiten',
-'nstab-image' => 'Daatei',
+'nstab-project' => 'Projektseitn',
+'nstab-image' => 'Datei',
 'nstab-mediawiki' => 'Systémnoochricht',
-'nstab-template' => 'Vurlog',
+'nstab-template' => 'Vorlog',
 'nstab-help' => 'Hüfeseiten',
 'nstab-category' => 'Kategorie',
 
@@ -352,12 +352,12 @@ De Daatenbånk möidt 'n Feeler: „<tt>$3: $4</tt>“.",
 'readonlytext' => 'De Daatenbånk is vurywergeehend fyr Neieihtreeg und Änderrungen gsperrd. Bittschee vasuchs spaader nuamoi.
 
 Grund voh da Sperrung: $1',
-'missing-article' => 'Der Text voh „$1“ $2 is néd in da Daatenbånk gfunden worn.
+'missing-article' => 'Da Text vo „$1“ $2 is in da Daatenbank ned gfundn worn.
 
-Dé Seiten is méglicherweis gléschd óder vaschóm worn.
+De Seitn is meglicherwei gleschd oda vaschobm worn.
 
-Fois dés néd zuadrifft, host eventuö an Feeler in da Software gfunden. Bittscheh möd dés am [[Special:ListUsers/sysop|Administraator]] unter da Nennung voh da URL.',
-'missingarticle-rev' => '(Versiónsnummer: $1)',
+Fois des ned zuatrifft, hosd eventuell an Fehla im Programm gfundn. Bittschee informia an [[Special:ListUsers/sysop|Administrator]] und nenn eam de URL.',
+'missingarticle-rev' => '(Versionsnumma: $1)',
 'missingarticle-diff' => '(Unterschiad zwischen Versionen: $1, $2)',
 'readonly_lag' => "De Daatenbånk is automaatisch fyr Schraibzuagriff gsperrt, damid se d' vatailten Daatenbånkserver (slaves) mim Hauptdaatenbånkserver (master) obglaichen kennan.",
 'internalerror' => 'Interner Feeler',
@@ -376,8 +376,8 @@ Fois dés néd zuadrifft, host eventuö an Feeler in da Software gfunden. Bittsc
 'cannotdelete' => 'Dé Seiten óder Daatei "$1" kå néd gléschd wern.
 Méglicherweis iss schoh vohram åndern gléschd worn.',
 'cannotdelete-title' => 'Seiten „$1“ kå néd gléschd wern',
-'badtitle' => 'néd gütiger Titel',
-'badtitletext' => 'Da Titel voh da ågforderden Seiten is néd gütig, laar óder a ungütiger Sproochlink vohram åndern Wiki.',
+'badtitle' => 'koa gitiga Titl',
+'badtitletext' => 'Da Titl voh da ogfordatn Seitn is ned gitig, laar oda a ungitiga Sprochlink vonam andan Wiki.',
 'perfcached' => "Dé fóigernden Daaten staummern aus'm Cache und san méglicherweis nimmer aktuö. Maximoi {{PLURAL:$1|oah Ergebnis is|$1 Ergebniss san}} im Cache vafiagbor.",
 'perfcachedts' => "Dé Daaten staummern aus 'm Cache. Da Zeidbunkt voh da létzden Aktualisiarung: $1. Maximoi {{PLURAL:$4|oah Ergebnis is|$4 Ergebniss san}} im Cache vafiagbor.",
 'querypage-no-updates' => "'''Dé Aktualisiarungsfunkzión voh derer Seiten is derzeid deaktivird. Dé Daaten wern bis auf Weiders néd daneiert.'''",
@@ -415,31 +415,27 @@ $2",
 
 Du kåst {{SITENAME}} iatzerd anónym weiderdoah, óder di danaid unterm söwing óder am åndern Benutzernåm <span class='plainlinks'>[$1 åmöden]</span>.
 Beochtt ower, daas oanige Seiten noh åzoang kennern, daas du ågmödt bist, sólång du néd deih Browsercache glaard host.",
-'welcomecreation' => '== Servas, $1! ==
-
-Deih Benutzerkontó is grood eihgrichtt worn.
-Vagiss bittscheh néd, deine [[Special:Preferences|{{SITENAME}}-Eishtellungen]] åzpassen',
-'yourname' => 'Benutzernåm:',
-'yourpassword' => 'Posswort:',
-'yourpasswordagain' => 'Posswort nóamoi',
-'remembermypassword' => 'Mid dém Browser dauerhoft ågmödt bleim (maximoi $1 {{PLURAL:$1|Dog|Dog}})',
+'yourname' => 'Nutzanama:',
+'yourpassword' => 'Passwort:',
+'yourpasswordagain' => 'Es Passwort no amoi eigebm',
+'remembermypassword' => 'Mitm Brausa dauahoft ogmejd bleibm (maximoi $1 {{PLURAL:$1|Dog|Dog}})',
 'securelogin-stick-https' => "Noch'm Auhmöden mid HTTPS vabunden bleim",
 'yourdomainname' => 'Eanerne Domain:',
 'externaldberror' => 'Entweder es ligt a Feeler bai da externen Authentifiziarung vur oder du derfst dai externs Benytzerkonto ned aktualisirn.',
-'login' => 'Åmöden',
-'nav-login-createaccount' => 'Åmöden / Kóntó erstön',
-'loginprompt' => 'Zur Åmödung miassen Cookies aktivird seih.',
-'userlogin' => 'Åmöden / Kontó erstön',
+'login' => 'Eilogga',
+'nav-login-createaccount' => 'Eilogga / Konto olegn',
+'loginprompt' => 'Zua Omejdung miassen Cookies aktiviat sei.',
+'userlogin' => 'Eilogga / Konto olegn',
 'userloginnocreate' => 'Åmöden',
 'logout' => 'Obmöden',
 'userlogout' => 'Auslogga',
 'notloggedin' => 'Ned ågmödt',
-'nologin' => "Du host koah Benutzerkóntó? '''$1'''.",
-'nologinlink' => 'A neichs Benutzerkontó erstön',
-'createaccount' => 'Benutzerkóntó åléng',
-'gotaccount' => "Du host schoh a Benutzerkonto? '''$1'''.",
-'gotaccountlink' => 'Åmöden',
-'userlogin-resetlink' => "Host d' Åmödedaaten vagessen?",
+'nologin' => "Du host koa Nutzakonto? '''$1'''.",
+'nologinlink' => 'A neichs Nutzakonto olegn',
+'createaccount' => 'Nutzakonto olegn',
+'gotaccount' => "Hosd scho a Nutzakonto? '''$1'''.",
+'gotaccountlink' => 'Omejdn',
+'userlogin-resetlink' => 'Hosd de Datn zan Eilogga vagessn?',
 'createaccountmail' => 'per E-Mail',
 'createaccountreason' => 'Grund',
 'badretype' => 'De zwoa Posswerter stimmer ned ywereih.',
@@ -455,13 +451,13 @@ Es muass sichergstöd seih, daas Cookies aktivierd san. Danoch bittscheh d' Seit
 'loginsuccess' => 'Du bist jetzad ois „$1“ bai {{SITENAME}} ågmöidt.',
 'wrongpassword' => 'Des Posswort is foisch! Bitschee prowirs nuamoi.',
 'wrongpasswordempty' => 'Es is koa Posswort ned aigeem worn. Bittschee prowirs nuamoi.',
-'mailmypassword' => 'Neichs Posswort zuaschicken',
+'mailmypassword' => 'Neichs Passwort zuaschicka',
 'passwordremindertitle' => 'Naichs Posswort fyra {{SITENAME}}-Benytzerkonto',
 'acct_creation_throttle_hit' => 'Du host scho $1 {{PLURAL:$1|Benytzerkonto|Benytzerkonten}} und kååst jetzad koane mer åleeng.',
 'emailconfirmlink' => 'E-Póst-Adressen bstäting (Authentifiziarung)',
 'accountcreated' => 'Benytzerkonto is erstöid worn',
 'accountcreatedtext' => "'s Benytzerkonto $1 is aigrichtt worn.",
-'loginlanguagelabel' => 'Sprooch: $1',
+'loginlanguagelabel' => 'Sproch: $1',
 
 # Change password dialog
 'resetpass' => 'Posswort ändern',
@@ -477,33 +473,34 @@ Es muass sichergstöd seih, daas Cookies aktivierd san. Danoch bittscheh d' Seit
 'passwordreset-username' => 'Benutzernåm:',
 
 # Edit page toolbar
-'bold_sample' => 'Fetter Text',
-'bold_tip' => 'Fetter Text',
-'italic_sample' => 'Kursiaver Text',
-'italic_tip' => 'Kursiaver Text',
+'bold_sample' => 'Fetta Text',
+'bold_tip' => 'Fetta Text',
+'italic_sample' => 'Kursiva Text',
+'italic_tip' => 'Kursiva Text',
 'link_sample' => 'Link-Text',
-'link_tip' => 'Interner Link',
+'link_tip' => 'Interna Link',
 'extlink_sample' => 'http://www.example.com Link-Text',
-'extlink_tip' => 'Externer Link (http:// beochten)',
-'headline_sample' => 'Ywerschrift auf da zwoaten Ewene',
-'headline_tip' => 'Ewene-2-Ywerschrift',
-'nowiki_sample' => 'Dén néd-formatirden Text dodan eihfiang',
-'nowiki_tip' => 'Ned-formatirder Text',
-'image_tip' => 'Daateilink',
-'media_tip' => 'Meediendaatei-Link',
-'sig_tip' => 'Deih Unterschrift mid Zeidstempe',
-'hr_tip' => 'Woogrechte Linie (sporsåm vawenden)',
+'extlink_tip' => 'Externa Link (http:// beochtn)',
+'headline_sample' => 'Ibaschrift Text',
+'headline_tip' => 'Ebane-2-Ibaschrift',
+'nowiki_sample' => 'Nedformatiadn Text do eibaun',
+'nowiki_tip' => 'Wiki-Format ignorian',
+'image_tip' => 'Dateilink',
+'media_tip' => 'Datei-Link',
+'sig_tip' => 'Dei Untaschrift mit Zeitstempe',
+'hr_tip' => 'Wogrechte Linie (sporsam vawendn)',
 
 # Edit pages
-'summary' => 'Zåmmfossung:',
+'summary' => 'Zammfossung:',
 'subject' => 'Bedreff',
-'minoredit' => 'Netter Kloanigkeiten san vaänderd worn',
-'watchthis' => "D' Seiten beówochten",
-'savearticle' => 'Seiten speichern',
-'preview' => 'Vurschau',
-'showpreview' => 'Vurschau zoang',
-'showdiff' => 'Änderrungen zoang',
-'anoneditwarning' => "Du beorweitsd dé Seiten ois néd-ågmöidt. Wånn du dé speichertsd, werd deih aktuelle IP-Adress in da Versiónsgschichd aufzeichnet und is dodamid unwiaderruafflich '''éffmtléch''' zum åschauh.",
+'minoredit' => 'Nua Kloanigkeidn san vaendat worn',
+'watchthis' => 'De Seitn beobochtn',
+'savearticle' => 'Seitn speichan',
+'preview' => 'Vorschau',
+'showpreview' => 'Vorschau zoagn',
+'showdiff' => 'Endarunga zoagn',
+'anoneditwarning' => 'Obocht: Du bist ned eigloggt.
+Dei IP-Adress wead in da Versionsgschicht afzoachnet.',
 'missingsummary' => "'''Hiwais:''' du host koa Zåmmfossung ågeem. Wånn du ernait auf „{{int:savearticle}}“ druckst, werd dai Enderung one a Zåmmfossung ywernumma.",
 'missingcommenttext' => 'Bittschee gib a Zåmmfossung ai.',
 'summary-preview' => 'Vurschau vo da Zåmmfossung:',
@@ -518,31 +515,31 @@ Es muass sichergstöd seih, daas Cookies aktivierd san. Danoch bittscheh d' Seit
 
 Des Posswort fyr des naiche Benutzerkonto kå auf da Speziaalseiten  „[[Special:ChangePassword|Posswort ändern]]“ gändert wern.',
 'newarticle' => '(Neich)',
-'newarticletext' => "Du bist am Link zua ner Seiten gfóigt, dé néd vurhånden is.
-Daas d' dé Seiten åléng kåst, trog dein Text in dé untensteeherde Boxen eih (schaug unter da [[{{MediaWiki:Helppage}}|Hüfeseiten]] fyr merer Informaziónen).
-Bist du föschlicherweis dodan, dånn druck dé '''Zruck'''-Schoitflächen voh deim Browser.",
+'newarticletext' => 'Du bist am Link gfoigt, wos no koa Seitn gibt.
+Um de Seitn ozlegn, trog dein Text im untan Kostn ei (schaug af da [[{{MediaWiki:Helppage}}|Huifeseitn]] fia mea Infos).
+Wens a Irrtum is, dassd do bist, nach druck in Zruck-Knopf vom Brausa.',
 'anontalkpagetext' => "---- ''De Seiten werd dodazua hergnumma, am ned-ågmöiderten Benutzer Nochrichten z' hinterlossen.
 Wånnst mid de Kommentare auf derer Seiten nix åfanga kåst, is vamuatlich da friarerne Inhower vo derer IP-Adress gmoat und du kåstas ignorirn.
 Wånnst a anonymer Benutzer bist und denkst, das irrelevante Kommentare ån di grichtt worn san, [[Special:UserLogin|möid de bittschee å]], um zuakynfteg Vawirrung z' vamein.''",
-'noarticletext' => 'De Saiten enthoit zua Zaid koan Text ned.
-Du kååst an Titl vo derer Saiten auf de åndern Saiten [[Special:Search/{{PAGENAME}}|suacha]],
-<span class="plainlinks"> in de dazuagheraden [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbiache suacha] oder de Saiten [{{fullurl:{{FULLPAGENAME}}|action=edit}} beorwaiten]</span>.',
-'noarticletext-nopermission' => 'Dé Seiten enthoit im Moment nó koan Text néd.
-Du derfst an Titel auf åndre Seiten [[Special:Search/{{PAGENAME}}|suachen]]
-óder dé zuaghering <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbiachén åschaung].</span>',
+'noarticletext' => 'De Seitn enthoid momentan koan Text ned.
+Du konst [[Special:Search/{{PAGENAME}}|nochm Titl]] in andan Seitn suacha,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de Logbiacha duachsuacha],
+oda [{{fullurl:{{FULLPAGENAME}}|action=edit}} de Seitn beorbatn]</span>.',
+'noarticletext-nopermission' => 'Af dea Seitn gibts zua Zeit koan Text.
+Du konst [[Special:Search/{{PAGENAME}}|in Seitntitl]] in andan Seitn suacha, oda <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} dia de Logbiachln dazua oschaugn]</span>, oba du hosd koa Berechtigung de Seitn ozlegn.',
 'userpage-userdoesnotexist' => 'Des Benutzerkonto „<nowiki>$1</nowiki>“ is ned vurhånden. Bittschee priaf, ob du de Seiten wirkle erstöin/beorweiten wüist.',
 'userpage-userdoesnotexist-view' => 'Benutzerkonto „$1“ existiard ned.',
 'blocked-notice-logextract' => "{{GENDER:$1|Der Benutzer|De Benutzarin|Der Benutzer do}} is zurzeid gesperrd.
 Zua da Informazion foigt a aktueller Auszug aus 'm Benutzersperr-Logbiache:",
 'updated' => '(Gänderd)',
 'note' => "'''Hihweis:'''",
-'previewnote' => "'''Dés is netter a Vurschau, d' Seiten is nuh néd gspeicherd worn!'''",
+'previewnote' => "'''Des is nua a Vorschau, de Seitn is no ned gspeichad worn!'''",
 'previewconflict' => "Dé Vurschau gibt 'n Inhoid vom ówern Textföd wieder. Só werd d' Seiten ausschaung, wånnst iatz speichern duast.",
 'session_fail_preview' => "'''Daine Beorwaitungen håm ned gspaichert wern kenna, wail Sitzungsdaaten valurn gånga san.'''
 Bittschee vasuachs nuamoi, indem du unter da foiganden Textvurschau noamoi auf „Saiten spaichern“ druckst.
 Soidad des Probleem bestee blaim, [[Special:UserLogout|möid de ob]] und danoch wider å.",
-'editing' => 'Beorwaiten vo $1',
-'editingsection' => 'Werkeln bei $1 (Obschnit)',
+'editing' => 'Beorbatn vo $1',
+'editingsection' => 'Werkln ba $1 (Obschnitt)',
 'editingcomment' => 'Werkeln voh $1 (Neicher Obschnit)',
 'editconflict' => 'Konflikt baim Beorwaiten: $1',
 'explainconflict' => "Eppern ånderer hod de Saitn gendert, nochdem du ågfånga host de zum beorwaiten.
@@ -565,29 +562,30 @@ Du bstätigst dodamid aa, daas du dé Textt söwer gschriem host óder dé voh n
 'semiprotectedpagewarning' => "'''Hoibsperrung:''' De Saiten is aso gsperrt worn, das netter registriarde Benytzer de endern kenna.",
 'titleprotectedwarning' => "'''Ochtung: De Saitenerstöiung is aso gschytzt worn, das netter Benytzer mid [[Special:ListGroupRights|speziöie Rechte]] de Saiten erstöin kennan.'''
 Zur Informazion foigt da aktuöie Logbuachaitrog:",
-'templatesused' => "{{PLURAL:$1|Dé fóigernde Vurlog|D' fóigernden Vurlong wern}} auf derer Seiten vawendt:",
+'templatesused' => '{{PLURAL:$1|De foigande Vorlog wead|De foigandn Vorlogn wean}} af dera Seitn vawendt:',
 'templatesusedpreview' => "{{PLURAL:$1|De foigande Vurlog werd|D' foiganden Vurlong wern}} in derer Saiten-Vurschau vawendt:",
 'templatesusedsection' => '{{PLURAL:$1|Dé fóigende Vurlog werd|Fóigende Vurlong wern}} voh dém Obschnit vawendt:',
-'template-protected' => '(schreibgschytzd)',
-'template-semiprotected' => '(schreibgschytzd fyr néd-ågmödte Benützer)',
-'hiddencategories' => 'Dé Seiten is in {{PLURAL:$1|a vasteckde Kategorie|$1 vasteckde Kategorien}} eihsortird:',
-'nocreatetitle' => 'De Erstöiung vo naiche Saiten is aigschränkt.',
+'template-protected' => '(schreibgschitzt)',
+'template-semiprotected' => '(schreibgschitzt fia ned-ogmejdte Nutza)',
+'hiddencategories' => 'De Seitn is in {{PLURAL:$1|a vasteckde Kategorie|$1 vasteckde Kategorina}} eisortiad:',
 '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}}:',
-'permissionserrorstext-withaction' => "Du host de Berechtigung ned, dass d' $2.
-{{PLURAL:$1|Grund|Grynd}}:",
-'recreate-moveddeleted-warn' => "'''Ówocht: Du dastöst a Seiten dé schoh friarer gléschd worn is.'''
+'permissionserrorstext-withaction' => 'Du host koa Berechtigung ned, dass de $2.
+{{PLURAL:$1|Grund|Grind}}:',
+'recreate-moveddeleted-warn' => "'''Obocht: Du legst a Seitn o, wo scho friaa glescht worn is.'''
 
-Bittscheh priaff genau, ób dé erneite Seitendastöung dé Richtlinien entsprichd.
-Zua deiner Informazión fóigts Lésch- und Vaschiawungs-Logbiaché mid da Begryndung fyr d' vurhergeherde Léschung:",
-'moveddeleted-notice' => "Dé Seiten do is gschléschd worn. Es fóigt a Auszug aus'm Lésch- und Vaschiawungs-Logbiaché voh derer Seiten.",
+Bittschee ibaleg da genau, obs sinnvoi is de Seitn ozlegn.
+Des Lesch- und Vaschiab-Logbuach dazua findsd do:",
+'moveddeleted-notice' => 'De Seitn do is glescht worn. Es foigt a Auszug ausm Lesch- und Vaschiabungs-Logbuch vo dea Seitn.',
 'edit-conflict' => 'Konflikt ban Beorwaten.',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "Owocht: D' Gréss vo eihbundne Vurlong is z' gróss, étlé Vurlong kennern néd eihbunden wern.",
-'post-expand-template-inclusion-category' => "Seiten, in dé d' maximoie Gréss eihbundner Vurlong ywerschritten is",
-'post-expand-template-argument-warning' => "'''Ówocht:''' Dé Seiten enthoit minderstens oah Argument in ner Vurlog, dés expandird z' gróss is. Dé Argumentt wern ignorird.",
+'post-expand-template-inclusion-warning' => 'Obocht: De Gress vo eibundne Vorlong is z gross.
+A poar Vorlogn wean ned eibundn.',
+'post-expand-template-inclusion-category' => 'Seitn, wo d Gress vo de eibundnan Vorlogn ibaschrittn is',
+'post-expand-template-argument-warning' => "'''Obocht:''' De Seitn enthoit mindastns oa Argument in da Vorlog, wo expandiat z grouss is. 
+De Parameta wean ignoriad.",
 'post-expand-template-argument-category' => 'Seiten, dé ignorirde Vurlongargumentt enthoiden',
 
 # "Undo" feature
@@ -597,31 +595,31 @@ Zua deiner Informazión fóigts Lésch- und Vaschiawungs-Logbiaché mid da Begry
 'cantcreateaccounttitle' => 'Benutzerkonto kå ned erstöd wern',
 
 # History pages
-'viewpagelogs' => 'Logbiacher fyr dé Seiten åzoang',
+'viewpagelogs' => 'Logbiacha fia de Datei ozoagn',
 'currentrev' => 'Aktuelle Versión',
-'currentrev-asof' => 'Aktuelle Versión vom $2, $3 Uar.',
-'revisionasof' => 'Versión vom $2, $3 Uar.',
-'revision-info' => 'Version vom $2 um $5 Uar am $4.',
-'previousrevision' => '← Nextöderne Versión',
-'nextrevision' => 'Nextjyngerne Version →',
-'currentrevisionlink' => 'Aktuelle Versión',
-'cur' => 'Aktuö',
+'currentrev-asof' => 'Letzte Version vo $1',
+'revisionasof' => 'Version vom $1',
+'revision-info' => 'Version vom $1 vo $2.',
+'previousrevision' => '← Nextejtane Version',
+'nextrevision' => 'Neiare Version →',
+'currentrevisionlink' => 'Aktuelle Version',
+'cur' => 'Aktuell',
 'next' => 'Naxte',
-'last' => 'Vurherige',
+'last' => 'Friaare',
 'page_first' => 'Auhfaung',
 'page_last' => 'End',
-'histlegend' => "Zur da Auhzoag voh dé Änderrungen oahfoch dé z' vagleichenden Versiónen auswön und d' Schoitflächen „{{int:compareselectedversions}}“ drucken.<br />
-* ({{int:cur}}) = Unterschiad zua da aktuön Versión, ({{int:last}}) = Unterschiad zua da vurhering Versión
-* Uarzeid/Daatum = Versión zua derer Zeid, Benutzernaum/IP-Adress vom Beorweiter, {{int:minoreditletter}} = Kloane Änderrung",
-'history-fieldset-title' => 'Suach in da Versiónsgschicht',
-'history-show-deleted' => 'netter gléschde Versiónen',
-'histfirst' => 'Öderste',
-'histlast' => 'Neicherste',
+'histlegend' => 'Zua Ozoag vo de Endarunga oafoch de z vagleichandn Versiona und Schoitflechn „{{int:compareselectedversions}}“ druckn.<br />
+* ({{int:cur}}) = Unterschied zua aktuelln Version, ({{int:last}}) = Unterschied zua vorherign Version
+* Uhrzeid/Datum = Version za dera Zeid, Nutzanama/IP-Adress vom Beorbata, {{int:minoreditletter}} = Kloane Endarung',
+'history-fieldset-title' => 'Suach in da Versionsgschicht',
+'history-show-deleted' => 'Nua gleschte Versiona',
+'histfirst' => 'Ejtaste',
+'histlast' => 'Neiaste',
 'historyempty' => '(laar)',
 
 # Revision feed
 'history-feed-title' => 'Versiónsgschicht',
-'history-feed-item-nocomment' => '$1 am $3 um $4 Uar',
+'history-feed-item-nocomment' => '$1 am $2',
 'history-feed-empty' => "Die angeforderte Seitn gibt's net.
 Vielleicht is sie gelöscht oda verschom worn.
 [[Special:Search|Durchsuachan]] S' {{SITENAME}} für passende neie Seitn.",
@@ -633,66 +631,66 @@ Nähere Angaben zum Löschvorgang sowia a Begründung findn si im [{{fullurl:{{#
 Du kauhstas auhschauh, waunn du wüst. Nahernte Auhgoom steengern im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lésch-Logbiaché].",
 'rev-deleted-no-diff' => '<div class="mw-warning plainlinks">Du kannst diesen Unterschied nicht betrachten, da eine der Versionen aus den öffentlichen Archiven entfernt wurde.
 Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].</div>',
-'rev-delundel' => 'zoang / vastecken',
+'rev-delundel' => 'zoagn / vastecka',
 'revdelete-nooldid-title' => 'Koa Version ogem',
 'revdelete-text' => "'''Der Inhalt oder andere Bestandteile gelöschter Versionen sind nicht mehr öffentlich einsehbar, erscheinen jedoch weiterhin als Einträge in der Versionsgeschichte.'''
 {{SITENAME}}-Administratoren können den entfernten Inhalt oder andere entfernte Bestandteile weiterhin einsehen und wiederherstellen, es sei denn, es wurde festgelegt, dass die Zugangsbeschränkungen auch für Administratoren gelten.",
-'revdel-restore' => 'Siagborkeid ändern',
-'revdel-restore-deleted' => 'gschléschde Versión',
-'revdel-restore-visible' => 'siagbore Versión',
+'revdel-restore' => 'Siachtborkeit endan',
+'revdel-restore-deleted' => 'gleschte Versiona',
+'revdel-restore-visible' => 'sichtbore Versiona',
 'pagehist' => 'Versiónsgschicht',
 'deletedhist' => 'Gléschde Versiónen',
 
 # Merge log
-'revertmerge' => 'Vaoanigung zruckénemmer',
+'revertmerge' => 'Vaoanigung zruckdoa',
 'mergelogpagetext' => "Des is s'Logbuach vu de vareinigtn Versionsgschichtn.",
 
 # Diffs
-'history-title' => 'Versiónsgschicht voh „$1“',
-'lineno' => 'Zeiln $1:',
-'compareselectedversions' => 'Gwöde Versionen vagleichen',
-'editundo' => 'ryckgängig',
-'diff-multi' => '({{PLURAL:$1|A dazwischenliegerte Versión|$1 dazwischenliegende Versiónen}} {{PLURAL:$2|vohram Benutzer|vo $2 Benutzern}} {{PLURAL:$1|werd|wern}} néd åzoagt)',
+'history-title' => 'Gschicht vo „$1“ oschaugn',
+'lineno' => 'Zein $1:',
+'compareselectedversions' => 'Ausgwejde Versiona vagleicha',
+'editundo' => 'zruck doa',
+'diff-multi' => '({{PLURAL:$1|A dazwischnliegade Version|$1 dazwiscenliegade Versiona}} {{PLURAL:$2|vonam Nutza|vo $2 Nutzan}} {{PLURAL:$1|wead|wean}} ned ozoagt)',
 
 # Search results
 'searchresults' => 'Suachergebniss',
-'searchresults-title' => 'Ergebniss voh da Suach noch „$1“',
+'searchresults-title' => 'Suacheagebniss fia „$1“',
 'searchresulttext' => "Fia weidare Infos üwa's Suacha schau auf'd [[{{MediaWiki:Helppage}}|Hüifeseitn]].",
 'searchsubtitle' => 'Dei Suachãnfråg: „[[:$1|$1]]“ ([[Special:Prefixindex/$1|ålle Seitn, de mid „$1“ ãnfãngan]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ålle Seitn, de wås nåch „$1“ valinkn]])',
 'searchsubtitleinvalid' => 'Dei Suachãnfråg: „$1“.',
 'notitlematches' => 'Koane Üwareinstimmungen mid de Seitntitl',
 'notextmatches' => 'Ka Üwareinstimmung mid dem Inhåit gfundn',
-'prevn' => '{{PLURAL:$1|vurheriger|vurherige $1}}',
-'nextn' => '{{PLURAL:$1|naxter|naxte $1}}',
-'prevn-title' => '{{PLURAL:$1|Vurherigs Ergebnis|Vurherige $1 Ergebniss}}',
+'prevn' => '{{PLURAL:$1|vorheriga|vorherige $1}}',
+'nextn' => '{{PLURAL:$1|naxta|naxte $1}}',
+'prevn-title' => '{{PLURAL:$1|Vorherigs Ergebnis|Vorherige $1 Ergebniss}}',
 'nextn-title' => '{{PLURAL:$1|Foilgends Ergebnis|Foigende $1 Ergebniss}}',
-'shown-title' => 'Zoag $1 {{PLURAL:$1|Ergebnis|Ergebniss}} pró Seiten',
+'shown-title' => 'Zoag $1 {{PLURAL:$1|Ergebnis|Ergebniss}} pro Seitn',
 'viewprevnext' => 'Zoag ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists' => "'''Es gibt a Seiten, dé'n Nåmen „[[:$1]]“ hod.'''",
-'searchmenu-new' => "'''Erstö d' Seiten „[[:$1]]“ in dém Wiki.'''",
-'searchprofile-articles' => 'Inhoidsseiten',
-'searchprofile-project' => 'Hüfe und Prójektseiten',
-'searchprofile-images' => 'Muitimeedia',
-'searchprofile-everything' => 'Oiss',
-'searchprofile-advanced' => 'Daweiterd',
-'searchprofile-articles-tooltip' => 'Suachen auf $1',
-'searchprofile-project-tooltip' => 'Suachen in $1',
-'searchprofile-images-tooltip' => 'Noch Büder suachen',
-'searchprofile-everything-tooltip' => 'Gsåmmten Inhoid durchsuachen (inkl. Dischkrirseiten)',
-'searchprofile-advanced-tooltip' => 'Suach in weiderne Nåmensraim',
-'search-result-size' => '$1 ({{PLURAL:$2|1 Wort|$2 Werter}})',
-'search-result-category-size' => '{{PLURAL:$1|1 Seiten|$1 Seiten}} ({{PLURAL:$2|1 Unterkategorie|$2 Unterkategorien}}, {{PLURAL:$3|1 Daatei|$3 Daatein}})',
-'search-redirect' => '(Weiderloattung voh „$1“)',
-'search-section' => '(Åbschnitt $1)',
-'search-suggest' => 'Häderst „$1“ gmoahd?',
+'searchmenu-exists' => "'''Es gibt a Seiten, wo „[[:$1]]“ hoasst.'''",
+'searchmenu-new' => "'''De Seitn „[[:$1]]“ in em Wiki eastejn.'''",
+'searchprofile-articles' => 'Inhoidsseitn',
+'searchprofile-project' => 'Huif- und Projektseitn',
+'searchprofile-images' => 'Muitimedia',
+'searchprofile-everything' => 'Ollas',
+'searchprofile-advanced' => 'Daweitad',
+'searchprofile-articles-tooltip' => 'Suacha in $1',
+'searchprofile-project-tooltip' => 'Suacha in $1',
+'searchprofile-images-tooltip' => 'Noch Datein suacha',
+'searchprofile-everything-tooltip' => 'In gsamtn Inhoid duachsuacha (inkl. Dischkriaseitn)',
+'searchprofile-advanced-tooltip' => 'Suach in weidna Namasramm',
+'search-result-size' => '$1 ({{PLURAL:$2|1 Wort|$2 Weata}})',
+'search-result-category-size' => '{{PLURAL:$1|1 Seitn|$1 Seitn}} ({{PLURAL:$2|1 Untakategorie|$2 Untakategorina}}, {{PLURAL:$3|1 Datei|$3 Datein}})',
+'search-redirect' => '(Weidaloatung vo „$1“)',
+'search-section' => '(Obschnitt $1)',
+'search-suggest' => 'Hädast „$1“ gmoand?',
 'search-interwiki-caption' => 'Schwesterprojekte',
 'search-interwiki-default' => '$1 Eagebnisse:',
 'search-interwiki-more' => '(mea)',
-'searchrelated' => 'vawåndt',
+'searchrelated' => 'vawandt',
 'searchall' => 'olle',
-'showingresultsheader' => "{{PLURAL:$5|Ergebnis '''$1''' voh '''$3'''|Ergebniss '''$1–$2''' voh '''$3'''}} fyr '''$4'''",
+'showingresultsheader' => "{{PLURAL:$5|Ergebnis '''$1''' vo '''$3'''|Ergebniss '''$1–$2''' vo '''$3'''}} fia '''$4'''",
 'nonefound' => "'''Hiwais:''' Es wern standardmässig nur oanige Nåmensraim durchsuacht. Setz ''all:'' vur dain Suachbegrif, um olle Saiten (inkl. Dischkrirsaiten, Vurlong usw.) z' durchsuacha oder züid 'n Nåmen vom z' durchsuachanden Nåmensraum.",
-'search-nonefound' => 'Fyr deih Suachåfrog san koane Ergebniss gfunden worn',
+'search-nonefound' => 'Fia dei Suachofrog gibts koa Ergebnis',
 'powersearch' => 'Suach',
 'powersearch-legend' => 'Daweiterde Suach',
 'powersearch-ns' => 'Suach in Nåmensraim:',
@@ -723,8 +721,9 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'yourrealname' => 'Biagalicha Nama:',
 'yourlanguage' => 'Sprooch vo da Benutzerowerflächen',
 'prefs-help-realname' => 'Opzionoi. Dodamid kå dai byrgerlicher Nåm daine Baiträg zuagordnet wern.',
-'prefs-help-email' => "Dé Ågob voh ner E-Mail-Adressen is ópziónoi, daméglicht ower d' Zuasendung vohram Ersotzposswort, sófern du deih Posswort vagessen host.",
-'prefs-help-email-others' => "Mid åndre Benutzer kåst aa ywer d' Benutzerdischkrirseiten an Kontakt aufnemmer, one daas du deih Identität óffmléng muasst.",
+'prefs-help-email' => 'De Mail-Adress is optional; es is oba sinnvoi, wensd es Passwort amoi vagessn hosd.',
+'prefs-help-email-others' => 'Andane Nutza kenan so aa mit dia Kontakt afnehma, duach an E-Mail-Link auf da Navi vo da Nutzaseitn.
+Dei Mail-Adress wead dabei ned ozoagt.',
 'prefs-help-email-required' => 'Es werd a güitige E-Mäil-Adress braucht.',
 'prefs-info' => 'Baasisinformazionen',
 
@@ -757,56 +756,61 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'right-edit' => 'Seiten beorweiten',
 'right-block' => 'Benutzer sperrn (Schreiwrecht)',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Neiomejdungs-Logbuach',
+
 # User rights log
 'rightslog' => 'Rechte-Logbiache',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'an derer Seiten duast werkeln',
+'action-edit' => 'beorbadd de Seitn',
 'action-createpage' => "Seiten z' dastön",
 'action-autopatrol' => 'eigerne Beorweitungen ois kontroilird markirn',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|Änderrung|Änderrungen}}',
-'recentchanges' => 'Létzde Änderrungen',
-'recentchanges-legend' => 'Åzoagopziónen',
+'nchanges' => '$1 {{PLURAL:$1|Endarung|Endarunga}}',
+'recentchanges' => 'Letzte Endarunga',
+'recentchanges-legend' => 'Ozoagoptiona',
 'recentchanges-summary' => "Auf derer Seiten kåst d' létzden Änderrungen auf '''{{SITENAME}}''' nochévavóing.",
-'recentchanges-feed-description' => 'Vafóig mid dém Feed dé létzden Änderrungen in {{SITENAME}}.',
-'recentchanges-label-newpage' => 'Neiche Seiten',
-'recentchanges-label-minor' => 'Kloane Änderrungen',
-'recentchanges-label-bot' => 'Änderrung durch an Bot',
-'recentchanges-label-unpatrolled' => 'Néd-kontróilirde Änderrung',
-'rcnote' => "Untn {{PLURAL:$1|is de letzte Ändarung|san de letztn '''$1''' Ändarungen}} {{PLURAL:$2|vum letztn|vu de letztn '''$2'''}} Tåg aufglist. Stãnd vum $4 um $5.",
-'rcnotefrom' => "Åzoagt wern d' Änderrungen seid  '''$2''' (max. '''$1''' Eihtrég).",
-'rclistfrom' => 'Netter Änderrungen seid $1 åzoang.',
-'rcshowhideminor' => 'kloane Änderrungen $1',
+'recentchanges-feed-description' => 'Vafoig mid em Feed de letztn Endarunga in {{SITENAME}}.',
+'recentchanges-label-newpage' => 'Neiche Seitn',
+'recentchanges-label-minor' => 'Kloane Endarunga',
+'recentchanges-label-bot' => 'Endarung duach an Bot',
+'recentchanges-label-unpatrolled' => 'De Endarung is no ned kontrolliad worn',
+'rcnote' => "{{PLURAL:$1|'''1''' Endarung|'''$1''' Endarunga}} in dn {{PLURAL:$2|letztn 24 Stundn|letztn '''$2'''Dog}}.
+Stand: $4, $5 Uhr.",
+'rcnotefrom' => "Untn san de Endarunga seit  '''$2''' (bis za '''$1''' Ozoagn).",
+'rclistfrom' => 'Nua Endarunga seit $1 zoagn.',
+'rcshowhideminor' => 'Kloane Endarunga $1',
 'rcshowhidebots' => 'Bots $1',
-'rcshowhideliu' => 'Ågmödte Benutzer $1',
-'rcshowhideanons' => 'Anónyme Benutzer $1',
-'rcshowhidepatr' => 'Kontróilirde Änderrungen $1',
-'rcshowhidemine' => 'Eigerne Beiträg $1',
-'rclinks' => "D' létzden $1 Änderrungen voh dé létzden $2 Dog åzoang<br />$3",
-'diff' => 'Unterschiad',
-'hist' => 'Versiónen',
-'hide' => 'ausblenden',
-'show' => 'eihblenden',
+'rcshowhideliu' => 'Eigloggte Nutza $1',
+'rcshowhideanons' => 'Anonyme Nutza $1',
+'rcshowhidepatr' => 'Kontrolliade Endarunga $1',
+'rcshowhidemine' => 'Meine Beidreg $1',
+'rclinks' => 'De letztn Endarunga vo de letztn $2 Dog zoagn<br />$3',
+'diff' => 'Untaschied',
+'hist' => 'Versiona',
+'hide' => 'Ausblendn',
+'show' => 'Zoag',
 'minoreditletter' => 'K',
-'newpageletter' => 'Neich',
+'newpageletter' => 'N',
 'boteditletter' => 'B',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|beówochtender|beówochtende}} Benutzer]',
 'rc_categories' => 'Netter Seiten aus d\' Kategorien (trennd mid "l"):',
 'rc_categories_any' => 'Olle',
 'newsectionsummary' => 'Neicher Obschnit /* $1 */',
-'rc-enhanced-expand' => 'Deteus åzoang (geet netter mid JavaScript)',
-'rc-enhanced-hide' => 'Deteils vastecker',
+'rc-enhanced-expand' => 'Details zoagn (braucht JavaScript)',
+'rc-enhanced-hide' => 'Details vastecka',
 
 # Recent changes linked
-'recentchangeslinked' => 'Änderrungen ån valinkte Seiten',
+'recentchangeslinked' => 'Endarunga an Valinkunga',
 'recentchangeslinked-feed' => 'Valinkts priaffm',
-'recentchangeslinked-toolbox' => 'Valinkts priaffm',
-'recentchangeslinked-title' => 'Änderrungen ån Seiten, dé voh „$1“ valinkt san',
-'recentchangeslinked-noresult' => 'Im ausgwöden Zeidraum san an dé valinkden Seiten koane Änderrungen vurgnummer worn.',
-'recentchangeslinked-summary' => "Dé Speziaalseiten zoagd d' létzden Änderrungen bei dé Seiten, zua dé voh ner gwissen Seiten valinkd werd (bzw. dé wos in ner gwissen Kategorie eihsortird san). Seiten voh deiner [[Special:Watchlist|Beówochtungslisten]] wern '''fett''' åzoagd.",
-'recentchangeslinked-page' => 'Seiten:',
+'recentchangeslinked-toolbox' => 'Endarunga af valinktn Seitn',
+'recentchangeslinked-title' => 'Endarunga wo vo „$1“ valinkt san',
+'recentchangeslinked-noresult' => 'Im ausgwejtn Zeidraum san an dena valinkdn Seitn koane Endarunga vorgnumma worn.',
+'recentchangeslinked-summary' => "Des is a Listn vo de letztn Endarunga af Seitn, de wo vo ana bstimmtn Seitn valinkt san (bzw. za ana bstimmtn Kategorie ghean).
+Seitn af [[Special:Watchlist|deina Beobochtungslistn]] san '''fett'''.",
+'recentchangeslinked-page' => 'Seitn:',
 'recentchangeslinked-to' => 'Zoagt Änderrungen auf Seiten, dé do her valinken',
 
 # Upload
@@ -815,7 +819,7 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'uploadnologin' => 'Néd ågmödt',
 'uploadnologintext' => 'Du muasst [[Special:UserLogin|ågmödt]] seih, wånn Du Daatein auffeloon wüst.',
 'uploadlog' => 'Daatei-Logbiache',
-'uploadlogpage' => 'Daatei-Logbiache',
+'uploadlogpage' => 'Logbuach fias Affelodn',
 'uploadlogpagetext' => 'Des is des Logbuach voh de auffegloodanen Daatein, schaug aa unter [[Special:NewFiles|neiche Daatein]].',
 'filename' => 'Daateinåm',
 'filedesc' => 'Bschreiwung',
@@ -833,7 +837,7 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'emptyfile' => 'Dé aufféglooderne Daatei is laar. Da Grund kauh a Tippfeeler im Daateinaum seih. Bittscheh kóntróllier, ób du dé Daatei wirklé aufféloon wüst.',
 'uploadwarning' => 'Ówocht',
 'savefile' => 'Daatei speichern',
-'uploadedimage' => 'hod „[[$1]]“ auffégloon',
+'uploadedimage' => 'hod „[[$1]]“ affeglodn',
 'uploaddisabled' => "'s aufféloon is deaktivierd",
 'uploadscripted' => 'Dé Datei enthoit HTML- óder Scriptcode, der wos irrtymlicherweis voram Webbrowser ausgfyrd wern kunnterd.',
 'uploadvirus' => 'Dé Daatei do enthoitt a Virus! Details: $1',
@@ -878,29 +882,29 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'listfiles_count' => 'Versiónen',
 
 # File description page
-'file-anchor-link' => 'Daatei',
-'filehist' => 'Daateiversiónen',
-'filehist-help' => "Klick auf an Zeidbunkt, um dé Versión z' loon.",
-'filehist-revert' => 'zrucksétzen',
-'filehist-current' => 'aktuö',
-'filehist-datetime' => 'Versión vom',
-'filehist-thumb' => 'Vurschaubüdel',
-'filehist-thumbtext' => "Vurschaubüdel fyr d' Versión vom $1, $3 Uar",
-'filehist-user' => 'Benutzer',
-'filehist-dimensions' => 'Moosse',
+'file-anchor-link' => 'Datei',
+'filehist' => 'Dateiversiona',
+'filehist-help' => 'Klick auf an Zeitpunkt, um de Version ozschaugn.',
+'filehist-revert' => 'zrucksetzn',
+'filehist-current' => 'aktuell',
+'filehist-datetime' => 'Version vom',
+'filehist-thumb' => 'Vorschaubuidl',
+'filehist-thumbtext' => 'Vorschaubuidl fia d Version vo $1',
+'filehist-user' => 'Nutza',
+'filehist-dimensions' => 'Dimensiona',
 'filehist-filesize' => 'Dateigreess',
 'filehist-comment' => 'Kommentar',
-'imagelinks' => 'Daateivawendung',
-'linkstoimage' => "{{PLURAL:$1|D'foignde Seitn vawendt|De foigndn $1 Seitn vawendn}} de Datei:",
+'imagelinks' => 'Dateivawendung',
+'linkstoimage' => '{{PLURAL:$1|De foigende Seitn vawendt|De foigendn $1 Seitn vawendn}} de Datei:',
 'linkstoimage-more' => "Es {{PLURAL:$1|valinkt|valinkn}} mea wia {{PLURAL:$1|oa Seitn |$1 Seitn}} auf de Datei.
 De foignde Listn zaagt netta {{PLURAL:$1|in easten Link|de easten $1 Links}} auf de Datei.
 A [[Special:WhatLinksHere/$2|voiständige Listn]] gibt's aa.",
-'nolinkstoimage' => 'Koah Seiten bnutzd dé Daatei.',
+'nolinkstoimage' => 'De Datei wead vo koana Seitn gnutzt.',
 'morelinkstoimage' => '[[Special:WhatLinksHere/$1|Weidare Links]] fia de Datei.',
 'duplicatesoffile' => "{{PLURAL:$1|D'foignde Datei is a Duplikat|De foigndn $1 Datein han Duplikate}} vu dea Datei ([[Special:FileDuplicateSearch/$2|weidare Deteus]]):",
 'sharedupload' => 'De Datei stãmmt aus $1 und deaf bei ãndare Projekte vawendt wean.',
 'sharedupload-desc-there' => "De Datei stãmmt aus $1 und deaf bei ãndera Projekte vawendt wean. Schau auf'd [$2 Dateibeschreibungsseitn] fia weidare Infoamazionen.",
-'sharedupload-desc-here' => "Dé Daatei ståmmt aus $1 und derf voh åndre Prójektt vawendt wern. D' Bschreiwung voh da [$2 Daateibschreiwungsseiten] werd unten åzoagt.",
+'sharedupload-desc-here' => 'De Datei stammt aus $1 und deaf vo andan Projektn vawendt wean. De Bschreibung vo da [$2 Dateibschreibungsseitn] wead unen ozoagt.',
 'uploadnewversion-linktext' => 'A neiche Versión voh derer Daatei aufféloon',
 
 # File reversion
@@ -920,10 +924,10 @@ A [[Special:WhatLinksHere/$2|voiständige Listn]] gibt's aa.",
 'unusedtemplateswlh' => 'Aundre Links',
 
 # Random page
-'randompage' => 'Zuafällige Seiten',
+'randompage' => 'Zuafoisseitn',
 
 # Statistics
-'statistics' => 'Staatistik',
+'statistics' => 'Statistik',
 'statistics-articles' => 'Inhoidsseiten',
 'statistics-pages' => 'Seiten',
 'statistics-pages-desc' => 'Olle Seiten in dém Wiki, inklusiav da Dischkrirseiten, Weiderloatungen usw.',
@@ -933,7 +937,7 @@ A [[Special:WhatLinksHere/$2|voiständige Listn]] gibt's aa.",
 'statistics-views-total' => 'Seitenaufruaff gsåmmt',
 'statistics-mostpopular' => 'Dé am moastbsuachten Seiten',
 
-'disambiguationspage' => 'Template:Begriffsklärung',
+'disambiguationspage' => 'Template:Begriffsklearung',
 'disambiguations-text' => "D' fóigernden Seiten valinken af a Seiten za ner Begiefsklärung. Du sóiderst stott dém af d' oagerntlich gmoahde Seiten valinken.
 
 A Seiten gijt ois Begriefsklärungsseiten, waunns oane vah dé af [[MediaWiki:Disambiguationspage]] afgfyrde Vurloog(ng) eihbindt.</br>
@@ -952,10 +956,10 @@ Links as Naumensraim wern do néd afglistt.",
 'fewestrevisions' => "Seiten mid d' weenigsten Versiónen",
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|Byte|Bytes}}',
+'nbytes' => '$1 {{PLURAL:$1|Byte}}',
 'ncategories' => '$1 {{PLURAL:$1|Kategorie|Kategorien}}',
 'nlinks' => '{{PLURAL:$1|a Link|$1 Links}}',
-'nmembers' => '{{PLURAL:$1|1 Eithråg|$1 Eihtreeg}}',
+'nmembers' => '{{PLURAL:$1|1 Eindrog|$1 Eindreg}}',
 'nrevisions' => '{{PLURAL:$1|oah Beorwatung|$1 Beorwatungen}}',
 'nviews' => '{{PLURAL:$1|1 Åbfråg|$1 Åbfrång}}',
 'uncategorizedpages' => 'Néd kategorisirde Seiten',
@@ -976,7 +980,7 @@ Links as Naumensraim wern do néd afglistt.",
 'mostcategories' => 'Seiten mid dé haiffigsten Kategorien',
 'mostimages' => 'Haiffig brauchde Daatein',
 'mostrevisions' => "Seiten mid d' haiffigsten Versiónen",
-'prefixindex' => 'Olle Seiten (mid Präfix)',
+'prefixindex' => 'Olle Seien (mit Präfix)',
 'shortpages' => 'Kurze Seiten',
 'longpages' => 'Långe Seiten',
 'deadendpages' => 'Néd valinkende Seiten',
@@ -985,47 +989,47 @@ Links as Naumensraim wern do néd afglistt.",
 'protectedpages-indef' => 'Netter néd bschränkde gschytzde Seiten zoang',
 'protectedpages-cascade' => 'Netter Seiten mid Kaskadenschutz',
 'protectedtitles' => 'Gschytzde Seitennaumen',
-'usercreated' => '{{GENDER:$3|Erstöd}} am $1 um $2 Uar',
-'newpages' => 'Neiche Seiten',
+'usercreated' => '{{GENDER:$3|Oglegt}} am $1 um $2',
+'newpages' => 'Neiche Seitn',
 'newpages-username' => 'Benutzernåm:',
 'ancientpages' => 'Schoh länger nimmer beorweitade Seiten',
-'move' => 'vaschiam',
+'move' => 'Vaschiabm',
 'movethispage' => 'de Seiten vaschiam',
 'notargettitle' => 'Koa Seiten ågeem',
-'pager-newer-n' => '{{PLURAL:$1|nexder|nexde $1}}',
-'pager-older-n' => '{{PLURAL:$1|vurheriger|vurhering $1}}',
+'pager-newer-n' => '{{PLURAL:$1|naxta|naxte $1}}',
+'pager-older-n' => '{{PLURAL:$1|vorheriga|vorherign $1}}',
 
 # Book sources
 'booksources' => 'ISBN-Suach',
-'booksources-search-legend' => 'Suach noch Benutzerquön fyr Biacher',
+'booksources-search-legend' => 'Suach noch Bezugsquejn fia Biacha',
 'booksources-go' => 'Suach',
 
 # Special:Log
-'log' => 'Logbiacher',
+'log' => 'Logbiacha',
 'all-logs-page' => 'Olle effmtlichen Logbiacher',
 'alllogstext' => 'Des is de kombinierte Anzeige vo alle in {{SITENAME}} gführten Logbiacha. Die Ausgabe ko durch de Auswahl vom Logbuchtyp, vom Benutzer oder vom Seitntitel eigschränkt wern.',
 'logempty' => 'Koane passenden Einträg.',
 'log-title-wildcard' => 'Da Titel faungt auh mid ....',
 
 # Special:AllPages
-'allpages' => 'Olle Seiten',
+'allpages' => 'Olle Seitn',
 'alphaindexline' => '$1 bis $2',
 'nextpage' => 'Naxde Seiten ($1)',
 'prevpage' => 'Vurherige Seiten ($1)',
 'allpagesfrom' => 'Seiten auhzoang ob:',
 'allpagesto' => 'Seiten auhzoang bis:',
-'allarticles' => 'Olle Seiten',
+'allarticles' => 'Olle Seitn',
 'allinnamespace' => 'Olle Seiten (Naumensraum: $1)',
 'allnotinnamespace' => 'Ollte Seiten  (néd im $1 Naumensraum)',
 'allpagesprev' => 'Vurige',
 'allpagesnext' => 'Naxde',
-'allpagessubmit' => 'Auhwenden',
+'allpagessubmit' => 'Owendn',
 'allpagesprefix' => 'Seiten zoang mid Präfix:',
 'allpagesbadtitle' => "Da eihgeewerne Seitennaum is néd gütig: Er hod éntwéder a vurauhgstöds Sprooch-, a Interwiki-Kyrzel óder enthoitt oah óder mererne Zeichen, dé in d' Seitennaumen néd vawendt wern derffm.",
 'allpages-bad-ns' => 'Dén Naumensraum „$1“ gibts in {{SITENAME}} néd.',
 
 # Special:Categories
-'categories' => 'Kategorien',
+'categories' => 'Kategorina',
 'special-categories-sort-count' => 'Sortiarung noch da Auhzoi',
 'special-categories-sort-abc' => "Sortiarung noch 'm Alfabet",
 
@@ -1038,15 +1042,12 @@ Links as Naumensraim wern do néd afglistt.",
 'linksearch-ns' => 'Nåmensraum:',
 'linksearch-ok' => 'Suacher',
 'linksearch-text' => "Dé Speziaalseiten do daméglicht d' Suach noch Seiten, in dénen bstimmte Weblinks enthoiden san. Dodabei kennern Blootzhoiter wia beispüsweis  <code>*.beispü.at</code> hergnummer wern. Es muass mindastens a Top-Level-Domain, z. Bsp. „*.org“. auhgeem wern. <br />Unterstytzde Protokói: <code>$1</code> (Dé bittscheh bei da Suachauhgob auhgeem.)",
-'linksearch-line' => '$1 is valinkt voh $2',
+'linksearch-line' => '$1 is valinkt vo $2',
 
 # Special:ListUsers
 'listusers-submit' => 'Zoag',
 'listusers-noresult' => 'Koane Benutzer gfunden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Neiåmödungs-Logbiaché',
-
 # 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.
@@ -1056,7 +1057,7 @@ Zuasätzlige Informaziónen ywer dé oahzelnen Rechtt kennan [[{{MediaWiki:Listg
 'listgrouprights-group' => 'Gruppm',
 'listgrouprights-rights' => 'Rechte',
 'listgrouprights-helppage' => 'Help:Gruppmrechte',
-'listgrouprights-members' => '(Mitgliaderlisten)',
+'listgrouprights-members' => '(Mitgliedalistn)',
 'listgrouprights-addgroup' => 'Benutzer zua {{PLURAL:$2|derer Gruppm|dé Gruppm}} dazuadoah: $1',
 'listgrouprights-removegroup' => 'Benutzer aus {{PLURAL:$2|derer Gruppm|dé Gruppm}} entferner: $1',
 'listgrouprights-addgroup-all' => 'Benutzer zua olle Gruppm dazuadoah',
@@ -1067,7 +1068,7 @@ Zuasätzlige Informaziónen ywer dé oahzelnen Rechtt kennan [[{{MediaWiki:Listg
 
 # E-mail user
 'mailnologin' => 'Du bist néd auhgmödt',
-'emailuser' => 'E-Póst an dén Benutzer',
+'emailuser' => 'Mail an den Nutza',
 'emailpage' => 'E-Mail aun Benutzer',
 'noemailtitle' => 'Koah E-Mail-Adress',
 'emailfrom' => 'Voh:',
@@ -1086,9 +1087,9 @@ Zuasätzlige Informaziónen ywer dé oahzelnen Rechtt kennan [[{{MediaWiki:Listg
 'usermessage-editor' => 'Systém-Messenger',
 
 # Watchlist
-'watchlist' => 'Beówochtungslisten',
+'watchlist' => 'Beobochtungslistn',
 'mywatchlist' => 'Mei Beobochta',
-'watchlistfor2' => 'Voh $1 $2',
+'watchlistfor2' => 'Vo $1 $2',
 'nowatchlist' => 'Es gibt koane Eihträg auf deiner Beówochtungslisten.',
 'watchlistanontext' => "Du muasst dé $1, um deih Beówchtungslisten z' seeng óder Eihträg borweiten z' kenner.",
 'watchnologin' => 'Du bist néd auhgmödt',
@@ -1100,14 +1101,14 @@ Zuasätzlige Informaziónen ywer dé oahzelnen Rechtt kennan [[{{MediaWiki:Listg
 Waunnst dé Seiten wieder voh deiner Beówochtungslisten weggerddoah mechst, druck oafoch auf da jeeweiling Seiten auf „nimmer beówochten“.',
 'removewatch' => 'Voh da Beówochtungslisten wegdoah',
 'removedwatchtext' => "D' Seiten „[[:$1]]“ is voh deiner [[Special:Watchlist|Beówochtungslisten]] wegdauh worn.",
-'watch' => 'Beówochten',
+'watch' => 'Beobochtn',
 'watchthispage' => "D' Seiten beówochten",
-'unwatch' => 'nimmer beówochten',
+'unwatch' => 'nimma beobochtn',
 'unwatchthispage' => 'Nimmer beówochten',
 'notanarticle' => 'Koah Seiten',
 'notvisiblerev' => 'Versión is gléschd worn',
 'watchnochange' => 'Koahne dé voh dir beówochterden Seiten san wärnd dém auhzoagten Zeidraum beorwatt worn.',
-'watchlist-details' => 'Du bówochst {{PLURAL:$1|$1 Seiten}}, Diskussiónsseiten néd midzöd',
+'watchlist-details' => 'Du beoochst {{PLURAL:$1|$1 Seitn}}, Dischkriaseitn ned mitgrechnad',
 'wlheader-enotif' => '* Da E-Mail-Benoochrichtigungsdeanst is aktivierd.',
 'wlheader-showupdated' => "* Seiten mid noh néd gseengne Änderrungen wern '''fett''' dorgstöd.",
 'watchmethod-recent' => "Ywerpriaff d' létzden Beorwatungen fyr d' Beówochtungslisten",
@@ -1116,7 +1117,7 @@ Waunnst dé Seiten wieder voh deiner Beówochtungslisten weggerddoah mechst, dru
 'iteminvalidname' => 'Próblém mim Eihtrog „$1“, néd gütiger Naum.',
 'wlnote' => "Es {{PLURAL:$1|fóigt d' létzde Änderrung|fóing d' létzden '''$1''' Änderrungen}} voh da/dé {{PLURAL:$2|Stund| '''$2''' Stunden}}. Staund: $3, $4 Uar.",
 'wlshowlast' => 'Zoag dé Änderrungen voh dé létzden $1 Stunden, $2 Dog óder $3 (in dé létzden 30 Dog).',
-'watchlist-options' => 'Åzoagópziónen',
+'watchlist-options' => 'Mei Beobochta: Optiona',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Beówochten ...',
@@ -1125,11 +1126,7 @@ Waunnst dé Seiten wieder voh deiner Beówochtungslisten weggerddoah mechst, dru
 
 'enotif_mailer' => '{{SITENAME}}-E-Mail-Benoochrichtigungsdeanst',
 'enotif_reset' => 'Olle Seiten ois bsuacht markiern',
-'enotif_newpagetext' => 'Dés is a neiche Seiten.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-Benutzer',
-'changed' => 'gänderd',
-'created' => 'erstöd',
-'enotif_subject' => '[{{SITENAME}}] Dé Seiten „$PAGETITLE“ is voh $PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Olle Änderrungen auf oan Blick: $1',
 'enotif_lastdiff' => 'Schaug auf $1 noch derer Änderrung.',
 'enotif_anon_editor' => 'Anonymer Benutzer $1',
@@ -1158,6 +1155,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',
@@ -1170,10 +1169,10 @@ Ryckmödungen und a weidre Hüf: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'delete-legend' => 'Léschen',
 'historywarning' => "'''Ochtung:''' Dé Seiten, dé du léschen mecherst, hod a Versiónsgschicht mid epper $1 {{PLURAL:$1|Versión|Versiónen}}:",
 'confirmdeletetext' => "Du bist dabei, a Seiten mid olle zuaghering ödern Versiónen z' léschen. Bittscheh bstätig dodazua, daas da d' Kónsequenzen bewusst san und daas du in Ywereihstimmung mid d' [[{{MediaWiki:Policy-url}}|Richtlinien]] haundelst.",
-'actioncomplete' => 'Akzión beéndt',
-'actionfailed' => 'Akzión föögschlong',
+'actioncomplete' => 'Aktion beendt',
+'actionfailed' => 'Akzion fejgschlogn',
 'deletedtext' => '„$1“ is glöscht worn. Im $2 findn Sie a Listn vo de letzten Löschungen.',
-'dellogpage' => 'Lésch-Logbiache',
+'dellogpage' => 'Lesch-Logbuach',
 'deletionlog' => 'Lösch-Logbuach',
 'reverted' => 'Auf a oide Version zruckgesetzt',
 'deletecomment' => 'Grund:',
@@ -1186,13 +1185,13 @@ Ryckmödungen und a weidre Hüf: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'delete-edit-reasonlist' => 'Léschgrynd beorwaten',
 
 # Rollback
-'rollbacklink' => 'Zrucksétzen',
+'rollbacklink' => 'Zrucksetzn',
 'rollbackfailed' => 'Zruckésétzen gscheiterd',
 'cantrollback' => "D' Änderrung kauh néd zruckégsétzd wern, weis koane friarern Autorn gibt.",
 
 # Protect
-'protectlogpage' => 'Seitenschutz-Logbuach',
-'protectedarticle' => 'hod „[[$1]]“ gschytzd',
+'protectlogpage' => 'Seitnschutz-Logbuach',
+'protectedarticle' => 'hod „[[$1]]“ gschitzt',
 'modifiedarticleprotection' => 'hod an Schutz voh „[[$1]]“ gänderd',
 'unprotectedarticle' => 'Schutz voh „[[$1]]“ aufghóm',
 'prot_1movedto2' => 'hod [[$1]] noch [[$2]] vaschóm',
@@ -1228,8 +1227,8 @@ genauasó wia Details zum létzden Benutzer, der dé Seiten vur da Léschung bor
 Da aktuöje Text voh da gléschden Seiten is netter fyr Administraatorn zuagänglich.',
 'undelete-revision' => 'Geléschde Versión voh $1 (vom $4 um $5 Uar), $3:',
 'undeletebtn' => 'Wiederherstön',
-'undeletelink' => 'åschauh / wiaderherstön',
-'undeleteviewlink' => 'åschaung',
+'undeletelink' => 'oschaugn / wiadaheastejn',
+'undeleteviewlink' => 'oschaugn',
 'undeletereset' => 'Zrucksétzen',
 'undeletedfiles' => '$1 {{plural:$1|Datei|Dateien}} san wieda hergstellt worn',
 'undelete-search-box' => 'Suach noch gléschde Seiten',
@@ -1240,46 +1239,46 @@ Da aktuöje Text voh da gléschden Seiten is netter fyr Administraatorn zuagäng
 'namespace' => 'Namasramm:',
 'invert' => 'Auswoi umdraan',
 'namespace_association' => 'Zuagordnéter Nåmensraum',
-'blanknamespace' => '(Seiten)',
+'blanknamespace' => '(Seitn)',
 
 # Contributions
-'contributions' => 'Benutzerbeiträg',
-'contributions-title' => 'Benutzerbeiträg voh „$1“',
-'mycontris' => 'Meine Beidräg',
-'contribsub2' => 'Fyr $1 ($2)',
-'uctop' => '(aktuö)',
-'month' => 'und Monad',
-'year' => 'bis zum Jor:',
-
-'sp-contributions-newbies' => "Netter dé Beitrég voh d' neichen Benutzer åzoang",
+'contributions' => '{{GENDER:$1|Nutza}}beidreg',
+'contributions-title' => 'Nutzabeidräg vo „$1“',
+'mycontris' => 'Meine Beidreg',
+'contribsub2' => 'Vo $1 ($2)',
+'uctop' => '(aktuell)',
+'month' => 'und Monad:',
+'year' => 'Bis zan Joar:',
+
+'sp-contributions-newbies' => 'Nua Beidräg vo de neichn Nutza ozoagn',
 'sp-contributions-newbies-sub' => 'Fyr Neiling',
-'sp-contributions-blocklog' => 'Sperrlogbiaché',
+'sp-contributions-blocklog' => 'Sperrlogbuach',
 'sp-contributions-deleted' => 'Gléschde Beitrég',
-'sp-contributions-uploads' => 'Aufféglooderne Daatein',
-'sp-contributions-logs' => 'Logbiacher',
-'sp-contributions-talk' => 'Diskussión',
-'sp-contributions-search' => 'Suach noch Benutzerbeitrég',
-'sp-contributions-username' => 'IP-Adress óder Benutzernåm:',
-'sp-contributions-toponly' => 'Netter aktuelle Versiónen zoang',
-'sp-contributions-submit' => 'Suachen',
+'sp-contributions-uploads' => 'Affeglodane Datein',
+'sp-contributions-logs' => 'Logbiacha',
+'sp-contributions-talk' => 'Dischkrian',
+'sp-contributions-search' => 'Suach noch Nutzabeidräg',
+'sp-contributions-username' => 'IP-Adress oda Nutzanama:',
+'sp-contributions-toponly' => 'Nua aktuelle Versiona ozoagn',
+'sp-contributions-submit' => 'Suachn',
 
 # What links here
-'whatlinkshere' => 'Links auf dé Seiten',
-'whatlinkshere-title' => 'Seiten, dé noch „$1“ valinken',
-'whatlinkshere-page' => 'Seiten:',
-'linkshere' => "D' vóigernden Seiten valinken noch '''„[[:$1]]“''':",
-'nolinkshere' => "Koane Seiten valinkt zua '''„[[:$1]]“'''.",
-'isredirect' => 'Weiderloatungsseiten',
-'istemplate' => 'Vurlongeihbindung',
-'isimage' => 'Daateilink',
-'whatlinkshere-prev' => "{{PLURAL:$1|vorige|d'voring $1}}",
-'whatlinkshere-next' => "{{PLURAL:$1|nexde|d'nexdn $1}}",
+'whatlinkshere' => 'Links af de Seitn',
+'whatlinkshere-title' => 'Seitn, wo af „$1“ valinka',
+'whatlinkshere-page' => 'Seitn:',
+'linkshere' => "De foigandn Seitn valinka af '''„[[:$1]]“''':",
+'nolinkshere' => "Koa Seitn valinkt af '''„[[:$1]]“'''.",
+'isredirect' => 'Weidaloatungsseitn',
+'istemplate' => 'Vorlogneinbindung',
+'isimage' => 'Dateilink',
+'whatlinkshere-prev' => '{{PLURAL:$1|vorige|vorign $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|naxde|naxdn $1}}',
 'whatlinkshere-links' => '← Vaweise',
-'whatlinkshere-hideredirs' => 'Weidaleitungen $1',
-'whatlinkshere-hidetrans' => 'Vurlongeihbindung $1',
+'whatlinkshere-hideredirs' => 'Weidaloatunga $1',
+'whatlinkshere-hidetrans' => 'Vorlognehbindung $1',
 'whatlinkshere-hidelinks' => 'Links $1',
-'whatlinkshere-hideimages' => 'Daateilinks $1',
-'whatlinkshere-filters' => 'Füter',
+'whatlinkshere-hideimages' => '$1 Dateilinks',
+'whatlinkshere-filters' => 'Fuita',
 
 # Block/unblock
 'autoblockid' => 'Autómaatische Sperrung #$1',
@@ -1309,7 +1308,7 @@ Gib bittschee an Grund fyr d' Sperrn å.",
 'ipbenableautoblock' => "Sperr dé aktuö voh dém Benutzer gnutzde IP-Adress sówia autómaatisch olle fóiganden, voh dénen aus er Beorweitungen óder 's Auhléng voh Benutzerkóntós vasuacht.",
 'ipbsubmit' => 'IP-Adress/Benutzer sperrn',
 'ipbother' => 'Åndre Dauer (auf englisch):',
-'ipboptions' => '2 Stund:2 hours,1 Dog:1 day,3 Dog:3 days,1 Woch:1 week,2 Wochen:2 weeks,1 Monad:1 month,3 Monad:3 months,6 Monad:6 months,1 Jor:1 year, Leemslång:infinite',
+'ipboptions' => '2 Stund:2 hours,1 Dog:1 day,3 Dog:3 days,1 Woch:1 week,2 Wocha:2 weeks,1 Monat:1 month,3 Monat:3 months,6 Monat:6 months,1 Joar:1 year, Infinit:infinite',
 'ipbotheroption' => 'Åndre Dauer:',
 'ipbotherreason' => 'Ånderner/ergenznder Grund:',
 'ipbhidename' => 'An Benytzernåmen in Beorwaitungen und Linsten vastecken',
@@ -1333,20 +1332,20 @@ Zur da Aufheewung vo da Sperrn schau unter da [[Special:BlockList|Listen vo olle
 'ipblocklist-legend' => 'Suach noch am gsperrden Benytzer',
 'createaccountblock' => "'s erstön voh Benutzerkóntós is gsperrd",
 'emailblock' => 'E-Póst vaschicker is gsperrd',
-'blocklink' => 'sperrn',
-'unblocklink' => 'Freigeem',
-'change-blocklink' => 'Sperr ändern',
-'contribslink' => 'Beidräg',
+'blocklink' => 'Sperrn',
+'unblocklink' => 'Freigebm',
+'change-blocklink' => 'Sperr endan',
+'contribslink' => 'Beidreg',
 'emaillink' => 'E-Póst schicker',
 'autoblocker' => 'Autómaatische Sperr, wei du a gmoahsaume IP-Adress mim [[User:$1|$1]] bnutzd. Grund voh da Benutzersperrn: „$2“.',
-'blocklogpage' => 'Benutzersperrlogbiaché',
+'blocklogpage' => 'Sperrlogbuach',
 'blocklog-showlog' => "{{GENDER:$1|Der Benutzer|Dé Benutzerrin|Der Benutzer}} do is schoh friarer gsperrd worn. Es fóigt a Eihtrog aus'm Benutzersperrlogbiaché:",
 'blocklog-showsuppresslog' => "{{GENDER:$1|Der Benutzer|Dé Benutzerrin|Der Benutzer}} do is schoh friarer gsperrd und vastéckt worn. Es fóigt a Eihtrog aus'm Benutzersperrlogbiaché:",
-'blocklogentry' => 'hod „[[$1]]“ fyrn fóigenden Zeidraum gsperrd: $2; $3',
+'blocklogentry' => 'hod „[[$1]]“ gsperrt bis: $2; $3',
 'reblock-logentry' => "hod d' Sperrn voh „[[$1]]“ fyrn Zeidraum: $2 $3 gänderd.",
 'unblocklogentry' => "hod d' Sperr voh „$1“ aufghóm",
 'block-log-flags-anononly' => 'netter Anónyme',
-'block-log-flags-nocreate' => "'s erstön voh Benutzerkontós is gsperrd",
+'block-log-flags-nocreate' => 'Es Olegn vo Nutzakontn is gsperrt',
 'block-log-flags-noautoblock' => 'Autóblóck deaktivierd',
 'block-log-flags-noemail' => 'E-Post vaschicka gspead',
 
@@ -1396,18 +1395,18 @@ Bittschee gib außadem druntn in '''neichn''' Nãm vu da Seitn ei und schreib ku
 'talkexists' => "D' Seiten söwer is erfóigreich vaschóm worn, ower d' zuagherige Dischkrierseiten néd, weis mid dém Titel schoh oane gibt. Bittscheh kymmerd dé händisch ums zaummfyrn.",
 'movedto' => 'vaschóm auf',
 'movetalk' => "Waunns geet, d' Dischkrierseiten aa midvaschiam",
-'movelogpage' => 'Vaschiawungs-Logbiaché',
+'movelogpage' => 'Vaschiabungs-Logbuach',
 'movereason' => 'Grund:',
-'revertmove' => 'zruck vaschiam',
+'revertmove' => 'zruck vaschiabm',
 'delete_and_move' => 'Löschn und vaschiam',
 'delete_and_move_reason' => 'glöscht, um Plåtz fia Vaschiam zum macha',
 'selfmove' => 'Ursprungs- und Zielname sand gleich; a Seitn kann net auf sich selber verschom wern.',
 
 # Export
-'export' => 'Seiten exportirn',
+'export' => 'Seitn exportian',
 
 # Namespace 8 related
-'allmessagesname' => 'Nåm:',
+'allmessagesname' => 'Nama:',
 'allmessagesdefault' => 'Standardtext',
 'allmessagescurrent' => 'Aktuella Text',
 'allmessagestext' => 'Des is a Listen vo de MediaWiki-Systemtextt.
@@ -1415,8 +1414,8 @@ Bsuach bittschee de Saiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Loka
 'allmessagesnotsupportedDB' => "'''Special:Allmessages''' is im Moment net möglich, wei de Datenbank offline is.",
 
 # Thumbnails
-'thumbnail-more' => 'vagreessern',
-'thumbnail_error' => 'Feeler beim Erstön vom Vurschaubüd: $1',
+'thumbnail-more' => 'vagressan',
+'thumbnail_error' => 'Fehla ban Estejn vom Vorschaubuidl: $1',
 
 # Special:Import
 'importnotext' => 'Laar oder koa Text',
@@ -1425,67 +1424,69 @@ Bsuach bittschee de Saiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Loka
 'importlogpage' => 'Import-Logbuach',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Deih Benutzerseiten',
-'tooltip-pt-mytalk' => 'Deih Diskussiónsseiten',
-'tooltip-pt-preferences' => 'Eigerne Eihstellungen',
-'tooltip-pt-watchlist' => "Listen voh d' Seiten, dést beówochst",
-'tooltip-pt-mycontris' => 'Listen voh dé eigernen Beiträg',
-'tooltip-pt-login' => 'Das ma sé ånmödt, werd zwor gern gseeng, is ower koah Pflicht néd.',
-'tooltip-pt-logout' => 'Obmöden',
-'tooltip-ca-talk' => 'Diskussión zum Seiteninhoid',
-'tooltip-ca-edit' => "Seiten beorweiden. Bittscheh vurm Speichern d' Vurschaufunkzión brauchen",
-'tooltip-ca-addsection' => 'Neichen Obschnit åfånger',
-'tooltip-ca-viewsource' => 'Dé Seiten is gschytzd. Da Quötext kå ower ågschaud wern.',
-'tooltip-ca-history' => 'Friarerne Versiónen voh derer Seiten',
-'tooltip-ca-protect' => 'Seiten schytzen',
+'tooltip-pt-userpage' => 'Dei Nutzaseitn',
+'tooltip-pt-mytalk' => 'Dei Dischkriaseitn',
+'tooltip-pt-preferences' => 'Deine Preferenzn',
+'tooltip-pt-watchlist' => 'A Listn vo Seitn, wos du beobochtest',
+'tooltip-pt-mycontris' => 'A Listn vo de oagna Beidreg',
+'tooltip-pt-login' => 'Warad schee, wensd di omejdn dadast, es is oba ned zwingend nedig.',
+'tooltip-pt-logout' => 'Auslogga',
+'tooltip-ca-talk' => 'Dischkrian iban Seitninhoid',
+'tooltip-ca-edit' => 'Du konsd de Seitn beorbatn. Bittschee vawendt in Vorschau-Knopf bevorsd speichasd.',
+'tooltip-ca-addsection' => 'Neichn Obschnitt ofanga',
+'tooltip-ca-viewsource' => 'De Seitn is gschitzd. In Quejtext konsda oschaugn.',
+'tooltip-ca-history' => 'Friaare Versiona vo dera Seitn',
+'tooltip-ca-protect' => 'Seitn schitzn',
 'tooltip-ca-unprotect' => 'Seitenschutz ändern',
-'tooltip-ca-delete' => 'De Seitn löschen',
+'tooltip-ca-delete' => 'De Seitn leschn',
 'tooltip-ca-undelete' => 'Eihträg wiederherstön, bevur dé Seiten gléscht worn is.',
-'tooltip-ca-move' => 'Dé Seiten vaschiam',
-'tooltip-ca-watch' => 'Dé Seiten zua persénlichen Beówochtungslisten dazua doah',
-'tooltip-ca-unwatch' => 'Dé Seiten voh da persénlichen Beówochtungslisten entferner',
-'tooltip-search' => '{{SITENAME}} durchsuachen',
-'tooltip-search-go' => 'Gee direkt zua derer Seiten, dé exakd am eihgeewernen Nåm entspricht.',
-'tooltip-search-fulltext' => 'Suach noch Seiten, dé dén Text enthoiden',
-'tooltip-p-logo' => 'Hauptseiten',
-'tooltip-n-mainpage' => 'Hauptseiten åzoang',
-'tooltip-n-mainpage-description' => 'Hauptseiten bsuachen',
-'tooltip-n-portal' => "Ywers Portoi, wos d' mochen kåst, wó eppers z' finden is",
-'tooltip-n-currentevents' => 'Hintergrundinformaziónen ywer akutelle Ereigniss',
-'tooltip-n-recentchanges' => 'Listen voh dé létzden Änderrungen auf {{SITENAME}}',
-'tooltip-n-randompage' => 'Zuaföige Seiten',
-'tooltip-n-help' => 'Hüfeseiten åzoang',
-'tooltip-t-whatlinkshere' => 'Listen voh olle Seiten, dé do her zoang',
-'tooltip-t-recentchangeslinked' => "D' létzden Änderrungen auf dé Seiten, dé voh do valinkt san",
+'tooltip-ca-move' => 'De Seitn vaschiabm',
+'tooltip-ca-watch' => 'De Seitn zua Beobochtungslistn dazua doa',
+'tooltip-ca-unwatch' => 'De Seitn vom "Beobochta" wegga doa',
+'tooltip-search' => '{{SITENAME}} duachsuacha',
+'tooltip-search-go' => 'Geh direkt zua Seitn mit exakt im Nama, wens de gibt.',
+'tooltip-search-fulltext' => 'Suach noch Seitn, wo den Text enthoiden',
+'tooltip-p-logo' => 'Schau da de Hoamseitn o',
+'tooltip-n-mainpage' => 'Schau da de Hoamseitn o',
+'tooltip-n-mainpage-description' => 'De Hoamseitn bsuacha',
+'tooltip-n-portal' => 'Ibas Projekt, wos d mocha konst, wo wos z findn is',
+'tooltip-n-currentevents' => 'Hintergrundinformaziónen ywer akutelle Ereigniss
+
+Hintagrundinfo za Neiigkeidn',
+'tooltip-n-recentchanges' => 'A Listn vo de letztn Endarunga in da {{SITENAME}}',
+'tooltip-n-randompage' => 'A Zuafoisseitn afruafa',
+'tooltip-n-help' => 'Huifseitn ozoagn',
+'tooltip-t-whatlinkshere' => 'A Listn vo oin Seitn, wo do hea zoagn',
+'tooltip-t-recentchangeslinked' => 'De letztn Endarunga af Seitn, de wo do hea valinka',
 'tooltip-feed-rss' => 'RSS-Feed vo derer Saiten',
-'tooltip-feed-atom' => 'Atom-Feed vo derer Saiten',
-'tooltip-t-contributions' => "D' Listen voh d' Beiträg voh dém Benutzer åschauh",
-'tooltip-t-emailuser' => 'Dém Benutzer a E-Post schicken',
+'tooltip-feed-atom' => 'Atom-Feed vo dera Seitn',
+'tooltip-t-contributions' => 'A Listn vo de Nutzabeidreg',
+'tooltip-t-emailuser' => 'Em Nutza a Mail schicka',
 'tooltip-t-upload' => 'Datein affelodn',
-'tooltip-t-specialpages' => 'Listen voh olle Speziaalseiten',
-'tooltip-t-print' => 'Druckåsicht voh derer Seiten',
-'tooltip-t-permalink' => 'Dauerhofter Link zua derer Seitenversión',
-'tooltip-ca-nstab-main' => 'Seiteninhoid åzoang',
-'tooltip-ca-nstab-user' => 'Benutzerseiten åzoang',
+'tooltip-t-specialpages' => 'A Listn vo olle Spezialseitn',
+'tooltip-t-print' => 'Druckosicht za dea Seitn',
+'tooltip-t-permalink' => 'Dauerhofta Link za dea Seitnversion',
+'tooltip-ca-nstab-main' => 'Seitninhoid ozoagn',
+'tooltip-ca-nstab-user' => 'Nutzaseitn oschaugn',
 'tooltip-ca-nstab-media' => 'Meediendaateiseiten åzoang',
-'tooltip-ca-nstab-special' => 'Dés is a Speziaalseiten dést néd beorweiden kåst.',
-'tooltip-ca-nstab-project' => 'Portoiseiten åzoang',
-'tooltip-ca-nstab-image' => 'Daateiseiten åzoang',
+'tooltip-ca-nstab-special' => 'Des is a Spezialseitn, wosd ned beorbatn konst.',
+'tooltip-ca-nstab-project' => 'Projektseitn ozoagn',
+'tooltip-ca-nstab-image' => 'Dateiseiten ozoagn',
 'tooltip-ca-nstab-mediawiki' => 'MediaWiki-Systémtext åzoang',
-'tooltip-ca-nstab-template' => 'Vurlog åzoang',
+'tooltip-ca-nstab-template' => 'Vorlog ozoagn',
 'tooltip-ca-nstab-help' => 'Huifseitn oozoang',
-'tooltip-ca-nstab-category' => 'Kategorieseiten åzoang',
-'tooltip-minoredit' => 'Dé Änderrung ois a kloane markirn.',
-'tooltip-save' => 'Änderrungen speichern',
-'tooltip-preview' => 'A Vurschau voh dé Änderrungen an derer Seiten. Bittscheh vurm Speichern bnutzen!',
-'tooltip-diff' => 'Änderrungen am Text zoang',
-'tooltip-compareselectedversions' => 'Unterschiade zwischen zwoa ausgwöde Versiónen voh derer  Seiten vagleichen.',
-'tooltip-watch' => 'Dé Seiten zua persénlichen Beówochtungslisten dazua doah',
+'tooltip-ca-nstab-category' => 'Kategorieseitn ozoagn',
+'tooltip-minoredit' => 'Ois kloane Endarung markian.',
+'tooltip-save' => 'Endarunga speichan',
+'tooltip-preview' => 'A Vorschau vo de Endarunga an dea Seitn. Vorm Speichan bittschee nutzn!',
+'tooltip-diff' => 'Endarunga am Text zoagn',
+'tooltip-compareselectedversions' => 'De Untaschied zwischn zwoa Versiona oschaugn.',
+'tooltip-watch' => 'De Seitn zua Beobochtungslistn gebm',
 'tooltip-recreate' => 'Seitn nei erstelln, obwoi sie glöscht worn is.',
 'tooltip-upload' => 'Start as Aufféloon',
-'tooltip-rollback' => 'Sétzd olle Beiträg, dé vom gleichen Benutzer gmocht worn san, mid am oanzing Klick auf dé Versión zruck, dé aktuö gwén is, bevur der oane zum werkeln ågfånger hod.',
-'tooltip-undo' => 'Mocht netter dé oane Änderrung ryckgängég und zoagts Resuitot in da Vurschau å, damid in da Zåmmfossungszeiln a Begryndung ågeem wern kå.',
-'tooltip-summary' => 'Gib a kurze Zåmmfossung eih',
+'tooltip-rollback' => 'Setzt olle Endarunga zruck, de wo vom gleichn Nutza gmocht worn san.',
+'tooltip-undo' => 'Nimmt nua de oane Endarung zruck und eameglicht an Grund ozgebm (Zammfossungszein).',
+'tooltip-summary' => 'Gib a kuaze Zammfossung ein',
 
 # Attribution
 'lastmodifiedatby' => 'Dé Seiten is zletzt am $1 um $2 voh $3 gänderd worn.',
@@ -1500,14 +1501,14 @@ Bsuach bittschee de Saiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Loka
 'filedelete-missing' => 'De Datei „$1“ ko net glöscht wern, weils es net gibt.',
 
 # Browsing diffs
-'previousdiff' => '← Zum vorigen Versionsunterschied',
-'nextdiff' => 'zum nextn Untaschied in de Veasionen →',
+'previousdiff' => '← Zan vorign Versionsuntaschied',
+'nextdiff' => 'Zan naxtn Versionsuntaschied →',
 
 # Media information
-'file-info-size' => '$1 × $2 Pixel, Daateigreess: $3, MIME-Typ: $4',
-'file-nohires' => 'Es gibt koah heecherne Auflésung.',
-'svg-long-desc' => 'SVG-Datei, Basisgreß: $1 × $2 Pixl, Dateigreß: $3',
-'show-big-image' => 'Versión in heecherner Auflésung',
+'file-info-size' => '$1 × $2 Pixel, Dateigress: $3, MIME-Typ: $4',
+'file-nohires' => 'Es gibt koa hehare Aflesung.',
+'svg-long-desc' => 'SVG-Datei, Basisgress: $1 × $2 Pixl, Dateigress: $3',
+'show-big-image' => 'Volle Aflesung',
 
 # Special:NewFiles
 'newimages' => 'Neiche Daatein',
@@ -1516,18 +1517,20 @@ Bsuach bittschee de Saiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Loka
 'ilsubmit' => 'Suach',
 
 # Bad image list
-'bad_image_list' => "Formaat:
+'bad_image_list' => 'Format wia foigt:
 
-Netter Zeun, dé mid am * åfångern, wern ausgwertt. Ois ersters noch 'm * muass a Link auf a unerwynschde Daatei steh.
-Dodrauf fóigende Links auf Seiten in da söm Zeun definirn Ausnåmen, in dénen eanern Zåmmenhång dé Daatei trótzdém vawendt wern derf.",
+Nua Zein, de wo mit am * ofanga, wean ausgweatet. 
+Da easchte Link in da Zein, muass a Link af a schlechte Datei sei.
+Irgendwejche foigandn Links in da sejm Zein definian Ausnahma, z. B. Seitn wo de Datei trotzdem vawendt wean deaf.',
 
 # Metadata
-'metadata' => 'Metadaaten',
-'metadata-help' => 'Dé Daatei enthoit weiderne Informaziónen, dé in da Reegel voh da Digitoikammera óder am vawenderden Scanner ståmmern. Durch a noochträgliche Beorweidung voh da Originoidaatei kennern oanige Deteils vaänderd worn seih.',
+'metadata' => 'Metadatn',
+'metadata-help' => 'De Datei enthoit weidane Infos, wo woarscheinli vo da vawendadn Digitalkamera oda Scanna kema.
+Wen de Datei vaendat worn is, kena a poar Detail andasta sei.',
 'metadata-expand' => 'Erweitate Deteus eiblendn',
 'metadata-collapse' => "D' erweiterden Details eihblenden",
-'metadata-fields' => "D' fóigernden Föder voh dé EXIF-Metadaaten, dé in dém MediaWiki-Systémtext ågeem san, wern auf Büdelbschreiwungsseiten mid eihkloppter Metadaatentabön åzoagt.
-Weiderne wern standardmässig néd åzoagt.
+'metadata-fields' => 'De foigandn Fejda vo de EXIF-Metadaten, wo im MediaWiki-Systemtext ogebm san, wean auf Buidbschriebseitn mid eikloppta Metadatentabejn ozoagt.
+Weidane wean standardmassi ned ozoagt.
 * make
 * model
 * datetimeoriginal
@@ -1540,7 +1543,7 @@ Weiderne wern standardmässig néd åzoagt.
 * imagedescription
 * gpslatitude
 * gpslongitude
-* gpsaltitude",
+* gpsaltitude',
 
 # EXIF tags
 'exif-gpsspeed' => 'Gschwindigkeid vom GPS-Empfänger',
@@ -1548,8 +1551,8 @@ Weiderne wern standardmässig néd åzoagt.
 'exif-componentsconfiguration-0' => 'Gibts néd',
 
 # External editor support
-'edit-externally' => 'Dé Daatei mid am externen Prógramm beorweiden',
-'edit-externally-help' => '(Schaug unter [//www.mediawiki.org/wiki/Manual:External_editors Installaziónsåweisungen] fyr weiderne Informaziónen)',
+'edit-externally' => 'De Datei mid am externa Programm beorbatn',
+'edit-externally-help' => '(Schaug unter [//www.mediawiki.org/wiki/Manual:External_editors Installationsoweisunga] fia weidane Infos)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'olle',
@@ -1607,16 +1610,16 @@ Bittscheh d' noraale Vurschau bnutzen.",
 'watchlistedit-raw-submit' => 'Beówochtungslisten aktualisirn',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'Änderrungen vafóing',
-'watchlisttools-edit' => 'normaal beorwaten',
-'watchlisttools-raw' => 'Im Listenformaat beorwaten',
+'watchlisttools-view' => 'Mei Beobochta: Endarunga',
+'watchlisttools-edit' => 'normal beorbatn',
+'watchlisttools-raw' => 'Im Roh-Listnformat beorbatn',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussión]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'Unbekaunnter Extension-Tag „$1“',
-'duplicate-defaultsort' => 'Ówocht: Da Sortiarungsschlyssel "$2" ywerschreibt dén vurher vawendten Schlyssel "$1".',
+'duplicate-defaultsort' => 'Obocht: Da Sortiasschlossl "$2" ibaschreibt in friaan Schlissl "$1".',
 
 # Special:Version
 'version' => 'Versión',
@@ -1672,18 +1675,18 @@ Bittscheh d' noraale Vurschau bnutzen.",
 'intentionallyblankpage' => 'Dé Seiten is obsichtlich óne an Inhoid. Sie werd fyr Benchmarks vawendt',
 
 # External image whitelist
-'external_image_whitelist' => "#Dé Zeiln néd vaändern<pre>
-#Unterhoib kennern Fragmentt voh reeguläre Ausdryck (da Teil zwischen de //) eihgeem wern.
-#Dé wern mid d' URL voh Büder aus externe Quön vaglichen
-#A pósitiaver Vagleich fyrd zur da Åzoag vom Büd, sunst werds Büdel netter ois Link åzoagt
-#Zeiln, dé mid am # åfångern, wern ois Kommentar bhåndelt
-#Es werd néd zwischen da Gróss- und Kloahschreiwung unterschian
+'external_image_whitelist' => '#De Zein ned vaendan<pre>
+#Untahoib kennan Fragment vo reguleare Ausdrick (da Tei zwischn de //) eigebm wean.
+#De wean mid de URL vo externa Buidl vaglicha (Hotlinks)
+#A positiva Vagleich fiat zua Buidozoag, sonst wead nua a Link zan Buid ozoagt
+#Zein, wo mit # ofanga, wean ois Kommentar bhandlt
+#Grouss-/Kloaschreibung is irrelevant
 
-#Fragmentt vo reeguläre Ausdryck noch derer Zeiln eihtrong. Dé Zeiln néd vaändern</pre>",
+#Fragment vo reguleare Ausdrick noch dera Zein eitrong. De Zein ned vaendan</pre>',
 
 # Special:Tags
 'tags' => 'Gütige Änderrungsmarkiarunen',
-'tag-filter' => '[[Special:Tags|Markiarungs]]-Füter:',
+'tag-filter' => '[[Special:Tags|Markiarungs]]-Fuita:',
 'tag-filter-submit' => 'Füter',
 'tags-title' => 'Markiarungen',
 'tags-intro' => 'Dé Seiten zoagt olle Markiarungen, dé fyr Beorweidungen vawendt wern, sówia dé Bedeitung voh dé.',
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 94ae3bc..e99e889 100644 (file)
@@ -16,6 +16,8 @@
 
 $fallback = 'fa';
 
+$rtl = true;
+
 $namespaceNames = array(
        NS_MEDIA            => 'مدیا',
        NS_SPECIAL          => 'حاص',
@@ -509,9 +511,6 @@ $2',
 
 شما تونیت چه {{SITENAME}} ناشناس استفاده کنیت یا شما تونیت دگه وراد بیت گون دگه یا هما کاربر.
 توجه بیت که لهتی صفحات شاید په داب هما وهدی که شما وراد بوتتیت پیش درگ بند تا وهدی که ذخیره بروزر وتی پاک کنیت.",
-'welcomecreation' => '== وش آتکی،$1! ==
-شمی حساب شر بیت.
- مه شموشیت وتی [[Special:Preferences|{{SITENAME}} ترجیحات]] ترجیحات عوض کنیت',
 'yourname' => 'نام کاربری',
 'yourpassword' => 'کلمه رمز',
 'yourpasswordagain' => 'کلمه رمز دگه نویس',
@@ -758,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' => 'شما را اجازت په شرکتن نوکین صفحات نیست.',
@@ -1213,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' => 'وانگ این صفحه',
@@ -1705,10 +1705,6 @@ PICT # misc.
 'activeusers-from' => 'پیشدار کاربرانی که شروع بنت گون :‌',
 'activeusers-noresult' => 'هچ کاربری درگیزگ نه بیت',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ورود شرکتن کاربر',
-'newuserlogpagetext' => '.شی یک ورودی چه شرکتن کاربر',
-
 # Special:ListGroupRights
 'listgrouprights' => 'حقوق گروه کاربر',
 'listgrouprights-summary' => 'جهلیگین یک لیستی چه گروهان کاربری تعریف بوتگین ته ای ویکی انت گون آیانی حق دسترسی آن همراهنت.
@@ -1787,11 +1783,7 @@ PICT # misc.
 
 'enotif_mailer' => '{{SITENAME}} ایمیل دیم دهوک اخطاری',
 'enotif_reset' => 'نشان کن کل صفحات په داب چارتگین',
-'enotif_newpagetext' => 'شی یک نوکین صفحه ایت.',
 'enotif_impersonal_salutation' => '{{SITENAME}} کاربر',
-'changed' => 'عوض بوت.',
-'created' => 'شربوتت',
-'enotif_subject' => '{{SITENAME}} صفحه $PAGETITLE بوتت $CHANGEDORCREATED گون $PAGEEDITOR',
 'enotif_lastvisited' => 'بچار  $1 په کلین تغییرات چه شمی آهری چارگ.',
 'enotif_lastdiff' => 'بچار $1 په گندگ ای تغییر.',
 'enotif_anon_editor' => 'ناشناس کاربر $1',
@@ -1818,6 +1810,8 @@ $NEWPAGE
 
 نظرات و گیشترین کمک:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'شربوتت',
+'changed' => 'عوض بوت.',
 
 # Delete
 'deletepage' => 'حذف صفحه',
@@ -3129,5 +3123,6 @@ $5
 'revdelete-restricted' => 'محدودیت آن په مدیران سیستم بوت',
 'revdelete-unrestricted' => 'به زور چه مدیران سیستم محدودیتان',
 'newuserlog-byemail' => 'کلمه رمز گون ایمیل دیم دهگ بوت',
+'rightsnone' => '(هچ یک)',
 
 );
index 48cb369..9f52508 100644 (file)
@@ -146,7 +146,7 @@ $messages = array(
 
 'underline-always' => 'Pirmi',
 'underline-never' => 'Nungka',
-'underline-default' => 'Kilyaw na panugmad',
+'underline-default' => 'Kublit o kilyaw na panugmad',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Baguhon an estilo nin kalwig sa sinasakupan',
@@ -231,8 +231,9 @@ $messages = array(
 'newwindow' => '(minabukas sa bàgong bintanà)',
 'cancel' => 'Kanselaron',
 'moredotdotdot' => 'Kadagdagan...',
-'mypage' => 'An sakóng pahina',
-'mytalk' => 'An sakóng olay',
+'morenotlisted' => 'Dakol pa an bakong listado...',
+'mypage' => 'An Pahina',
+'mytalk' => 'Orolayan',
 'anontalk' => 'Olay para kaining IP address',
 'navigation' => 'Nabigasyon',
 'and' => '&#32;asin',
@@ -264,6 +265,7 @@ $messages = array(
 'namespaces' => 'Mga espasyong ngaran',
 'variants' => 'Mga pinalaen',
 
+'navigation-heading' => 'Listahan sa Nabigasyon',
 'errorpagetitle' => 'Salâ',
 'returnto' => 'Magbalik sa $1.',
 'tagline' => 'Gikan sa {{SITENAME}}',
@@ -473,7 +475,7 @@ Hapót: $2',
 'actionthrottled' => 'An aksyon pinagpugulan',
 'actionthrottledtext' => 'Bilang sarong pangontra sa spam, ika limitadong sanang himoon ining aksyon sa kadakulon na beses sa halipot sanang panahon, asin ika nakasobra na sa limitasyong ini.
 Paki-otroha giraray sa nagkapirang minuto sana.',
-'protectedpagetext' => 'An pahinang ini pigsará tangarig pogolon an paghirá.',
+'protectedpagetext' => 'Ining pahina protektado tanganing malikayan an pagliliwat o ibang aksyon.',
 'viewsourcetext' => 'Pwede mong hilingón asin arógon an ginikanan kan pahinang ini:',
 'viewyourtext' => "Saimong mahihiling asin makokopya an gikanan kan '''saimong mga pinagriliwat''' sa pahinang ini:",
 'protectedinterface' => 'An pahinang ini nagtatao nin panlaog-olay para sa software, asin protektado tangaring malikayan an abuso.
@@ -508,9 +510,9 @@ An administrador na iyo an nagkandado kaini nagpahayag kaining kapaliwanagan: "$
 
 Ika makakadagos pa sa paggamit kan {{SITENAME}} na dai nagpapabisto, o ika <span class='plainlinks'>[$1 Maglaog giraray]</span> bilang pareho o bilang ibang paragamit.
 Giromdoma na an ibang mga pahina mapuwedeng padagos na magpapahiling siring baga na kun ika garo yaon man sana sa laog, sagkod na saimong malinigan mo an sarayan sa kilyawan.",
-'welcomecreation' => '== Maogmang Pag-abot, $1! ==
-An saimong panindog (account) naimukna na tabi.
-Dae ka man tabi malingaw na ribayan an saimong [[Special:Preferences|{{SITENAME}} mga kabôtan]].',
+'welcomeuser' => 'Marhayong pag-abot, $1!',
+'welcomecreation-msg' => 'An saimong panindog pinagmukna na.
+Dae malingaw na liwaton an saimong [[Special:Preferences|{{SITENAME}} mga kamuyahan]].',
 'yourname' => 'Pangaran kan paragamit:',
 'yourpassword' => 'Pasa-taramon:',
 'yourpasswordagain' => 'Pakilaog giraray kan sekretong panlaog:',
@@ -606,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',
@@ -666,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',
 
@@ -793,7 +797,7 @@ An pinakahuring entrada kan pagkubkob nakahaya sa ibaba bilang reperensiya:',
 'note' => "'''Paisi:'''",
 'previewnote' => "'''Giromdoma na ini sarong patanaw pa sana.'''
 An saimong mga pinagriliwat dae pa tabi naitatagama!",
-'continue-editing' => 'Ipagpadagos an pagliliwat',
+'continue-editing' => 'Magduman sa lugar nin pagliliwat',
 'previewconflict' => 'Mahihilíng sa patànaw na ini an tekstong nasa itaas na lugar nin paghirá arog sa maipapahiling kun ini an itatagama mo.',
 'session_fail_preview' => "'''Despensa! Dai mi naipadagos an paghirá mo huli sa pagkawara nin datos kan sesyon.
 Probaran tabì giraray. Kun dai man giraray magibo, probaran na magluwas dangan maglaog giraray.'''",
@@ -848,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.',
@@ -1173,7 +1176,7 @@ Prubaran na panigmitan an saimong kahaputan nin ''all:'' sa paghanap kan gabos n
 
 # Preferences page
 'preferences' => 'Mga kabòtan',
-'mypreferences' => 'Mga kabòtan ko',
+'mypreferences' => 'Mga Kamuyahan ko',
 'prefs-edits' => 'Bilang kan mga hirá:',
 'prefsnologin' => 'Dai nakalaog',
 'prefsnologintext' => 'Ika dapat na magin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakalaog na]</span> tanganing tuytuyon an mga kabotan nin paragamit.',
@@ -1249,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 parágamit:',
-'uid' => 'ID kan parágamit:',
-'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:',
@@ -1401,12 +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',
-'rightsnone' => '(mayô)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha ining pahina',
@@ -1636,6 +1640,7 @@ Kun an problema yaon pa, pakikontak tabi nin sarong [[Special:ListUsers/sysop|ad
 'backend-fail-notsame' => 'Bakong magkakaparehong sagunson yaon na po sa $1.',
 'backend-fail-invalidpath' => '$1 bakong balidong agihan sa pagsasaray.',
 'backend-fail-delete' => 'Dae makakapura kan sagunson $1.',
+'backend-fail-describe' => 'Dae makakaliwat nin meta-datos para sa sagunson na #$1".',
 'backend-fail-alreadyexists' => 'An sagunson $1 eksistido na po.',
 'backend-fail-store' => 'Dae makakapagsaray nin sagunson an $1 sa $2.',
 'backend-fail-copy' => 'Dae makakakopya nin sagunson $1 pasiring sa $2.',
@@ -2020,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 pantsambang baraha arog baka kan "*.wikipedia.org" mapuwedeng gamiton.
-Minakaipo kisera sarong halangkaw na mugtak nin kinasakupan, halimbawa "*.org".<br />
-Suportadong mga panundan: <code>$1</code> (dae magdagdag arinman kaini sa saimong paghahanap).',
+'linksearch-text' => 'Mga tsambang baraha arog baka kan "*.wikipedia.org" na puwedeng paggamiton.
+Minakaipo kisera halangkaw na kamugtakan nin kinasakupan, halimbawa "*.org".<br />
+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.',
 
@@ -2041,10 +2046,6 @@ Suportadong mga panundan: <code>$1</code> (dae magdagdag arinman kaini sa saimon
 '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.
@@ -2073,8 +2074,8 @@ para makapadara nin ''e''-surat sa ibang parágamit.",
 'emailuser-title-target' => 'E-surat kaining {{GENDER:$1|paragamit}}',
 'emailuser-title-notarget' => 'E-surat na paragamit',
 'emailpage' => 'E-suratan an parágamit',
-'emailpagetext' => 'Ika makakagamit kan porma na yaon sa ibaba tanganing magpadara nin e-surat na mensahe sa paragamit na ini.
-An e-surat na adres na saimong ilalaog sa [[Special:Preferences|saimong paragamit kagustuhan]] magluluwas bilang iyo an "Gikan ki" adres kan e-surat, kaya an sinuratan makakapagsimbag direkta mismo saimo.',
+'emailpagetext' => 'Ika makakagamit kan porma na yaon sa ibaba sa pagpadara nin mensahe na e-surat sa {{GENDER:$1|paragamit}}.
+An e-surat na estada sa saimong pinaglaog sa [[Special:Preferences|saimong paragamit na mga kamuyahan]] ipapahiling bilang iyo an "Gikan sa" estada kan e-surat, kaya an resipiyente makakapagsimbag direkta mismo saimo.',
 'usermailererror' => 'Error manonongod sa korreong binalik:',
 'defemailsubject' => '{{SITENAME}} e-surat gikan sa paragamit "$1"',
 'usermaildisabled' => 'Paragamit na e-surat pinagpundo',
@@ -2105,18 +2106,15 @@ An e-surat na adres na saimong ilalaog sa [[Special:Preferences|saimong paragami
 
 # Watchlist
 'watchlist' => 'Pigbabantayan ko',
-'mywatchlist' => 'Babantáyan ko',
+'mywatchlist' => 'Bantay-listahan',
 'watchlistfor2' => 'Para ki $1 $2',
 'nowatchlist' => 'Mayo ka man na mga bagay saimong lista nin pigbabantayan.',
 'watchlistanontext' => 'Mag $1 tabi para mahiling o maghira nin mga bagay saimong lista nin mga pigbabantayan.',
 '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',
@@ -2144,19 +2142,23 @@ Kun boot mong halîon an páhina sa pigbabantayan mo sa maabot na panahon, pindo
 
 'enotif_mailer' => '{{SITENAME}} Kartero nin isi',
 'enotif_reset' => 'Markahan an gabos na mga binisitang pahina',
-'enotif_newpagetext' => 'Bâgo ining pahina.',
 'enotif_impersonal_salutation' => '{{SITENAME}} parágamit',
-'changed' => 'pigbâgo',
-'created' => 'piggibo',
-'enotif_subject' => 'An pahinang {{SITENAME}} na $PAGETITLE binago $CHANGEDORCREATED ni $PAGEEDITOR',
+'enotif_subject_deleted' => '{{SITENAME}} pahina $1 pinagpura ni {{gender:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}} pahina $1 pinagmukna ni {{gender:$2|$2}}',
+'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 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.',
+'enotif_body_intro_changed' => 'An {{SITENAME}} pahina $1 pinagliwat sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
 'enotif_lastvisited' => 'Hilingón an $1 para sa gabos na mga pagbâgo poon kan huring bisita.',
 'enotif_lastdiff' => 'Hilingón an $1 tangarig mahiling an pagbâgong ini.',
 'enotif_anon_editor' => 'dai bistong parágamit $1',
-'enotif_body' => 'Namomotang $WATCHINGUSERNAME,
-
-An {{SITENAME}} pahina $PAGETITLE pinagmukna $CHANGEDORCREATED kan $PAGEEDITDATE ni $PAGEEDITOR, hilngon sa $PAGETITLE_URL para sa presenteng rebisyon.
+'enotif_body' => 'Namumutan na $WATCHINGUSERNAME,
 
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Sumaryo kan paraliwat: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2181,6 +2183,8 @@ $UNWATCHURL
 
 Balik-simbag asin kadagdagang asistensiya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'piggibo',
+'changed' => 'pigbâgo',
 
 # Delete
 'deletepage' => 'Paraon an pahina',
@@ -2252,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ó:',
@@ -2266,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',
@@ -2365,9 +2371,9 @@ $1",
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Mga kontribusyon kan parágamit',
+'contributions' => '{{GENDER:$1|Paragamit}} na mga kaambagan',
 'contributions-title' => 'Mga kontribusyon kan paragamit para sa $1',
-'mycontris' => 'Mga ambág ko',
+'mycontris' => 'Mga Kaarambagan',
 'contribsub2' => 'Para sa $1 ($2)',
 'nocontribs' => 'Mayong mga pagbabago na nahanap na kapadis sa ining mga criteria.',
 'uctop' => '(alituktok)',
@@ -2408,7 +2414,7 @@ An pinakahuring entrada sa talaan nin pagbara nakahaya sa ibaba bilang reperensi
 'whatlinkshere-hideredirs' => '$1 mga panukdong otro',
 'whatlinkshere-hidetrans' => '$1 kabaling-binalyuhan',
 'whatlinkshere-hidelinks' => '$1 mga kasugpon',
-'whatlinkshere-hideimages' => '$1 mga kasugpon kan imahe',
+'whatlinkshere-hideimages' => '$1 mga kasugpon nin mga sagunson',
 'whatlinkshere-filters' => 'Mga pansarà',
 
 # Block/unblock
@@ -2502,14 +2508,15 @@ An talaan nin pagbara nakahaya sa ibaba bilang reperensiya:',
 An talaan nin pagpaunlok ipinagtao sa ibaba para hilingan.',
 'blocklogentry' => 'binagat na [[$1]] na may oras nin pagpaso na $2 $3',
 'reblock-logentry' => 'pinagliwat an mga panuytoy nin pagkubkob para sa [[$1]] na igwang oras nin pagpaso kan $2 $3',
-'blocklogtext' => 'Ini sarong talaan kan mga aksyon nin paragamit sa pagkukubkob asin dae pagkukubkob.
-Awtomatikong pagkubkob kan IP address dae pinaglilista.
-Hilngon an [[Special:Blocklist|block list]] para sa listahan kan presenteng operasyonal na pagpangalad asin pagkukubkob.',
+'blocklogtext' => 'Ini sarong talaan kan paragamit na nagkukubkob asin dae nagkukubkob na mga aksyon.
+An awtomatikong pinagkubkob na IP na mga estada dae pinaglista.
+Hilngon sa [[Special:BlockList|listahan nin kubkob]] para sa listahan kan presenteng operasyonal na mga pagbabara asin mga pagkukubkob.',
 'unblocklogentry' => 'binawi an pagbagat $1',
 'block-log-flags-anononly' => 'Mga paragamit na anónimo sana',
 'block-log-flags-nocreate' => "pigpopondohán an paggibo nin ''account'",
 'block-log-flags-noautoblock' => 'pigpopondo an enseguidang pagbagat',
 'block-log-flags-noemail' => 'binagát an e-surat',
+'block-log-flags-nousertalk' => 'dae makakaliwat nin sadireng pahina nin olay',
 'block-log-flags-angry-autoblock' => 'pinakusog na awto-kubkob pinaandar',
 'block-log-flags-hiddenname' => 'pangaran nin paragamit itinago',
 'range_block_disabled' => 'Pigpopondo an abilidad kan sysop na maggibo nin bagat na hilera.',
@@ -2518,19 +2525,31 @@ Hilngon an [[Special:Blocklist|block list]] para sa listahan kan presenteng oper
 'ipb_hide_invalid' => 'Dae nakayanan na untukon ining panindog; ini gayod nagkaigwa nin kadakulon na mga pagliliwat.',
 'ipb_already_blocked' => 'An "$1" pinagkubkob na',
 'ipb-needreblock' => 'An $1 pinagkubkob na. Gusto mong liwaton an mga panuytoy?',
-'ipb-otherblocks-header' => 'Ibang {{PLURAL:$1|kubkob|mga kubkob',
+'ipb-otherblocks-header' => 'An ibang {{PLURAL:$1|kubkob|mga kubkob}}',
 'unblock-hideuser' => 'Ika dae makakakubkog kaining paragamit, siring na an saindang paragamit na ngaran itinatago.',
 'ipb_cant_unblock' => 'Error: Dai nahanap an ID nin binagat na $1. Puede ser na dati nang binawi an pagbagat kaini.',
+'ipb_blocked_as_range' => 'Kasalaan: An IP na estada $1 dae direktang pinagkubkob asin dae puwedeng dae makukubkob.
+Ini, baya, pinagkubkob bilang parte kan hidwas $2, na mapuwedeng daemakukubkob.',
 'ip_range_invalid' => 'Dai pwede ining serye nin IP.',
+'ip_range_toolarge' => 'An hidwas kan mga kubkob dakulaon kesa /$1 dae pinagtutugutan.',
+'blockme' => 'Kubkuba ako',
 'proxyblocker' => 'Parabagát na karibay',
+'proxyblocker-disabled' => 'Ining punksyon pinag-untok.',
 'proxyblockreason' => 'Binagat an saimong direccion nin IP ta ini sarong bukas na proxy. Apodon tabi an saimong Internet service provider o tech support asin ipaaram sainda ining seriosong problema nin seguridad.',
 'proxyblocksuccess' => 'Tapos.',
-'sorbsreason' => 'An saimong direccion in IP nakalista na bukas na proxy sa DNSBL na piggagamit kaining sitio.',
-'sorbs_create_account_reason' => "An IP mo nakalista bilang bukás ''proxy'' sa DNSBL na piggagamit kaining ''site''. Dai ka pwedeng maggibo ''account''",
+'sorbsreason' => 'An saimong IP na estada pinaglista bilang sarong bukas na proksi sa lang kan DNSBL na ginagamit kan {{SITENAME}}.',
+'sorbs_create_account_reason' => 'An saimong IP na estada pinaglista bilang sarong bukas na proksi sa laog kan DNSBL na ginagamit kan {{SITENAME}}.
+Ika dae makakamukna nin sarong panindog.',
+'cant-block-while-blocked' => 'Ika dae makakakubkob kan ibang mga paragamit mantang ika nakukubkob pa.',
+'cant-see-hidden-user' => 'An paragamit na pinagpubaran mong kubkubon pinagkubkob asin pinagtago na. Mala ta ika mayo nin karapatan na magtago nin paragamit, ika dae makakahiling or makakaliwat kan kinubkob na paragamit.',
+'ipbblocked' => 'Ika da makakakubkob or maghale nin kubkob sa ibang mga paragamit, nin huli ta ika mismo sa sadiri mo pinagkubkob na',
+'ipbnounblockself' => 'Ika dae pinagtutugutan na magkubkob kan sadiri mo',
 
 # Developer tools
 'lockdb' => 'Ikandado an base nin datos',
 'unlockdb' => 'Ibukás an base nin datos',
+'lockdbtext' => 'An pagkakandado kan datos-sarayan mag-uuntok sa abilidad kan gabos na mga paragamit na pagliwat nin mga pahina, pagsasangli kan saindang mga kamuyahan, pagliliwat kan saindang mga bantay-listahan, asin iba pang mga bagay na nagkakaipo nin mga pagsasangli sa laog kan datos-sarayan. Pakikumpirma lang tabi kun iyo ini an boot mong gibohon, asin na saimong bukasan an datos-saray kun an saimong pagpapakarhay tapos na.',
+'unlockdbtext' => 'An pagbubukas kan datos-sarayan magbabalik-liwat kan abilidad nin gabos na mga paragamit na makapagliwat nin mga pahina, pagsasangli kan saindang mga kamuyahan, pagliliwat kan saindang mga bantay-listahan, asin iba pang mga bagay na nagkakaipo nin mga pagsasangli sa laog kan datos-sarayan. Pakikumpirma lang tabi kun iyo ini an boot mong gibohon.',
 'lockconfirm' => 'Iyo, boot kong ikandado an base kan datos.',
 'unlockconfirm' => 'Iyo, boot kong bukasan an base kan datos.',
 'lockbtn' => 'Isará an base nin datos',
@@ -2543,40 +2562,69 @@ Hilngon an [[Special:Blocklist|block list]] para sa listahan kan presenteng oper
 'unlockdbsuccesstext' => 'Pigbukasan na an base nin datos.',
 'lockfilenotwritable' => "An ''file'' na kandado kan base nin datos dai nasusuratan. Para makandado o mabukasan an bse nin datos, kaipuhan na nasusuratan ini kan web server.",
 'databasenotlocked' => 'Dai nakakandado an base nin datos.',
+'lockedbyandtime' => '(sa paagi ni {{GENDER:$1|$1}} kan $2 sa ika-$3)',
 
 # Move page
+'move-page' => 'Ibalyo an $1',
 'move-page-legend' => 'Ibalyó an páhina',
-'movepagetext' => "Matatàwan nin bàgong pangaran an sarong pahina na pigbabalyo an gabos na uusipón kaini gamit an pormularyo sa babâ.
-An dating titulo magigin redirektang pahina sa bàgong titulo.
-Dai babàgohon an mga takod sa dating titulo kan pahina;
-seguradohon tabì na mayong doble o raot na mga redirekta.
-Ika an responsable sa pagpaseguro na an mga takod nakatokdô kun sain dapat.
-
-Giromdomon tabì na an pahina '''dai''' ibabalyó kun igwa nang pahina sa bàgong titulo, apwera kun mayò ining laog o sarong redirekta asin uusipón nin mga dating pagliwat. An boot sabihon kaini, pwede mong ibalik an dating pangaran kan pahina kun sain ini pigribayan nin pangaran kun napasalà ka, asin dai mo man sosoknongan an presenteng pahina.
-
-'''PATANID!'''
-Pwede na dakulà asin dai seguradong pagbàgo ini kan sarong popular na pahina; seguradohon tabì na aram mo an konsekwensya kaini bago magdagos.",
+'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 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.
+Ini minapasabot na ika makakapagliwat nin pangaran nin sarong pahina pabalik sa kun saen ini pinagliwatan nin pangaran kun ika nakahimo nin kasalaan, asin ika dae makakasalambaw nin sarong eksistido nang pahina.
+
+'''Patanid!'''
+Ini magigin sarong biglaan asin dae inaasahan na kaliwatan para sa sarong bantugan na pahina; pakiseguro sana na saimong nasabutan an mga konsekuwensiya kaini bago ipagpadagos.",
+'movepagetext-noredirectfixer' => "An paggamit kan porma na yaon sa ibaba magliliwat sa pangaran kan pahina, magbabalyo kan gabos kaining historiya paduman sa baguhon na pangaran.
+An lumang titulo magigin sarong panlikwat na pahina paduman sa baguhon na titulo.
+Magin paseguro na magmansay nin [[Special:DoubleRedirects|doble]] o [[Special:BrokenRedirects|baraak na panlikwat]].
+Ika an responsable para himoon na segurado na an mga kilyaw padagos na magtutukdo kun saen sinda dapat na magduman.
+
+Tandaan na an pahina '''dae''' maibabalyo kun igwa na nin sarong pahina sa baguhon na titulo, lean lang kun ini mayong laog o sarong panlikwat asin mayo nin nakaaging historiya nin pagliwat.
+Ini minapasabot na ika makakapagliwat nin pangaran kan saron gpahina pabalik sa kun saen ini pinagliwat an pangaran sa piggikanan kun ika makahimo nin sarong kasalaan, asin ika dae makakasalambaw kan sarong eksistido nang pahina.
+
+'''Patanid!'''
+Ini mapuwedeng sarong hidalion asin dae inaasahan na kaliwatan para sa sarong bantugan na pahina;
+pakipaseguro baya na ika nakakasabot sa mga konsekuwensiya kaini bago magpapadagos.",
 'movepagetalktext' => "An kapadis na olay na páhina enseguidang ibabalyo kasabay kaini '''kun:'''
 *Igwa nang may laog na olay na páhina na may parehong pangaran, o
 *Halîon mo an marka sa kahon sa babâ.
 
 Sa mga kasong iyan, kaipuhan mong ibalyo o isalak an páhina nin mano-mano kun boot mo.",
 'movearticle' => 'Ibalyó an pahina:',
+'moveuserpage-warning' => "'''Patanid:''' Ika magpopoon na magbalyo in sarong pahina nin paragamit. Pakitandaan tabi na an pahina sana na ipagbabalyo asin an paragamit '''dae''' maipagliliwat an pangaran.",
 'movenologin' => 'Mayô sa laog',
 'movenologintext' => 'Kaipuhan na rehistradong parágamit ka asin si [[Special:UserLogin|nakalaog]] tangarig makabalyó ka nin páhina.',
 'movenotallowed' => 'Mayô kang permiso na ibalyó an mga pahina sa wiki na ini.',
+'movenotallowedfile' => 'Ika mayo nin permiso na magbabalyo nin mga sagunson.',
+'cant-move-user-page' => 'Ika mayo nin permiso na magbabalyo nin mga pahina nin paragamit (laen pa sa mga sub-pahina).',
+'cant-move-to-user-page' => 'Ika mayo nin permiso na magbabalyo nin pahina paduman sa sa sarong pahina nin paragamit (laen pa sa sub-pahina nin paragamit).',
 'newtitle' => 'Sa bàgong titulong:',
 'move-watch' => 'Bantayán ining pahina',
 'movepagebtn' => 'Ibalyó an pahina',
 'pagemovedsub' => 'Naibalyó na',
 'movepage-moved' => '\'\'\'Naihubò na an "$1" sa "$2"\'\'\'',
+'movepage-moved-redirect' => 'An panlikwat pinagmukna na.',
+'movepage-moved-noredirect' => 'An pagmumukna kan sarong panlikwat pinagtago na.',
 'articleexists' => 'Igwa nang pahina sa parehong pangaran, o dai pwede an pangaran na pigpilì mo.
 Magpilì tabì nin ibang pangaran.',
+'cantmove-titleprotected' => 'Ika dae makakapagbalyo nin pahina sa lokasyon na ini, nin huli ta an baguhon na titulo protektado na gikan sa pagmumukna',
 'talkexists' => "'''Ibinalyo na an mismong pahina, alagad dai naibalyo an pahina nin orolay ta igwa na kaini sa bàgong titulo. Pagsaroon tabì ining duwa nin mano-mano.'''",
 'movedto' => 'piglipat sa',
 'movetalk' => 'Ibalyo an pahinang orolayan na nakaasociar',
+'move-subpages' => 'Ibalyo an mga sub-pahina (sagkod sa $1)',
+'move-talk-subpages' => 'Ibalyo an mga sub-pahina kan pahina nin olay (sagkod sa $1)',
+'movepage-page-exists' => 'An pahina sa $1 eksistido na asin bako tabi awtomatikong masasalambawan.',
+'movepage-page-moved' => 'An pahina $1 pinagbalyo na paduman sa $2.',
+'movepage-page-unmoved' => 'An pahina $1 dae maipagbabalyo paduman sa $2.',
+'movepage-max-pages' => 'An pinakahalangkawon na $1 {{PLURAL:S1|pahina|mga pahina}} pinagbalyo na asin mayo tabi na awtomatikong maipagbabalyo.',
 'movelogpage' => 'Ibalyó an usip',
 'movelogpagetext' => 'Nasa ibaba an lista kan pahinang pigbalyó.',
+'movesubpage' => '{{PLURAL:$1|Sub-pahina|Mga Sub-pahina}}',
+'movesubpagetext' => 'Ining pahina igwa nin $1 {{PLURAL:$1|sub-pahina|mga sub-pahina}} na ipinapahiling sa ibaba.',
+'movenosubpage' => 'Ining pahina mayo nin mga sub-pahina.',
 'movereason' => 'Rason:',
 'revertmove' => 'ibalík',
 'delete_and_move' => 'Parâon asin ibalyó',
@@ -2584,8 +2632,28 @@ Magpilì tabì nin ibang pangaran.',
 
 Igwa nang páhina na "[[:$1]]". Gusto mong parâon ini tangarig maibalyó?',
 'delete_and_move_confirm' => 'Iyo, parâon an pahina',
-'delete_and_move_reason' => 'Pinarâ tangarig maibalyó',
+'delete_and_move_reason' => 'Pinagpura sa paghimo nin dalan para maibalyo gikan sa "[[$1]]"',
 'selfmove' => 'Pareho an páhinang ginikanan asin destinasyon; dai pwedeng ibalyó an sarong páhina sa sadiri.',
+'immobile-source-namespace' => 'Dae makakapagbalyo nin mga pahina sa espasyong-pangaran na "$1"',
+'immobile-target-namespace' => 'Dae makakapagbalyo nin mga pahina pasiring sa espasyong-pangaran na "$1"',
+'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 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',
+'imageinvalidfilename' => 'An puntiryang nin pangaran-sagunson imbalido',
+'fix-double-redirects' => 'An panumpay sa arinman na mga panlikwat na nagtutukdo paduman sa orihinal na titulo',
+'move-leave-redirect' => 'Walaton an sarong panlikwat sa likod',
+'protectedpagemovewarning' => "'''Patanid:''' Ining pahina protektado tangani na an mga paragamit sana na igwang administrador na mga pribilihiyo an makakapagbalyo kaini.
+An pinakahuring entrada sa talaan pinagtao sa ibaba para sa reperensiya:",
+'semiprotectedpagemovewarning' => "'''Giromdomon:''' Ining pahina protektado tanganing an mga rehistradong paragamit sana an makakabalyo kaini. 
+An pinakahuring entrada sa talaan pinagtao sa ibaba para sa reperensiya:",
+'move-over-sharedrepo' => '== Yaon nang Sagunson ==
+[[:$1]] yaon na sa pinagheras na repositoryo. An pagbabalyo nin sagunson paduman kaining titulo masalambaw sa pinagheras na sagunson.',
+'file-exists-sharedrepo' => 'An pangaran nin saguson na pinili ginagamit na sa pinagheras na repositoryo.
+Pakipili kan ibang pangaran.',
 
 # Export
 'export' => 'Iluwas an mga pahina',
@@ -2594,22 +2662,36 @@ Igwa nang páhina na "[[:$1]]". Gusto mong parâon ini tangarig maibalyó?',
 Para makapadara nin mga páhina, ilaag an mga titulo sa kahon para sa teksto sa babâ, sarong titulo kada linya, dangan pilîon kun boot mo presenteng bersyón asin dating bersyón, na may mga linya kan historya, o an presenteng bersyón sana na may impormasyon manonongod sa huring hirá.
 
 Sa kaso kan huri, pwede ka man na maggamit nin takod, arog kan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para sa páhinang "[[{{MediaWiki:Mainpage}}]]".',
+'exportall' => 'Isalimbago an gabos na mga pahina',
 'exportcuronly' => 'Mga presenteng pagpakarhay sana an ibali, bakong an enterong historya',
 'exportnohistory' => "----
 '''Paisi:''' Dai pigpatogotan an pagpadara kan enterong historya kan mga páhina sa paagi kaining forma huli sa mga rasón dapit sa pagsagibo kaini.",
+'exportlistauthors' => 'Ibali an sarong bilog na listahan kan mga paraambag para sa lambang pahina',
 'export-submit' => 'Ipaluwás',
 'export-addcattext' => 'Magdugang nin mga pahina sa kategoryang ini:',
 'export-addcat' => 'Magdugang',
+'export-addnstext' => 'Idugang an mga pahina gikan sa espasyong-pangaran:',
+'export-addns' => 'Magdagdag',
 'export-download' => "Hapotón ku gustong itagama bilang sarong ''file''",
+'export-templates' => 'Ibali an mga templato',
+'export-pagelinks' => 'Inbai an pinagkilyaw na mga pahina pasiring sa sarong kairaroman na:',
 
 # Namespace 8 related
 'allmessages' => 'Mga mensahe sa sistema',
 'allmessagesname' => 'Pangaran',
 'allmessagesdefault' => 'Tekstong normal',
 'allmessagescurrent' => 'Presenteng teksto',
-'allmessagestext' => 'Ini an lista kan mga mensahe sa sistema sa ngaran-espacio na 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.',
+'allmessagestext' => 'Ini sarong listahan nin pansistemang mga mensahe na mananagboan sa espasyong-pangaran kan MediaWiki.
+Pakibisita an [//www.mediawiki.org/wiki/Localisation Mediawiki Lokalisasyon] asin [//translatewiki.net translatewiki.net] kun boot mong mag-ambag sa henerikong lokalisasyon kan MediaWiki.',
 'allmessagesnotsupportedDB' => "Dai pwedeng gamiton an '''{{ns:special}}:Allmessages''' ta sarado an '''\$wgUseDatabaseMessages'''.",
+'allmessages-filter-legend' => 'An Pansara',
+'allmessages-filter' => 'Pansara sa paagi kan estado nin kustomisasyon:',
+'allmessages-filter-unmodified' => 'Bakong modipikado',
+'allmessages-filter-all' => 'Gabos',
+'allmessages-filter-modified' => 'Modipikado',
+'allmessages-prefix' => 'Pansara sa paagi kan enot-panigmit:',
+'allmessages-language' => 'Lengguwahe:',
+'allmessages-filter-submit' => 'Dumuman',
 
 # Thumbnails
 'thumbnail-more' => 'Padakuláon',
@@ -2617,33 +2699,63 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'thumbnail_error' => 'Error sa paggigibo kan retratito: $1',
 'djvu_page_error' => 'luwas sa serye an páhina kan DjVu',
 'djvu_no_xml' => 'Dai makua an XML para sa DjVu file',
+'thumbnail-temp-create' => 'Dae nakamukna nin temporaryong sagunson kan retrato',
+'thumbnail-dest-create' => 'Dae nakatagama kan retrato sa destinasyon',
 'thumbnail_invalid_params' => 'Dai pwede an mga parámetro kaining retratito',
 'thumbnail_dest_directory' => 'Dai makagibo kan destinasyon kan direktoryo',
+'thumbnail_image-type' => 'An tipo kan imahe bakong suportado',
+'thumbnail_gd-library' => 'Bakong kumpleto an kasalansanan kan kalibrohang GD: Nawawara an trabaho kan $1',
+'thumbnail_image-missing' => 'An sagunson garo baga nawawara: $1',
 
 # Special:Import
 'import' => 'Ilaog an mga páhina',
 'importinterwiki' => 'Ipadara an Transwiki',
+'import-interwiki-text' => 'Pumili nin sarong wiki asin titulo kan pahina na importaron.
+Mga petsa nin kaliwatan asin pangaran kan mga paraliwat pagpepreserbaron.
+Gabos na aksyon nin importa sa transwiki nakatala sa [[Special:Log/import|talaan nin importa]].',
+'import-interwiki-source' => 'Ginikanang wiki/pahina:',
 'import-interwiki-history' => 'Kopyahon an gabos na mga bersyón para sa páhinang ini',
+'import-interwiki-templates' => 'Ibali an gabos na mga panguyog',
 'import-interwiki-submit' => 'Ipalaog',
-'import-interwiki-namespace' => 'Ibalyó an mga pahina sa ngaran-espacio:',
+'import-interwiki-namespace' => 'Destinasyon kan espasyong-pangaran:',
+'import-interwiki-rootpage' => 'Destinasyon kan ugat pahina (opsyonal):',
+'import-upload-filename' => 'Sagunsong Pangaran:',
 'import-comment' => 'Komento:',
-'importtext' => "Ipadara tabì an ''file'' hali sa ginikanan na wiki gamit an Special:Export utility, itagama ini sa saimong disk dangan ikarga iyan digdi.",
+'importtext' => 'Paki-eksporta an sagunson gikan sa ginikanang wiki na gamit an [[Special:Export|gamiton pan-eksporta]].
+Itagama ini sa saimong kompyuter asin ikarga ini digde.',
 'importstart' => 'Piglalaog an mga páhina...',
 'import-revision-count' => '$1 {{PLURAL:$1|pagpakarhay|mga pagpakarhay}}',
 'importnopages' => 'Mayong mga páhinang ipapadara.',
+'imported-log-entries' => 'Importado $1 {{PLURAL:$1|talaan na entrada|talaan na mga entrada}}.',
 'importfailed' => 'Bakong matriumpo an pagpadara: $1',
 'importunknownsource' => 'Dai aram an tipo kan gigikanan kan ipapadara',
 'importcantopen' => "Dai mabukasan an pigpadarang ''file''",
 'importbadinterwiki' => 'Salâ an takod na interwiki',
 'importnotext' => 'Mayong laog o mayong teksto',
-'importsuccess' => 'Matriumpo an pagpadara!',
+'importsuccess' => 'Tapos na an importa!',
+'importhistoryconflict' => 'Igwang nagsalimbayan sa historiya kan rebisyon (puwedeng importado na ining pahina kaidto)',
+'importnosources' => 'Mayong transwiki na mga ginikanan sa importa an pinagpasabot asin direktang historiya nin mga pagkakarga pinag-untok.',
 'importnofile' => "Mayong ipinadarang ''file'' an naikarga.",
+'importuploaderrorsize' => 'Pagkarga kan ini-importang sagunson nagpalya.
+An sagunson dakulaon kesa sa itinutugot na kadakulaan nin pagkarga.',
+'importuploaderrorpartial' => 'Pagkarga kan ini-importang sagunson nagpalya.
+An sagunson igwang parte sana an naikarga.',
+'importuploaderrortemp' => 'Pagkarga kan ini-importang sagunson nagpalya.
+An temporaryong polder nawawara.',
+'import-parse-failure' => 'XML importang panabot puminalya',
+'import-noarticle' => 'Mayong pahina na maiimporta!',
+'import-nonewrevisions' => 'An gabos na mga rebisyon dati nang importado.',
+'xml-error-string' => '$1 sa linya $2, kol $3 (bayta $4): $5',
+'import-upload' => 'Ikarga an XML na datos',
+'import-token-mismatch' => 'Nawara an datos kan sesyon.
+Paki-otro giraray.',
 'import-invalid-interwiki' => 'Dae makakapag-importa gikan sa pinagsambit na wiki.',
 'import-error-edit' => 'An pahina "$1" bakong importado nin huli ta ika dae tinutugutan na magliliwat kaini.',
 'import-error-create' => 'An pahina "$1" bakong importado nin huli ta ika dae tinutugutan na magmumukna kaini.',
-'import-error-interwiki' => 'An pahina "$1" bakong importado nin huli ta an ngaran kaini reserbado para sa panluwas na kasugponan (interwiki).',
+'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.',
@@ -2770,14 +2882,48 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 
 # Info page
 'pageinfo-title' => 'Impormasyon para sa "$1"',
+'pageinfo-not-current' => 'Sori, imposible baya na maitao ining impormasyon para sa lumaon nang mga rebisyon.',
 'pageinfo-header-basic' => 'Panuntungang impormasyon',
 'pageinfo-header-edits' => 'Pagliwat na historiya',
 'pageinfo-header-restrictions' => 'Pampahinang proteksyon',
 'pageinfo-header-properties' => 'Pampahinang propriyedades',
+'pageinfo-display-title' => 'Titulo nin patanaw',
+'pageinfo-default-sort' => 'Panugmad na susi nin salansan',
+'pageinfo-length' => 'Kalabaan kan pahina (yaon sa mga bayta)',
+'pageinfo-article-id' => 'ID kan pahina',
+'pageinfo-language' => 'Lengguwahe kan laog sa pahina',
+'pageinfo-robot-policy' => 'Estado kan makinang parahanap',
+'pageinfo-robot-index' => 'Maihuhukdo',
+'pageinfo-robot-noindex' => 'Dae maihuhukdo',
 'pageinfo-views' => 'Numero kan mga patanaw',
-'pageinfo-watchers' => 'Numero kan mga parabantay',
-'pageinfo-edits' => 'Numero kan mga pagliliwat',
-'pageinfo-authors' => 'Numero kan bantog na mga awtor',
+'pageinfo-watchers' => 'Numero kan parabantay nin pahina',
+'pageinfo-redirects-name' => 'Maipalikwat pasiring sa pahina ini',
+'pageinfo-subpages-name' => 'Mga sub-pahina kaining pahina',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|panlikwat|mga panlikwat}}; $3 {{PLURAL:$3|bakong panlikwat|bakong mga panlikwat}})',
+'pageinfo-firstuser' => 'Paramukna nin pahina',
+'pageinfo-firsttime' => 'Petsa kan pagmukna nin pahina',
+'pageinfo-lastuser' => 'Pinakahuring paraliwat',
+'pageinfo-lasttime' => 'Petsa kan pinakahuring pagliwat',
+'pageinfo-edits' => 'Kabilogan na bilang kan mga pagliwat',
+'pageinfo-authors' => 'Kabilogan na bilang kan pinagpalaen na mga awtor',
+'pageinfo-recent-edits' => 'Bilang kan dae pa sana nahahaloy na mga pagliliwat (sa laog kan nakaaging $1)',
+'pageinfo-recent-authors' => 'Bilang kan dae pa sana nahahaloy na pinagpalaen na mga awtor',
+'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',
+'pageinfo-contentpage' => 'Pinagbilang siring sa sarong pahina nin laog',
+'pageinfo-contentpage-yes' => 'Iyo',
+'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',
@@ -2794,6 +2940,8 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 'markedaspatrollederror' => 'Dai mamamarkahan bilang pigpapatrolya',
 'markedaspatrollederrortext' => 'Kaipúhan mong magpilì nin pagpakarháy na mamarkahan bilang pigpapatrolya.',
 'markedaspatrollederror-noautopatrol' => 'Daí ka pigtotogótan na markahan an sadíri mong pababàgo bilang pigpapatrolya.',
+'markedaspatrollednotify' => 'Ining kaliwatan sa $1 pinagmarkahang patrolyado na.',
+'markedaspatrollederrornotify' => 'Pagmamarka bilang patrolyado na nagpalya.',
 
 # Patrol log
 'patrol-log-page' => 'Laóg kan Pigpapatrolya',
@@ -2826,6 +2974,8 @@ Sa pagpapa-andar kaini, an saimong sistema mapupuwedeng makompromiso.",
 'file-info-size-pages' => '$1 × $2 piksel, sukol kan sagunson: $3, MIME na tipo: $4, $5 {{PLURAL:$5|pahina|mga pahina}}',
 '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.',
@@ -2835,6 +2985,8 @@ Sa pagpapa-andar kaini, an saimong sistema mapupuwedeng makompromiso.",
 'file-info-png-looped' => 'inotrohan',
 'file-info-png-repeat' => 'pinagkawat $1 {{PLURAL:$1|bes|beses}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|prema|mga prema}}',
+'file-no-thumb-animation' => "'''Giromdomon: Nin huli sa teknikal na mga limitasyon, an mga retrato kaining sagunson bakong animatado.'''",
+'file-no-thumb-animation-gif' => "'''Giromdomon: Nin huli sa teknikal na mga limitasyon, an mga retrato na GIF na mga imahe na igwang halangkawon na resolusyon na siring kaini dae animatado.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria nin mga bàgong file',
@@ -2853,7 +3005,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'An pormat iyo ining minasunod:
@@ -2910,16 +3065,77 @@ An mga iba pagtatagoon sa paagi nin pirmehan.
 'exif-imagedescription' => 'Titulo kan retrato',
 'exif-make' => 'Tagagibo nin kamera',
 'exif-model' => 'Modelo nin kamera',
+'exif-software' => 'Panuklob na ginamit',
 'exif-artist' => 'Kagsúrat',
+'exif-copyright' => 'Kagkapot nin karapatan sa panurat',
+'exif-exifversion' => 'Exif bersyon',
+'exif-flashpixversion' => 'Suportadong Flashpix na bersyon',
+'exif-colorspace' => 'Espasyong kulay',
+'exif-componentsconfiguration' => 'Panabot kan lambang komponente',
+'exif-compressedbitsperpixel' => 'Moda nin kompresyon sa imahe',
+'exif-pixelydimension' => 'Lakbang kan imahe',
+'exif-pixelxdimension' => 'Langkaw kan imahe',
 'exif-usercomment' => 'Mga komento kan paragamít',
-'exif-aperturevalue' => 'Pagkabukás',
-'exif-brightnessvalue' => 'Kaliwanagan',
+'exif-relatedsoundfile' => 'Kaakibay kan sagunson na pandangog',
+'exif-datetimeoriginal' => 'Petsa asin oras kan henerasyon nin datos',
+'exif-datetimedigitized' => 'Petsa asin oras kan paghimong dihital',
+'exif-subsectime' => 'PetsaOras na mga subsegundo',
+'exif-subsectimeoriginal' => 'PetsaOrasOrihinal na mga subsegundo',
+'exif-subsectimedigitized' => 'PetaOrasDihitalisadong mga subsegundo',
+'exif-exposuretime' => 'Kahuyangang oras',
+'exif-exposuretime-format' => '$1 seg ($2)',
+'exif-fnumber' => 'F numero',
+'exif-exposureprogram' => 'Kahuyangang Programa',
+'exif-spectralsensitivity' => 'Espektral na sensitibidad',
+'exif-isospeedratings' => 'ISO grado nin rikas',
+'exif-shutterspeedvalue' => 'APEX rikas kan kimlat',
+'exif-aperturevalue' => 'APEX na Kamuklatan',
+'exif-brightnessvalue' => 'APEX na kaliwanagan',
+'exif-exposurebiasvalue' => 'APEX na kahuyangan nin kalaenan',
+'exif-maxaperturevalue' => 'Pinakahalangkaw na kamuklatang pandaga',
+'exif-subjectdistance' => 'Subhetong distansiya',
+'exif-meteringmode' => 'Moda nin pagmemetro',
 'exif-lightsource' => 'Ginikánan nin liwánag',
 'exif-flash' => 'Kikilát',
+'exif-focallength' => 'Laba sa turuhok kan lente',
+'exif-subjectarea' => 'Lugar kan subheto',
 'exif-flashenergy' => 'Kakusogan nin kikilát',
+'exif-focalplanexresolution' => 'Sayon nin turuhok kan X na resolusyon',
+'exif-focalplaneyresolution' => 'Sayon nin turuhok kan Y na resolusyon',
+'exif-focalplaneresolutionunit' => 'Sayon nin turuhok sa resolusyon kan yunit',
+'exif-subjectlocation' => 'Lokasyon kan subheto',
+'exif-exposureindex' => 'Hukdo nin kahuyangan',
+'exif-sensingmethod' => 'Metodo nin paghihimate',
 'exif-filesource' => 'Ginikánan nin dokumento',
+'exif-scenetype' => 'Tipo nin eksena',
+'exif-customrendered' => 'Kapakarahayang proseso kan imahe',
+'exif-exposuremode' => 'Moda nin Kahuyangan',
+'exif-whitebalance' => 'Kapantayan nin kaputian',
+'exif-digitalzoomratio' => 'Dihital na rata nin karanihan',
+'exif-focallengthin35mmfilm' => 'Sayon nin kalabaan sa 35 mm na pelikula',
+'exif-scenecapturetype' => 'Tipo kan pagdakop nin eksena',
+'exif-gaincontrol' => 'Kontrol na pan-eksena',
 'exif-contrast' => 'Kontraste',
+'exif-saturation' => 'Kababadan',
+'exif-sharpness' => 'Kahaisan',
+'exif-devicesettingdescription' => 'Mga deskripsyon kan panuytoy nin aparato',
+'exif-subjectdistancerange' => 'Hikwas kan distansiya nin subheto',
 'exif-imageuniqueid' => 'Unikong ID kan ladawan',
+'exif-gpsversionid' => 'Bersyon kan GPS tag',
+'exif-gpslatituderef' => 'Hiraga o Timog na kahalaghagan',
+'exif-gpslatitude' => 'Halaghag',
+'exif-gpslongituderef' => 'Sirangan o Sulnupan na kalabaghan',
+'exif-gpslongitude' => 'Kalabaghan',
+'exif-gpsaltituderef' => 'Reperensiya nin kalangkawan',
+'exif-gpsaltitude' => 'Kahalaghagan',
+'exif-gpstimestamp' => 'GPS na oras (atomikong orasan)',
+'exif-gpssatellites' => 'Mga satelayt na pinaggagamit para sa kasukolan',
+'exif-gpsstatus' => 'Estado kan resibidor',
+'exif-gpsmeasuremode' => 'Moda nin kasukolan',
+'exif-gpsdop' => 'Katusayang kasukolan',
+'exif-gpsspeedref' => 'Yunit nin karikasan',
+'exif-gpsspeed' => 'Karikasan kan GPS na resibidor',
+'exif-gpstrackref' => 'Reperensiya para sa direksyon nin kahiroan',
 'exif-gpstrack' => 'Direksyon kan paghirô',
 'exif-gpsimgdirectionref' => 'Reperensiya para sa direksyon kan imahe',
 'exif-gpsimgdirection' => 'Direksyon kan ladáwan',
@@ -3199,6 +3415,7 @@ Sublokas kan siyudad na ipinahiling',
 'exif-iimcategory-hth' => 'Salud',
 'exif-iimcategory-hum' => 'Pantawong interes',
 'exif-iimcategory-lab' => 'Trabaho',
+'exif-iimcategory-lif' => 'Estilo nin buhay asin libangan',
 'exif-iimcategory-pol' => 'Mga Pulitika',
 'exif-iimcategory-rel' => 'Relihiyon asin paniniwala',
 'exif-iimcategory-sci' => 'Siyensiya asin teknolohiya',
@@ -3291,6 +3508,7 @@ Ining pankumpirmang koda mapalso sa $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Pigpopogolan an transcluding na Interwiki]',
 'scarytranscludefailed' => '[Templatong panakdo nagpalya para sa $1]',
+'scarytranscludefailed-httpstatus' => '[An paghigkos kan panguyog nagpalya para sa $1: HTTP $2]',
 'scarytranscludetoolong' => '[An kilyawan grabe kahalaba]',
 
 # Delete conflict
@@ -3400,6 +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' => '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.
@@ -3507,5 +3726,118 @@ Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
 'htmlform-required' => 'Ining halaga pinaghahagad',
 'htmlform-submit' => 'Sumitiron',
 'htmlform-reset' => 'Dae idagos an mga kaliwatan',
+'htmlform-selectorother-other' => 'An iba',
+
+# SQLite database support
+'sqlite-has-fts' => '$1 na igwang suporta sa kabilogang-teksto nin paghahanap',
+'sqlite-no-fts' => '$1 na mayong suporta sa kabilogang-teksto nin paghahanap',
+
+# New logging system
+'logentry-delete-delete' => '$1 pinagpurang pahina $3',
+'logentry-delete-restore' => '$1 pinagbalik na pahina $3',
+'logentry-delete-event' => '$1 pinagliwat an bisibilidad kan {{PLURAL:$5|sarong talaan nin pangyayari|%5 talaan nin mga pangyayari}} kan $3: $4',
+'logentry-delete-revision' => '$1 pinagliwat an bisibilidad kan {{PLURAL:$5|sarong rebisyon|$5 na mga rebisyon}} na yaon sa pahina $3: $4',
+'logentry-delete-event-legacy' => '$1 pinagliwat an bisibilidad kan talaan nin mga pangyayari sa $3',
+'logentry-delete-revision-legacy' => '$1 pinagliwat an bisibilidad kan mga rebisyon sa pahina $3',
+'logentry-suppress-delete' => '$1 pinaglubog na pahina $3',
+'logentry-suppress-event' => '$1 pasikretong pinagliwat an bisibilidad kan {{PLURAL:$5|talaan nin pangyayari|$5 mga talaan nin pangyayari}} sa $3: $4',
+'logentry-suppress-revision' => '$1 pasikretong pinagliwat an bisibilidad kan {{PLURAL:$5|rebisyon|$5 mga rebisyon}} sa pahina $3: $4',
+'logentry-suppress-event-legacy' => '$1 pasikretong pinagliwat an bisibilidad kan talaan nin mga pangyayari sa $3',
+'logentry-suppress-revision-legacy' => '$1 pasikretong pinagliwat an bisibilidad kan mga rebisyon sa pahina $3',
+'revdelete-content-hid' => 'an laog pinagtago',
+'revdelete-summary-hid' => 'Sumaryo nin pagliwat itinago',
+'revdelete-uname-hid' => 'pangaran nin paragamit itinago',
+'revdelete-content-unhid' => 'an laog pinaghaya',
+'revdelete-summary-unhid' => 'Sumaryo nin pagliwat ipinaghaya',
+'revdelete-uname-unhid' => 'pangaran nin paragamit ipinaghaya',
+'revdelete-restricted' => 'Pinag-aplikar an mga restriksyon sa mga administrador',
+'revdelete-unrestricted' => 'Pinaghale an mga restriksyon para sa mga administrador',
+'logentry-move-move' => '$1 pinagbalyo an pahina $3 paduman sa $4',
+'logentry-move-move-noredirect' => 'S1 pinagbalyo an pahina $3 paduman sa $4 na mayong iwinalat na panlikwat',
+'logentry-move-move_redir' => '$1 pinagbalyo an pahina $3 paduman sa $4 sa paagi kan panlikwat',
+'logentry-move-move_redir-noredirect' => '$1 pinagbalyo an pahina $3 paduman sa $4 sa paagi kan panlikwat na mayong iwinawalat na sarong panlikwat',
+'logentry-patrol-patrol' => '$1 pinagmarkahan an rebisyon $4 kan pahina $3 na patrolyado',
+'logentry-patrol-patrol-auto' => '$1 awtomatikong pinagmarkahan an rebisyonn $4 kan pahina $3 na patrolyado',
+'logentry-newusers-newusers' => 'An paragamit na panindog $1 pinagmukna na',
+'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].
+Kun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento idudugang sa pahina "[$3 $2]", kaiba an saimong paragamit na ngaran.',
+'feedback-subject' => 'Subheto',
+'feedback-message' => 'An Mensahe:',
+'feedback-cancel' => 'Kanselaron',
+'feedback-submit' => 'Isumite an balik-simbag',
+'feedback-adding' => 'Idugang an balik-simbag sa pahina...',
+'feedback-error1' => 'Kasalaan: Bakong bistadong resulta gikan sa API',
+'feedback-error2' => 'Kasalaan: An pagliwat nagpalya',
+'feedback-error3' => 'Kasalaan: Mayong kasimbagan gikan sa API',
+'feedback-thanks' => 'Salamat! An saimong balik-simbag pinagposte sa pahina "[$2 $1]".',
+'feedback-close' => 'Nagibo na',
+'feedback-bugcheck' => 'Marhay! I-tsek sana baya na ini bakong saro sa mga [$1 bistadong kuto].',
+'feedback-bugnew' => 'Pig-tsek ko. Pakireport kan sarong baguhong kuto',
+
+# Search suggestions
+'searchsuggest-search' => 'Hanapa baya',
+'searchsuggest-containing' => 'may laog na...',
+
+# API errors
+'api-error-badaccess-groups' => 'Ika daeng permiso na magkarga nin mga sagunson sa wiking ini.',
+'api-error-badtoken' => 'Panlaog na kasalaan: Raot na pangilip',
+'api-error-copyuploaddisabled' => 'An pagkakarga sa paagi kan URL pinag-untok sa serbidor na ini.',
+'api-error-duplicate' => 'Igwa {{PLURAL:$1|nin [$2 ibang sagunson]|mga [$2 iba pang mga sagunson]}} na yaon sa sityo na igwa nin kaparehong laog.',
+'api-error-duplicate-archive' => 'Igwa {{PLURAL:$1|kaidto nin [$2 ibang sagunson]|kaidto nin [$2 ibang mga sagunson]}} na yaon sa sityo na igwa nin kaparehong laog, alagad {{PLURAL:$1|ini kaidto|sinda kaidto}} pinagpura na.',
+'api-error-duplicate-archive-popup-title' => 'Kambal na {{PLURAL:$1|sagunson na|mga sagunson na}} pinagpura na.',
+'api-error-duplicate-popup-title' => 'Kambal na {{PLURAL:$1|sagunson|mga sagunson}}.',
+'api-error-empty-file' => 'An sagunson na saimong pinagsumite daeng laog.',
+'api-error-emptypage' => 'Nagmumukna nin bago, mayong laog na mga pahina dae pinagtutugutan.',
+'api-error-fetchfileerror' => 'Panlaog na kasalaan: May bagay na naging sala habang hinahakot an sagunson.',
+'api-error-fileexists-forbidden' => 'Sarong sagunson na igwang ngaran na "$1" an yaon na, asin dae puwedeng masalambawan.',
+'api-error-fileexists-shared-forbidden' => 'Sarong sagunson na igwang ngaran na "$1" an yaon na sa pinagheras na repositoryo nin sagunson, asin dae puwedeng masalambawan.',
+'api-error-file-too-large' => 'An sagunson na saimong pinagsumite dakulaon na maray.',
+'api-error-filename-tooshort' => 'An pangaran nin sagunson halipoton na maray.',
+'api-error-filetype-banned' => 'An tipong ini nin sagunson pinagpangalad na.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|dae itinutugot na tipo nin sagunson|dae itinutugot na mga tipo nin mga sagunson}}. An pinagtutugutan na {{PLURAL:$3|sagunson iyo an tipo na|mga sagunson iyo an mga tipo na}} $2.',
+'api-error-filetype-missing' => 'An pangaran nin sagunson nawawaraan nin ekstensyon.',
+'api-error-hookaborted' => 'An modipikasyon na saimong pinagprubaran na hihimoon ipinag-untok nin sarong ekstensyon.',
+'api-error-http' => 'Panlaog na kasalaan: Dae nakakakonekta sa serbidor.',
+'api-error-illegal-filename' => 'An pangaran nin sagunson dae pinagtutugutan.',
+'api-error-internal-error' => 'Panlaog na kasalaan: May bagay na napasala sa pagproseso kan saimong pagkakarga sa wiki.',
+'api-error-invalid-file-key' => 'Panlaog na kasalaan: An sagunson dae natagboan sa temporaryong sarayan.',
+'api-error-missingparam' => 'Panlaog na kasalaan: Nawawara an mga parametro sa kahagadan.',
+'api-error-missingresult' => 'Panlaog na kasalaan: Dae madeterminaran kun an kopya naipadagos.',
+'api-error-mustbeloggedin' => 'Ika dapat na nakalaog tanganing makapagkarga nin mga sagunson.',
+'api-error-mustbeposted' => 'Panlaog na kasalaan: An kahagadan minakaipo nin HTTP POST.',
+'api-error-noimageinfo' => 'An pagkarga nagdagos, alagad an serbidor dae nakapagtao samuya nin anuman na impormasyon manunungod sa sagunson.',
+'api-error-nomodule' => 'Panlaog na kasalaan: Mayong pankargang modyul an naikaag.',
+'api-error-ok-but-empty' => 'Panlaog na kasalaan: Mayong simbag gikan sa serbidor.',
+'api-error-overwrite' => 'An salambawan na sarong eksistido nang sagunson dae pinagtutugutan.',
+'api-error-stashfailed' => 'Panlaog na kasalaan: An serbidor nagpalya sa pagsaray kan temporaryong sagunson.',
+'api-error-timeout' => 'An serbidor dae nakapagsimbag sa laog kan pinaghunang panahon.',
+'api-error-unclassified' => 'May dae midbid na kasalaan an nangyari.',
+'api-error-unknown-code' => 'Dae midbid na kasalaan: "$1".',
+'api-error-unknown-error' => 'Panlaog na kasalaan: May sarong bagay na napasala kan prubaran na ikarga an saimong sagunson.',
+'api-error-unknown-warning' => 'Dae midbid na patanid: "$1".',
+'api-error-unknownerror' => 'Dae midbidon na kasalaan: "$1".',
+'api-error-uploaddisabled' => 'An pagkakarga pinag-untok nguna kaining wiki.',
+'api-error-verification-error' => 'Ining sagunson baka koraptu, o igwa nin salang ekstensyon.',
+
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|segundo|mga segundo}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuto|minutos}}',
+'duration-hours' => '$1 {{PLURAL:$1|oras|mga oras}}',
+'duration-days' => '$1 {{PLURAL:$1|aldaw|mga aldaw}}',
+'duration-weeks' => '$1 {{PLURAL:$1|semana|mga semana}}',
+'duration-years' => '$1 {{PLURAL:$1|taon|mga taon}}',
+'duration-decades' => '$1 {{PLURAL:$1|dekada|mga dekada}}',
+'duration-centuries' => '$1 {{PLURAL:$1|siglo|mga siglo}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenyo|mga millenyo}}',
 
 );
index 518bf65..cf6dbb4 100644 (file)
@@ -94,7 +94,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Без паказу ўхваленых правак у нядаўніх змяненнях',
 'tog-newpageshidepatrolled' => 'Без паказу ўхваленых правак у пераліку новых старонак',
 'tog-extendwatchlist' => 'Паказваць усе змяненні, а не толькі апошнія',
-'tog-usenewrc' => 'УдаÑ\81каналенÑ\8b Ð²Ñ\8bглÑ\8fд (паÑ\82Ñ\80абÑ\83е Ð¯Ð²Ð°Ñ\81кÑ\80Ñ\8bпÑ\82)',
+'tog-usenewrc' => 'Ð\93Ñ\80Ñ\83паваÑ\86Ñ\8c Ð·Ð¼ÐµÐ½Ñ\8b Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\9e Ñ\81пÑ\96Ñ\81аÑ\85 Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\85 Ð·Ð¼ÐµÐ½Ð°Ñ\9e Ñ\96 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8fÑ\9e (паÑ\82Ñ\80абÑ\83е JavaScript)',
 'tog-numberheadings' => 'Аўта-нумараваць падзагалоўкі',
 'tog-showtoolbar' => 'Паказваць рэдактарскую стужку (Яваскрыпт)',
 'tog-editondblclick' => 'Праўка старонак па падвойным пстрыку (Яваскрыпт)',
@@ -102,10 +102,10 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Праўка падраздзелаў па правым пстрыку на загалоўку (Яваскрыпт)',
 'tog-showtoc' => 'Паказваць змест (для старонак, дзе больш за 3 падзагалоўкі)',
 'tog-rememberpassword' => 'Памятаць уваходныя даныя ў гэтым браўзеры (не даўжэй за $1 {{PLURAL:$1|дзень|дні|дзён}})',
-'tog-watchcreations' => 'Старонкі, створаныя мной, дадаюцца да назіранага',
-'tog-watchdefault' => 'Старонкі, праўленыя мной, дадаюцца да назіранага',
-'tog-watchmoves' => 'Старонкі, перанесеныя мной, дадаюцца да назіранага',
-'tog-watchdeletion' => 'Старонкі, сцёртыя мной, дадаюцца да назіранага',
+'tog-watchcreations' => 'Старонкі і файлы, створаныя мной, дадаюцца да назіранага',
+'tog-watchdefault' => 'Старонкі і файлы пасля маіх правак дадаюцца да назіранага',
+'tog-watchmoves' => 'Старонкі і файлы, перанесеныя мной пад іншую назву, дадаюцца да назіранага',
+'tog-watchdeletion' => 'Старонкі і файлы, сцёртыя мной, дадаюцца да назіранага',
 'tog-minordefault' => 'Пачынаць кожную праўку як дробную',
 'tog-previewontop' => 'Папярэдні паказ — над рэдактарскім полем',
 'tog-previewonfirst' => 'Папярэдні паказ пры першай праўцы',
@@ -481,7 +481,9 @@ $2',
 'logouttext' => "'''Вы выйшлі з сістэмы.'''
 
 Можна працягваць працу на {{SITENAME}} ананімна, або можна <span class='plainlinks'>[$1 ўвайсці ў сістэму ізноў]</span>, пад тым самым або пад іншым удзельніцкім імем. Заўважце, што некаторыя старонкі могуць паказвацца так, быццам вы яшчэ не выйшлі; у такім разе трэба ачысціць кэш вашага браўзера.",
-'welcomecreation' => '== Вітаем, $1! == Ваш  рахунак быў створаны. Не забудзьцеся дапасаваць свае [[Special:Preferences|{{SITENAME}} настáўленні]].',
+'welcomeuser' => 'Вітаем, $1!',
+'welcomecreation-msg' => 'Ваш рахунак быў створаны.
+Не забудзьцеся дапасаваць [[Special:Preferences|персанальныя настаўленні]] для {{SITENAME}}.',
 'yourname' => 'Імя ўдзельніка',
 'yourpassword' => 'Пароль',
 'yourpasswordagain' => 'Паўтарыце пароль',
@@ -717,7 +719,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' => 'Рахунак удзельніка "<nowiki>$1</nowiki>" не зарэгістраваны. Праверце, ці вы жадаеце стварыць або паправіць гэтую старонку.',
 'userpage-userdoesnotexist-view' => 'Уліковы запіс удзельніка " $1 "не зарэгістраваны.',
 'blocked-notice-logextract' => 'Гэты карыстальнік у дадзены момант заблакаваны. 
@@ -738,7 +740,7 @@ $2
 'userinvalidcssjstitle' => "'''Увага:''' Няма вокладкі з назвай \"\$1\". Памятайце, што свае старонкі .css і .js называюцца толькі малымі літарамі, такім чынам, напр., {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
 'updated' => '(абноўлена)',
 'note' => "'''Заўвага:'''",
-'previewnote' => "'''Ð\93эта папярэдні паказ; праўкі яшчэ не замацаваныя!'''",
+'previewnote' => "'''Ð\9fамÑ\8fÑ\82айÑ\86е, Ð³эта папярэдні паказ; праўкі яшчэ не замацаваныя!'''",
 'previewconflict' => 'Гэта папярэдні паказ магчымага выніку замацоўвання актуальнага стану крынічнага тэксту ў верхнім тэкставым полі.',
 'session_fail_preview' => "'''Не ўдалося апрацаваць вашую праўку, таму што сервер згубіў звесткі аб вашым сеансе.
 Паспрабуйце, калі ласка, ізноў. Калі і тады не атрымаецца, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і зайсці ізноў.'''",
@@ -788,7 +790,6 @@ $2
 'template-protected' => '(ахоўваецца)',
 'template-semiprotected' => '(часткова ахоўвацца)',
 'hiddencategories' => 'Старонка належыць да {{PLURAL:$1|1 схаванай катэгорыі|$1 схаваных катэгорый}}:',
-'nocreatetitle' => 'Стварэнне старонак абмежавана',
 'nocreatetext' => 'На пляцоўцы {{SITENAME}} магчымасці стварэння новых старонак абмежаваныя.
 Вы можаце папрацаваць з існуючай старонкай, або [[Special:UserLogin|увайсці ў сістэму, або завесці сабе рахунак]].',
 'nocreate-loggedin' => 'Вам не дазволена ствараць новых старонак.',
@@ -1306,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' => 'чытаць гэтую старонку',
@@ -1906,10 +1908,6 @@ $1',
 'activeusers-hidesysops' => 'Без адміністратараў',
 'activeusers-noresult' => 'Няма такіх удзельнікаў.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал рэгістрацыі ўдзельнікаў',
-'newuserlogpagetext' => 'Гэта журнал рэгістрацыі новых удзельнікаў.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Дазволы для груп удзельнікаў',
 'listgrouprights-summary' => 'Гэты пералік вызначаных у гэтай вікі груп удзельнікаў, разам з прыпісанымі ім дазволамі.
@@ -1966,7 +1964,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'Мой спіс назіранага',
-'mywatchlist' => 'Ð\9dазÑ\96Ñ\80анае',
+'mywatchlist' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага',
 'watchlistfor2' => 'Для $1 $2',
 'nowatchlist' => 'Ваш спіс назіранага зараз пусты.',
 'watchlistanontext' => 'Каб бачыць або правіць складнікі назіранага, трэба $1.',
@@ -2004,11 +2002,7 @@ $1',
 
 'enotif_mailer' => 'Апавяшчальнік {{SITENAME}}',
 'enotif_reset' => 'Пазначыць усе старонкі як наведаныя',
-'enotif_newpagetext' => 'Гэта новая старонка.',
 'enotif_impersonal_salutation' => 'Шаноўны ўдзельнік {{SITENAME}}',
-'changed' => 'зменена',
-'created' => 'створана',
-'enotif_subject' => 'Старонка {{SITENAME}} з назвай $PAGETITLE была $CHANGEDORCREATED удзельнікам $PAGEEDITOR',
 'enotif_lastvisited' => 'Гл. $1 каб бачыць усе мены пасля вашага апошняга наведвання.',
 'enotif_lastdiff' => 'Гл. $1 каб бачыць гэтую мену.',
 'enotif_anon_editor' => 'ананімны ўдзельнік $1',
@@ -2041,6 +2035,8 @@ $UNWATCHURL
 
 Зваротная сувязь і дапамога
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створана',
+'changed' => 'зменена',
 
 # Delete
 'deletepage' => 'Сцерці старонку',
@@ -3530,6 +3526,7 @@ MediaWiki распаўсюджваецца, спадзеючыся на прыд
 'logentry-newusers-create2' => '$1 стварыў уліковы запіс удзельніка $3',
 'logentry-newusers-autocreate' => 'Аўтаматычна створаны ўліковы запіс $1',
 'newuserlog-byemail' => 'пароль адасланы эл.поштай',
+'rightsnone' => '(няма)',
 
 # Feedback
 'feedback-bugornote' => 'Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].
index 15ec73d..c413039 100644 (file)
@@ -41,11 +41,14 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
-       'Удзельніца' => NS_USER,
-       'Гутаркі ўдзельніцы' => NS_USER_TALK,
-       'Абмеркаваньне_$1' => NS_PROJECT_TALK,
+       'Абмеркаваньне_$1' => NS_PROJECT_TALK, // legacy support for old non-inflected links
        'Выява' => NS_FILE,
-       'Абмеркаваньне выявы' => NS_FILE_TALK,
+       'Абмеркаваньне_выявы' => NS_FILE_TALK,
+);
+
+$namespaceGenderAliases = array(
+       NS_USER      => array( 'male' => 'Удзельнік', 'female' => 'Удзельніца' ),
+       NS_USER_TALK => array( 'male' => 'Гутаркі_ўдзельніка', 'female' => 'Гутаркі_ўдзельніцы' ),
 );
 
 $specialPageAliases = array(
@@ -390,8 +393,9 @@ $messages = array(
 'newwindow' => '(адкрываецца ў новым акне)',
 'cancel' => 'Скасаваць',
 'moredotdotdot' => 'Далей…',
-'mypage' => 'Мая старонка',
-'mytalk' => 'Мае гутаркі',
+'morenotlisted' => 'Болей не паказанага...',
+'mypage' => 'Старонка',
+'mytalk' => 'Гутаркі',
 'anontalk' => 'Гутаркі для гэтага IP-адрасу',
 'navigation' => 'Навігацыя',
 'and' => '&#32;і',
@@ -423,6 +427,7 @@ $messages = array(
 'namespaces' => 'Прасторы назваў',
 'variants' => 'Варыянты',
 
+'navigation-heading' => 'Навігацыйнае мэню',
 'errorpagetitle' => 'Памылка',
 'returnto' => 'Вярнуцца да старонкі «$1».',
 'tagline' => 'Зьвесткі з {{GRAMMAR:родны|{{SITENAME}}}}',
@@ -631,7 +636,7 @@ $1',
 'viewsource-title' => 'Прагляд крыніцы для $1',
 'actionthrottled' => 'Дзеяньне прытрыманае',
 'actionthrottledtext' => 'У межах барацьбы са спамам Вы абмежаваныя ў надта частым выкананьні гэтага дзеяньня за кароткі прамежак часу, і Вы перавысілі гэтае абмежаваньне. Калі ласка, паспрабуйце яшчэ раз празь некалькі хвілінаў.',
-'protectedpagetext' => 'РÑ\8dдагаванÑ\8cне Ð³Ñ\8dÑ\82ай Ñ\81Ñ\82аÑ\80онкÑ\96 Ð·Ð°Ð±Ð°Ñ\80оненае.',
+'protectedpagetext' => 'Ð\93Ñ\8dÑ\82аÑ\8f Ñ\81Ñ\82аÑ\80онка Ð±Ñ\8bла Ð°Ð±Ð°Ñ\80оненаÑ\8f Ð´Ð»Ñ\8f Ð¿ÐµÑ\80адÑ\83Ñ\85Ñ\96ленÑ\8cнÑ\8f Ð·Ñ\8cменаÑ\9e Ñ\86Ñ\96 Ñ\96нÑ\88Ñ\8bÑ\85 Ð´Ð·ÐµÑ\8fнÑ\8cнÑ\8fÑ\9e.',
 'viewsourcetext' => 'Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі:',
 'viewyourtext' => "Вы можаце праглядзець і скапіяваць крынічны тэкст '''вашых рэдагаваньняў''' на гэтую старонку:",
 'protectedinterface' => 'Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.',
@@ -665,8 +670,8 @@ $2',
 
 Вы можаце працягваць працу ў {{GRAMMAR:месны|{{SITENAME}}}} ананімна, альбо можаце <span class='plainlinks'>[$1 ўвайсьці ў сыстэму]</span> як той жа альбо іншы ўдзельнік.
 Некаторыя старонкі могуць паказвацца, быццам Вы ўсё яшчэ ў сыстэме. Каб гэтага пазьбегнуць, трэба ачысьціць кэш браўзэра.",
-'welcomecreation' => '== Вітаем, $1! ==
-Ваш рахунак быў створаны.
+'welcomeuser' => 'Вітаем, $1!',
+'welcomecreation-msg' => 'Ваш рахунак быў створаны.
 Не забудзьцеся зьмяніць Вашыя [[Special:Preferences|налады ў {{GRAMMAR:месны|{{SITENAME}}}}]].',
 'yourname' => 'Імя ўдзельніка:',
 'yourpassword' => 'Пароль:',
@@ -762,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' => 'Зьмяніць пароль',
@@ -823,6 +829,7 @@ $2
 'changeemail-oldemail' => 'Цяперашні адрас электроннай пошты:',
 'changeemail-newemail' => 'Новы адрас электроннай пошты:',
 'changeemail-none' => '(няма)',
+'changeemail-password' => 'Ваш пароль у {{GRAMMAR:месны|{{SITENAME}}}}:',
 'changeemail-submit' => 'Зьмяніць адрас электроннай пошты',
 'changeemail-cancel' => 'Скасаваць',
 
@@ -1000,7 +1007,6 @@ $2
 'template-protected' => '(абаронены)',
 'template-semiprotected' => '(часткова абароненая)',
 'hiddencategories' => 'Гэтая старонка належыць $1 {{PLURAL:$1|схаванай катэгорыі|схаваным катэгорыям|схаваным катэгорыям}}:',
-'nocreatetitle' => 'Стварэньне старонак абмежаванае',
 'nocreatetext' => 'У {{GRAMMAR:месны|{{SITENAME}}}} абмежаванае стварэньне новых старонак.
 Вы можаце вярнуцца і рэдагаваць існуючую старонку, альбо [[Special:UserLogin|ўвайсьці ў сыстэму ці стварыць рахунак]].',
 'nocreate-loggedin' => 'Вы ня маеце дазволу на стварэньне новых старонак.',
@@ -1398,9 +1404,9 @@ $1",
 'prefs-emailconfirm-label' => 'Пацьверджаньне адрасу электроннай пошты:',
 'prefs-textboxsize' => 'Памеры акна рэдагаваньня',
 'youremail' => 'Адрас электроннай пошты:',
-'username' => 'Імя ўдзельніка/ўдзельніцы:',
-'uid' => 'ID удзельніка/ўдзельніцы:',
-'prefs-memberingroups' => 'Удзельнік {{PLURAL:$1|групы|групаў}}:',
+'username' => 'Імя {{GENDER:$1|ўдзельніка|ўдзельніцы}}:',
+'uid' => 'ID {{GENDER:$1|удзельніка|удзельніцы}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Удзельнік|Удзельніца}} {{PLURAL:$1|групы|групаў}}:',
 'prefs-registration' => 'Час рэгістрацыі:',
 'yourrealname' => 'Сапраўднае імя:',
 'yourlanguage' => 'Мова інтэрфэйсу:',
@@ -1549,13 +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-autopromote' => '$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5',
-'rightsnone' => '(няма)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'чытаньне гэтай старонкі',
@@ -1784,6 +1790,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.',
@@ -2174,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' => 'Сымбалі падстаноўкі могуць ужывацца толькі ў пачатку адрасоў.',
 
@@ -2193,10 +2200,6 @@ $1',
 'activeusers-hidesysops' => 'Схаваць адміністратараў',
 'activeusers-noresult' => 'Удзельнікі ня знойдзеныя.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал стварэньня рахункаў',
-'newuserlogpagetext' => 'Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Правы групаў удзельнікаў',
 'listgrouprights-summary' => 'Ніжэй пададзены сьпіс групаў удзельнікаў {{GRAMMAR:родны|{{SITENAME}}}}, разам зь іх правамі.
@@ -2262,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' => 'Назіраць',
@@ -2291,29 +2294,31 @@ $1',
 
 'enotif_mailer' => 'Служба паштовага апавяшчэньня {{GRAMMAR:родны|{{SITENAME}}}}',
 'enotif_reset' => 'Пазначыць усе старонкі як прагледжаныя',
-'enotif_newpagetext' => 'Гэта новая старонка.',
 'enotif_impersonal_salutation' => 'Удзельнік {{GRAMMAR:родны|{{SITENAME}}}}',
-'changed' => 'зьмененая',
-'created' => 'створаная',
-'enotif_subject' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} $PAGETITLE была $CHANGEDORCREATED ўдзельнікам $PAGEEDITOR',
+'enotif_subject_deleted' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была выдаленая {{GENDER:$2|удзельнікам|удзельніцай}} $2',
+'enotif_subject_created' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была створаная {{GENDER:$2|удзельнікам|удзельніцай}} $2',
+'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' => 'Старонка {{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.',
+'enotif_body_intro_changed' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была зьмененая $PAGEEDITDATE {{GENDER:$2|удзельнікам|удзельніцай}} $2, па цяперашнюю вэрсію глядзіце $3.',
 'enotif_lastvisited' => 'Глядзіце на $1 усе апошнія зьмены, якія адбыліся пасьля Вашага апошняга наведваньня.',
 'enotif_lastdiff' => 'Глядзіце $1, каб пабачыць гэтую зьмену.',
 'enotif_anon_editor' => 'ананімны ўдзельнік $1',
-'enotif_body' => 'Шаноўны $WATCHINGUSERNAME,
-
+'enotif_body' => 'Вітаем, $WATCHINGUSERNAME.
 
-Старонка $PAGETITLE {{GRAMMAR:родны|{{SITENAME}}}} была $CHANGEDORCREATED $PAGEEDITDATE $PAGEEDITOR, глядзіце цяперашнюю вэрсію на $PAGETITLE_URL.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+Апісаньне зьменаў: $PAGESUMMARY $PAGEMINOREDIT
 
-Кароткае апісаньне зьменаў: $PAGESUMMARY $PAGEMINOREDIT
+Зьвязацца з рэдактарам:
+па электроннай пошце: $PAGEEDITOR_EMAIL
+празь вікі-старонку: $PAGEEDITOR_WIKI
 
-Зьвязацца з аўтарам:
-электронная пошта: $PAGEEDITOR_EMAIL
-вікі-старонка: $PAGEEDITOR_WIKI
-
-Паведамленьні ня будуць дасылацца ў выпадку паўторных рэдагаваньняў, пакуль Вы не наведаеце гэтую старонку.
-Вы можаце пазначыць сьцяжкі дасылкі паведамленьняў для ўсіх старонках назіраньня Вашага сьпісу назіраньня.
+Паведамленьні ня будуць дасылацца ў выпадку паўторных рэдагаваньняў, пакуль Вы не наведаеце гэтую старонку. Вы можаце пазначыць сьцяжкі дасылкі паведамленьняў для ўсіх старонках назіраньня Вашага сьпісу назіраньня.
 
              Сыстэма паведамленьняў {{GRAMMAR:родны|{{SITENAME}}}}
 
@@ -2329,6 +2334,8 @@ $UNWATCHURL
 
 Зваротная сувязь і дапамога:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створаная',
+'changed' => 'зьмененая',
 
 # Delete
 'deletepage' => 'Выдаліць старонку',
@@ -2399,6 +2406,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] перанесеная ў [[$2]]',
 'protect-badnamespace-title' => 'Прастора назваў, у якой немагчыма абараняць старонкі',
 'protect-badnamespace-text' => 'Старонкі ў гэтай прасторы назваў ня могуць быць абароненыя.',
+'protect-norestrictiontypes-text' => 'Немагчыма абараніць гэтую старонку, паколькі не існуе тыпаў абароны.',
+'protect-norestrictiontypes-title' => 'Неабараняльная старонка',
 'protect-legend' => 'Пацьверджаньне абароны',
 'protectcomment' => 'Прычына:',
 'protectexpiry' => 'Тэрмін:',
@@ -2415,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',
@@ -2517,9 +2526,9 @@ $1',
 'blanknamespace' => '(Асноўная)',
 
 # Contributions
-'contributions' => 'Унёсак',
+'contributions' => 'Унёсак {{GENDER:$1|удзельніка|удзельніцы}}',
 'contributions-title' => 'Унёсак {{GENDER:$1|удзельніка|удзельніцы}} $1',
-'mycontris' => 'Ð\9cой Ñ\83нёсак',
+'mycontris' => 'Унёсак',
 'contribsub2' => 'Для $1 ($2)',
 'nocontribs' => 'Ня знойдзена зьменаў, якія адпавядаюць гэтым крытэрыям.',
 'uctop' => ' (апошняя)',
@@ -2566,8 +2575,8 @@ $1',
 'autoblockid' => 'Аўтаматычнае блякаваньне №$1',
 'block' => 'Заблякаваць удзельніка',
 'unblock' => 'Разблякаваць удзельніка',
-'blockip' => 'Ð\91лÑ\8fкаванÑ\8cне Ñ\9eдзелÑ\8cнÑ\96ка Ñ\86Ñ\96 Ñ\9eдзелÑ\8cнÑ\96Ñ\86Ñ\8b',
-'blockip-title' => 'Блякаваньне ўдзельніка ці ўдзельніцы',
+'blockip' => 'Ð\97аблÑ\8fкаваÑ\86Ñ\8c',
+'blockip-title' => 'Блякаваньне ўдзельнікаў',
 'blockip-legend' => 'Заблякаваць удзельніка',
 'blockiptext' => 'Наступная форма дазваляе заблякаваць магчымасьць рэдагаваньня з пэўнага IP-адрасу альбо імя ўдзельніка. Гэта трэба рабіць толькі дзеля прадухіленьня вандалізму і згодна з [[{{MediaWiki:Policy-url}}|правіламі]]. Пазначце ніжэй дакладную прычыну (напрыклад, пералічыце асобныя старонкі, на якіх былі парушэньні).',
 'ipadressorusername' => 'IP-адрас альбо імя ўдзельніка/ўдзельніцы:',
@@ -2712,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' => "Скарыстаўшыся гэтай формай, Вы перанесяце старонку з усёй гісторыяй зьменаў да новай назвы.
 Старонка са старой назвай будзе перанакіроўваць на старонку з новай.
@@ -2902,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» карнявой старонкі не дазволеныя.',
@@ -2925,7 +2935,7 @@ $1',
 'javascripttest-qunit-heading' => 'Набор QUnit-тэстаў для MediaWiki JavaScript',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Ваша старонка ўдзельніка',
+'tooltip-pt-userpage' => 'Вашая ўласная старонка',
 'tooltip-pt-anonuserpage' => 'Старонка ўдзельніка для IP-адрасу, зь якога Вы рэдагуеце',
 'tooltip-pt-mytalk' => 'Ваша старонка гутарак',
 'tooltip-pt-anontalk' => 'Старонка гутарак пра рэдагаваньні, зробленыя з гэтага IP-адрасу',
@@ -2958,7 +2968,7 @@ $1',
 'tooltip-n-currentevents' => 'Атрымаць інфармацыю пра актуальныя падзеі',
 'tooltip-n-recentchanges' => 'Сьпіс апошніх зьменаў у {{GRAMMAR:месны|{{SITENAME}}}}.',
 'tooltip-n-randompage' => 'Паказаць выпадковую старонку',
-'tooltip-n-help' => 'Месца, каб пра ўсё даведацца.',
+'tooltip-n-help' => 'Месца, каб пра ўсё даведацца',
 'tooltip-t-whatlinkshere' => 'Сьпіс усіх старонак, якія спасылаюцца на гэтую',
 'tooltip-t-recentchangeslinked' => 'Апошнія зьмены ў старонках, на якія спасылаецца гэтая старонка',
 'tooltip-feed-rss' => 'RSS-стужка для гэтай старонкі',
@@ -3051,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' => 'інфармацыя',
@@ -3059,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' => 'Клясычнае',
@@ -3081,6 +3096,8 @@ $1',
 'markedaspatrollederror' => 'Немагчыма пазначыць як «патруляваную»',
 'markedaspatrollederrortext' => 'Вы мусіце абраць вэрсію, каб пазначыць яе «патруляванай».',
 'markedaspatrollederror-noautopatrol' => 'Вам не дазволена пазначаць Вашыя ўласныя зьмены як «патруляваныя».',
+'markedaspatrollednotify' => 'Гэтая зьмена ў «$1» была пазначаная як патруляваная.',
+'markedaspatrollederrornotify' => 'Не атрымалася адпатруляваць старонку.',
 
 # Patrol log
 'patrol-log-page' => 'Журнал патруляваньняў',
@@ -3113,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.',
@@ -3146,12 +3164,17 @@ $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' => 'толькі што',
 
 # Bad image list
 'bad_image_list' => 'Фармат наступны:
 
-Разглядаюцца толькі элемэнты сьпісу (радкі, якія пачынаюцца з *). Першая спасылка ў радку мусіць быць спасылкай на кепскую выяву. Усе наступныя спасылкі ў тым жа радку будуць разглядацца як выключэньні, напрыклад, старонкі, дзе можа зьяўляцца выява.',
+Разглядаюцца толькі элемэнты сьпісу (радкі, якія пачынаюцца з *).
+Першая спасылка ў радку мусіць быць спасылкай на кепскую выяву.
+Усе наступныя спасылкі ў тым жа радку будуць разглядацца як выключэньні, напрыклад, старонкі, дзе можа зьяўляцца выява.',
 
 # Metadata
 'metadata' => 'Мэтазьвесткі',
@@ -3334,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' => 'Інфармацыя пра ўмовы карыстаньня на ўмовах іншых ліцэнзіяў',
@@ -3905,11 +3928,15 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 '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-newusers' => 'Быў створаны рахунак $1',
+'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 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5',
+'rightsnone' => '(няма)',
 
 # Feedback
 'feedback-bugornote' => 'Калі Вы гатовы падрабязна апісаць тэхнічную праблему, калі ласка [$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 eb69d43..e1ae315 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' => 'Стил на шрифта в кутията за редактиране',
@@ -371,8 +371,8 @@ $messages = array(
 'newwindow' => '(отваря се в нов прозорец)',
 'cancel' => 'Отказ',
 'moredotdotdot' => 'Още…',
-'mypage' => 'Ð\9cоÑ\8fÑ\82а Ñ\81траница',
-'mytalk' => 'Ð\9cоÑ\8fÑ\82а Ð±еседа',
+'mypage' => 'Страница',
+'mytalk' => 'Ð\91еседа',
 'anontalk' => 'Беседа за адреса',
 'navigation' => 'Навигация',
 'and' => '&#32;и',
@@ -394,7 +394,7 @@ $messages = array(
 'vector-action-protect' => 'Защита',
 'vector-action-undelete' => 'Възстановяване',
 'vector-action-unprotect' => 'Промяна на защитата',
-'vector-simplesearch-preference' => 'Ð\92клÑ\8eÑ\87ване Ð½Ð° Ð¿Ñ\80едложенииÑ\8f Ð¿Ñ\80и Ñ\82Ñ\8aÑ\80Ñ\81ене (Ñ\81амо Ð·Ð° Ð¸Ð·Ð³Ð»ÐµÐ´а Vector)',
+'vector-simplesearch-preference' => 'Ð\92клÑ\8eÑ\87ване Ð½Ð° Ð¾Ð¿Ñ\80оÑ\81Ñ\82ена Ð»ÐµÐ½Ñ\82а Ð·Ð° Ñ\82Ñ\8aÑ\80Ñ\81ене (Ñ\81амо Ð·Ð° Ð¾Ð±Ð»Ð¸Ðºа Vector)',
 'vector-view-create' => 'Създаване',
 'vector-view-edit' => 'Редактиране',
 'vector-view-history' => 'История',
@@ -404,6 +404,7 @@ $messages = array(
 'namespaces' => 'Именни пространства',
 'variants' => 'Варианти',
 
+'navigation-heading' => 'Навигация',
 'errorpagetitle' => 'Грешка',
 'returnto' => 'Обратно към $1.',
 'tagline' => 'от {{SITENAME}}',
@@ -501,7 +502,10 @@ $1',
 'youhavenewmessages' => 'Имате $1 ($2).',
 'newmessageslink' => 'нови съобщения',
 'newmessagesdifflink' => 'разлика с предишната версия',
+'youhavenewmessagesfromusers' => 'Имате $1 от {{PLURAL:$3|друг потребител|$3 потребители}} ($2).',
+'youhavenewmessagesmanyusers' => 'Имате $1 от много потребители ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ново съобщение|нови съобщения}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промяна|последни промени}}',
 'youhavenewmessagesmulti' => 'Имате нови съобщения в $1',
 'editsection' => 'редактиране',
 'editold' => 'редактиране',
@@ -606,7 +610,7 @@ $1',
 'viewsource-title' => 'Преглеждане на кода на $1',
 'actionthrottled' => 'Ограничение в скоростта',
 'actionthrottledtext' => 'Като част от защитата против спам, многократното повтаряне на това действие за кратък период от време е ограничено и вие вече сте надвишили лимита си. Опитайте отново след няколко минути.',
-'protectedpagetext' => 'Тази страница е заключена за редактиране.',
+'protectedpagetext' => 'Тази страница е защитена, за да се предотвратят редактиране или други действия.',
 'viewsourcetext' => 'Можете да разгледате и да копирате кодa на страницата:',
 'viewyourtext' => "Можете да прегледате и копирате изходния код на '''вашите редакции''' на тази страница:",
 'protectedinterface' => 'Тази страница съдържа текст, нужен за работата на системата. Тя е защитена против редактиране, за да се предотвратят възможни злоупотреби.',
@@ -635,9 +639,8 @@ $2',
 
 Можете да продължите да използвате {{SITENAME}} анонимно или да <span class='plainlinks'>[$1 влезете отново]</span> като друг потребител.
 Обърнете внимание, че някои страници все още ще се показват така, сякаш сте влезли, докато не изтриете кеш-паметта на браузъра.",
-'welcomecreation' => '== Добре дошли, $1! ==
-
-Вашата сметка беше създадена.
+'welcomeuser' => 'Здравейте, $1!',
+'welcomecreation-msg' => 'Вашата сметка беше създадена.
 Можете да промените [[Special:Preferences|настройките на {{SITENAME}}]] според предпочитанията си.',
 'yourname' => 'Потребителско име:',
 'yourpassword' => 'Парола:',
@@ -884,9 +887,12 @@ $2
 
 ''Ако сте анонимен потребител и мислите, че тези неуместни коментари са отправени към вас, [[Special:UserLogin/signup|регистрирайте се]] или [[Special:UserLogin|влезте в системата]], за да избегнете евентуално бъдещо объркване с други анонимни потребители.''",
 'noarticletext' => 'Тази страница все още не съществува. Можете да [[Special:Search/{{PAGENAME}}|потърсите за заглавието на страницата]] в други страници, да <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} потърсите в дневниците] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} да я създадете]</span>.',
-'noarticletext-nopermission' => 'Понастоящем в тази страница няма текст.
-Можете да [[Special:Search/{{PAGENAME}}|потърсите заглавието на тази страница ]] в други страници или
-да <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} потърсите в съответните дневници]</span>.',
+'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' => 'В момента този потребител е блокиран.
@@ -964,7 +970,6 @@ $2
 'template-semiprotected' => '(полузащитен)',
 'hiddencategories' => 'Тази страница е включена в {{PLURAL:$1|Една скрита категория|$1 скрити категории}}:',
 'edittools' => '<!-- Евентуален текст тук ще бъде показван под формулярите за редактиране и качване. -->',
-'nocreatetitle' => 'Създаването на страници е ограничено',
 'nocreatetext' => 'Създаването на нови страници в {{SITENAME}} е ограничено. Можете да се върнете назад и да редактирате някоя от съществуващите страници, [[Special:UserLogin|да се регистрирате или да създадете нова потребителска сметка]].',
 'nocreate-loggedin' => 'Нямате необходимите права да създавате нови страници.',
 'sectioneditnotsupported-title' => 'Не се поддържа редактиране на раздели',
@@ -987,6 +992,16 @@ $2
 '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' => 'Джаваскрипт',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Внимание: Тази страница прекалено много пъти използва ресурсоемки парсерни функции.
@@ -1001,6 +1016,8 @@ $2
 'parser-template-loop-warning' => 'Открито зацикляне на шаблон: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Надвишен лимит на дълбочината при шаблонна рекурсия ($1)',
 'language-converter-depth-warning' => 'Надвишени са възможностите за автоматичен превод ($1)',
+'node-count-exceeded-category' => 'Страници, където е превишен възел-граф',
+'node-count-exceeded-warning' => 'Страница превишава възел-брой',
 
 # "Undo" feature
 'undo-success' => 'Редакцията може да бъде върната. Прегледайте долното сравнение и се уверете, че наистина искате да го направите. След това съхранете страницата, за да извършите връщането.',
@@ -1260,7 +1277,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Настройки',
-'mypreferences' => 'Ð\9cоиÑ\82е Ð½астройки',
+'mypreferences' => 'Ð\9dастройки',
 'prefs-edits' => 'Брой редакции:',
 'prefsnologin' => 'Не сте влезли',
 'prefsnologintext' => 'Необходимо е <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} да влезете]</span>, за да може да променяте потребителските си настройки.',
@@ -1336,8 +1353,8 @@ $1",
 'prefs-emailconfirm-label' => 'Потвърждаване на адрес за е-поща:',
 'prefs-textboxsize' => 'Размер на кутията за редактиране',
 'youremail' => 'Е-поща:',
-'username' => 'Потребителско име:',
-'uid' => 'Потребителски номер:',
+'username' => '{{GENDER:$1|Потребителско име}}:',
+'uid' => '{{GENDER:$1|Потребителски}} номер:',
 'prefs-memberingroups' => 'Член на {{PLURAL:$1|група|групи}}:',
 'prefs-registration' => 'Регистрация:',
 'yourrealname' => 'Истинско име:',
@@ -1485,11 +1502,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' => 'четене на страницата',
@@ -1560,9 +1579,11 @@ $1",
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|наблюдаващ потребител|наблюдаващи потребители}}]',
 'rc_categories' => 'Само от категории (разделител „|“)',
 'rc_categories_any' => 'Която и да е',
+'rc-change-size-new' => '$1 {{PLURAL:$1|байт|байта}} след редакцията',
 'newsectionsummary' => 'Нова тема /* $1 */',
 'rc-enhanced-expand' => 'Показване на детайли (изисква JavaScript)',
 'rc-enhanced-hide' => 'Скриване на детайли',
+'rc-old-title' => 'първоначално създадена като „$1“',
 
 # Recent changes linked
 'recentchangeslinked' => 'Свързани промени',
@@ -2061,10 +2082,6 @@ $1',
 'activeusers-hidesysops' => 'Скриване на администраторите',
 'activeusers-noresult' => 'Няма намерени потребители.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник на регистрациите',
-'newuserlogpagetext' => 'В този дневник се записват регистрациите на потребители.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права по потребителски групи',
 'listgrouprights-summary' => 'По-долу на тази страница е показан списък на групите потребители в това уики с асоциираните им права за достъп. Допълнителна информация за отделните права може да бъде намерена [[{{MediaWiki:Listgrouprights-helppage}}|тук]].',
@@ -2156,11 +2173,7 @@ $1',
 
 'enotif_mailer' => 'Известяване по пощата на {{SITENAME}}',
 'enotif_reset' => 'Отбелязване на всички страници като посетени',
-'enotif_newpagetext' => 'Това е нова страница.',
 'enotif_impersonal_salutation' => 'Потребител на {{SITENAME}}',
-'changed' => 'променена',
-'created' => 'създадена',
-'enotif_subject' => 'Страницата $PAGETITLE в {{SITENAME}} е била $CHANGEDORCREATED от $PAGEEDITOR',
 'enotif_lastvisited' => 'Преглед на всички промени след последното ви посещение: $1.',
 'enotif_lastdiff' => 'Преглед на тази промяна: $1.',
 'enotif_anon_editor' => 'анонимен потребител $1',
@@ -2193,6 +2206,8 @@ $UNWATCHURL
 
 За обратна връзка и помощ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'създадена',
+'changed' => 'променена',
 
 # Delete
 'deletepage' => 'Изтриване',
@@ -2228,6 +2243,8 @@ $UNWATCHURL
 'rollback' => 'Отмяна на промените',
 'rollback_short' => 'Отмяна',
 'rollbacklink' => 'отмяна',
+'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}}]]), не може да бъде отменена. Някой друг вече е редактирал страницата или е отменил промените.
@@ -2267,7 +2284,7 @@ $UNWATCHURL
 'protect-locked-access' => "Нямате правото да променяте нивата на защита на страниците. Ето текущите настройки за страницата „'''$1'''“:",
 'protect-cascadeon' => 'Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита. Можете да промените нивото на защита на страницата, но това няма да повлияе върху каскадната защита.',
 'protect-default' => 'Позволяване за всички потребители',
-'protect-fallback' => 'Ð\9dеобÑ\85одими Ñ\81а права на „$1“',
+'protect-fallback' => 'Ð\9fозволÑ\8fване Ñ\81амо Ð·Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ели Ñ\81 права на „$1“',
 'protect-level-autoconfirmed' => 'Блокиране на нови и нерегистрирани потребители',
 'protect-level-sysop' => 'Само за администратори',
 'protect-summary-cascade' => 'каскадно',
@@ -2331,7 +2348,8 @@ $UNWATCHURL
 'undeletedrevisions' => '{{PLURAL:$1|Една версия беше възстановена|$1 версии бяха възстановени}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|Една версия|$1 версии}} и {{PLURAL:$1|един файл|$2 файла}} бяха възстановени',
 'undeletedfiles' => '{{PLURAL:$1|Един файл беше възстановен|$1 файла бяха възстановени}}',
-'cannotundelete' => 'Грешка при възстановяването. Възможно е някой друг вече да е възстановил страницата.',
+'cannotundelete' => 'Възстановяването беше неуспешно:
+$1',
 'undeletedpage' => "'''Страницата „$1“ беше възстановена.'''
 
 Можете да видите последните изтрити и възстановени страници в [[Special:Log/delete|дневника на изтриванията]].",
@@ -2362,9 +2380,9 @@ $1',
 'blanknamespace' => '(Основно)',
 
 # Contributions
-'contributions' => 'Приноси',
+'contributions' => '{{GENDER:$1|Потребителски}} приноси',
 'contributions-title' => 'Потребителски приноси за $1',
-'mycontris' => 'Ð\9cоиÑ\82е Ð¿риноси',
+'mycontris' => 'Ð\9fриноси',
 'contribsub2' => 'За $1 ($2)',
 'nocontribs' => 'Не са намерени промени, отговарящи на критерия.',
 'uctop' => ' (последна)',
@@ -2735,6 +2753,7 @@ $1',
 'import-error-interwiki' => 'Страницата „$1“ не беше внесена, тъй като името ѝ е запазено за външно свързване (междууики).',
 'import-error-special' => 'Страницата „$1“ не беше внесена, тъй като принадлежи към специално именно пространство, което не позволява страници.',
 'import-error-invalid' => 'Страницата „$1“ не беше внесена, тъй като името ѝ е невалидно.',
+'import-rootpage-invalid' => 'Посочената основна страница е с невалидно заглавие.',
 'import-rootpage-nosubpage' => 'Именното пространство „$1“ на основната страница не позволява създаването на подстраници.',
 
 # Import log
@@ -2853,7 +2872,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' => 'Брой наблюдаващи страницата',
@@ -2864,6 +2884,9 @@ $1',
 'pageinfo-edits' => 'Общ брой редакции',
 'pageinfo-authors' => 'Общ брой на отделните автори',
 'pageinfo-magic-words' => '{{PLURAL:$1|Вълшебна думичка|Вълшебни думички}} ($1)',
+'pageinfo-toolboxlink' => 'Информация за страницата',
+'pageinfo-contentpage-yes' => 'Да',
+'pageinfo-protect-cascading-yes' => 'Да',
 
 # Skin names
 'skinname-standard' => 'Класика',
@@ -2885,6 +2908,7 @@ $1',
 'markedaspatrollederror' => 'Не е възможно да се отбележи като проверена',
 'markedaspatrollederrortext' => 'Необходимо е да се посочи редакция, която да бъде отбелязана като проверена.',
 'markedaspatrollederror-noautopatrol' => 'Не е разрешено да маркирате своите редакции като проверени.',
+'markedaspatrollednotify' => 'Тази промяна на $1 беше отбелязана като патрулирана.',
 
 # Patrol log
 'patrol-log-page' => 'Дневник на патрула',
@@ -2916,6 +2940,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.',
@@ -3620,11 +3645,14 @@ MediaWiki се разпространява с надеждата, че ще б
 '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-newusers' => 'Потребителската сметка $1 беше създадена',
+'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' => 'Тема:',
index bd16422..e005efe 100644 (file)
@@ -537,9 +537,6 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'watching' => 'ध्यानसूची में जाते हुए',
 'unwatching' => 'ध्यानसूची से हटते हुए',
 
-'enotif_newpagetext' => 'इ एगो नया पन्ना ह',
-'created' => 'बनावल गईल',
-
 # Undelete
 'undeletelink' => 'देखीं/बहाल करीं',
 
index 9c3612e..014a8ec 100644 (file)
@@ -574,9 +574,6 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'watching' => 'ध्यानसूची में जाते हुए',
 'unwatching' => 'ध्यानसूची से हटते हुए',
 
-'enotif_newpagetext' => 'इ एगो नया पन्ना ह',
-'created' => 'बनावल गईल',
-
 # Undelete
 'undeletelink' => 'देखीं/बहाल करीं',
 
index c4b7111..eb7ceb1 100644 (file)
@@ -540,9 +540,6 @@ Administrator nang takunci nintu manawarakan panjalasan: "$3".',
 
 Pian kawa manyambung hagan mangguna'akan {{SITENAME}} kada bangaran, atawa Pian kawa <span class='plainlinks'>[$1 babuat log pulang]</span> sawagai pamakai nang sama atawa sawagai pamakai balain.
 Catatan bahwasa babarapa tungkaran pinanya masih ha tarus manampaiakan Pian masih babuat log, sampai Pian mahabisakan timbuluk panjalajah web Pian.",
-'welcomecreation' => '==Salamat datang, $1!==
-Akun Pian sudah diulah.
-Jangan kada ingat hagan maubah [[Special:Preferences|kakatujuan {{SITENAME}}]] Pian.',
 'yourname' => 'Ngaran pamakai:',
 'yourpassword' => 'Katasunduk:',
 'yourpasswordagain' => 'Katik pulang katasunduk:',
@@ -875,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.',
@@ -1405,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',
@@ -2035,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.
@@ -2131,11 +2124,7 @@ Parubahan-parubahan salanjutnya pada tungkaran ini dan tungkaran pamandiran tara
 
 'enotif_mailer' => 'Panyurili pamadahan {{SITENAME}}',
 'enotif_reset' => 'Tandai samunyaan tutungkaran sudah diilangi',
-'enotif_newpagetext' => 'Ngini adalah sabuah tungkaran hanyar.',
 'enotif_impersonal_salutation' => 'Pamuruk {{SITENAME}}',
-'changed' => "ta'ubah",
-'created' => "ta'ulah",
-'enotif_subject' => 'Tungkaran $PAGETITLE pintang {{SITENAME}} sudah $CHANGEDORCREATED ulih $PAGEEDITOR',
 'enotif_lastvisited' => 'Janaki $1 gasan samunyaan parubahan mula Pian pauncitan tadi bailang.',
 'enotif_lastdiff' => 'Janaki $1 hagaan maniringi parubahan ngini.',
 'enotif_anon_editor' => 'pamuruk kada-bangaran $1',
@@ -2166,6 +2155,8 @@ $UNWATCHURL
 
 kitihan-bulik wan pangganian labih jauh:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => "ta'ulah",
+'changed' => "ta'ubah",
 
 # Delete
 'deletepage' => 'Hapus tungkaran',
@@ -3669,6 +3660,7 @@ Situs ngini mangalami kangalihan teknik.',
 '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 fec007b..6d36624 100644 (file)
@@ -201,8 +201,9 @@ $messages = array(
 'newwindow' => '(নতুন উইন্ডোতে খুলবে)',
 'cancel' => 'বাতিল',
 'moredotdotdot' => 'আরও...',
+'morenotlisted' => 'আরও তালিকাভুক্ত হয়নি...',
 'mypage' => 'আমার পাতা',
-'mytalk' => 'à¦\86মার à¦\86লাপ',
+'mytalk' => 'à¦\86লà§\8bà¦\9aনা',
 'anontalk' => 'এই বেনামী ব্যবহারকারীর আলাপের পাতা',
 'navigation' => 'পরিভ্রমণ',
 'and' => '&#32;এবং',
@@ -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,9 +478,9 @@ $2',
 
 এ পরিস্থিতিতে আপনি বেনামে {{SITENAME}} ব্যবহার করতে পারেন, কিংবা একই বা পৃথক নামে <span class='plainlinks'>[$1 আবার প্রবেশ করতে]</span> পারেন।
 লক্ষ্য করুন যে, এর কোন কোন পাতা এখনও এমনভাবে দেখাতে পারে যাতে মনে হবে আপনি আগের অবস্থাতেই আছেন। এক্ষেত্রে আপনাকে আপনার ব্রাওজারের ক্যাশ পরিষ্কার (clear browser cache) করে নিতে হবে।",
-'welcomecreation' => '== স্বাগতম $1! ==
-আপনার অ্যাকাউন্ট তৈরী হয়েছে।
-à¦\86পনার [[Special:Preferences|{{SITENAME}} à¦ªà¦\9bনà§\8dদসমà§\82হ]]  à¦¸à§\8dথির à¦\95রà§\87 à¦¨à¦¿à¦¤à§\87 à¦­à§\81লবà§\87ন à¦¨à¦¾ à¦\95িনà§\8dতà§\81।',
+'welcomeuser' => 'স্বাগতম, $1!',
+'welcomecreation-msg' => 'আপনার অ্যাকাউন্ট তৈরী হয়েছে।
+à¦\86পনার [[Special:Preferences|{{SITENAME}} à¦ªà¦\9bনà§\8dদসমà§\82হ]]  à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রà§\87 à¦¨à¦¿à¦¤à§\87 à¦­à§\81লবà§\87ন à¦¨à¦¾।',
 'yourname' => 'ব্যবহারকারী নাম:',
 'yourpassword' => 'শব্দচাবি:',
 'yourpasswordagain' => 'শব্দচাবিটি (password) আবার লিখুন',
@@ -631,6 +633,7 @@ $2
 'changeemail-oldemail' => 'বর্তমান ই-মেইল ঠিকানা:',
 'changeemail-newemail' => 'নতুন ই-মেইল ঠিকানা:',
 'changeemail-none' => '(কিছু নাই)',
+'changeemail-password' => 'আপনার {{SITENAME}} শব্দচাবি:',
 'changeemail-submit' => 'ই-মেইল পরিবর্তন',
 'changeemail-cancel' => 'বাতিল',
 
@@ -800,7 +803,6 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'template-protected' => '(সুরক্ষিত)',
 'template-semiprotected' => '(অর্ধ-সুরক্ষিত)',
 'hiddencategories' => 'এ পাতাটি যে {{PLURAL:$1|1 লুকায়িত বিষয়শ্রেণীর|$1 লুকায়িত বিষয়শ্রেণীসমূহের}} সদস্য:',
-'nocreatetitle' => 'পাতা তৈরি নিয়ন্ত্রণ করা হয়েছে',
 'nocreatetext' => '{{SITENAME}}-এ নতুন পাতা সৃষ্টি করার ক্ষমতা সীমাবদ্ধ করা হয়েছে।
 আপনি ফিরে গিয়ে ইতিমধ্যে বিদ্যমান কোন পাতা সম্পাদনা করতে পারেন, অথবা [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ কিংবা অ্যাকাউন্ট সৃষ্টি করতে পারেন]]।',
 'nocreate-loggedin' => 'নতুন পাতা তৈরিতে আপনাকে অনুমোতি দেওয়া হয়নি।',
@@ -1123,7 +1125,7 @@ $1",
 
 # Preferences page
 'preferences' => 'আমার পছন্দ',
-'mypreferences' => 'à¦\86মার à¦ªà¦\9bনà§\8dদ',
+'mypreferences' => 'পà¦\9bনà§\8dদসমà§\82হ',
 'prefs-edits' => 'সম্পাদনা সংখ্যা:',
 'prefsnologin' => 'আপনি লগ-ইন করেননি',
 'prefsnologintext' => 'ব্যবহারকারীর পছন্দ ঠিক করতে হলে আপনাকে অবশ্যই <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} লগইন]</span> করা অবস্থায় থাকতে হবে।',
@@ -1166,7 +1168,7 @@ $1",
 'prefs-help-recentchangescount' => 'এতে সাম্প্রতিক পরিবর্তনসমূহ, পাতার ইতিহাস এবং লগ অন্তর্ভুক্ত।',
 'prefs-help-watchlist-token' => 'এই ঘরটি একটি গোপন শব্দ চাবি দ্বারা পূরণ করলে আপনার নজর তালিকার জন্য একটি আরএসএস ফিড তৈরী হবে। যারা এই ঘরের চাবি জানবে তারা আপনার নজর তালিকা দেখতে পারবে, তাই একটি গোপন মান ব্যবহার করুন। এখানে এলোমেলোভাবে তৈরী একটি মান দেখানো হয়েছে যা আপনি ব্যবহার করতে পারেন: $1',
 'savedprefs' => 'আপনার পছন্দগুলো সংরক্ষণ করা হয়েছে।',
-'timezonelegend' => 'সময় বলয়:',
+'timezonelegend' => 'সময়স্থান:',
 'localtime' => 'স্থানীয় সময়:',
 'timezoneuseserverdefault' => 'উইকির পূর্বনির্ধারিত সময় ব্যবহার করো ($1)',
 'timezoneuseoffset' => 'অন্য (অফসেট নির্দিষ্ট করুন)',
@@ -1197,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' => 'ভাষা:',
@@ -1346,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' => 'এই পাতাটি পড়ুন',
@@ -1579,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"-তে কপি করা সম্ভব নয়।',
@@ -1964,13 +1968,13 @@ 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> (অনুসন্ধান বক্সে এগুলো ব্যবহার করবেন না)।',
+যে সকল {{PLURAL:$2|প্রোটোকল|প্রোটোকলসমূহ}} সমর্থন করে: <code>$1</code> (প্রোটকল উল্লেখ করা না হলে http:// ডিফল্ট হিসাবে ব্যবহৃত হবে)।',
 'linksearch-line' => '$2 থেকে $1 এ লিংক করা হয়েছে',
 'linksearch-error' => 'হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।',
 
 # Special:ListUsers
 'listusersfrom' => 'সেই সব ব্যবহারকারী দেখাও যাদের নাম এই অক্ষর দিয়ে শুরু:',
-'listusers-submit' => 'দà§\87à¦\96ানà§\8b à¦¹à§\8bà¦\95',
+'listusers-submit' => 'দà§\87à¦\96াà¦\93',
 'listusers-noresult' => 'কোন ব্যবহারকারী খুঁজে পাওয়া যায়নি।',
 'listusers-blocked' => '(ব্লককৃত)',
 
@@ -1983,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' => 'এই উইকির ব্যবহারকারীদের একটি গ্রুপগুলোর তালিকা দেখানো হচ্ছে, সাথে গ্রুপের কার্যপরিধিও উল্লেখ করা হয়েছে।
@@ -2045,19 +2045,16 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 
 # Watchlist
 'watchlist' => 'আমার নজর তালিকা',
-'mywatchlist' => 'à¦\86মার à¦¨à¦\9cর à¦¤à¦¾à¦²à¦¿à¦\95া',
+'mywatchlist' => 'নজর তালিকা',
 'watchlistfor2' => '$1 ($2)-এর জন্য',
 'nowatchlist' => 'আপনার নজরতালিকা খালি।',
 'watchlistanontext' => 'আপনার নজরতালিকার আইটেমগুলি দেখতে বা সম্পাদনা করতে অনুগ্রহ করে $1।',
 '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' => 'নজর রাখুন',
@@ -2085,45 +2082,48 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 
 'enotif_mailer' => '{{SITENAME}} বিজ্ঞপ্তি ই-মেইল প্রেরক',
 'enotif_reset' => 'সমস্ত পাতা দেখা হয়েছে হিসেবে চিহ্নিত করুন',
-'enotif_newpagetext' => 'এটি একটি নতুন পাতা।',
 'enotif_impersonal_salutation' => '{{SITENAME}} ব্যবহারকারী',
-'changed' => 'পরিবর্তিত',
-'created' => 'তৈরী হয়েছিল',
-'enotif_subject' => '{{SITENAME}}-এর $PAGETITLE শিরোনামের পাতাটি $PAGEEDITOR কর্তৃক $CHANGEDORCREATED হয়েছে',
+'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 দেখুন।
+'enotif_body' => 'প্রিয় $WATCHINGUSERNAME,
 
-$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' => 'পাতাটি মুছে ফেলা হোক',
@@ -2194,6 +2194,7 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]]-কে [[$2]]-এ সরিয়ে নেওয়া হয়েছে',
 'protect-badnamespace-title' => 'নামস্থানটি সুরক্ষিত করা সম্ভব নয়',
 'protect-badnamespace-text' => 'এই নামস্থানের পাতাগুলো সুরক্ষিত করা সম্ভব নয়।',
+'protect-norestrictiontypes-title' => 'সুরক্ষা প্রযোজ্য নয় এমন পাতা',
 'protect-legend' => 'সুরক্ষা নিশ্চিত করুন',
 'protectcomment' => 'কারণ:',
 'protectexpiry' => 'মেয়াদোত্তীর্ণ হবে:',
@@ -2305,9 +2306,9 @@ $1',
 'blanknamespace' => '(প্রধান)',
 
 # Contributions
-'contributions' => 'ব্যবহারকারীর অবদান',
+'contributions' => '{{GENDER:$1|ব্যবহারকারীর}} অবদান',
 'contributions-title' => '$1 ব্যবহারকারীর অবদানসমূহ',
-'mycontris' => 'à¦\86মার à¦\85বদান',
+'mycontris' => 'অবদান',
 'contribsub2' => '$1 ($2)-এর জন্য',
 'nocontribs' => 'এই শর্তগুলির সাথে মিলে যায়, এমন কোন পরিবর্তন খুঁজে পাওয়া যায়নি।',
 'uctop' => '(শীর্ষ)',
@@ -2348,7 +2349,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 টি পুননির্দেশনা',
 'whatlinkshere-hidetrans' => '$1 ট্রান্সক্লুশন',
 'whatlinkshere-hidelinks' => '$1 টি সংযোগ',
-'whatlinkshere-hideimages' => '$1 à¦\9aিতà§\8dর সংযোগ',
+'whatlinkshere-hideimages' => '$1 à¦«à¦¾à¦\87ল সংযোগ',
 'whatlinkshere-filters' => 'ছাকনী',
 
 # Block/unblock
@@ -2820,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' => 'পরীক্ষিত বলে চিহ্নিত করুন',
@@ -2863,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।',
@@ -2892,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' => 'ফরম্যাটটি এরকম:
@@ -3596,11 +3605,14 @@ $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 b9a145c..21f2d27 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Freeyak
  * @author Jason (on bo.wikipedia.org)
+ * @author YeshiTuhden
  */
 
 $digitTransformTable = array(
@@ -230,6 +231,7 @@ $messages = array(
 'disclaimerpage' => 'Project:སྤྱིའི་དགག་བྱ།',
 'edithelp' => 'རྩོམ་སྒྲིག་རོགས་རམ།',
 'edithelppage' => 'Help:རྩོམ་སྒྲིག',
+'helppage' => 'Help:ནང་དོན་',
 'mainpage' => 'གཙོ་ངོས།',
 'mainpage-description' => 'གཙོ་ངོས།',
 'policy-url' => 'Project: སྒྲིག་གཞི།',
@@ -395,6 +397,8 @@ $messages = array(
 'templatesused' => 'ཤོག་ངོས་འདིར་སྤྱད་པའི་ {{PLURAL:$1|དཔེ་པང་།|དཔེ་པང་།}}',
 'template-protected' => 'སྲུང་སྐྱོབ་འོག་ཡོད་པ།',
 'nocreate-loggedin' => 'ཤོག་ངོས་གསར་བཟོའི་ཆོག་མཆན་མི་འདུག',
+'recreate-moveddeleted-warn' => "'''ཉེན་བརྡ་:རང་གིས་སུབ་ཚར་བའི་ཤོག་ལེ་ཞིག་བསྐྱར་བཟོ་བྱེད་ཀྱི་འདུག་ '''
+ཁྱེད་རང་གལ་སྲིད་མུ་མཐུད་ཤོག་ལེ་འདི་བཟོ་ཅོས་བྱེད་འདོད་ན་སྟབས་བདེ་ཞིག་ལ་ང་ཚོས་སུབ་བཟིན་པའི་ཤོག་ལེ་འདིར་ཉར་ཡོད།",
 
 # History pages
 'viewpagelogs' => 'ཤོག་ངོས་འདིའི་ཉིན་ཐོ་ལ་ལྟ་བ།',
@@ -445,9 +449,14 @@ $messages = array(
 'nextn' => 'རྗེས་མ་{{PLURAL:$1|$1}}',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)ལ་ལྟ་བ།',
 'searchmenu-legend' => 'འཚོལ་ཞིབ་འདེམས་ཚན།',
+'searchmenu-new' => 'ལྦེ་ཁེ་སྟེང་ལ་ཤོག་ལེ་ [[:$1]]བཟོས།',
+'searchprofile-project' => 'རོགས་རམ་དང་འཆར་གཞིའི་ཤོག་ངོས་',
+'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 word|$2 words}})',
 'search-redirect' => '($1རིམ་འགྲེམ།)',
 'search-section' => '(ཚན་པ $1)',
@@ -457,6 +466,7 @@ $messages = array(
 'search-interwiki-more' => '(དེ་ལས་མང་བ།)',
 'search-relatedarticle' => 'འབྲེལ་ཡོད།',
 'searchall' => 'ཚང་མ།',
+'search-nonefound' => 'ཁྱེད་ཀྱི་འདྲི་ཞིབ་དང་མཐུན་པའི་ལན་མི་འདུག་',
 'powersearch' => 'ཞིབ་ཏུ་འཚོལ་བ།',
 'powersearch-legend' => 'ཞིབ་ཏུ་འཚོལ་བ།',
 'powersearch-ns' => 'མིང་གནས་ནང་འཚོལ་བ།',
@@ -521,7 +531,6 @@ $messages = array(
 
 # User rights log
 'rightslog' => 'སྤྱོད་མིའི་ཐོབ་ཐང་།',
-'rightsnone' => '(སྟོང་པ།)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ཤོག་ངོས་འདི་ཀློག་པ།',
@@ -691,9 +700,8 @@ $messages = array(
 'unwatching' => 'ལྟ་ཐོ་ལས་འདོར་བཞིན་པ་་་',
 
 'enotif_reset' => 'ཤོག་ངོས་ཚང་མ་བལྟས་ཟིན་དུ་རྟགས་རྒྱོབ།',
-'enotif_newpagetext' => 'ཤོག་ངོས་འདི་གསར་བ་རེད།',
-'changed' => 'བསྒྱུར་ཟིན།',
 'created' => 'བཟོས་ཟིན།',
+'changed' => 'བསྒྱུར་ཟིན།',
 
 # Delete
 'deletepage' => 'ཤོག་ངོས་འདོར་བ།',
@@ -731,6 +739,7 @@ $messages = array(
 
 # Undelete
 'undeletelink' => 'ལྟ་བ། / བསྐྱར་འདྲེན།',
+'undeleteviewlink' => 'ལྟ་བ་',
 'undelete-search-submit' => 'འཚོལ།',
 
 # Namespace form on various pages
@@ -784,6 +793,7 @@ $messages = array(
 
 # Namespace 8 related
 'allmessages' => 'མ་ལག་གི་སྐད་ཆ།',
+'allmessagesname' => 'མིང་',
 
 # Thumbnails
 'thumbnail-more' => 'ཆེ་རུ་གཏོང་བ།',
@@ -838,6 +848,7 @@ $messages = array(
 'tooltip-save' => 'བཟོ་བཅོས་ཉར་ཚགས་བྱོས།',
 'tooltip-preview' => 'ཉར་ཚགས་ཀྱི་སྔོན་དུ་བཟོ་བཅོས་ལ་བསྐྱར་ཞིབ་གནང་རོགས།',
 'tooltip-diff' => 'གང་ལ་བཟོ་བཅོས་བྱས་པའི་ཡིག་འབྲུ་སྟོན་པ།',
+'tooltip-summary' => 'ཕྱོགས་བསྡོམས་ཐུང་ངུ་ཞིག་འབྲིས་',
 
 # Browsing diffs
 'previousdiff' => '← རྩོམ་སྒྲིག་རྙིང་བ།',
@@ -867,4 +878,7 @@ $messages = array(
 # Special:SpecialPages
 'specialpages' => 'དམིགས་གསལ་ཤོག་ངོས།',
 
+# New logging system
+'rightsnone' => '(སྟོང་པ།)',
+
 );
index d09c679..d2e61c2 100644 (file)
@@ -435,8 +435,6 @@ $2',
 
 এ পরিস্থিতিত তি বেনাঙল {{SITENAME}} ব্যবহার করানি পারর, নাইলে আরাক নাঙল <span class='plainlinks'>[$1 বারো হমানি]</span> পারর।
 খিয়াল থ, কোন কোন পাতা তি আগর অংতাত আসত বুলিয়া দেখা দিতে পারে। অসারে ইলে তি ব্রাওজারর ক্যাশ সেঙকরে বেলা (clear browser cache)।",
-'welcomecreation' => '==সম্ভাষা, $1! ==
-তর একাউন্টহান হঙিল। তর [[Special:Preferences|{{SITENAME}} পছনহান]] সিলানি না পাহুরিস।',
 'yourname' => 'আতাকুরার নাংহান (Username)',
 'yourpassword' => 'খন্তাচাবিগ (password)',
 'yourpasswordagain' => 'খন্তাচাবিগ (password) আরাকমু ইকর',
@@ -695,7 +693,6 @@ $2',
 'template-protected' => '(লুকরিসি)',
 'template-semiprotected' => '(আধা-কাচা লুকরিসি)',
 'hiddencategories' => 'এ পাতা এহান যে {{PLURAL:$1|১ নাফঙিসে বিষয়থাকর|$1 নাফঙিসে বিষয়থাকহানির}} সদস্য:',
-'nocreatetitle' => 'পাতা হঙকরানি নিয়ন্ত্রণ করানি অসে',
 'nocreatetext' => '{{SITENAME}}-এরে নুৱা পাতা এহানর পতানিহানাত থিতপা আসে।
 তি আলথকে গিয়া আসে হের পাতা সিলকরানি পারর, নাইলে [[Special:UserLogin|অ্যাকাউন্টহানাত হমানি বারো অ্যাকাউন্ট খুলে পারর]]।',
 'nocreate-loggedin' => 'তরতা নুৱা পাতা হঙকরানির য়্যাথাং নেই।',
@@ -966,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' => 'পাতা এহান পাকর',
@@ -1234,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>',
@@ -1733,6 +1729,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'revdelete-restricted' => 'ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি ফলা',
 'revdelete-unrestricted' => 'ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি নেইকর',
 'newuserlog-byemail' => 'ই-মেইলর মা পেঠাদিয়াসি পাসৱার্ডগ',
+'rightsnone' => '(নেই)',
 
 # Search suggestions
 'searchsuggest-search' => 'বিসারা',
index 12ff736..b0f1d7e 100644 (file)
@@ -15,6 +15,8 @@
 
 $fallback = 'fa';
 
+$rtl = true;
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'لینکهای خط به زیر',
index ba7f061..44f89a5 100644 (file)
@@ -227,7 +227,7 @@ $messages = array(
 
 'underline-always' => 'Atav',
 'underline-never' => 'Morse',
-'underline-default' => 'Diouzh ar merdeer',
+'underline-default' => 'Merdeer dre ziouer',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stil font an takad skridaozañ :',
@@ -345,6 +345,7 @@ $messages = array(
 'namespaces' => 'Esaouennoù anv',
 'variants' => 'Adstummoù',
 
+'navigation-heading' => 'Lañser merdeiñ',
 'errorpagetitle' => 'Fazi',
 'returnto' => "Distreiñ d'ar bajenn $1.",
 'tagline' => 'Eus {{SITENAME}}',
@@ -584,10 +585,7 @@ Setu amañ perak ''$2''.",
 
 Gallout a rit kenderc'hel da implijout {{SITENAME}} en un doare dizanv, pe <span class='plainlinks'>[$1 kevreañ en-dro]</span> gant an hevelep anv pe un anv all mar fell deoc'h.
 Notit mat e c'hallo pajennoù zo kenderc'hel da vezañ diskwelet evel pa vefec'h kevreet c'hoazh, betek ma vo riñset krubuilh ho merdeer ganeoc'h.",
-'welcomecreation' => '== Degemer mat, $1! ==
-
-Krouet eo bet ho kont implijer.
-Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}}]].',
+'welcomeuser' => 'Degemer mat $1 !',
 'yourname' => 'Anv implijer :',
 'yourpassword' => 'Ger-tremen :',
 'yourpasswordagain' => 'Skrivit ho ker-tremen en-dro',
@@ -864,7 +862,7 @@ Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
 'note' => "'''Notenn :'''",
 'previewnote' => "'''Diwallit mat, n'eus ken ur rakweled eus an destenn-mañ.'''
 N'eo ket bet enrollet ho kemmoù evit c'hoazh !",
-'continue-editing' => "Kenderc'hel da gemmañ",
+'continue-editing' => "Mont d'an takad kemmañ",
 'previewconflict' => 'Gant ar rakweled e teu testenn ar bajenn war wel evel ma vo pa vo bet enrollet.',
 'session_fail_preview' => "'''Ho tigarez! N'eus ket bet tu da enrollañ ho kemmoù rak kollet eo bet roadennoù an dalc'h.'''
 Klaskit en-dro mar plij.
@@ -914,7 +912,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.",
@@ -939,6 +936,9 @@ Diverket eo bet evit doare.',
 'edit-already-exists' => "N'eus ket bet gallet krouiñ ur bajenn nevez.
 Krouet e oa bet c'hoazh.",
 'defaultmessagetext' => 'Testenn dre ziouer',
+'content-failed-to-parse' => "C'hwitet eo dielfennadur endalc'had $2 evit ar patrom $1: $3",
+'invalid-content-data' => "n'eo ket mat roadennoù an endalc'had",
+'content-not-allowed-here' => 'N\'eo ket aotreet an endalc\'had "$1" er bajenn [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'wikitestenn',
@@ -1457,12 +1457,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ñ',
@@ -2088,7 +2089,7 @@ Gwelet ivez ar [[Special:WantedCategories|rummadoù goulennet a vank]].',
 'linksearch-ok' => 'Klask',
 'linksearch-text' => 'Gallout a reer implijout arouezennoù "joker" evel, da skouer, "*.wikipedia.org".
 Rekis eo dezho un domani a-us da nebeutañ evel, da skouer, "*.org".<br />
-Protokoloù skoret : <code>$1</code> (na lakait hini ebet eus ar re-se en ho klask)',
+Protokoloù skoret : <code>$1</code> (defaults to http:// na lakait hini ebet eus ar re-se en ho klask)',
 'linksearch-line' => '$1 gant ul liamm adal $2',
 'linksearch-error' => "N'hall an arouezennoù joker bezañ implijet nemet e deroù anv domani an ostiz.",
 
@@ -2107,10 +2108,6 @@ Protokoloù skoret : <code>$1</code> (na lakait hini ebet eus ar re-se en ho kla
 '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.
@@ -2139,7 +2136,7 @@ evit gallout kas ur postel d'un implijer all.",
 'emailuser-title-target' => "Kas ur postel d'an {{PLURAL:$1|an implijer-mañ|an implijerez-mañ}}",
 'emailuser-title-notarget' => "Kas ur postel d'un implijer",
 'emailpage' => 'Postel implijer',
-'emailpagetext' => "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an implijer-mañ.
+'emailpagetext' => "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an {{GENDER:\$1|implijer|implijerez}}-mañ.
 E maezienn \"Kaser\" ho postel e vo merket ar chomlec'h postel resisaet ganeoc'h-c'hwi en ho [[Special:Preferences|Penndibaboù]], d'ar resever da c'hallout respont deoc'h war-eeun ma kar.",
 'usermailererror' => 'Fazi postel :',
 'defemailsubject' => 'Postel kaset eus {{SITENAME}} gant an implijer "$1"',
@@ -2210,11 +2207,7 @@ Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ, klikit war "Paouez da e
 
 'enotif_mailer' => 'Posteler Kemenn {{SITENAME}}',
 'enotif_reset' => 'Merkañ an holl bajennoù evel gwelet',
-'enotif_newpagetext' => 'Ur bajenn nevez eo homañ.',
 'enotif_impersonal_salutation' => 'implijer {{SITENAME}}',
-'changed' => 'kemmet',
-'created' => 'Krouet',
-'enotif_subject' => '$CHANGEDORCREATED eo bet pajenn $PAGETITLE {{SITENAME}} gant $PAGEEDITOR',
 'enotif_lastvisited' => 'Sellet ouzh $1 evit gwelet an holl gemmoù abaoe ho selladenn ziwezhañ.',
 'enotif_lastdiff' => "Gwelet $1 evit sellet ouzh ar c'hemm-mañ.",
 'enotif_anon_editor' => 'implijer dizanv $1',
@@ -2247,6 +2240,8 @@ $UNWATCHURL
 
 Evezhiadennoù ha skoazell pelloc\'h :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Krouet',
+'changed' => 'kemmet',
 
 # Delete
 'deletepage' => 'Diverkañ ur bajenn',
@@ -2397,7 +2392,8 @@ Ma'z eus bet krouet ur bajenn nevez dezhi an hevelep anv abaoe an diverkadenn, e
 'undeletedrevisions' => 'Adsavet {{PLURAL:$1|1 stumm|$1 stumm}}',
 'undeletedrevisions-files' => 'Adsavet ez ez eus bet {{PLURAL:$1|1 stumm|$1 stumm}} ha {{PLURAL:$2|1 restr|$2 restr}}',
 'undeletedfiles' => '{{PLURAL:$1|1 restr|$1 restr}} adsavet',
-'cannotundelete' => "Dibosupl eo diziverkañ; moarvat eo bet diziverket gant unan bennak all araozoc'h.",
+'cannotundelete' => 'Dibosupl eo diziverkañ:
+$1',
 'undeletedpage' => "'''Diziverket eo bet $1'''
 
 Sellit ouzh [[Special:Log/delete|marilh an diverkadennoù]] evit teuler ur sell ouzh an diverkadennoù diwezhañ.",
@@ -2428,7 +2424,7 @@ $1',
 'blanknamespace' => '(Pennañ)',
 
 # Contributions
-'contributions' => 'Degasadennoù an implijer',
+'contributions' => 'Degasadennoù an {{GENDER:$1|implijer|implijerez}}',
 'contributions-title' => 'Degasadennoù an implijer evit $1',
 'mycontris' => 'Ma degasadennoù',
 'contribsub2' => 'Evit $1 ($2)',
@@ -2470,7 +2466,7 @@ Dindan emañ merket enmont diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
 'whatlinkshere-hideredirs' => '$1 adkas',
 'whatlinkshere-hidetrans' => '$1 treuzkluzadur',
 'whatlinkshere-hidelinks' => '$1 liamm',
-'whatlinkshere-hideimages' => '$1 liamm skeudennoù',
+'whatlinkshere-hideimages' => '$1 ar restroù liammet',
 'whatlinkshere-filters' => 'Siloù',
 
 # Block/unblock
@@ -2950,7 +2946,7 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 
 # Info page
 'pageinfo-title' => 'Titouroù evit "$1"',
-'pageinfo-not-current' => "Evit an adwel bremañ e c'hall bezañ diskwelet an titouroù hepken.",
+'pageinfo-not-current' => "Hon digarezit, ne c'haller ket reiñ an titouroù-mañ evit an adweloù kozh.",
 'pageinfo-header-basic' => 'Titouroù diazez',
 'pageinfo-header-edits' => 'Kemmoù',
 'pageinfo-header-restrictions' => 'Gwarez ar bajenn',
@@ -2959,6 +2955,7 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 'pageinfo-default-sort' => "Alc'hwez rummañ dre ziouer",
 'pageinfo-length' => 'Ment ar bajenn (en oktedoù)',
 'pageinfo-article-id' => 'Niverenn ar bajenn',
+'pageinfo-language' => 'Yezh ar bajenn',
 'pageinfo-robot-policy' => 'Statud al lusker klask',
 'pageinfo-robot-index' => "A c'haller menegeriñ",
 'pageinfo-robot-noindex' => "Ne c'haller ket menegeriñ",
@@ -2980,6 +2977,7 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 'pageinfo-templates' => "{{PLURAL:$1|Patrom endalc'het|Patromoù endalc'het}} ($1)",
 'pageinfo-toolboxlink' => 'Titouroù ar bajenn',
 'pageinfo-redirectsto' => 'Adkas a ra da',
+'pageinfo-redirectsto-info' => 'Titouroù',
 'pageinfo-contentpage-yes' => 'Ya',
 'pageinfo-protect-cascading-yes' => 'Ya',
 
@@ -3037,6 +3035,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 +3829,12 @@ 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' => '$1 en deus krouet ur gont implijer',
-'logentry-newusers-create' => '$1 en deus krouet ur gont implijer',
-'logentry-newusers-create2' => '$1 en deus krouet ur gont implijer $3',
+'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].
index 5c70272..eff8e5f 100644 (file)
@@ -285,7 +285,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Sakrij patrolirane izmjene u nedavnim promjenama',
 'tog-newpageshidepatrolled' => 'Sakrij patrolirane stranice sa spiska novih stranica',
 'tog-extendwatchlist' => 'Proširi spisak praćenja za pogled svih izmjena, ne samo nedavnih',
-'tog-usenewrc' => 'Korištenje poboljšanog spiska nedavnih izmjena (zahtijeva JavaScript)',
+'tog-usenewrc' => 'Grupiraj izmjene po stranicama sa nedavnih izmjena i praćenih članaka (zahtijeva JavaScript)',
 'tog-numberheadings' => 'Automatski numeriši podnaslove',
 'tog-showtoolbar' => 'Prikaži dugmiće za izmjene (JavaScript)',
 'tog-editondblclick' => 'Izmijeni stranice dvostrukim klikom (JavaScript)',
@@ -293,15 +293,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka (JavaScript)',
 'tog-showtoc' => 'Prikaži sadržaj (u svim stranicama sa više od tri podnaslova)',
 'tog-rememberpassword' => 'Zapamti moju šifru u ovom pregledniku (najviše $1 {{PLURAL:$1|dan|dana}})',
-'tog-watchcreations' => 'Dodaj stranice koje ja napravim u moj spisak praćenih članaka',
-'tog-watchdefault' => 'Dodaj stranice koje uređujem u moj spisak praćenih članaka',
-'tog-watchmoves' => 'Stranice koje pomjerim dodaj na spisak praćenja',
-'tog-watchdeletion' => 'Stranice koje obrišem dodaj na spisak praćenja',
+'tog-watchcreations' => 'Dodaj stranice i datoteke koje napravim na moj spisak praćenih članaka',
+'tog-watchdefault' => 'Dodaj stranice i datoteke koje uređujem na moj spisak praćenih članaka',
+'tog-watchmoves' => 'Dodaj stranice i datoteke koje pomjerim na moj spisak praćenih članaka',
+'tog-watchdeletion' => 'Dodaj stranice i datoteke koje izbrišem na moj spisak praćenih članaka',
 'tog-minordefault' => 'Označi sve izmjene malim isprva',
 'tog-previewontop' => 'Prikaži pretpregled prije polja za izmjenu a ne poslije',
 'tog-previewonfirst' => 'Prikaži izgled pri prvoj izmjeni',
 'tog-nocache' => 'Onemogući keširanje stranica u pregledniku',
-'tog-enotifwatchlistpages' => 'Pošalji mi e-poštu kad se promijene stranice',
+'tog-enotifwatchlistpages' => 'Pošalji mi e-mail kada se promijeni stranica ili datoteka sa mog spiska praćenih članaka',
 'tog-enotifusertalkpages' => 'Pošalji mi e-poštu kad se promijeni moja korisnička stranica za razgovor',
 'tog-enotifminoredits' => 'Pošalji mi e-poštu također za male izmjene u stranicama i datotekama',
 'tog-enotifrevealaddr' => 'Otkrij adresu moje e-pošte u porukama obaviještenja',
@@ -327,7 +327,7 @@ $messages = array(
 
 'underline-always' => 'Uvijek',
 'underline-never' => 'Nikad',
-'underline-default' => 'Po podešavanjima preglednika',
+'underline-default' => 'Po standardu izgleda ili preglednika',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stil slova područja uređivanja:',
@@ -412,8 +412,8 @@ $messages = array(
 'newwindow' => '(otvara se u novom prozoru)',
 'cancel' => 'Poništite',
 'moredotdotdot' => 'Još...',
-'mypage' => 'Moja stranica',
-'mytalk' => 'Moj razgovor',
+'mypage' => 'Korisnička stranica',
+'mytalk' => 'Razgovor',
 'anontalk' => 'Razgovor za ovu IP adresu',
 'navigation' => 'Navigacija',
 'and' => '&#32;i',
@@ -435,7 +435,7 @@ $messages = array(
 'vector-action-protect' => 'Zaštiti',
 'vector-action-undelete' => 'Vrati obrisano',
 'vector-action-unprotect' => 'Promijeni zaštitu',
-'vector-simplesearch-preference' => 'Omogući napredne sugestije pretrage (samo vector koža)',
+'vector-simplesearch-preference' => 'Omogući pojednostavljenu traku pretrage (samo vektorski izgled)',
 'vector-view-create' => 'Napravi',
 'vector-view-edit' => 'Uređivanje',
 'vector-view-history' => 'Pregled historije',
@@ -445,6 +445,7 @@ $messages = array(
 'namespaces' => 'Imenski prostori',
 'variants' => 'Varijante',
 
+'navigation-heading' => 'Navigacija',
 'errorpagetitle' => 'Greška',
 'returnto' => 'Povratak na $1.',
 'tagline' => 'Izvor: {{SITENAME}}',
@@ -597,10 +598,10 @@ Spisak valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int
 # General errors
 'error' => 'Greška',
 'databaseerror' => 'Greška u bazi',
-'dberrortext' => 'Desila se sintaksna greška upita baze.
-Ovo se desilo zbog moguće greške u softveru.
-Posljednji pokušani upit je bio: <blockquote><tt>$1</tt></blockquote> iz funkcije "<tt>$2</tt>".
-Baza podataka je vratila grešku "<tt>$3: $4</tt>".',
+'dberrortext' => 'Desila je se sintaksna greška kod upita prema bazi podataka.
+Ovo je se desilo zbog moguće greške u softveru.
+Posljednji pokušani upit je bio: <blockquote><code>$1</code></blockquote> iz funkcije "<code>$2</code>".
+Baza podataka je vratila grešku "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Desila se sintaksna greška upita baze.
 Posljednji pokušani upit je bio:
 "$1"
@@ -638,6 +639,8 @@ Molimo Vas da ovo prijavite [[Special:ListUsers/sysop|administratoru]] sa navođ
 'cannotdelete' => 'Ne može se obrisati stranica ili datoteka "$1".
 Moguće je da ju je neko drugi već obrisao.',
 'cannotdelete-title' => 'Ne mogu izbrisati stranicu "$1"',
+'delete-hook-aborted' => 'Brisanje je prekinuo softverski priključak.
+Nije ponuđeno nikakvo objašnjenje.',
 'badtitle' => 'Loš naslov',
 'badtitletext' => 'Zahtjevani naslov stranice je bio neispravan, prazan ili neispravno povezan međujezički ili interviki naslov.',
 'perfcached' => 'Slijedeći podaci su keširani i možda neće biti u potpunosti ažurirani. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata}}.',
@@ -681,8 +684,8 @@ Iz razloga "\'\'$2\'\'".',
 
 Možete nastaviti da koristite {{SITENAME}} anonimno, ili se ponovo <span class='plainlinks'>[$1 prijaviti]</span> kao isti ili kao drugi korisnik.
 Obratite pažnju da neke stranice mogu nastaviti da se prikazuju kao da ste još uvijek prijavljeni, dok ne očistite keš svog preglednika.",
-'welcomecreation' => '== Dobro došli, $1 ==
-Vaš nalog je napravljen.
+'welcomeuser' => 'Dobro došli, $1',
+'welcomecreation-msg' => 'Vaš nalog je napravljen.
 Ne zaboravite da prilagodite sebi svoja [[Special:Preferences|{{SITENAME}} podešavanja]].',
 'yourname' => 'Korisničko ime:',
 'yourpassword' => 'Šifra:',
@@ -1028,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.',
@@ -1055,6 +1057,7 @@ Izgleda da već postoji.',
 'defaultmessagetext' => 'Uobičajeni tekst poruke',
 
 # Content models
+'content-model-wikitext' => 'wikitekst',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
 
@@ -1340,7 +1343,7 @@ Pokušajte u Vaš upit uključiti prefiks ''all:'' da bi ste pretražili sav sad
 
 # Preferences page
 'preferences' => 'Podešavanja',
-'mypreferences' => 'Moje postavke',
+'mypreferences' => 'Postavke',
 'prefs-edits' => 'Broj izmjena:',
 'prefsnologin' => 'Niste prijavljeni',
 'prefsnologintext' => 'Da biste mogli podešavati korisnička podešavanja, morate <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} biti prijavljeni]</span>.',
@@ -1416,8 +1419,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:',
@@ -1567,12 +1570,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',
-'rightsnone' => '(nema)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitate ovu stranicu',
@@ -2185,10 +2189,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.
@@ -2214,6 +2214,7 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]
 da biste slali e-poštu drugim korisnicima.',
 'emailuser' => 'Pošalji e-poštu ovom korisniku',
+'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.
@@ -2248,7 +2249,7 @@ E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim posta
 
 # Watchlist
 'watchlist' => 'Moji praćeni članci',
-'mywatchlist' => 'Moji praćeni članci',
+'mywatchlist' => 'Praćeni članci',
 'watchlistfor2' => 'Za $1 $2',
 'nowatchlist' => 'Nemate ništa na svom spisku praćenih članaka.',
 'watchlistanontext' => 'Molimo da $1 da možete vidjeti ili urediti stavke na Vašem spisku praćenja.',
@@ -2285,11 +2286,7 @@ Ako kasnije želite da uklonite stranicu sa vašeg spiska praćenih članaka, kl
 
 'enotif_mailer' => '{{SITENAME}} obaviještenje o pošti',
 'enotif_reset' => 'Označi sve strane kao posjećene',
-'enotif_newpagetext' => 'Ovo je novi članak.',
 'enotif_impersonal_salutation' => '{{SITENAME}} korisnik',
-'changed' => 'promijenjena',
-'created' => 'napravljena',
-'enotif_subject' => '{{SITENAME}} strana $PAGETITLE je bila $CHANGEDORCREATED od strane $PAGEEDITOR',
 'enotif_lastvisited' => 'Pogledajte $1 za sve izmjene od vaše posljednje posjete.',
 'enotif_lastdiff' => 'Vidi $1 da pregledate ovu promjenu.',
 'enotif_anon_editor' => 'anonimni korisnik $1',
@@ -2323,6 +2320,8 @@ $UNWATCHURL
 
 Povratne informacije i daljnja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'promijenjena',
 
 # Delete
 'deletepage' => 'Obrišite stranicu',
@@ -2473,8 +2472,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.",
@@ -2506,9 +2505,9 @@ $1',
 'blanknamespace' => '(Glavno)',
 
 # Contributions
-'contributions' => 'Doprinosi korisnika',
+'contributions' => 'Doprinosi {{GENDER:$1|korisnika|korisnice|korisnika}}',
 'contributions-title' => 'Doprinosi korisnika $1',
-'mycontris' => 'Moj doprinos',
+'mycontris' => 'Doprinos',
 'contribsub2' => 'Za $1 ($2)',
 'nocontribs' => 'Nisu nađene promjene koje zadovoljavaju ove uslove.',
 'uctop' => ' (vrh)',
@@ -2548,7 +2547,7 @@ Posljednje stavke zapisnika blokiranja možete pogledati ispod:',
 'whatlinkshere-hideredirs' => '$1 preusmjerenja',
 'whatlinkshere-hidetrans' => '$1 uključenja',
 'whatlinkshere-hidelinks' => '$1 linkove',
-'whatlinkshere-hideimages' => '$1 linkove slika',
+'whatlinkshere-hideimages' => 'Veze do datoteke $1',
 'whatlinkshere-filters' => 'Filteri',
 
 # Block/unblock
@@ -2895,6 +2894,7 @@ Nedostaje privremeni folder.',
 'import-upload' => 'Postavljanje XML podataka',
 'import-token-mismatch' => 'Izgubljeni podaci sesije. Molimo pokušajte ponovno.',
 'import-invalid-interwiki' => 'Ne može se uvesti iz navedenog wikija.',
+'import-options-wrong' => '{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Zapisnik uvoza',
@@ -2909,6 +2909,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.',
 
@@ -3029,20 +3030,40 @@ 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' => 'Izmjene',
+'pageinfo-header-edits' => 'Historija izmjena',
 'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-header-properties' => 'Svojstva stranice',
+'pageinfo-display-title' => 'Naslov stranice',
+'pageinfo-length' => 'Dužina stranice (u bajtovima)',
 'pageinfo-article-id' => 'ID stranice',
+'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',
@@ -3064,6 +3085,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',
@@ -3122,6 +3145,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
@@ -3826,7 +3851,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',
@@ -3917,11 +3942,15 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'logentry-move-move_redir-noredirect' => '$1 je premjestio stranicu $3 na $4 preko preusmjeravanja bez ostavljanja preusmjeravanja',
 'logentry-patrol-patrol' => '$1 je označio izmjenu $4 stranice $3 pregledanim',
 'logentry-patrol-patrol-auto' => '$1 je automatski označio izmjenu $4 stranice $3 pregledanim',
-'logentry-newusers-newusers' => '$1 je napravio korisnički račun',
-'logentry-newusers-create' => '$1 je napravio korisnički račun',
-'logentry-newusers-create2' => '$1 je napravio korisnički račun $3',
+'logentry-newusers-newusers' => 'Korisnički račun $1 je napravljen',
+'logentry-newusers-create' => 'Korisnički račun $1 je napravljen',
+'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)].
@@ -3954,6 +3983,7 @@ Inače, možete ispuniti jednostavan obrazac ispod. Vaš komentar biti će dodan
 'api-error-empty-file' => 'Datoteka koju ste poslali je bila prazna.',
 'api-error-emptypage' => 'Stvaranje novih praznih stranica nije dozvoljeno.',
 'api-error-fetchfileerror' => 'Unutrašnja greška: pojavio se neki problem pri dobijanju podataka o datoteci.',
+'api-error-fileexists-forbidden' => 'Datoteka s imenom "$1" već postoji, i ne može biti zamijenjena.',
 'api-error-file-too-large' => 'Datoteka koju ste poslali je bila prevelika.',
 'api-error-filename-tooshort' => 'Ime datoteke je prekratko.',
 'api-error-filetype-banned' => 'Ova vrsta datoteke je zabranjena.',
@@ -3991,5 +4021,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 e2a8d68..cdd3c93 100644 (file)
@@ -25,6 +25,7 @@
  * @author Pasqual (ca)
  * @author Paucabot
  * @author PerroVerd
+ * @author Pitort
  * @author Pérez
  * @author Qllach
  * @author SMP
@@ -34,6 +35,7 @@
  * @author Ssola
  * @author Toniher
  * @author Vriullop
+ * @author Àlex
  * @author לערי ריינהארט
  */
 
@@ -208,8 +210,8 @@ $messages = array(
 'tog-editsectiononrightclick' => "Habilita l'edició per seccions en clicar amb el botó dret sobre els títols de les seccions (cal JavaScript)",
 'tog-showtoc' => 'Mostra la taula de continguts (per pàgines amb més de 3 seccions)',
 'tog-rememberpassword' => 'Recorda la sessió al navegador (per un màxim de {{PLURAL:$1|dia|dies}})',
-'tog-watchcreations' => 'Afegeix les pàgines que vagi creant a la llista de seguiment',
-'tog-watchdefault' => 'Afegeix les pàgines que vagi creant a la llista de seguiment',
+'tog-watchcreations' => 'Afegeix les pàgines que vagi creant i fitxers que carregui a la llista de seguiment',
+'tog-watchdefault' => 'Afegeix les pàgines que vagi editant a la llista de seguiment',
 'tog-watchmoves' => 'Afegeix les pàgines que reanomeni a la llista de seguiment',
 'tog-watchdeletion' => 'Afegeix les pàgines que elimini a la llista de seguiment',
 'tog-minordefault' => 'Marca totes les contribucions com a edicions menors per defecte',
@@ -328,7 +330,7 @@ $messages = array(
 'newwindow' => '(obre en una nova finestra)',
 'cancel' => 'Anuŀla',
 'moredotdotdot' => 'Més...',
-'mypage' => 'Pàgina personal',
+'mypage' => 'Pàgina',
 'mytalk' => 'Discussió',
 'anontalk' => "Discussió d'aquesta IP",
 'navigation' => 'Navegació',
@@ -361,6 +363,7 @@ $messages = array(
 'namespaces' => 'Espais de noms',
 'variants' => 'Variants',
 
+'navigation-heading' => 'Menú de navegació',
 'errorpagetitle' => 'Error',
 'returnto' => 'Torna cap a $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -476,7 +479,7 @@ $1",
 'thisisdeleted' => 'Voleu mostrar o restaurar $1?',
 'viewdeleted' => 'Voleu mostrar $1?',
 'restorelink' => '{{PLURAL:$1|una versió esborrada|$1 versions esborrades}}',
-'feedlinks' => 'Sindicament:',
+'feedlinks' => 'Sindicació:',
 'feed-invalid' => 'La subscripció no és vàlida pel tipus de sindicament.',
 'feed-unavailable' => 'Els canals de sindicació no estan disponibles',
 'site-rss-feed' => 'Canal RSS $1',
@@ -568,7 +571,7 @@ Consulta: $2',
 'viewsource-title' => 'Mostra la font per a $1',
 'actionthrottled' => 'Acció limitada',
 'actionthrottledtext' => "Com a mesura per a prevenir la propaganda indiscriminada (spam), no podeu fer aquesta acció tantes vegades en un període de temps tan curt. Torneu-ho a intentar d'ací uns minuts.",
-'protectedpagetext' => 'Aquesta pàgina està protegida per evitar modificacions.',
+'protectedpagetext' => "S'ha protegit la pàgina per evitar-hi modificacions.",
 'viewsourcetext' => "Podeu visualitzar i copiar la font d'aquesta pàgina:",
 'viewyourtext' => "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
 'protectedinterface' => "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.
@@ -600,10 +603,9 @@ L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
 
 Podeu continuar utilitzant {{SITENAME}} de forma anònima, o podeu <span class='plainlinks'>[$1 iniciar una sessió una altra vegada]</span> amb el mateix o un altre usuari.
 Tingueu en compte que algunes pàgines poden continuar mostrant-se com si encara estiguéssiu en una sessió, fins que buideu la memòria cau del vostre navegador.",
-'welcomecreation' => "== Us donem la benvinguda, $1! ==
-
-S'ha creat el vostre compte.
-No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITENAME}}]].",
+'welcomeuser' => 'Benvingut, $1!',
+'welcomecreation-msg' => 'El vostre compte ha estat creat.
+No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITENAME}}]].',
 'yourname' => "Nom d'usuari",
 'yourpassword' => 'Contrasenya',
 'yourpasswordagain' => 'Escriviu una altra vegada la contrasenya',
@@ -750,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',
 
@@ -762,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',
@@ -927,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.',
@@ -1120,7 +1122,7 @@ Si us plau, verifica els registres.",
 ** Comentari o informació personal inapropiada
 ** Nom d'usuari inapropiat
 ** Informació potencialment calumniosa",
-'revdelete-otherreason' => 'Altre motiu / motiu suplementari:',
+'revdelete-otherreason' => 'Motiu diferent o addicional:',
 'revdelete-reasonotherlist' => 'Altres raons',
 'revdelete-edit-reasonlist' => "Editar el motiu d'esborrament",
 'revdelete-offender' => 'Autor de la revisió:',
@@ -1324,9 +1326,9 @@ No es podrà desfer el canvi.',
 'prefs-emailconfirm-label' => 'Confirmació de correu electrònic:',
 'prefs-textboxsize' => "Mida de la caixa d'edició",
 'youremail' => 'Correu electrònic:',
-'username' => "Nom d'usuari:",
-'uid' => "Identificador d'usuari:",
-'prefs-memberingroups' => 'Membre dels {{PLURAL:$1|grup|grups}}:',
+'username' => "{{GENDER:$1|Nom d'usuari}}:",
+'uid' => "{{GENDER:$1|Usuari}} Identificador d'usuari:",
+'prefs-memberingroups' => '{{GENDER:$2|Membre}} {{PLURAL:$1|del grup|dels grups}}:',
 'prefs-registration' => 'Hora de registre:',
 'yourrealname' => 'Nom real *',
 'yourlanguage' => 'Idioma:',
@@ -1474,12 +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',
-'rightsnone' => '(cap)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'llegir aquesta pàgina',
@@ -1700,6 +1703,7 @@ $1',
 'backend-fail-notsame' => 'Ja existeix un fitxer no idèntic a $1.',
 'backend-fail-invalidpath' => "$1 no és un camí d'emmagatzemament vàlid.",
 'backend-fail-delete' => "No s'ha pogut suprimir el fitxer $1.",
+'backend-fail-describe' => 'La modificació de les metadades del fitxer "$1" no és possible.',
 'backend-fail-alreadyexists' => 'El fitxer $1 ja existeix.',
 'backend-fail-store' => "No s'ha pogut emmagatzemar el fitxer $1 a $2.",
 'backend-fail-copy' => "No s'ha pogut copiar el fitxer $1 a $2.",
@@ -1870,7 +1874,7 @@ Potser voleu modificar-ne la descripció en la seva [$2 pàgina de descripció].
 'filedelete-success-old' => "<span class=\"plainlinks\">La versió de '''[[Media:\$1|\$1]]''' s'ha eliminat el \$2 a les \$3.</span>",
 'filedelete-nofile' => "'''$1''' no existeix.",
 'filedelete-nofile-old' => "No hi ha cap versió arxivada de '''$1''' amb els atributs especificats.",
-'filedelete-otherreason' => 'Motius alternatius/addicionals:',
+'filedelete-otherreason' => 'Motiu diferent o addicional:',
 'filedelete-reason-otherlist' => 'Altres motius',
 'filedelete-reason-dropdown' => "*Motius d'eliminació comuns
 ** Violació dels drets d'autor / copyright
@@ -2081,9 +2085,9 @@ Vegeu també [[Special:WantedCategories|les categories soŀlicitades]].",
 'linksearch-pat' => 'Patró de cerca:',
 'linksearch-ns' => 'Espai de noms:',
 'linksearch-ok' => 'Cerca',
-'linksearch-text' => 'Podeu fer servir 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> (no els afegiu en la vostra recerca).',
+'linksearch-text' => 'Es poden utilitzar caràcters comodí com "*.wikipedia.org".
+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.",
 
@@ -2102,10 +2106,6 @@ Protocols admesos: <code> $1 </code> (no els afegiu en la vostra recerca).',
 '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.
@@ -2134,8 +2134,8 @@ per enviar un correu electrònic a altres usuaris.",
 'emailuser-title-target' => 'Enviar un correu electrònic a {{GENDER:$1|aquest usuari|aquesta usuària}}',
 'emailuser-title-notarget' => "Enviar un correu electrònic a l'usuari",
 'emailpage' => 'Correu electrònic a usuari',
-'emailpagetext' => "Podeu usar el següent formulari per a enviar un missatge de correu electrònic a aquest usuari.
-L'adreça electrònica que heu entrat en [[Special:Preferences|les vostres preferències d'usuari]] apareixerà com a remitent del correu electrònic, de manera que el destinatari us podrà respondre directament.",
+'emailpagetext' => "Podeu usar el següent formulari per a enviar un missatge de correu electrònic a {{GENDER:$1|aquest usuari|aquesta usuària}}.
+L'adreça electrònica que vau indicar a [[Special:Preferences|les vostres preferències d'usuari]] apareixerà com a remitent del correu electrònic, de manera que el destinatari us podrà respondre directament.",
 'usermailererror' => "L'objecte de correu ha retornat un error:",
 'defemailsubject' => 'Correu electrònic de l\'usuari "$1" de {{SITENAME}}',
 'usermaildisabled' => "Correu electrònic d'usuaris deshabilitat",
@@ -2174,8 +2174,8 @@ L'adreça electrònica que heu entrat en [[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',
@@ -2203,19 +2203,23 @@ S'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corres
 
 'enotif_mailer' => 'Sistema de notificació per correl de {{SITENAME}}',
 'enotif_reset' => 'Marca totes les pàgines com a visitades',
-'enotif_newpagetext' => 'Aquesta és una nova pàgina.',
 'enotif_impersonal_salutation' => 'usuari de la {{SITENAME}}',
-'changed' => 'modificada',
-'created' => 'creada',
-'enotif_subject' => 'La pàgina $PAGETITLE a {{SITENAME}} ha estat $CHANGEDORCREATED per $PAGEEDITOR',
+'enotif_subject_deleted' => 'La pàgina $1 de {{SITENAME}} ha estat suprimida per {{gender:$2|$2}}',
+'enotif_subject_created' => 'La pàgina $1 de {{SITENAME}} ha estat creada per {{gender:$2|$2}}',
+'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}}, 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.',
+'enotif_body_intro_changed' => 'La pàgina $1 de {{SITENAME}} ha estat canviada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.',
 'enotif_lastvisited' => "Vegeu $1 per a tots els canvis que s'han fet d'ença de la vostra darrera visita.",
 'enotif_lastdiff' => 'Consulteu $1 per a visualitzar aquest canvi.',
 'enotif_anon_editor' => 'usuari anònim $1',
-'enotif_body' => 'Benvolgut $WATCHINGUSERNAME,
+'enotif_body' => 'Benvolgut/uda $WATCHINGUSERNAME,
 
-La pàgina $PAGETITLE del projecte {{SITENAME}} ha estat $CHANGEDORCREATED el dia $PAGEEDITDATE per $PAGEEDITOR, vegeu la versió actual a $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resum de l\'editor: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2226,7 +2230,7 @@ wiki: $PAGEEDITOR_WIKI
 No rebreu més notificacions de futurs canvis si no visiteu la pàgina.
 També podeu canviar el mode de notificació de les pàgines que vigileu en la vostra llista de seguiment.
 
-                        El servei de notificacions del projecte {{SITENAME}}
+El servei de notificacions del projecte {{SITENAME}}
 
 --
 Per a canviar les opcions de notificació per correu electrònic aneu a
@@ -2240,6 +2244,8 @@ $UNWATCHURL
 
 Suggeriments i ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Elimina la pàgina',
@@ -2250,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.",
@@ -2263,7 +2269,7 @@ Vegeu $2 per a un registre dels esborrats més recents.',
 'deletionlog' => "Registre d'esborrats",
 'reverted' => 'Invertit amb una revisió anterior',
 'deletecomment' => 'Motiu:',
-'deleteotherreason' => 'Motius diferents o addicionals:',
+'deleteotherreason' => 'Motiu diferent o addicional:',
 'deletereasonotherlist' => 'Altres motius',
 'deletereason-dropdown' => "*Motius freqüents d'esborrat
 ** Demanada per l'autor
@@ -2334,7 +2340,7 @@ Ací es troben els paràmetres actuals de la pàgina '''$1''':",
 'protect-othertime' => 'Un altre termini:',
 'protect-othertime-op' => 'un altre termini',
 'protect-existing-expiry' => "Data d'expiració existent: $2 a les $3",
-'protect-otherreason' => 'Altres motius:',
+'protect-otherreason' => 'Motiu diferent o addicional:',
 'protect-otherreason-op' => 'Altres motius',
 'protect-dropdown' => "*Motius comuns de protecció
 ** Vandalisme excessiu
@@ -2422,7 +2428,7 @@ $1",
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => "Contribucions de l'usuari",
+'contributions' => "Contribucions de {{GENDER:$1|l'usuari|la usuària}}",
 'contributions-title' => "Contribucions de l'usuari $1",
 'mycontris' => 'Contribucions',
 'contribsub2' => 'Per $1 ($2)',
@@ -2465,7 +2471,7 @@ Per més detalls, la última entrada del registre es mostra a continuació:',
 'whatlinkshere-hideredirs' => '$1 redireccions',
 'whatlinkshere-hidetrans' => '$1 inclusions',
 'whatlinkshere-hidelinks' => '$1 enllaços',
-'whatlinkshere-hideimages' => '$1 enllaços a imatge',
+'whatlinkshere-hideimages' => '$1 enllaços de fitxers',
 'whatlinkshere-filters' => 'Filtres',
 
 # Block/unblock
@@ -2501,7 +2507,7 @@ quines pàgines en concret estan sent vandalitzades).",
 'ipbother' => 'Un altre termini',
 'ipboptions' => '2 hores:2 hours,1 dia:1 day,3 dies:3 days,1 setmana:1 week,2 setmanes:2 weeks,1 mes:1 month,3 mesos:3 months,6 mesos:6 months,1 any:1 year,infinit:infinite',
 'ipbotheroption' => 'un altre',
-'ipbotherreason' => 'Altres motius o addicionals:',
+'ipbotherreason' => 'Motiu diferent o addicional:',
 'ipbhidename' => "Amaga el nom d'usuari de les edicions i llistes",
 'ipbwatchuser' => "Vigila les pàgines d'usuari i de discussió de l'usuari",
 'ipb-disableusertalk' => 'Impedeix que aquest usuari pugui modificar la seva pàgina de discussió mentre dura el blocatge',
@@ -2509,8 +2515,8 @@ quines pàgines en concret estan sent vandalitzades).",
 'ipb-confirm' => 'Confirma el blocatge',
 'badipaddress' => "L'adreça IP no té el format correcte.",
 'blockipsuccesssub' => "S'ha blocat amb èxit",
-'blockipsuccesstext' => "[[Special:Contributions/$1|$1]] ha estat {{GENDER:$1|bloquejat|bloquejada|bloquejat/da}}.<br />
-Vegeu la [[Special:BlockList|llista d'IP blocades]] per revisar els bloqueigs.",
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ha estat {{GENDER:$1|blocat|blocada}}.<br />
+Vegeu la [[Special:BlockList|llista de bloqueigs]] per revisar-los.',
 'ipb-blockingself' => 'Esteu a punt de blocar-vos a vós mateix! Esteu segurs de voler-ho fer?',
 'ipb-confirmhideuser' => "Esteu a punt de bloquejar un usuari que està marcat amb l'opció «amaga l'usuari». Això suprimirà el seu nom a totes les llistes i registres. Esteu segurs de voler-ho fer?",
 'ipb-edit-dropdown' => 'Edita les raons per a blocar',
@@ -2715,16 +2721,16 @@ A continuació es mostra la darrera entrada del registre com a referència:",
 'file-exists-sharedrepo' => "El nom de fitxer escollit ja s'utilitza al dipòsit compartit. Escolliu un altre nom.",
 
 # Export
-'export' => 'Exporta les pàgines',
+'export' => 'Exportació de pàgines',
 'exporttext' => "Podeu exportar a XML el text i l'historial d'una pàgina en concret o d'un conjunt de pàgines; aleshores el resultat pot importar-se en un altre lloc web basat en wiki amb programari de MediaWiki mitjançant la [[Special:Import|pàgina d'importació]].
 
 Per a exportar pàgines, escriviu els títols que desitgeu al quadre de text de sota, un títol per línia, i seleccioneu si desitgeu o no la versió actual juntament amb totes les versions antigues, amb la pàgina d'historial, o només la pàgina actual amb la informació de la darrera modificació.
 
 En el darrer cas, podeu fer servir un enllaç com ara [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] per a la pàgina «[[{{MediaWiki:Mainpage}}]]».",
 'exportall' => 'Exporta totes les pàgines',
-'exportcuronly' => "Exporta únicament la versió actual en voltes de l'historial sencer",
+'exportcuronly' => "Inclou només la versió actual, sense l'historial complet",
 'exportnohistory' => "----
-'''Nota:''' s'ha inhabilitat l'exportació sencera d'historial de pàgines mitjançant aquest formulari a causa de problemes de rendiment del servidor.",
+'''Nota:''' s'ha inhabilitat l'exportació sencera d'historial de pàgines mitjançant aquest formulari a causa de problemes de rendiment.",
 'exportlistauthors' => 'Inclouen una llista completa dels contribuents per a cada pàgina',
 'export-submit' => 'Exporta',
 'export-addcattext' => 'Afegeix pàgines de la categoria:',
@@ -2809,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.',
@@ -2937,13 +2944,14 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'pageinfo-title' => 'Informació de «$1»',
 'pageinfo-not-current' => 'Només es pot visualitzar la informació de la revisió actual.',
 'pageinfo-header-basic' => 'Informació bàsica',
-'pageinfo-header-edits' => "Historial d'edicions",
+'pageinfo-header-edits' => 'Historial d’edicions',
 'pageinfo-header-restrictions' => 'Protecció de pàgina',
 'pageinfo-header-properties' => 'Propietats de la pàgina',
 'pageinfo-display-title' => 'Títol mostrat',
 'pageinfo-default-sort' => "Clau d'ordenació predeterminada",
 'pageinfo-length' => 'Mida de la pàgina (en bytes)',
 'pageinfo-article-id' => 'ID de la pàgina',
+'pageinfo-language' => 'Llengua del contingut de la pàgina',
 'pageinfo-robot-policy' => 'Estat del motor de cerca',
 'pageinfo-robot-index' => 'Indexable',
 'pageinfo-robot-noindex' => 'No indexable',
@@ -2987,6 +2995,8 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'markedaspatrollederror' => 'No es pot marcar com a supervisat',
 'markedaspatrollederrortext' => 'Cal que especifiqueu una versió per a marcar-la com a supervisada.',
 'markedaspatrollederror-noautopatrol' => 'No podeu marcar les vostres pròpies modificacions com a supervisades.',
+'markedaspatrollednotify' => 'Aquesta modificació a $1 ha estat marcada com a patrullada.',
+'markedaspatrollederrornotify' => 'Ha fallat la marca com a patrullat.',
 
 # Patrol log
 'patrol-log-page' => 'Registre de supervisió',
@@ -2995,7 +3005,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 
 # Image deletion
 'deletedrevision' => "S'ha eliminat la revisió antiga $1.",
-'filedeleteerror-short' => "S'ha produït un error en suprimir el fitxer: $1",
+'filedeleteerror-short' => 'Error en suprimir el fitxer: $1',
 'filedeleteerror-long' => "S'han produït errors en suprimir el fitxer:
 
 $1",
@@ -3020,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.',
@@ -3051,6 +3062,7 @@ Si l'executeu, podeu comprometre la seguretat del vostre sistema.",
 'hours' => '{{PLURAL:$1|$1 hora|$1 hores}}',
 'days' => '{{PLURAL:$1|$1 dia|$1 dies}}',
 'ago' => 'fa $1',
+'just-now' => 'ara mateix',
 
 # Bad image list
 'bad_image_list' => "El format ha de ser el següent:
@@ -3172,7 +3184,7 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o
 'exif-gpsstatus' => 'Estat del receptor',
 'exif-gpsmeasuremode' => 'Mode de mesura',
 'exif-gpsdop' => 'Precisió de la mesura',
-'exif-gpsspeedref' => 'Unitats de velocitat',
+'exif-gpsspeedref' => 'Unitat de velocitat',
 'exif-gpsspeed' => 'Velocitat del receptor GPS',
 'exif-gpstrackref' => 'Referència per la direcció del moviment',
 'exif-gpstrack' => 'Direcció del moviment',
@@ -3552,6 +3564,7 @@ Aquest codi de confirmació caducarà el $4.",
 # Scary transclusion
 'scarytranscludedisabled' => "[S'ha inhabilitat la transclusió interwiki]",
 'scarytranscludefailed' => '[Ha fallat la recuperació de la plantilla per a $1]',
+'scarytranscludefailed-httpstatus' => '[Ha fallat la recuperació de la plantilla per a $1: HTTP $2]',
 'scarytranscludetoolong' => "[L'URL és massa llarg]",
 
 # Delete conflict
@@ -3662,6 +3675,7 @@ També podeu [[Special:EditWatchlist|utilitzar l'editor estàndard]].",
 'version-license' => 'Llicència',
 'version-poweredby-credits' => "El wiki funciona gràcies a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'altres',
+'version-credits-summary' => 'El nostre reconeixement a les següents persones per la seva aportació a [[Special:Version|MediaWiki]]',
 'version-license-info' => "MediaWiki és programari lliure, podeu redistribuir-lo i/o modificar-lo sota els termes de la Llicència Pública General GNU publicada per la Free Software Foundation, ja sigui de la seva versió 2 o (a elecció vostra) qualsevol versió posterior. 
 
 MediaWiki es distribueix en l'esperança de ser d'utilitat, però SENSE CAP GARANTIA; ni tan sols la garantia implícita de COMERCIALITZACIÓ o ADEQUACIÓ A UNA FINALITAT DETERMINADA. En trobareu més detalls a  la Llicència Pública General GNU.
@@ -3801,11 +3815,15 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'logentry-move-move_redir-noredirect' => '$1 ha desplaçat la pàgina $3 a $4 on hi havia una redirecció i sense crear una nova redirecció',
 'logentry-patrol-patrol' => '$1 ha marcat la versió $4 de la pàgina $3 com a patrullada',
 'logentry-patrol-patrol-auto' => '$1 ha marcat automàticament la versió $4 de la pàgina $3 com a patrullada',
-'logentry-newusers-newusers' => "$1 ha creat un compte d'usuari",
-'logentry-newusers-create' => "$1 ha creat un compte d'usuari",
+'logentry-newusers-newusers' => "S'ha creat el compte d'usuari $1",
+'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].
index 4f15b3f..4f0a236 100644 (file)
@@ -215,9 +215,6 @@ For translations, please consider using [//translatewiki.net/wiki/Main_Page?setl
 # Login and logout pages
 'logouttext' => "'''Nṳ̄ hiêng-câi láuk-chók lāu.'''
 Nṳ̄ â̤-sāi sāi mò̤-miàng huŏng-sék gié-sṳ̆k găk {{SITENAME}} gè̤-dēng láuk, nṳ̄ iâ â̤-sāi sāi dè̤ng-iông gì dióng-hô̤ hĕ̤k-ciā bĕk-nó̤h bĭk dióng-hô̤ gái láuk-diē. Diŏh gé lā̤, nṳ̄ báuk-lāng-ké ká̤-chṳ̄ (''browser cache'') nâ mò̤ tĕ̤ng táh gó̤ uâ, ô gì hiĕk giăng â̤ hiēng-sê nṳ̄ gó muôi láuk-chók.",
-'welcomecreation' => '== Huăng-ngìng guŏng-lìng, $1! ==
-
-Nṳ̄ gì dióng-hô̤ ī-gĭng kŭi hō̤ lāu. Dāng nṳ̄ â̤-sāi siŭ-gāi nṳ̄ găk {{SITENAME}} gì siék-diâng.',
 'yourname' => 'Ê̤ṳng-hô-miàng',
 'yourpassword' => 'Mĭk-mā',
 'yourpasswordagain' => 'Dṳ̀ng-sĭng páh diē mĭk-mā',
@@ -412,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.',
@@ -570,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 ĭ',
@@ -605,8 +602,6 @@ Iŏk-sṳ̄ nṳ̄ buóh-siōng téng nṳ̄ gáng-sê-dăng gà̤-dēng dṳ̀
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Gáng-sê...',
 
-'enotif_newpagetext' => 'Cuòi sê sĭng hiĕk.',
-
 # Delete
 'deletepage' => 'Chēng hiĕk',
 'confirm' => 'Káuk-nêng',
index 239094d..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' => 'Тоба',
@@ -1093,8 +1093,6 @@ PICT # тайп тайпан
 'watching' => 'Тергаме мlогаман юкъаяккха…',
 'unwatching' => 'Тергаме мlогаман чура дlайаккха…',
 
-'enotif_newpagetext' => 'Хlара керла агlо ю.',
-
 # Delete
 'deletepage' => 'Дlайайá агlо',
 'confirm' => 'Къобалде',
index f545871..96ead71 100644 (file)
@@ -443,9 +443,6 @@ Ang rason nga gihatag mao ang "\'\'$2\'\'".',
 'logouttext' => "'''Nakabiya ka na.'''
 
 Mahimo kang magpadayon sa paggamit sa {{SITENAME}} bisan wala ka magpaila o puyde usab nga <span class='plainlinks'>[$1 mag-log in ka'g usab]</span> o isip laing gumagamit. Palihog hinumdomi nga may ubang mga panid nga magpakita sama nga ikaw naka-log in pa; kini tungod kay wala pa nimo malimpiyohi ang cache sa imong brawser.",
-'welcomecreation' => '== Maayong pag-abot, $1! ==
-Nahimo na ang imong akawnt.
-Ayaw kalimot sa pag-usab sa imong [[Special:Preferences|{{SITENAME}} mga preperensiya]].',
 'yourname' => 'Ngalan sa tiggamit:',
 'yourpassword' => 'Pasword:',
 'yourpasswordagain' => 'Itayp og usab ang pasword:',
@@ -847,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',
@@ -975,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)',
 
@@ -1253,5 +1249,6 @@ Ang uban default nga nakatago.
 '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 cfdfe0c..d461fa8 100644 (file)
@@ -303,9 +303,6 @@ Ha nå'i i rason ''$2''.",
 
 Siña hao kumontinua manu'usa {{SITENAME}} sin nå'an, pat siña uma'log ta'lo pat siña un usa otra na nå'an muna'sesetbi.
 Fanapunta na pålu na påhina siha para u na'annok na ma'log-in hao, asta ki un funas iyo-mu browser cache.",
-'welcomecreation' => "== Bienbenido, $1! ==
-Mafa'tinas i kuenta-mu.
-Munga mamalefa tumulaika ga'ña-mu {{SITENAME}}.",
 'yourname' => "Nå'an ni muna'setbi:",
 'yourpassword' => 'Password:',
 'yourpasswordagain' => "Taip ta'lo i password:",
index 2b54aba..256e83c 100644 (file)
@@ -194,8 +194,8 @@ $messages = array(
 'tog-norollbackdiff' => 'لە دوای گەڕاندنەوە جیاوازی نیشان مەدە',
 
 'underline-always' => 'ھەمیشە',
-'underline-never' => 'ھەرگیز',
-'underline-default' => 'دیفاڵتی وێبگەڕەکە',
+'underline-never' => 'قەت',
+'underline-default' => 'پێستە یان دیفاڵتی وێبگەڕەکە',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'شێوازی جۆرەپیتی بەشی دەستکاری:',
@@ -278,11 +278,11 @@ $messages = array(
 
 'about' => 'سەبارەت',
 'article' => 'بابەت',
-'newwindow' => '(لە پەڕەیەکی نوێ دەکرێتەوە)',
+'newwindow' => '(لە پەڕەیەکی نوێدا دەکرێتەوە)',
 'cancel' => 'ھەڵیوەشێنەوە',
 'moredotdotdot' => 'زیاتر',
-'mypage' => 'په‌ڕه‌ی من',
-'mytalk' => 'لێدوانەکەم',
+'mypage' => 'پەڕه‌',
+'mytalk' => 'لێدوان',
 'anontalk' => 'وتووێژ بۆ ئەم ئای‌پی یە',
 'navigation' => 'ڕێدۆزی',
 'and' => '&#32;و',
@@ -304,16 +304,17 @@ $messages = array(
 'vector-action-protect' => 'بیپارێزە',
 'vector-action-undelete' => 'سڕینەوە بگەڕێنەوە',
 'vector-action-unprotect' => 'پاراستنی بگۆڕە',
-'vector-simplesearch-preference' => 'Ú\95Û\8eÚ¯Û\95 Ø¨Ø¯Û\95 Ø¨Û\95 Ù¾Û\8eØ´Ù\86Û\8cارÛ\95کاÙ\86Û\8c Ú¯Û\95Ú\95اÙ\86Û\8c Ù¾Û\8eØ´Ú©Û\95Ù\88تÙ\88Ù\88 (تەنیا بۆ پێستەی ڤێکتۆر)',
+'vector-simplesearch-preference' => 'Ú¯Û\95Ú\95اÙ\86Û\8c Ø³Ø§Ú©Ø§Ø± Ú\86اÙ\84اک Ø¨Ú©Û\95 (تەنیا بۆ پێستەی ڤێکتۆر)',
 'vector-view-create' => 'دروستکردن',
 'vector-view-edit' => 'دەستکاریی بکە',
 'vector-view-history' => 'مێژووەکەی ببینە',
 'vector-view-view' => 'بیخوێنەوە',
 'vector-view-viewsource' => 'سەرچاوەکەی ببینە',
-'actions' => 'کردارەکان',
+'actions' => 'کردەوەکان',
 'namespaces' => 'شوێنناوەکان',
 'variants' => 'شێوەزارەکان',
 
+'navigation-heading' => 'مێنۆی ڕێدۆزی',
 'errorpagetitle' => 'ھەڵە',
 'returnto' => 'بگەڕێوە بۆ $1.',
 'tagline' => 'لە {{SITENAME}}',
@@ -398,7 +399,7 @@ $1',
 
 'badaccess' => 'ھەڵە لە بە دەست ھێنان',
 'badaccess-group0' => 'ڕێگەت پێ نەدراوە بۆ بەجێهێنای ئەو ئەنجامە وا داخوازیت کردووه.',
-'badaccess-groups' => 'ئەو ئەنجامەی وا داخوازیت کردووه مەحدود کراوە بۆ بەکارهێنەرانی {{PLURAL:$2|دەستەی|یەکێک لە دەستەکانی}}: $1',
+'badaccess-groups' => 'ئەو کردەوەیەی داوات کردووه تایبەتە بۆ بەکارھێنەرانی {{PLURAL:$2|گرووپی|گرووپەکانی}}: $1.',
 
 'versionrequired' => 'وەشانی $1ی‌ میدیاویکی پێویستە',
 'versionrequiredtext' => 'پێویستیت بە وەشانی $1ی ویکیمیدیا ھەیە بۆ بەکاربردنی ئەم پەڕەیە.
@@ -412,7 +413,7 @@ $1',
 'youhavenewmessages' => '$1ت ھەیە ($2).',
 'newmessageslink' => 'پەیامی نوێ',
 'newmessagesdifflink' => 'دوایین گۆڕانکاری',
-'youhavenewmessagesfromusers' => '$1ت لە {{PLURAL:$3|بەکارھێنەرێکی تر| $3 بەکارھێنەر}} ھەیە ($2).',
+'youhavenewmessagesfromusers' => 'لە {{PLURAL:$3|بەکارھێنەرێک|$3 بەکارھێنەران}} $1ت ھەیە ($2).',
 'youhavenewmessagesmanyusers' => '$1ت  لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
 'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
 'newmessagesdifflinkplural' => 'دوایین {{PLURAL:$1|گۆڕانکاری|گۆڕانکارییەکان}}',
@@ -428,7 +429,7 @@ $1',
 'hidetoc' => 'بیشارەوە',
 'collapsible-collapse' => 'کۆیبکەوە',
 'collapsible-expand' => 'بڵاویبکەوە',
-'thisisdeleted' => 'نیشاندان یا گەڕاندنەوەی $1؟',
+'thisisdeleted' => '$1 نیشان بدە یا بھێنەوە؟',
 'viewdeleted' => '$1 نیشان بده‌؟',
 'restorelink' => '{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}}',
 'feedlinks' => 'خۆراک:',
@@ -440,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' => 'پەڕە',
@@ -468,10 +471,10 @@ $1',
 'databaseerror' => 'ھەڵەی داتابەیس',
 'dberrortext' => 'ھەڵەیەکی ڕستەنووسی لە داواکاریی بنکەیدراو ڕووی داوە.
 لەوانەیە ئەوە نیشاندەری کەلێنێک لە نەرمامێرەکەدا بێت.
-دوایین تێکۆشان بۆ داواکاری بنکەیدراو:
-<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"
@@ -507,6 +510,8 @@ $1',
 'cannotdelete' => 'نەتوانرا پەڕە یان پەڕگەی «$1» بسڕدرێتەوە.
 لەوانەیە پێشتر لە لایەن کەسێکی ترەوە سڕابێتەوە.',
 'cannotdelete-title' => 'ناکرێ پەڕەی «$1» بسڕدرێتەوە',
+'delete-hook-aborted' => 'سڕینەوە لە لایەن قولاپەوە ھەڵوەشێنرایەوە.
+ھۆکارەکەی لەبەر دەست نییە.',
 'badtitle' => 'ناونیشانی خراپ',
 'badtitletext' => 'سەرناوی پەڕەی داواکراو بەتاڵە، واڵایە یان سەرناوێکی نێوان-زمانی یان نێوانی-ویکییە کە بە شێوەیەکی ھەڵە بەستەری بۆ دراوە.
 ڕەنگە یەک یان چەند کاراکتەری تێدا بێت کە ناکرێت لە سەرناوەکاندا بەکار بھێنرێت.',
@@ -522,12 +527,14 @@ $1',
 'actionthrottled' => 'چالاکی پێشی پێ گیرا',
 'actionthrottledtext' => 'بە مەبەستی پێشگریی لە سپەم، ڕێگە نادرێت تۆ لە ماوەیەکی کورت دا لە سەر یەک ئەمە زۆر جار ئەنجام بدەی، وە ئیستا تۆ لە ڕادە بەدەرت کردووە.
 تکایە پاش چەند خولەک دووبارە تاقی بکەوە.',
-'protectedpagetext' => 'بÛ\95 Ù\85Û\95بÛ\95ستÛ\8c Ù¾Û\95رگرÛ\8c Ù\84Û\95 Ø¯Û\95ستکارÛ\8cکردÙ\86 Ø¦Û\95Ù\85 Ù¾Û\95Ú\95ە پارێزراوە.',
+'protectedpagetext' => 'بÛ\86 Ø¨Û\95رگرÛ\8c Ù\84Û\95 Ø¯Û\95ستکارÛ\8cکردÙ\86 Û\8cاÙ\86 Ú\86اÙ\84اکÛ\8cÛ\8cÛ\95کاÙ\86Û\8c ØªØ± Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cە پارێزراوە.',
 'viewsourcetext' => 'دەتوانی سەرچاوەی ئەم پەڕە ببینی و کۆپیی بکەی:',
-'protectedinterface' => 'ئەم پەڕە دەقی ڕوواڵەتی نەرمامێرەکە نیشان دەدات و بۆ پەرگری لە خراپکاریی پارێزراوە.',
-'editinginterface' => "'''ئاگاداری:''' تۆ خەریکی دەستکاریی پەڕەیەکی کە بۆ دابینکردنی دەقی ڕوواڵەتی نەرمامێر بە کار دەھێنرێت.
-گۆڕانکاری لە ئەم پەڕە کاریگەر دەبێت لە سەر ڕواڵەتی پەڕەکانی بەکارھێنەرانی دیکە.
-بۆ وەرگێڕان تکایە [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، پرۆژەی ناوچەیی‌کردنی میدیاویکی بەکار بێنە.",
+'viewyourtext' => "دەتوانی ژێدەری '''دەستکارییەکەت''' لەم پەڕەیەدا ببینی و کۆپی بکەی:",
+'protectedinterface' => 'ئەم پەڕەیە دەقی ڕواڵەتی نەرمامێری ئەم ویکییە نیشان دەدات و بۆ بەرگری لە خراپکاری پارێزراوە.
+بۆ زیادکردن یان گۆڕینی وەرگێڕانەکان بۆ ھەموو ویکییەکان، تکایە لە [//translatewiki.net/ translatewiki.net]، پرۆژەی ناوچەیی کردنی میدیاویکی کەڵک وەربگرە.',
+'editinginterface' => "'''ئاگاداری:''' تۆ خەریکی دەستکاریی پەڕەیەکی کە بۆ دابینکردنی دەقی ڕواڵەتی نەرمامێر بە کار دەھێنرێت.
+گۆڕانکاریی  ئەم پەڕەیە کاریگەر دەبێت لە سەر ڕواڵەتی پەڕەکانی بەکارھێنەرانی تر لەم ویکییەدا.
+بۆ زیادکردن یان گۆڕینی وەرگێڕانەکان بۆ ھەموو ویکییەکان، تکایە لە [//translatewiki.net/ translatewiki.net]، پرۆژەی ناوچەیی کردنی میدیاویکی کەڵک وەربگرە.",
 'sqlhidden' => '(داواکاریی SQL شاراوەیە)',
 'cascadeprotected' => 'ئەم لاپەڕە پارێزراوە لە دەستکاریی، چونکا خراوەتە سەر ڕیزی ئەم {{PLURAL:$1|لاپەڕانه‌، کە}} که‌ به‌ هه‌ڵکردنی بژارده‌ی داڕژان هه‌ڵکراوه‌:
 $2',
@@ -547,13 +554,13 @@ $2',
 
 دەتوانی بە شێوەی بێناو درێژە بدەی بە بەرکارھێنانی {{SITENAME}}، یان دەتوانی <span class='plainlinks'>[$1 دیسانەوە بچیتەوە ژوورەوە]</span> ھەر بەو ناوە یان بە ناوی بەکارھێنەرییەکی جیاوازەوە.
 ئاگادار بە کە ھەتا کاتێک کە کەشی وێبگەڕەکەت دەسڕیتەوە، سەرەڕای چوونەدەرەوەی تۆ ھەندێک لە پەڕەکان ھەر بە شێوەیەک نیشان دەدرێن کە گوایە تۆ ھێشتا لە ژوورەوەیت.",
-'welcomecreation' => '== بەخێربێی، $1! ==
-ھەژمارەکەت دروست کرا.
-لە بیرت نەچێت Ú©Û\95 Ú¯Û\86Ú\95اÙ\86کارÛ\8c Ù\84Û\95 [[Special:Preferences|Ú¾Û\95ڵبÚ\98اردÛ\95کاÙ\86Û\8c {{SITENAME}}]]Û\8c ØªØ§Û\8cبÛ\95تÛ\8c Ø®Û\86ت Ø¨Ø¯Û\95Û\8c.',
+'welcomeuser' => 'بەخێربێیت، $1!',
+'welcomecreation-msg' => 'ھەژمارەکەت دروست کرا.
+لە بیرت نەچێت [[Special:Preferences|Ú¾Û\95ڵبÚ\98اردÛ\95کاÙ\86Û\8c {{SITENAME}}]]ت Ø¨Ú¯Û\86Ú\95Û\8c.',
 'yourname' => 'ناوی بەکارھێنەری:',
 'yourpassword' => 'تێپەڕوشە:',
 'yourpasswordagain' => 'دیسان تێپەڕوشەکە بنووسەوە:',
-'remembermypassword' => 'چوونە ژوورەوەم لەسەر ئەم کۆمپیوتەرە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ە)',
+'remembermypassword' => 'چوونە ژوورەوەم لەسەر ئەم کۆمپیوتەرە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ}}ە)',
 'yourdomainname' => 'ناوی دۆمه‌ینی خۆت',
 'password-change-forbidden' => 'ناتوانیت تێپەڕوشەکانت لەم ویکییەدا بگۆڕیت.',
 'externaldberror' => 'یان هەڵەی ڕێگەپێدانی بنکەدراو هەیە یان ڕێگات پێ نادرێت بۆ نوێ کردنی هەژماری دەرەکیت.',
@@ -606,6 +613,7 @@ $2',
 
 ئەگەر کەسێکی تر ئەم داوایەی کردووە یان تێپەڕوشەکەت هاتووەتەوە بیرت و ئیتر پێویستت بە گۆڕانی نییە، دەتوانی گوێ بەم پەیامە نەدەیت و لە تێپەڕوشە کۆنەکەت کەڵک وەربگری.',
 'noemail' => 'ھیچ ئەدرەسێکی ئیمەیل تۆمار نەکراوە بۆ بەکارھێنەر « $1 ».',
+'noemailcreate' => 'دەبێ ناونیشانێکی دروستی ئیمەیل بنووسی',
 'passwordsent' => 'تێپەڕوشەیەکی نوێ ناردرا بۆ ئەدرەسی ئیمەیلی تۆمارکراوی «$1».
 تکایە دوای وەرگرتنی دیسان بچۆ ژوورەوە.',
 'blocked-mailpassword' => 'ئادرەسی ئای‌پی تۆ بۆ دەستکاری کردن بەستراوه بۆیە بۆ بەرگری لە بەکارهێنانی نابەجێ ئەنجامی گەڕانەوەی تێپەڕوشە ڕیگە نەدراوە.',
@@ -621,10 +629,11 @@ $2',
 ھیچ ئیمەیلێک بۆ ئەم بابەتانەی خوارەوە نانێردرێت.',
 'noemailprefs' => 'بۆ کەوتنە کاری ئەو تایبەتمەندیانە، لە هەڵبژاردەکانت ئەدرەسەکی ئی‌مێڵ دابین بکە.',
 'emailconfirmlink' => 'ئیمەیلەکەت پشت‌ڕاست بکەرەوە',
-'invalidemailaddress' => 'ئەو ئەدرەسی ئی‌مێڵە لەبەر ئەوەی بە شێوازێکی نەناسراوە، پەسند نەکرا.
-تکایە ئەدرەسێک بە شێوازی ناسراو بنووسە یان ئەو خانەیە بەتاڵ بهێڵەوە.',
+'invalidemailaddress' => 'ناونیشانی ئیمەیل پەسند نەکرا، چون لەوە دەچێت شێوازێکی نادروستی ھەبێت.
+تکایە ناونیشانێک بە شێوازی دروست بنووسە یان ئەو بەشە واڵا بھێڵەوە.',
+'emaildisabled' => 'ئەم ماڵپەڕە ناتوانێ ئیمەیل بنێرێ.',
 'accountcreated' => 'ھەژمار دروست کرا',
-'accountcreatedtext' => 'هەژماری بەکارهێنەر بۆ $1 درووست‌کرا.',
+'accountcreatedtext' => 'هەژماری بەکارهێنەری $1 دروست کراوە.',
 'createaccount-title' => 'درووست‌کردنی هەژمارە بۆ {{SITENAME}}',
 'createaccount-text' => 'کەسێک هەژمارەیەکی بۆ ئی‌مێڵ ئەدرەسەکی تۆ لەسەر {{SITENAME}} ($4) بەناوی "$2"، بە وشەی نهێنی "$3".
 ئێستا دەبێ بڕۆیتە ژوورەوە و وشەی نهێنی بگۆڕیت.
@@ -692,6 +701,7 @@ $2
 'changeemail-oldemail' => 'ئەدرەسی ئیمەیڵی ئێستا:',
 'changeemail-newemail' => 'ئەدرەسی ئیمەیڵی نوێ:',
 'changeemail-none' => '(ھیچ)',
+'changeemail-password' => 'تێپەڕوشەکەت لە {{SITENAME}}:',
 'changeemail-submit' => 'ئەمەیڵ بگۆڕە',
 'changeemail-cancel' => 'ھەڵیوەشێنەوە',
 
@@ -722,7 +732,7 @@ $2
 'watchthis' => 'ئەم پەڕەیە بخە ژێر چاودێری',
 'savearticle' => 'پەڕەکە پاشەکەوت بکە',
 'preview' => 'پێشبینین',
-'showpreview' => 'پێشبینین نیشانبدە',
+'showpreview' => 'پێشبینین نیشان بدە',
 'showlivepreview' => 'پێشبینینی ڕاسته‌وخۆ',
 'showdiff' => 'گۆڕانکارییەکان نیشان بدە',
 'anoneditwarning' => "'''ھۆشیار بە:''' نەچوویتە ژوورەوە.
@@ -734,7 +744,7 @@ $2
 'missingcommentheader' => "'''بیرهێنانەوە:''' بۆ ئەم بۆچوونەت سەردێڕ\\بابەت ڕاچاو نەکردووە.
 ئەگەر دیسان «{{int:savearticle}}» لێبدەی، دەستکاریەکەت بێ سەردێڕ یان بابەت پاشەکەوت دەبێ.",
 'summary-preview' => 'پێشبینینی کورتە:',
-'subject-preview' => 'پێشبینینی بابەت\\سەردێڕ :',
+'subject-preview' => 'پێشبینینی بابەت/سەردێڕ:',
 'blockedtitle' => 'به‌کار هینه‌ر له‌کار خراوه',
 'blockedtext' => "'''ناوی بەکارهێنەری یان ئای‌پی ئەدرەسی تۆ بەربەست‌ کراوە.'''
 
@@ -786,13 +796,15 @@ $2
 لەبەر ئەوە مەجبوورین ئای‌پی ئەدرەسەکی ژمارەیی بۆ ناساندنی بەکار بێنین.
 ئای‌پی ئەدرەسی وا لەوانەیه لە لایەن چەندین بەکارهێنەروە بەکاربێت.
 ئەگەر تۆ بەکارهێنەرێکی نەناسراوی و هەست ئەکەی ئەم لێدوانە پەیوەندی بە تۆوە نیە تکایە [[Special:UserLogin/signup|ھەژمارێکی نوێ دروست بکە]] یان [[Special:UserLogin|بچۆ ژوورەوە]] لەبەر ئەوەی لەداهاتوودا دەگەڵ بەکارهێنەرانی‌ نەناسراوی دی تێکەڵ نەکرێیت. ''",
-'noarticletext' => 'ھەنووکە ھیچ دەقێک لەم پەڕەدا نییە.
-دەتوانی بۆ ئەم ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەکانی تردا بگەڕێی]]، <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگەکاندا بگەڕێی]، یان [{{fullurl:{{FULLPAGENAME}}|action=edit}} ئەم پەڕە دەستکاری بکەیت]</span>.',
+'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>، بەڵام ناتوانی ئەم پەڕەیە دروست بکەی.',
 'userpage-userdoesnotexist' => 'هەژماری بەکارهێنەری "<nowiki>$1</nowiki>" تۆمار نەکراوە.<br />
 گەر دەتەوێ ئەم لاپەڕە درووست‌کەی یان دەستکاری بکەی تکایە تاقی‌بکەوە .',
 'userpage-userdoesnotexist-view' => 'ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.',
+'blocked-notice-logextract' => 'ھەنووکە ئەم بەکارھێنەرە بەربەست کراوە.
+دوایین بابەتی لۆگی بەربەستن لە ژێرەوە ھاتووە:',
 'clearyourcache' => "تێبینی:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ cacheی وێبگەڕەکەت پاکبکەیتەوە.
 * '''Firefox / Safari:''' دوگمەی ''Shift'' بگرە کاتێک لەسەر ''Reload''دا کرتە دەکەی، یان ھەرکام لە ''Ctrl-F5'' یان ''Ctrl-R'' لێبدە (''⌘-R'' لەسەر Mac دا)
 * '''Google Chrome:''' دوگمەکانی ''Ctrl-Shift-R'' لێبدە  (''⌘-Shift-R'' لەسەر Mac دا)
@@ -814,7 +826,7 @@ $2
 'note' => "'''تێبینی:'''",
 'previewnote' => "'''لە بیرت نەچێت ئەمە تەنیا پێشبینینە.'''
 گۆڕانکارییەکانت ھێشتا پاشەکەوت نەکراون!",
-'continue-editing' => 'بەردەوام بە لەدەستکاریکردن',
+'continue-editing' => 'چوونە سەر بەشی دەستکاریکردن',
 'previewconflict' => 'ئەم پێشبینینە بە تۆ نیشان ئەدات ئەو دەقەی لە شوێنی دەستکاری سەرەوە داتناوە چۆن بەرچاو ئەکەوێت ئەگەر پاشەکەوتی بکەیت.',
 'session_fail_preview' => "'''ببوورە! ناتوانین دەستکارییەکەت پێواژۆ بکەین بە ھۆی لەدەستدانی session data.'''
 تکایە دیسان ھەوڵبدەوە.
@@ -872,7 +884,6 @@ $2
 'template-semiprotected' => '(نیوەپارێزراو)',
 'hiddencategories' => 'ئەم پەڕە ئەندامێکی {{PLURAL:$1|١ پۆلی شاراوەیە|$1 پۆلی شاراوەیە}}:',
 'edittools' => '<!-- دەقی ئێرە لە ژێری فۆرمی دەستکاری و بارکردندا نیشان دەدرێت. -->',
-'nocreatetitle' => 'درووست‌کردنی لاپەڕە سنووردار کراوە',
 'nocreatetext' => '{{SITENAME}} توانای درووست‌کردنی لاپەڕە نوێکانی داخستووە.<br />
 ئەتوانی بگەڕێتەوە دواوە و یەکێک لەو لاپەڕانەی وا هەن دەستکاری بکەیت ، یان [[Special:UserLogin|بچۆ ژوورەوە یان هەژمارێک درووست‌بکە]]',
 'nocreate-loggedin' => 'ئیجازەی دروست کردنی پەڕەی نوێت نیە.',
@@ -881,15 +892,15 @@ $2
 'permissionserrors' => 'ھەڵەی ئیجازەکان',
 'permissionserrorstext' => 'مافی ئەنجامی ئەوەت نیە لەبەر ئەم {{PLURAL:$1|هۆکار|هۆکارانە}} :',
 'permissionserrorstext-withaction' => 'دەسەڵاتت نییە بۆ $2، لەبەر ئەم {{PLURAL:$1|ھۆکارە|ھۆکارانە}}ی خوارەوە:',
-'recreate-moveddeleted-warn' => "'''ھۆشیار بە: خەریکی پەڕەیەک درووست‌ دەکەیتەوە کە لە پێشدا سڕاوەتەوە. '''
+'recreate-moveddeleted-warn' => "'''ھۆشیار بە: خەریکی پەڕەیەک دروست‌ دەکەیتەوە کە لە پێشدا سڕاوەتەوە.'''
 
¯Û\95بÛ\8e Ø¦Ø§Ú¯Ø§Øª Ù\84Û\95Ù\88Û\95 Ø¨Û\8eت Ú©Û\95 Ø¯Û\95ستکارÛ\8cکردÙ\86Û\8c Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95 Ù\82ازاÙ\86جÛ\8c Ú¾Û\95Û\8cÛ\95 Û\8cا نا.
-لۆگی سڕینەوە و گواستنەوەی ئەم پەڕە بۆ ئاسانکاری لێرەدا ھاتووە:",
¦Û\95Ù\85Û\95 Ù\84Û\95بÛ\95ر Ú\86اÙ\88 Ø¨Ú¯Ø±Û\95 Ú©Û\95 Ø¯Û\95ستکارÛ\8cکردÙ\86Û\8c Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ø¨Û\95Ù\82ازاÙ\86جÛ\95 Û\8cاÙ\86 نا.
+لۆگی سڕینەوە و گواستنەوەی ئەم پەڕەیە بۆ سانایی لێرەدا ھاتووە:",
 'moveddeleted-notice' => 'ئەم پەڕەیە سڕاوەتەوە.
 لۆگی سڕینەوە و گواستنەوە بۆ پەڕەکە لە خوارەوە دابینکراوە.',
 'log-fulllog' => 'دیتنی لۆگی تەواو',
-'edit-hook-aborted' => 'دەستکاری لە لایەن قولاپەوە هەڵوەشێندرایەوە.<br />
-هۆکاری ئەوەی بەردەست نەخستووە.',
+'edit-hook-aborted' => 'دەستکاری لە لایەن قولاپەوە ھەڵوەشێنرایەوە.
+ھۆکارەکەی لەبەر دەست نییە.',
 'edit-gone-missing' => 'توانای نوێ‌کردنەوەی لاپەڕەکە نیە.<br />
 لەوە دەچی سڕدرابێتەوه.‌',
 'edit-conflict' => 'کێشەی دەستکاری.',
@@ -897,13 +908,20 @@ $2
 'edit-already-exists' => 'توانای درووست‌کردنی لاپەڕەی نوێ نیە.<br />
 ئەوە لەپێش‌دا هەبوو.',
 'defaultmessagetext' => 'دەقی پەیامی هەمیشەیی',
+'invalid-content-data' => 'دراوەی ناوەرۆکی نادروست',
+
+# Content models
+'content-model-wikitext' => 'ویکیدەق',
+'content-model-text' => 'دەقی ساکار',
+'content-model-javascript' => 'جاڤاسکریپت',
+'content-model-css' => 'سی ئێس ئێس',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ئاگاداری:''' ئەم لاپەڕە ژمارەیەکی زۆر بانگ‌کەری فەنکشێنی لێک‌کەرەوەی لەخۆ گرتوو.<br /><br />
 ئەوە دەبێ کەمتر بێت لە $2 {{PLURAL:$2|بانگ‌کەردن|بانگ‌کەردن}} کە ئێستا {{PLURAL:$1|بانگ‌کردنی|بانگ‌کردنی}} تێدایە.",
 'expensive-parserfunction-category' => 'ئەو لاپەڕانەی  ژمارەیەکی زۆر بانگ‌کەری فەنکشێنی لێک‌کەرەوەیان لەخۆ گرتووە.',
-'post-expand-template-inclusion-warning' => "'''ئاگاداری:''' قەبارەی داڕێژەکە زۆر گەورەیە.<br />
-لەوانەیە ھەندێ لە داڕێژەکان لەخۆ نەگرێت.",
+'post-expand-template-inclusion-warning' => "'''ئاگاداری:''' قەبارەی داڕێژەکە زۆر گەورەیە.
+لەوانەیە ھەندێک لە داڕێژەکان لەخۆنەگرێتەوە.",
 'post-expand-template-inclusion-category' => 'ئەو لاپەڕانەی وا داڕێژە تیێدا قەبارەی تێپەڕیوە',
 'post-expand-template-argument-warning' => "'''ئاگاداری:''' ئەم لاپەڕە لانیکەم یەک بەڵگەی داڕێژە لە خۆ گرتوو کە قەبارەی کردنەوەی زۆر گەورەیە.<br />
 ئەم بەڵگە بەکار نەخراوە.",
@@ -927,7 +945,7 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 'viewpagelogs' => 'لۆگەکانی ئەم پەڕەیە ببینە',
 'nohistory' => 'هیچ مێژوویەکی دەستکاری نییە بۆ ئەم پەڕەیە.',
 'currentrev' => 'دوایین پیاچوونەوە',
-'currentrev-asof' => 'دÙ\88اÛ\8cÛ\8cÙ\86 Ù¾Û\8cاچوونەوەی $1',
+'currentrev-asof' => 'دÙ\88اÛ\8cÛ\8cÙ\86 Ù¾Û\8eداچوونەوەی $1',
 'revisionasof' => 'وەک پیاچوونەوەی $1',
 'revision-info' => 'پێداچوونەوی $1 لە لایەن $2',
 'previousrevision' => '→پیاچوونەوەی کۆنتر',
@@ -948,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 />
@@ -959,23 +977,31 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 'rev-deleted-comment' => '(پوختەی دەستکاری سڕایەوە)',
 'rev-deleted-user' => '(ناوی بەکارهێنەر سڕایەوە)',
 'rev-deleted-event' => '(لۆگی کردەوە سڕایەوە)',
-'rev-deleted-text-permission' => "ئÛ\95Ù\85 Ù¾Û\8cاÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8c Ù¾Û\95Ú\95Û\95Û\8cÛ\95 '''سÚ\95اوەتەوە'''.
+'rev-deleted-text-permission' => "ئÛ\95Ù\85 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8cÛ\95 Ù\84Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 '''سÚ\95دراوەتەوە'''.
 وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.",
-'rev-deleted-text-unhide' => "ئÛ\95Ù\85 Ù¾Û\8cاÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8c Ù¾Û\95Ú\95Û\95Û\8cÛ\95 '''سÚ\95راوەتەوە'''.
-وردەکارییەکان لە [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەدۆزرێتەوە.
-Ú¾Û\8eشتا Ø¯Û\95تÙ\88اÙ\86Û\8c [$1 Ø¦Û\95Ù\85 Ù¾Û\8cاÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8cÛ\95 Ø¨Ø¨Û\8cÙ\86Û\8c] Ø¦Û\95Ú¯Û\95ر Ø¯Û\95تÛ\95Ù\88Û\8e Ù¾Û\8eشتر Ø¨Ú\95Û\86Û\8c.",
-'rev-suppressed-text-unhide' => "پێداچوونەوی ئەم لاپەڕە '''بەرگری''' لێ‌کراوە.
\84Û\95Ù\88اÙ\86Û\95Û\8cÛ\95 Ù\88ردÛ\95کارÛ\8c Ø³Û\95بارÛ\95ت Ø¨Û\95Ù\88Û\95 Ù\84Û\8eرÛ\95دا Ø¯Û\95ست Ú©Û\95Ù\88Û\8e : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\84Û\86Ú¯Û\8c Ø¨Û\95رگرÛ\8c].
-وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم پێداچوونەوە] ببینی، گەر دەتەوێ پێشتر بڕۆی.",
-'rev-deleted-text-view' => "پێداچوونەوەی ئەم لاپەڕە '''سڕدراوەتەوە'''.<br />
-وەک بەڕێوبەر هێشتا دەتوانی چاوی لێ‌بکەی؛ لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].",
-'rev-suppressed-text-view' => "پێداچوونەوی ئەم لاپەڕە '''بەرگری''' لێ‌کراوە.
-وەک بەڕێوبەر دەتوانی بیبینی؛ لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].",
+'rev-deleted-text-unhide' => "ئÛ\95Ù\85 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8cÛ\95 Ù\84Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 '''سÚ\95دراوەتەوە'''.
+وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.
+Ú¾Û\8eشتا Ø¦Û\95Ú¯Û\95ر Ø¨ØªÛ\95Ù\88Û\8e Ø¯Û\95تÙ\88اÙ\86Û\8c [$1 Ø¦Û\95Ù\85 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8cÛ\95 Ø¨Ø¨Û\8cÙ\86Û\8c].",
+'rev-suppressed-text-unhide' => "ئەم پێداچوونەوەیە لەم پەڕەیە '''بەرگری لێ‌کراوە'''.
\88ردÛ\95کارÛ\8c Ø³Û\95بارÛ\95ت Ø¨Û\95Ù\88Û\95 Ù\84Û\95 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\84Û\86Ú¯Û\8c Ø¨Û\95رگرÛ\8c]دا Ø¯Û\95ست Ø¯Û\95Ú©Û\95Ù\88Û\8eت.
+ھێشتا ئەگەر بتەوێ دەتوانی [$1 ئەم پێداچوونەوەیە ببینی].",
+'rev-deleted-text-view' => "ئەم پێداچوونەوەیە لەم پەڕەیە '''سڕدراوەتەوە'''.
+ئێستا دەتوانی بیبینی؛ وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.",
+'rev-suppressed-text-view' => "ئەم پێداچوونەوەیە لەم پەڕەیە '''بەرگری لێ‌کراوە'''.
+ئێستا دەتوانی بیبینی؛ وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری]دا دەست دەکەوێت.",
 'rev-deleted-no-diff' => "ناتوانی ئەم جیاوازیە ببینی لەبەر ئەوەی یەکێک لە پێداچوونەوەکان '''سڕدراوەتەوه'''‌.<br />
 لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].",
-'rev-deleted-unhide-diff' => "یەکێک لە پیاچوونەوەکانی ئەم جیاوازیە '''سڕاوەتەوه'''.
-وردەکارییەکان لە [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەدۆزرێتەوە.
-ھێشتا دەتوانیت [$1 ئەم جیاوازییە ببینیت] ئەگەر بتەوێ.",
+'rev-suppressed-no-diff' => "ناتوانی ئەم چیاوازییە ببینی چون یەکێک لە پێداچوونەوەکان '''سڕدراوەتەوە'''.",
+'rev-deleted-unhide-diff' => "یەکێک لە پێداچوونەوەکانی ئەم جیاوازیە '''سڕدراوەتەوه'''.
+وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.
+ھێشتا ئەگەر بتەوێ دەتوانی [$1 ئەم جیاوازییە ببینی].",
+'rev-suppressed-unhide-diff' => "یەکێک لە پێداچوونەوەکانی ئەم جیاوازیە '''سڕدراوەتەوه'''.
+وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری]دا دەست دەکەوێت.
+ھێشتا ئەگەر بتەوێ دەتوانی [$1 ئەم جیاوازییە ببینی].",
+'rev-deleted-diff-view' => "یەکێک لە پێداچوونەوەکانی ئەم جیاوازییە  '''سڕدراوەتەوە'''.
+ئێستا دەتوانی بیبینی؛ وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.",
+'rev-suppressed-diff-view' => "یەکێک لە پێداچوونەوەکانی ئەم جیاوازییە '''بەرگری لێ‌کراوە'''.
+ئێستا دەتوانی بیبینی؛ وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری]دا دەست دەکەوێت.",
 'rev-delundel' => 'نیشانبدە/بشارەوە',
 'rev-showdeleted' => 'نیشان بدە',
 'revisiondelete' => 'سڕینەوە/ھێنانەوەی پێداچوونەوەکان',
@@ -1039,7 +1065,7 @@ $1",
 ** ناوی بەکارھێنەریی نەشیاو
 ** زانیارییەک کە دەتوانێ بوختاناوی بێت',
 'revdelete-otherreason' => 'ھۆکاری تر/زیاتر:',
-'revdelete-reasonotherlist' => 'هۆکاری دیکە',
+'revdelete-reasonotherlist' => 'ھۆکاری تر',
 'revdelete-edit-reasonlist' => 'دەستکاریی ھۆکارەکانی سڕینەوە',
 'revdelete-offender' => 'نووسەری پیاچوونەوە:',
 
@@ -1080,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' => '(جیاوازی نێوان پەڕەکان)',
@@ -1164,8 +1190,8 @@ $1",
 'qbsettings-floatingright' => 'سەراوی ڕاست',
 
 # Preferences page
-'preferences' => 'ھەڵبژاردەکان',
-'mypreferences' => 'ھەڵبژاردەکانم',
+'preferences' => 'ھەڵبەژاردەکان',
+'mypreferences' => 'ھەڵبژاردەکان',
 'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:',
 'prefsnologin' => 'لەژوورەوە نیت',
 'prefsnologintext' => 'بۆ دانانی هەڵبژاردەکانی بەکارهێنەر دەبێ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} بچیتە ژوورەوە]</span>.',
@@ -1241,9 +1267,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' => 'زمان',
@@ -1280,6 +1306,10 @@ $1",
 'prefs-displaywatchlist' => 'ھەڵبژاردەکانی نیشاندان',
 'prefs-diffs' => 'جیاوازییەکان',
 
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'ناونیشانی ئیمەیل دروست وە بەر چاو دێت',
+'email-address-validity-invalid' => 'ناونیشانێکی دروستی ئیمەیل بنووسە',
+
 # User rights
 'userrights' => 'بەڕێوەبردنی مافەکانی بەکارھێنەر',
 'userrights-lookup-user' => 'بەڕێوەبردنی گرووپەکانی بەکارھێنەر',
@@ -1298,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' => 'گرووپ:',
@@ -1309,7 +1339,7 @@ $1",
 'group-sysop' => 'بەڕێوبەران',
 'group-bureaucrat' => 'بیوروکراتەکان',
 'group-suppress' => 'چاودێرەکان',
-'group-all' => '(هەموو)',
+'group-all' => '(ھەموو)',
 
 'group-user-member' => '{{GENDER:$1|بەکارھێنەر}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|بەکارھێنەرانی پەسندکراوی خۆگەڕ}}',
@@ -1349,15 +1379,15 @@ $1",
 'right-apihighlimits' => 'خستنە‌کاری سنووری زیاتر بۆ داخوازیەکانی API',
 'right-writeapi' => 'کەڵک وەر گرتن لە نووسینی API',
 'right-delete' => 'سڕینەوەی پەڕەکان',
-'right-bigdelete' => 'سڕینەوە و هاوردنەوەی پێداچوونەوەیکی تایبەتی لاپەڕەکان',
+'right-bigdelete' => 'سڕینەوەی پەڕەکان بە مێژووی گەورە',
 'right-deleterevision' => 'سڕینەوە و هاوردنەوەی پێداچوونەوەیکی تایبەتی لاپەڕەکان',
 'right-deletedhistory' => 'دیتنی دراوە سڕاوەکانی مێژوو بێ دەقە هەڵواسراوەکانی',
-'right-browsearchive' => 'Ú¯Û\95Ú\95اÙ\86Û\8c Ù\86اÙ\88 Ù\84اپÛ\95Ú\95Û\95 Ø³Ú\95اÙ\88Û\95کاÙ\86',
+'right-browsearchive' => 'گەڕانی پەڕە سڕاوەکان',
 'right-undelete' => 'هاوەردنەوەی لاپەڕەیەک',
 'right-suppressrevision' => 'چاوپێداخشان و هاردنوەی ئەو لاپەڕانەی لە بەڕێوبەران داشاردرابوو.',
 'right-suppressionlog' => 'دیتنی لۆگە ئەهلیەکان',
 'right-block' => 'بەربەستنی بەکارھێنەرانی تر لە دەستکاری کردن',
-'right-blockemail' => 'بەرگریâ\80\8cکردÙ\86Û\8c Ø¨Û\95کارÙ\87Û\8eÙ\86Û\95رÛ\8eÚ© Ù\84Û\95 Ù\86اردÙ\86Û\8c Ø¦Û\8câ\80\8cÙ\85Û\95Û\8cÙ\84',
+'right-blockemail' => 'بەرگری Ø¨Û\95کارÙ\87Û\8eÙ\86Û\95رÛ\8eÚ© Ø¨Ú©Û\95 Ù\84Û\95 Ù\86اردÙ\86Û\8c Ø¦Û\8cÙ\85Û\95Û\8cÙ\84',
 'right-hideuser' => 'بەربەست‌کردنی ناوێکی بەکارهێنەری، داشاردنی لە بەرچاوی هەموان',
 'right-ipblock-exempt' => 'لادان لە بەرگریەکانی ئای‌پی، بەرگریە خۆکارەکان و بەرگریە ڕیزەکان',
 'right-proxyunbannable' => 'لادان لە بەرگری خۆکاری پرۆکسیەکان',
@@ -1383,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' => 'خوێندنەوەی ئەم پەڕە',
@@ -1397,7 +1429,7 @@ $1",
 'action-createaccount' => 'درووست‌کردنی هەژمارەی ئەم بەکارهێنەرە',
 'action-minoredit' => 'نیشان‌کردنی ئەم دەستکاریە وەک بچووک',
 'action-move' => 'گواستنەوەی ئەم پەڕە',
-'action-move-subpages' => 'Ú¯Ù\88استÙ\86Û\95Ù\88Û\95Û\8c Ø¦Û\95Ù\85 Ù\84اپÛ\95Ú\95Û\95 Ù\88 Ú\98Û\8eرÙ\84اپەڕەکانی',
+'action-move-subpages' => 'Ú¯Ù\88استÙ\86Û\95Ù\88Û\95Û\8c Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ù\88 Ú\98Û\8eرپەڕەکانی',
 'action-move-rootuserpages' => 'گواستنەوەی بنەرەتی لاپەڕەکانی بەکارهێنەر',
 'action-movefile' => 'ئەم پەڕگەیە بگوازەوە',
 'action-upload' => 'ئەم پەڕەیە بار بکە',
@@ -1418,7 +1450,7 @@ $1",
 'action-importupload' => 'هێنانەناوەی ئەم لاپەڕە لە پەڕگەیەکی بارکراو',
 'action-patrol' => 'لەژێرچاودێری نیشان‌کردنی دەستکاریەکانی کەسانی‌تر',
 'action-autopatrol' => 'دەستکاریەکانت وەک لەژێرچاودێری نیشان کراون',
-'action-unwatchedpages' => 'دÛ\8cتÙ\86Û\8c Ù\84Û\8cستÛ\8eÚ© Ù\84Û\95Ù\88 Ù\84اپەڕانەی چاودێری ناکرێن',
+'action-unwatchedpages' => 'دÛ\8cتÙ\86Û\8c Ù¾Û\8eرستÛ\8c Ø¦Û\95Ù\88 پەڕانەی چاودێری ناکرێن',
 'action-mergehistory' => 'سەریەک‌خستنی میژووی ئەم لاپەڕە',
 'action-userrights' => 'دەستکاری مافەکانی هەموو بەکارهێنەران',
 'action-userrights-interwiki' => 'دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا',
@@ -1442,7 +1474,7 @@ $1",
 'rcshowhidebots' => 'بۆتەکان $1',
 'rcshowhideliu' => 'بەکارھێنەرە تۆمارکراوەکان $1',
 'rcshowhideanons' => 'بەکارھێنەرە نەناسراوەکان $1',
-'rcshowhidepatr' => 'Ú¯Û\86راÙ\86کارÛ\8cÛ\8cÛ\95 Ú©Û\86Ù\86ترÛ\86Úµکراوەکان $1',
+'rcshowhidepatr' => 'Ú¯Û\86راÙ\86کارÛ\8cÛ\8cÛ\95 Ú\86اÙ\88دÛ\8eرÛ\8cکراوەکان $1',
 'rcshowhidemine' => 'دەستکارییەکانی من $1',
 'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە<br />$3',
 'diff' => 'جیاوازی',
@@ -1455,9 +1487,11 @@ $1",
 'number_of_watching_users_pageview' => '[$1 چاودێر لەسەر {{PLURAL:$1|بەکارهێنەر|بەکارهێنەر}}]',
 'rc_categories' => 'بەرتەسک‌کردنەوە بە هاوپۆلەکان (به "|" جودای بکەوە‌)',
 'rc_categories_any' => 'هەرکام',
+'rc-change-size-new' => '$1 {{PLURAL:$1|بایت}} پاش گۆڕانکاری',
 'newsectionsummary' => '/* $1 */ بەشی نوێ',
 'rc-enhanced-expand' => 'وردەکارییەکان پیشان بدە (پێویستی بە جاڤاسکریپتە)',
 'rc-enhanced-hide' => 'وردەکارییەکان بشارەوە',
+'rc-old-title' => 'بە ناوی سەرەکیی «$1» دروست کراوە',
 
 # Recent changes linked
 'recentchangeslinked' => 'گۆڕانکارییە پەیوەندیدارەکان',
@@ -1509,6 +1543,7 @@ $1",
 'minlength1' => 'ناوی پەڕگەکان دەبێ لانیکەم یەک پیت ببێت.',
 'illegalfilename' => 'ناوی‌پەڕگەی "$1" پیتێکی تێدایە کە ڕێگەنەدراوە بۆ سەردێڕی لاپەڕە بەکاربێت.
 تکایە ناوی پەڕگەکە بگۆڕە و دیسان باری بکەوە.',
+'filename-toolong' => 'ناوی پەڕگە ناتوانێ لە ٢٤٠ بایت درێژتر بێت.',
 'badfilename' => 'ناوی پەڕگە بە "$1" گۆڕا .',
 'filetype-badmime' => 'ڕێگە نەدراوە پەڕگەی "$1" جۆری MIME بار بکرێت.',
 'filetype-bad-ie-mime' => 'ناتوانین ئەم پەڕگە باربکەین لەبەر ئەوەی وێبگەڕی Internet Explore ئەوە وەک "$1" دەناسێت کە ڕێگەنەدراوەیە و جۆرە پەڕگەیەکی مەترسی‌دارە.',
@@ -1521,13 +1556,14 @@ $2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە کە ڕێگەی|پەڕگانەی
 'file-too-large' => 'ئەو پەڕگەیە ناردووتە زۆر گەورەیە.',
 'filename-tooshort' => 'ناوی پەڕگە زۆر کورتە.',
 'filetype-banned' => 'ئەم جۆرە پەڕگەیە قەدەغەیە.',
+'illegal-filename' => 'ناوی پەڕگە رێگەپێ‌نەدراوە.',
 'unknown-error' => 'ھەڵەیەکی نەزانراو ڕوویداوە.',
 'large-file' => 'پێشنیار دەکرێت قەبارەی پەڕگەکان زیاتر لە $1 نەبێت؛
 قەبارەی ئەم پەڕگە $2.',
 'largefileserver' => 'ئەم پەڕگە گەورەتر لەوەیە کە ڕاژەکار ڕێگەدەدات.',
-'emptyfile' => 'ئەو پەڕگەی بارت‌کرد لەوەدەچێ بەتاڵ و خاڵی بێت.
-شایەد ئەوە جۆرە هەڵەیەک لە ناوی لاپەڕەکە بێت.
-گەر بە ڕاستی دەتەوێ ئەو پەڕگە باربکەی جارێکی‌کە چاوی لێ‌بکەوە.',
+'emptyfile' => 'ئەو پەڕگەیەی بارت کردووە لەوە دەچێ واڵا بێت.
+لەوانەیە بە ھۆی هەڵەیەک لە تایپی ناوی پەڕگەکە بێت.
+تکایە تاوتوێی بکە ئەگەر بە ڕاستی دەتەوێ ئەم پەڕگەیە بار بکەی.',
 'fileexists' => 'پەڕگەیەک هەر بەو ناوە‌ لە پێش‌دا هەیە، تکایە گەر ئەرخەیان نیت بۆ گۆڕینی، چاوێک لە <strong>[[:$1]]</strong> بکە.
 [[$1|thumb]]',
 'filepageexists' => 'پەڕەی ناساندن بۆ ئەم پەڕگە پێشتر لە <strong>[[:$1]]</strong> درووستکراوە، بەڵام پەڕگەیەک بەو ناوەوە ئێستا نادۆزرێتەوە.
@@ -1597,11 +1633,20 @@ $1',
 'upload-http-error' => 'هەڵەیەکی HTTP ڕووئ داوە: $1',
 
 # File backend
+'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' => 'نوێکردنەوەی پێرستی پەڕگەکان',
+
 # img_auth script messages
 'img-auth-accessdenied' => 'تێپه‌ربوون ره‌تکرایه‌وه‌',
 'img-auth-nofile' => 'فایلی "$1" بوونی نیه‌',
@@ -1631,7 +1676,7 @@ $1',
 لە کاتی پاڵاوتن بۆ بەکارھێنەرێکی تایبەت، تەنیا ئەو پەڕگانە کە بەکارھێنەرەکە دوایین وەشانیانی بارکردبێت نیشان دەدرێن.',
 'listfiles_search_for' => 'بگەڕێ بۆ ناوی میدیای:',
 'imgfile' => 'پەڕگە',
-'listfiles' => 'Ù\84Û\8cستÛ\8c Ù¾Û\95رگەکان',
+'listfiles' => 'Ù¾Û\8eرستÛ\8c Ù¾Û\95Ú\95گەکان',
 'listfiles_thumb' => 'وێنۆک',
 'listfiles_date' => 'ڕێکەوت',
 'listfiles_name' => 'ناو',
@@ -1664,6 +1709,7 @@ $1',
 هەروا [[Special:WhatLinksHere/$2|لیستی تەواو]] ئامادەی کەڵک وەرگرتنە.',
 'nolinkstoimage' => '‌لاپەڕەیەک نەدۆزرایەوە کە بەستەری هەبێ بۆ ئەم پەڕگە.',
 'morelinkstoimage' => '[[Special:WhatLinksHere/$1|بەستەری زیاتر]] ببینە بۆ ئەم پەڕگە.',
+'linkstoimage-redirect' => '$1 (ڕەوانەکەری پەڕگە) $2',
 'duplicatesoffile' => 'ئەم {{PLURAL:$1|پەڕگە دووبارەکرنەوەیەکی|پەڕگانە دووبارەکردنەوەی}} ئەم پەڕگەن ([[Special:FileDuplicateSearch/$2|وردەکاری زیاتر]]):',
 'sharedupload' => 'ئەم پەڕگە لە $1ەوەیە و لەوە دەچێ لە پرۆژەکانی دیکەش بەکار ببرێت.',
 'sharedupload-desc-there' => 'ئەم پەڕگە لە $1ەوەیە و لەوە دەچێ لە پرۆژەکانی دیکەش بەکار ببرێت.
@@ -1697,8 +1743,8 @@ $1',
 'filedelete-success-old' => "وەشانی $3، $2 لە '''[[Media:$1|$1]]''' سڕاوەتەوە.",
 'filedelete-nofile' => "'''$1''' بوونی نییە.",
 'filedelete-nofile-old' => "وەشانێکی ئەرشیڤ‌کراوی '''$1''' بەو تایبەتمەندییە دیاری‌کراوانە نییە.",
-'filedelete-otherreason' => 'هۆکاری دیکە\\زیادی:',
-'filedelete-reason-otherlist' => 'هۆکاری دیکە',
+'filedelete-otherreason' => 'ھۆکاری تر/زیاتر:',
+'filedelete-reason-otherlist' => 'ھۆکاری تر',
 'filedelete-reason-dropdown' => '*هوکارە هاوبەشەکانی سڕینەوە
 **لادان لە مافەکانی بڵاوکردنەوە
 ***پەڕگەی دووبارەکراوە',
@@ -1754,9 +1800,9 @@ $1',
 
 'disambiguations' => 'ئەو پەڕانە لینکیان ھەیە بۆ پەڕەکانی ڕوونکردنەوە',
 'disambiguationspage' => 'Template:ڕوونکردنەوە',
-'disambiguations-text' => "ئەم پەڕانە بەستەریان ھەیە بۆ '''پەڕەی ڕوونکردنەوە'''.
-ئەوانە دەبێ لە جیاتی ئەوە بەستەریان ببێت بۆ بابەتی گونجاو.<br />
-ئەگەر پەڕەیەک لە داڕێژەیەک کەڵک وەرگرێت کە بەستەری ھەیە بۆ [[MediaWiki:Disambiguationspage]]، وەک پەڕەی ڕوونکردنەوە مامەڵەی لەگەڵدا دەکرێ.",
+'disambiguations-text' => "ئەم پەڕانە لانی کەم یەک بەستەریان بۆ '''پەڕەی ڕوونکردنەوە''' ھەیە.
+لەوانەیە لە جیاتی ئەو، بەستەریان ھەبێت  بۆ بابەتەکانیی گونجاو.<br />
+ئەگەر پەڕەیەک لە داڕێژەیەک کەڵک وەرگرێت کە بەستەری ھەبێت بۆ [[MediaWiki:Disambiguationspage]]، وەک پەڕەی ڕوونکردنەوە لەبەر چاو دەگیرێت.",
 
 'doubleredirects' => 'دووجار ڕەوانەکراوەکان',
 'doubleredirectstext' => 'ئەم پەڕە لیستی ئەو پەڕانەیە کە ڕەوانەکراون بۆ پەڕەیەکی ڕەوانەکراوی دیکە.
@@ -1776,11 +1822,12 @@ $1',
 'withoutinterwiki-legend' => 'پێشگر',
 'withoutinterwiki-submit' => 'پیشاندان',
 
-'fewestrevisions' => 'ئەو پەڕانە کەمترین پیاچوونەوەیان ھەیە',
+'fewestrevisions' => 'پەڕەکان بە کەمترین پێداچوونەوەکان',
 
 # 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|پیاچوونەوە|پیاچوونەوە}}',
@@ -1801,14 +1848,15 @@ $1',
 'wantedfiles' => 'پەڕگە داواکراوەکان',
 'wantedfiletext-cat' => 'پەڕگەکانی خوارەوە بەکارھێنراون بەڵام بوونیان نییە. پەڕگەکانی ئەمارەکانی دەرەوە لەوانەیە لەم لیستەدا بن ئەگەرچی بوونیان ھەیە. ھەر باشییەکی درۆی وەھا ھێڵی بەسەردا دەکێشرێ. ھەروەھا، ئەو پەڕانە کە پەڕگەیەکیان بەکارھێناوە کە بوونی نییە لە [[:$1]]دا بە ڕیز کراون.',
 'wantedfiletext-nocat' => 'پەڕگەکانی خوارەوە بەکارھێنراون بەڵام بوونیان نییە. پەڕگەکانی ئەمارەکانی دەرەوە لەوانەیە لەم لیستەدا بن ئەگەرچی بوونیان ھەیە. ھەر باشییەکی درۆی وەھا <del>ھێڵی بەسەردا دەکێشرێ</del>.',
-'wantedtemplates' => 'داڕێژە خوازراوەکان',
-'mostlinked' => 'ئەو پەڕانە زۆرترین بەستەریان پێدراوە',
-'mostlinkedcategories' => 'ئەو پۆلانە زۆرترین بەستەریان پێدراوە',
-'mostlinkedtemplates' => 'ئەو داڕێژانە زۆرترین بەستەریان پێدراوە',
-'mostcategories' => 'پەڕە زۆرتر پۆلێنکراوەکان',
-'mostimages' => 'ئەو پەڕگانە زۆرترین بەستەریان پێدراوە',
-'mostrevisions' => 'ئەو پەڕانە زۆرترین پیاچوونەوەیان ھەیە',
-'prefixindex' => 'گشت پەڕەکان بە پێشگرەوە',
+'wantedtemplates' => 'داڕێژە داواکراوەکان',
+'mostlinked' => 'پەڕەکان بە زۆرترین بەستەری پێدراو',
+'mostlinkedcategories' => 'پۆلەکان بە زۆرترین بەستەری پێدراو',
+'mostlinkedtemplates' => 'داڕێژەکان بە زۆرترین بەستەری پێدراو',
+'mostcategories' => 'پەڕەکان بە زۆرترین پۆل',
+'mostimages' => 'پەڕگەکان بە زۆرترین بەستەری پێدراو',
+'mostinterwikis' => 'پەڕەکان بە زۆرترین نێوانویکی',
+'mostrevisions' => 'پەڕەکان بە زۆرترین پێداچوونەوەکان',
+'prefixindex' => 'ھەموو پەڕەکان بە پێشگرەوە',
 'prefixindex-namespace' => 'هەموو پەڕەکان بەپێشگری (بۆشایی ناوی $1)',
 'shortpages' => 'پەڕە کورتەکان',
 'longpages' => 'پەڕە درێژەکان',
@@ -1822,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' => 'کۆنترین پەڕەکان',
@@ -1866,9 +1914,9 @@ $1',
 'alphaindexline' => '$1 تا $2',
 'nextpage' => 'پەڕەی پاشەوە ($1)',
 'prevpage' => 'پەڕەی پێشەوە ($1)',
-'allpagesfrom' => 'بینینی پەڕەکان بە دەست پێ کردن لە:',
-'allpagesto' => 'بینینی پەڕەکان بە دوایی ھاتن بە:',
-'allarticles' => 'ھەمووی وتارەکان',
+'allpagesfrom' => 'نیشاندانی پەڕەکان بە دەستپێکردن لە:',
+'allpagesto' => 'نیشاندانی پەڕەکان بە دوایی ھاتن بە:',
+'allarticles' => 'ھەموو پەڕەکان',
 'allinnamespace' => 'ھەموو پەڕەکان (بۆشایی-ناوی $1)',
 'allnotinnamespace' => 'ھەموو پەڕەکان (ئەوانەی لە بۆشایی-ناوی $1دا نین)',
 'allpagesprev' => 'پێش',
@@ -1878,7 +1926,7 @@ $1',
 'allpagesbadtitle' => 'سەردێڕی لاپەڕە گونجاو نەبوو یان پێشگڕێکی بەینی‌زمانی یان بەینی‌ویکی هەبوو.
 لەوانەیە یەک یان زیاتر پیتی نەگونجاو بۆ سەردێڕی لەخۆ گرتبێ.',
 'allpages-bad-ns' => '{{SITENAME}} ناوبۆشایی نیە "$1".',
-'allpages-hide-redirects' => 'ڕەوانەکراوەکان بشارەوە',
+'allpages-hide-redirects' => 'ڕەوانەکەرەکان بشارەوە',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'دواترین پیشانبدە',
@@ -1894,11 +1942,11 @@ $1',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'بەشدارییە سڕاوەکان',
-'deletedcontributions-title' => 'هاوبەشییەکانی سڕاوەی بەکارهێنەر',
+'deletedcontributions-title' => 'بەشدارییە سڕاوەکانی بەکارھێنەر',
 'sp-deletedcontributions-contribs' => 'بەشدارییەکان',
 
 # Special:LinkSearch
-'linksearch' => 'گەڕان لە لینکە دەرەکییەکان',
+'linksearch' => 'گەڕانی بەستەرە دەرەکییەکان',
 'linksearch-pat' => 'گەڕان بۆ نواندن:',
 'linksearch-ns' => 'بۆشاییی ناو:',
 'linksearch-ok' => 'گەڕان',
@@ -1908,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' => 'ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان.
@@ -1949,10 +1993,11 @@ $1',
 'mailnologin' => 'ناونیشان بۆ ناردن نییه‌',
 'mailnologintext' => 'ده‌بێ له‌ [[Special:UserLogin|ژووره‌وه‌]] بیت و ناونیشانێکی بڕواپێ‌کراوی ئی‌مه‌یلت له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کان]] دیاری کردبێت تا بتوانی ئی‌مه‌یل بنێریت بۆ به‌کارهێنه‌رانی دیکه‌.',
 'emailuser' => 'ئیمەیل بنێرە بۆ ئەم بەکارھێنەرە',
+'emailuser-title-target' => 'ئیمەیلی ئەم {{GENDER:$1|بەکارھێنەر}}ە',
 'emailuser-title-notarget' => 'ئیمەیل بۆ بەکارھێنەر',
 'emailpage' => 'ئیمەیل بۆ بەکارھێنەر',
-'emailpagetext' => 'دەتوانی لەم فۆرمەی خوارەوە کەڵک وەربگریت بۆ ناردنی پەیامێکی ئیمەیل بۆ ئەم بەکارھێنەرە.
-ئەو ئەدرەسی ئیمەیلە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر‌یتدا]] نووسیوتە، بۆ ئەدرەسی «لەلایەن» (From) لە ئیمەیلدا نیشان دەدرێت، کە وایە بەکارھێنەری وەرگر دەتوانێ ڕاستەوخۆ وەڵامت بداتەوە.',
+'emailpagetext' => 'دەتوانی لەم فۆرمەی ژێرەوە بۆ ناردنی ئیمەیلێک بۆ ئەم {{GENDER:$1|بەکارھێنەر}}ە کەڵک وەربگریت.
+ئەو ناونیشانە ئیمەیلە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر‌یتدا]] نووسیوتە، لە ناونیشانی «لەلایەن»ی (From) ئیمەیلەکەدا نیشان دەدرێت، کە وایە بەکارھێنەری وەرگر دەتوانێ ڕاستەوخۆ وەڵامت بداتەوە.',
 'defemailsubject' => 'ئیمەیڵی {{SITENAME}} لە بەکارھێنەر «$1»ەوە',
 'usermaildisabled' => 'ئیمەیڵی بەکارهێنەر لەکاردانیە',
 'noemailtitle' => 'هیچ ناونیشانێکی ئی‌مەیل نییە',
@@ -1980,15 +2025,15 @@ $1',
 
 # Watchlist
 'watchlist' => 'پێرستی چاودێرییەکانم',
-'mywatchlist' => 'پێرستی چاودێرییەکەم',
+'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' => 'چاودێری بکە',
@@ -2014,51 +2059,57 @@ $1',
 'unwatching' => 'لابردنی چاودێری...',
 
 'enotif_mailer' => 'نامەی ڕاگەیاندنی {{SITENAME}}',
-'enotif_reset' => 'گشت پەڕەکان وەک بینراو دیاری بکە',
-'enotif_newpagetext' => 'ئەمە پەڕەیەکی تازەیە.',
+'enotif_reset' => 'ھەموو پەڕەکان وەک بینراو دیاری بکە',
 'enotif_impersonal_salutation' => 'بەکارهێنەری      {{SITENAME}}',
-'changed' => 'گۆڕدرا',
-'created' => 'دروستکرا',
-'enotif_subject' => '‫پەڕەی «$PAGETITLE»ی {{SITENAME}} بەدەستی $PAGEEDITOR $CHANGEDORCREATED',
+'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ی بەڕێز،
-پەڕەی «$PAGETITLE»ی {{SITENAME}} لە ڕێکەوتی $PAGEEDITDATE بەدەستی $PAGEEDITOR $CHANGEDORCREATED، بۆ بینینی پیاچوونەوەی ئێستای، $PAGETITLE_URL ببینە.
 
-$NEWPAGE
+$PAGEINTRO $NEWPAG
 
-پوختەی دەستکارییەکەی: $PAGESUMMARY $PAGEMINOREDIT
+کورتەی دەستکارییەکەی: $PAGESUMMARY $PAGEMINOREDIT
 
 پەیوەندی لەگەڵ دەستکاریکەر:
 نامە: $PAGEEDITOR_EMAIL
 ویکی: $PAGEEDITOR_WIKI
 
-تا سەردانی ئەم پەڕە نەکەیت، گۆڕانکارییەکی دیکەی پەڕەکەت پێ ڕاناگەیەندرێت.
-هەروەھا دەتوانی نیشانەکانی ڕاگەیاندن بۆ هەموو پەڕەکانی لیستی چاودێریت لەسەرەتاوە ڕێکبخەیتەوە.
+تا سەردانی ئەم پەڕەیە نەکەیت، گۆڕانکارییەکانی داھاتووی پەڕەکەت پێ ڕاناگەیێندرێت. هەروەھا دەتوانی ئاڵاکانی ڕاگەیاندن لە پەڕەی چاودێرییەکەتدا لە سەرەتاوە ڕێک بخەیتەوە.
 
-بÛ\95 Ø³Ù\88پاسÛ\95Ù\88Û\95Ø\8c Ø³Û\8cستÛ\95Ù\85Û\8c Ú\95اگÛ\95Û\8cاÙ\86دÙ\86Û\8c {{SITENAME}}
+بە سپاسەوە، سیستەمی ڕاگەیاندنی {{SITENAME}}
 
 --
-بÛ\86 Ú¯Û\86Ú\95Û\8cÙ\86Û\8c Ø±Û\8eکخستÙ\86Û\95کاÙ\86Û\8c Ú\95اگÛ\95Û\8cاÙ\86دÙ\86 Ø¨Û\95 Ø¦Û\8cÙ\85Û\95Û\8cÙ\84Ø\8c Ø³Û\95ربدÛ\95 Ù\84ە
+بÛ\86 Ú¯Û\86Ú\95Û\8cÙ\86Û\8c Ø±Û\8eکخستÙ\86Û\95کاÙ\86Û\8c Ú\95اگÛ\95Û\8cاÙ\86دÙ\86 Ø¨Û\95 Ø¦Û\8cÙ\85Û\95Û\8cÙ\84Ø\8c Ø¨Ú\95Ù\88اÙ\86ە
 {{canonicalurl:{{#special:Preferences}}}}
 
-بÛ\86 Ú¯Û\86Ú\95Û\8cÙ\86Û\8c Ú\95Û\8eکخستÙ\86Û\95کاÙ\86Û\8c Ù\84Û\8cستÛ\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\8cÛ\95Ú©Û\95تØ\8c Ø³Û\95ربدÛ\95 Ù\84ە
+بÛ\86 Ú¯Û\86Ú\95Û\8cÙ\86Û\8c Ú\95Û\8eکخستÙ\86Û\95کاÙ\86Û\8c Ù¾Û\8eرستÛ\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\8cÛ\95Ú©Û\95تØ\8c Ø¨Ú\95Ù\88اÙ\86ە
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-بÛ\86 Ø³Ú\95Û\8cÙ\86Û\95Ù\88Û\95Û\8c Ù¾Û\95Ú\95Û\95Ú©Û\95 Ù\84Û\95 Ù\84Û\8cستÛ\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\8cÛ\95Ú©Û\95تØ\8c Ø³Û\95ربدÛ\95 Ù\84ە
+بÛ\86 Ø³Ú\95Û\8cÙ\86Û\95Ù\88Û\95Û\8c Ù¾Û\95Ú\95Û\95Ú©Û\95 Ù\84Û\95 Ù¾Û\8eرستÛ\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\8cÛ\95Ú©Û\95تØ\8c Ø¨Ú\95Ù\88اÙ\86ە
 $UNWATCHURL
 
-رێنوێنیی زۆرتر و دەربڕینی بیروڕا:
+کاردانەوە و یارمەتیی زۆرتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'دروستکرا',
+'changed' => 'گۆڕدرا',
 
 # Delete
 'deletepage' => 'پەڕە بسڕەوە',
 'confirm' => 'پشتدار بکەرەوە',
 'excontent' => 'ناوەرۆک ئەمە بوو: «$1»',
 'excontentauthor' => 'ناوەرۆک ئەمە بوو: «$1» (و تەنیا بەشداربوو «[[Special:Contributions/$2|$2]]» بوو)',
-'exbeforeblank' => 'ناوەرۆک بەر لە بەتاڵ کردنەوە ئەمە بوو: «$1»',
-'exblank' => 'پەڕە خاڵی بوو',
+'exbeforeblank' => 'ناوەرۆک بەر لە واڵاکردنەوە ئەمە بوو: «$1»',
+'exblank' => 'پەڕە واڵا بوو',
 'delete-confirm' => 'سڕینەوەی «$1»',
 'delete-legend' => 'بیسڕەوە',
 'historywarning' => "'''وشیار بە:''' پەڕەیەک کە دەتەوێ بیسڕیتەوە مێژوویەکی ھەیە بە نزیکەی $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}وە:",
@@ -2073,8 +2124,8 @@ $UNWATCHURL
 'deletionlog' => 'لۆگی سڕینەوە',
 'reverted' => 'گەڕێندراوە بۆ پێداچوونەوەی پێشووتر',
 'deletecomment' => 'ھۆکار:',
-'deleteotherreason' => 'Ú¾Û\86کارÛ\8c Ø¯Û\8cÚ©Û\95:',
-'deletereasonotherlist' => 'Ú¾Û\86کارÛ\8c Ø¯Û\8cÚ©Û\95',
+'deleteotherreason' => 'Ú¾Û\86کارÛ\8c ØªØ±/زÛ\8cاتر:',
+'deletereasonotherlist' => 'Ú¾Û\86کارÛ\8c ØªØ±',
 'deletereason-dropdown' => '* ھۆکاری سڕینەوە
 ** داواکاریی نووسەر
 ** تێکدانی مافی لەبەرگرتنەوە
@@ -2100,6 +2151,7 @@ $UNWATCHURL
 دوایین دەستکاری ئەم لاپەڕە [[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]] گەڕێنراوە.',
 'rollback-success' => 'دەستکارییەکانی $1 وەرگێرایەوە؛<br />
 گۆڕدرا بۆ دوایین دەستکاریی $2.',
 
@@ -2110,13 +2162,14 @@ $UNWATCHURL
 
 # Protect
 'protectlogpage' => 'لۆگی پاراستن',
-'protectlogtext' => 'لەخوارەوە لیستێک لە لاپەڕە داخراوەکان و کراوەکان دەبینی.
-بۆ دیتنی لیستی ئەو لاپەرانەی ئێستە پاراستنیان لە ئارادایە [[Special:ProtectedPages|لیستی لاپەڕە پارێزراوەکان ]] ببینە.',
+'protectlogtext' => 'لە ژێرەوە پێرستێک لە گۆڕانکارییەکانی پەڕە پارێزراوەکان دەبینی.
+بۆ پێرستی ئەو پەڕانەی ئێستا پاراستنیان لە ئارادایە بڕوانە [[Special:ProtectedPages|پێرستی پەڕە پارێزراوەکان]].',
 'protectedarticle' => '«[[$1]]»ی پاراست',
-'modifiedarticleprotection' => 'ئاستی پاراستنی «[[$1]]»ی گۆڕا',
+'modifiedarticleprotection' => 'ئاستی پاراستنی «[[$1]]»ی گۆڕی',
 'unprotectedarticle' => 'پاراستنی لەسەر «[[$1]]» لابرد',
 'movedarticleprotection' => 'ڕێککارییەکانی پاراستن لە  «[[$2]]» گوازرایەوە بۆ «[[$1]]»',
 'protect-title' => 'گۆڕینی ئاستی پاراستنی "$1"',
+'protect-title-notallowed' => 'دیتنی ئاستی پاراستنی «$1»',
 'prot_1movedto2' => '[[$1]] گوازرایەوە بۆ [[$2]]',
 'protect-legend' => 'پاراستن تەیید بکە',
 'protectcomment' => 'ھۆکار:',
@@ -2138,14 +2191,15 @@ $UNWATCHURL
 'protect-level-sysop' => 'تەنھا بەڕێوەبەران',
 'protect-summary-cascade' => 'تاڤگەیی',
 'protect-expiring' => 'بەسەردەچێ لە ڕێکەوتی $1 (UTC)',
+'protect-expiring-local' => 'بە سەر دەچێ لە $1',
 'protect-expiry-indefinite' => 'بێسنوور',
 'protect-cascade' => 'پەڕەکانی نێو ئەم پەڕە بپارێزە (پاراستنی تاڤگەیی)',
 'protect-cantedit' => 'ناتوانی ئاستی پاراستنی ئەم پەڕە بگۆڕی، چونکوو تۆ ئیجازەی ئەم کارەت نیە.',
 'protect-othertime' => 'کاتی دیکە:',
 'protect-othertime-op' => 'کاتی دیکە',
 'protect-existing-expiry' => 'ئەم کاتی بەسەرچوونی ماوە کە هەیە: $3، $2',
-'protect-otherreason' => 'هۆکاری زیادکراو\\دیکە:',
-'protect-otherreason-op' => 'Ú¾Û\86کارÛ\8c Ø¯Û\8cÚ©Û\95',
+'protect-otherreason' => 'ھۆکاری تر/زیاتر:',
+'protect-otherreason-op' => 'Ú¾Û\86کارÛ\8c ØªØ±',
 'protect-dropdown' => '*ھۆکارە باوەکانی پاراستن
 ** خراپکاریی لەڕادەبەدەر
 ** سپامی لەڕادەبەدەر
@@ -2172,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' => 'ئەم لاپەڕە سڕاوەتەوە.
 لەو پۆختەی لە خوارەوە دەیبینی، هۆکاری سڕینەوە و هەروا وردەکاریەکان سەبارە بەو کەسەی پێش سڕینەوە دەستکاری لاپەڕەکەی کردووە، دەست‌دەکەوێ.
 دەقی ڕاستی ئەم پێداچوونەوە سڕاوانە تەنها بۆ بەڕێوبەران دەست‌پێ‌گەیشتنی هەیە.',
@@ -2191,16 +2245,16 @@ $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 پەڕگە}} هێنرایەوە',
 'undeletedfiles' => '{{PLURAL:$1|1 پەڕگە|$1 پەڕگە}} هێنرایەوه',
-'cannotundelete' => 'لە سڕین گەڕانەوە سەرکەوتوو نەبوو؛
-کەسێکی دیکە پێش تۆ گەڕاندوویەتەوە.',
+'cannotundelete' => 'ھێنانەوە سەرکەوتوو نەبوو:
+$1',
 'undeletedpage' => "'''$1 هێنراوەتەوە'''
 
 بۆ دیتنی پێشینەی دوایین سڕینەوەکان و هێنانەوەکان سەرنجی [[Special:Log/delete|لۆگی سڕینەوە]] بدە.",
@@ -2227,9 +2281,9 @@ $1',
 'blanknamespace' => '(سەرەکی)',
 
 # Contributions
-'contributions' => 'بەشدارییەکانی بەکارھێنەر',
+'contributions' => 'بەشدارییەکانی {{GENDER:$1|بەکارھێنەر}}',
 'contributions-title' => 'بەشدارییەکانی بەکارھێنەر $1',
-'mycontris' => 'بەشدارییەکانم',
+'mycontris' => 'بەشدارییەکان',
 'contribsub2' => 'بۆ $1 ($2)',
 'nocontribs' => 'هیچ گۆڕانکاریەکی هاوتای ئەم پێوەرانە نودۆزرایەوە',
 'uctop' => '(سەر)',
@@ -2242,10 +2296,14 @@ $1',
 'sp-contributions-blocklog' => 'لۆگی بەربەستن',
 'sp-contributions-deleted' => 'بەشدارییە سڕاوەکان',
 'sp-contributions-uploads' => 'بارکردنەکان',
-'sp-contributions-logs' => 'تۆمارەکان',
+'sp-contributions-logs' => 'لۆگەکان',
 'sp-contributions-talk' => 'لێدوان',
 'sp-contributions-userrights' => 'بەڕێوبەرایەتی مافەکانی بەکارهێنەر',
-'sp-contributions-search' => 'گەڕین بۆ بەشدارییەکان',
+'sp-contributions-blocked-notice' => 'ھەنووکە ئەم بەکارھێنەرە بەربەست کراوە.
+دوایین بابەتی لۆگی بەربەستن لە ژێرەوە ھاتووە:',
+'sp-contributions-blocked-notice-anon' => 'ھەنووکە ئەم ناونیشانەی IPیە بەربەست کراوە.
+دوایین بابەتی لۆگی بەربەستن لە ژێرەوە ھاتووە:',
+'sp-contributions-search' => 'گەڕان بۆ بەشدارییەکان',
 'sp-contributions-username' => 'ناونیشانی ئای‌پی یان ناوی‌ بەکارھێنەری:',
 'sp-contributions-toponly' => 'تەنیا ئەو دەستکارییانە نیشانبدە کە دوایین پیاچوونەوەن',
 'sp-contributions-submit' => 'بگەڕێ',
@@ -2263,14 +2321,14 @@ $1',
 'whatlinkshere-prev' => '{{PLURAL:$1|پێشتر|$1 ی پێشتر}}',
 'whatlinkshere-next' => '{{PLURAL:$1|دیکە|$1 ی دیکە}}',
 'whatlinkshere-links' => '← بەستەرەکان',
-'whatlinkshere-hideredirs' => 'ڕەوانەکراوەکان $1',
+'whatlinkshere-hideredirs' => 'ڕەوانەکەرەکان $1',
 'whatlinkshere-hidetrans' => '$1 ھێنانەناوەوەکان',
 'whatlinkshere-hidelinks' => '$1 بەستەر',
-'whatlinkshere-hideimages' => 'بەستەرەکانی وێنەی $1',
+'whatlinkshere-hideimages' => '$1 بەستەرەکانی پەڕگە',
 'whatlinkshere-filters' => 'پاڵێوکەکان',
 
 # Block/unblock
-'block' => 'بەربەستکردنی بەکارهێنەر',
+'block' => 'بەربەستکردنی بەکارھێنەر',
 'unblock' => 'لە بەربەست‌دەرهێنانی بەکارهێنەر',
 'blockip' => 'بەربەستنی بەکارھێنەر',
 'blockip-title' => 'بەربەستکردنی بەکارهێنەر',
@@ -2282,24 +2340,26 @@ $1',
 'ipbexpiry' => 'بەسەرچوون:',
 'ipbreason' => 'هۆکار:',
 'ipbreasonotherlist' => 'هۆکاری تر',
-'ipbreason-dropdown' => '*هۆکارە هاوبەشەکانی بەربست‌کران
-**دانانی زانیاریی هەڵە
-**لابردنی ناوەڕۆکی لاپەڕەکان
-**بÛ\95ستÛ\95ر Ø¨Û\86 Ù\84اپÛ\95Ú\95Û\95Û\8c Ø¯Û\95رÛ\95Ú©Û\8c Ù\86Û\95Ú¯Ù\88Ù\86جاÙ\88
+'ipbreason-dropdown' => '*ھۆکارە ھاوبەشەکانی بەربستن
+**دانانی زانیاریی ھەڵە
+**لابردنی ناوەرۆکی پەڕەکان
+**بەستەر بۆ پەڕەی دەرەکی نەگونجاو
 **نووسینی قسەی بێ‌مانا و بێ‌سوود
-**هەڵسووکەوت یان وتاری هاندەر بۆ توندوتیژی
-**بەکارهێنانی چەن هەژمارە پێکەوە
-**ناوی بەکارهێنەریی نەگونجاو',
-'ipbcreateaccount' => 'بەرگری لە درووست‌کردنی هەژمارە',
-'ipbemailban' => 'بەرگری لە ئی‌مەیل ناردنی بەکارهێنەر',
-'ipbenableautoblock' => 'خۆکار بەربەست‌کردنی ئەو ناونیشانی‌ ئای‌پیە وا ئەم بەکار‌هێنەرە کەڵکی لێ‌وەرگرتووە و ئەو ئای‌پی‌یانەی دیکە وا لەوێوە هەوڵی دەستکاری ئەدەن.',
-'ipbsubmit' => 'بەربەست‌کردنی ئەم بەکارهێنەرە',
+**ھەڵسوکەوت یان وتاری ھاندەر بۆ توندوتیژی
+**بەکارھێنانی چەند ھەژمار پێکەوە
+**ناوی بەکارھێنەریی نەگونجاو',
+'ipb-hardblock' => 'بەرگری بەکارھێنەرانی تۆمارکراو بکە لە دەستکاریکردن لە ڕێگەی ناونیشانی ئەم IPیەوە',
+'ipbcreateaccount' => 'بەرگری بکە لە دروستکردنی ھەژمار',
+'ipbemailban' => 'بەرگری بکە لە ئیمەیل ناردنی بەکارھێنەر',
+'ipbenableautoblock' => 'بە شێوەی خۆگەڕ دوایین ناونیشانی‌ ئای‌پی وا ئەم بەکار‌هێنەرە کەڵکی لێ‌وەرگرتووە و ئەو ئای‌پی‌یانەی تر وا لەوێوە هەوڵی دەستکاری دەدات بەربەست بکە',
+'ipbsubmit' => 'بەربەستکردنی ئەم بەکارھێنەرە',
 'ipbother' => 'کاتی‌ دیکە:',
 'ipboptions' => '٢ کاتژمێر:2 hours,١ ڕۆژ:1 day,٣ ڕۆژ:3 days,١ ھەفتە:1 week,٢ ھەفتە:2 weeks,١ مانگ:1 month,٣ مانگ:3 months,٦ مانگ:6 months,١ ساڵ:1 year,بێ‌سنوور:infinite',
 'ipbotheroption' => 'دیکە',
-'ipbotherreason' => 'هۆکاری زیادکراو\\دیکە:',
+'ipbotherreason' => 'ھۆکاری تر/زیاتر:',
 'ipbhidename' => 'شاردنەوەی ناوی‌ بەکارهێنەر لە دەستکاری و لیستەکان',
-'ipbwatchuser' => 'دیتنی لاپەڕەی بەکارهێنەر و وتووێژی ئەم بەکارهێنەرە',
+'ipbwatchuser' => 'پەڕەکانی بەکارھێنەر و لێدوانی ئەم بەکارهێنەرە بخە ژێر چاودێری',
+'ipb-disableusertalk' => 'بەرگری ئەم بەکارھێنەرە بکە لە دستکاریکردنی پەڕەی لێدوانەکەی کاتێک بەربەست کراوە',
 'ipb-change-block' => 'دیسان بەربەست‌کردنەوەی ئەم بەکارهێنەرە بەم هەڵبژاردانە',
 'badipaddress' => 'ناونیشانی ئای‌پی نەگونجاو',
 'blockipsuccesssub' => 'بەربەست کردن سەرکەوتوو بوو',
@@ -2309,26 +2369,31 @@ $1',
 'ipb-unblock-addr' => 'لە بەربەست‌دەرهێنانی $1',
 'ipb-unblock' => 'لە بەربەست‌دەرهێنانی ناوی بەکارهێنەریەک یا ناونیشانێکی ئای‌پی',
 'ipb-blocklist' => 'دیتنی ئەو بەربەستانەی وا هەیە',
-'ipb-blocklist-contribs' => 'هاوبەشیەکان بۆ $1',
+'ipb-blocklist-contribs' => 'بەشدارییەکانی $1',
 'unblockip' => 'لە بەربەست‌دەرهێنانی بەکارهێنەر',
 'unblockiptext' => 'بۆ گەڕاندنەوەی دەست‌پی‌گەیشتنی نووسین بۆ ئەو دوایین ئای‌پی یان بەکارهێنەری بەربەست کراوە، لەو فۆرمەی خوارەوە کەڵک وەرگرە.',
 'ipusubmit' => 'لابردنی ئەم بەربەستە',
 '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' => 'گەڕان',
+'ipblocklist-localblock' => 'بەرەبەستنی خۆماڵی',
+'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' => 'بەربەستن',
@@ -2339,19 +2404,21 @@ $1',
 'autoblocker' => 'خۆکار بەربەست‌کراوە لەبەر ئەوەی ناونیشانی ئای‌پی تۆ لەم دواییانەدا لە لایەن "[[User:$1|$1]]" بەکار هاتووە.
 هۆکاری بەربەست‌کرانی $1 ئەمەیە: "$2"',
 'blocklogpage' => 'لۆگی بەربەستن',
-'blocklogentry' => '[[$1]] ئاستەنگ کرا بۆ ماوەی $2 $3',
+'blocklog-showlog' => 'ئەم بەکارھێنەرە پێشتر بربەست کراوە.
+لۆگی بەربەستن لە ژێرەوە ھاتووە:',
+'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' => 'بەربست‌کردنی خۆکار لە کار خسترا',
-'block-log-flags-noemail' => 'ئی‌مەیل بەربەست‌کراوە',
-'block-log-flags-nousertalk' => 'دەستکاری لاپەڕەی وتووێژی خۆ ناکرێت',
-'block-log-flags-angry-autoblock' => 'بەربەستی خۆکاری پێشکەوتوو خستراوەتە کار',
-'block-log-flags-hiddenname' => 'شاردنەوەی ناوی‌بەکارهێنەری',
+'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' => 'بەربەستکردنی خۆگەڕی پێشکەوتوو چالاک کرا',
+'block-log-flags-hiddenname' => 'ناوی بەکارھێنەری شاراوە',
 'range_block_disabled' => 'تایبەتمەندی بەڕێوەبەر بۆ بەربەست‌کردنی زنجیرە لە کارخستراوە.',
 'ipb_expiry_invalid' => 'کاتی بەسەرچوونی نەگونجاو.',
 'ipb_expiry_temp' => 'بەربەستی ناوی‌بەکارهێنەرە شاراوەکان دەبێ پایەدار بێت.',
@@ -2359,6 +2426,7 @@ $1',
 'ipb_already_blocked' => '"$1" لە پێش‌دا بەربەست‌‌کراوە',
 'ipb-needreblock' => '"$1" لە پێش‌دا بەربەست‌‌کراوە.
 ئایا دەتەو‌ێ هەڵبژاردەکانی بگۆڕیت؟',
+'ipb-otherblocks-header' => '{{PLURAL:$1|بەربەستنەکانی}} تر',
 'ipb_cant_unblock' => 'پێناسەی بەربەست‌کردنی $1 نەدۆزرایەوە.
 لەوانەیە لە بەربەستی لابرابێت.',
 'ipb_blocked_as_range' => 'هەڵە: ئای‌پی $1 ڕاستەوخۆ بەربەست نەکراوە بۆیە ناکڕێت لە بەربەست لای‌ بەیت.
@@ -2374,6 +2442,7 @@ $1',
 'sorbs_create_account_reason' => 'ناونیشانی ئای‌پی تۆ لە DNSBLدا کە {{SITENAME}} کەڵکی لێ‌وەر دەگرێ، وەک پرۆکسیەکی کراوە لیست کراوە.
 بۆیە ناتوانی هەژمارە درووست‌بکەی.',
 'cant-block-while-blocked' => 'کاتێ خۆت بەربەست‌کراوی، ناتوانی بەکارهێنەرانی دیکە بەربەست بکەی.',
+'ipbblocked' => 'ناتوانی بەکارھێنەرانی تر بەربەست بکەی یان بکەیەوە، چون خۆت بەربەست کراوی.',
 
 # Developer tools
 'lockdb' => 'داخستنی بنکەدراوە',
@@ -2493,7 +2562,7 @@ $1',
 بۆ هەناردنی لاپەڕەکان، سەردێڕەکان لە چوارچێوەی دەقی خوارەوە بنووسە، هەر هێڵێک یەک سەردێڕ. هەروا هەڵبژێرە ئایا پێداچوونەوەی ئێستا و هەموو پێداچوونەوە کۆنەکانت دەوێ یان هەر پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.
 
 لە بابەتی دواتر هەروەها دەتوانی لە بەستەرێک کەڵک وەرگریت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ لەپەڕەی "[[{{MediaWiki:Mainpage}}]]".',
-'exportall' => 'گشت پەڕەکان ھەناردە بکە',
+'exportall' => 'Ú¾Û\95Ù\85Ù\88Ù\88 پەڕەکان ھەناردە بکە',
 'exportcuronly' => 'تەنها پێداچوونەوەی ئێستا لەخۆ بگرێت نەک هەموو مێژوو',
 'exportnohistory' => "----
 '''ئاگاداربە: '''ھەناردنی ھەموو مێژووی پەڕەکان لەم فۆرمەوە لەبەر ھۆکاری ڕێخستن، داخراوە.",
@@ -2535,7 +2604,7 @@ $1',
 'thumbnail_image-missing' => 'لەوە دەچێ پەڕگە ون بوبێت: $1',
 
 # Special:Import
-'import' => 'هێنانەناوەی لاپەڕەکان',
+'import' => 'ھاوردنی پەڕەکان',
 'importinterwiki' => 'هێنانەناوەی ترانس‌ویکی',
 'import-interwiki-text' => 'بۆ هێنانە‌ناوە ویکی‌یەک و سەردێڕێکی لاپەڕە هەڵبژێرە.
 ڕێکەوتەکانی پێداچوونەوە و ناوی دەستکاری‌کەرەکان دەپارێزدرێت.
@@ -2570,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' => 'لەدەست‌ڕۆشتنی دراوەکانی ئەو بەشە.
 تکایە دیسان تاقی‌بکەوە.',
@@ -2577,12 +2647,15 @@ $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',
 
+# JavaScriptTest
+'javascripttest' => 'تاقیکردنەوەی جاڤاسکریپت',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'پەڕەی بەکارھێنەرییەکەت',
 'tooltip-pt-anonuserpage' => 'پەڕەی بەکارھێنەری بۆ ئای‌پی یەکە کە بەناویەوە خەریکی دەستکاری کردنی',
@@ -2618,14 +2691,14 @@ $1',
 'tooltip-n-recentchanges' => 'لیستی دوایین گۆڕانکارییەکان لەم ویکییەدا',
 'tooltip-n-randompage' => 'پەڕەیەک بە هەڵکەوت نیشان بدە',
 'tooltip-n-help' => 'شوێنی تێگەیشتن',
-'tooltip-t-whatlinkshere' => 'Ù\84Û\8cستÛ\8c Ú¾Û\95Ù\85Ù\88Ù\88 Ù¾Û\95Ú\95Û\95کاÙ\86Û\8c Ù\88Û\8cÚ©Û\8c Ú©Û\95 Ø¨Û\95ستÛ\95رکراون بۆ ئێرە',
+'tooltip-t-whatlinkshere' => 'Ù¾Û\8eرستÛ\8c Ú¾Û\95Ù\85Ù\88Ù\88 Ù¾Û\95Ú\95Û\95کاÙ\86Û\8c Ù\88Û\8cÚ©Û\8c Ú©Û\95 Ø¨Û\95ستÛ\95ر Ø¯راون بۆ ئێرە',
 'tooltip-t-recentchangeslinked' => 'دوایین گۆڕانکارییەکان لەو پەڕانە کە بەگرەوە گرێ دراون',
 'tooltip-feed-rss' => 'RSS feed بۆ ئەم پەڕە',
 'tooltip-feed-atom' => 'Atom feed بۆ ئەم پەڕە',
 'tooltip-t-contributions' => 'لیستی بەشدارییەکانی ئەم بەکارھێنەرە ببینە',
 'tooltip-t-emailuser' => 'ئیمەیلێک بنێرە بۆ ئەم بەکارھێنەرە',
 'tooltip-t-upload' => 'پەڕگەیەک (فایل) بار بکە',
-'tooltip-t-specialpages' => 'Ù\84Û\8cستی ھەموو پەڕە تایبەتەکان',
+'tooltip-t-specialpages' => 'Ù¾Û\8eرستی ھەموو پەڕە تایبەتەکان',
 'tooltip-t-print' => 'وەشانی چاپی ئەم پەڕەیە',
 'tooltip-t-permalink' => 'گرێدەری ھەمیشەیی بۆ ئەم وەشانەی ئەم پەڕەیە',
 'tooltip-ca-nstab-main' => 'بینینی پەڕەی ناوەڕۆک',
@@ -2686,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' => 'دروستکەری پەڕە',
@@ -2704,6 +2778,10 @@ $1',
 'pageinfo-recent-authors' => 'ژمارەی دوایین نووسەرە جیاوازەکان',
 'pageinfo-templates' => 'داڕێژە{{PLURAL:$1|ی بەکارگیراو| بەکارگیراوەکان}} ($1)',
 'pageinfo-toolboxlink' => 'زانیاریی پەڕە',
+'pageinfo-redirectsto-info' => 'زانیاری',
+'pageinfo-contentpage' => 'ھەژمارکراو وەک پەڕەی بەناوەرۆک',
+'pageinfo-contentpage-yes' => 'بەڵێ',
+'pageinfo-protect-cascading-yes' => 'بەڵێ',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
@@ -2752,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.',
@@ -2780,6 +2859,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 کاتژمێر|$1 کاتژمێر}}',
 'days' => '{{PLURAL:$1|$1 ڕۆژ|$1 ڕۆژ}}',
 'ago' => '$1 پێش',
+'just-now' => 'ھەرئێستا',
 
 # Bad image list
 'bad_image_list' => 'فۆرمات بەم شێوەی خوارەوەیە:
@@ -2816,23 +2896,30 @@ $1',
 # EXIF tags
 'exif-imagewidth' => 'پانی',
 'exif-imagelength' => 'بەرزی',
+'exif-ycbcrpositioning' => 'شوێنی Y و C',
+'exif-datetime' => 'ڕێکەوتی و کاتی گۆڕانی پەڕگە',
 'exif-imagedescription' => 'ناونیشانی وێنە',
 'exif-model' => 'جۆری کامێرا',
 'exif-software' => 'نەرمەواڵەی بەکارهاتوو',
 'exif-artist' => 'نووسەر',
+'exif-exifversion' => 'وەشانی exif',
 'exif-colorspace' => 'بۆشایی ره‌نگ',
 'exif-pixelydimension' => 'پانی وێنە',
 'exif-pixelxdimension' => 'بەرزی وێنە',
 'exif-usercomment' => 'بۆچوونەکانی بەکارهێنەر',
 'exif-relatedsoundfile' => 'فایلی ده‌نگی لێکچوو',
 'exif-exposuretime-format' => '$1 چرکە ($2)',
+'exif-fnumber' => 'ڕێژەی ئێف',
 'exif-lightsource' => 'سەرچاوەی ڕووناکی',
 'exif-flash' => 'فلاش',
+'exif-subjectlocation' => 'شوێنی ناسکار',
 'exif-filesource' => 'سەرچاوەی پەڕگە',
 'exif-saturation' => 'تێربوون',
 'exif-gpslatitude' => 'پانی',
 'exif-gpslongitude' => 'درێژی',
+'exif-gpsaltitude' => 'بەرزایی',
 'exif-gpstimestamp' => 'کاتی GPS (سەعاتی ئەتۆمی)',
+'exif-gpssatellites' => 'سەتەلایتەکانی بەکارگیراو بۆ پێوان',
 'exif-gpsmeasuremode' => 'جۆری پێوان',
 'exif-gpsdop' => 'وردی پێوان',
 'exif-gpsspeedref' => 'یەکەی خێرایی',
@@ -2841,7 +2928,17 @@ $1',
 'exif-gpsimgdirection' => 'ئاڕاستەی وێنە',
 'exif-gpsareainformation' => 'ناوی ناوچەی GPS',
 'exif-gpsdatestamp' => 'ڕێکەوتی GPS',
+'exif-jpegfilecomment' => 'تێبینیی پەڕگەی JPEG',
+'exif-worldregioncreated' => 'ناوچەی جیھانێک کە وێنەکە تێیدا گیراوە',
+'exif-countrycreated' => 'وڵاتێک کە وێنەکە تێیدا گیراوە',
+'exif-citycreated' => 'شارێک کە وێنەکە تێیدا گیراوە',
+'exif-worldregiondest' => 'ناوچەی جیھانی نیشان دراو',
+'exif-countrydest' => 'وڵاتی نیشان دراو',
+'exif-countrycodedest' => 'کۆدی وڵاتی نیشان دراو',
+'exif-provinceorstatedest' => 'پارێزگا یان ویلایەتی نیشان دراو',
+'exif-citydest' => 'شاری نیشان دراو',
 'exif-objectname' => 'سەردێری کورت',
+'exif-specialinstructions' => 'ڕیسای کاری تایبەت',
 'exif-headline' => 'سەردێر',
 'exif-source' => 'سەرچاوە',
 'exif-contact' => 'زانیاری پەیوەندیکردن',
@@ -2849,7 +2946,16 @@ $1',
 'exif-languagecode' => 'زمان',
 'exif-iimversion' => 'وەشانی IIM',
 'exif-iimcategory' => 'پۆل',
+'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)',
@@ -2857,6 +2963,9 @@ $1',
 # EXIF attributes
 'exif-compression-1' => 'نەپەستێنراو',
 
+'exif-copyrighted-true' => 'خاوەنی مافی بڵاوکردنەوە',
+'exif-copyrighted-false' => 'پاوانی گشتی',
+
 'exif-unknowndate' => 'ڕێکەوتی نەزانراو',
 
 'exif-orientation-1' => 'ئاسایی',
@@ -2867,6 +2976,7 @@ $1',
 'exif-componentsconfiguration-0' => 'بوونی نییە',
 
 'exif-exposureprogram-1' => 'دەستکار',
+'exif-exposureprogram-2' => 'بەرنامەی ئاسایی',
 
 'exif-subjectdistance-value' => '$1 مەتر',
 
@@ -2960,6 +3070,10 @@ $1',
 'exif-gpslongitude-e' => 'پانیی جوگرافیایی ڕۆژهەڵات',
 'exif-gpslongitude-w' => 'پانیی جوگرافیایی ڕۆژئاوا',
 
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|مەتر}} بەرزتر لە ئاستی زەریا',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|مەتر}} نزمتر لە ئاستی زەریا',
+
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'کیلۆمەتر هەر کاتژمێر',
 'exif-gpsspeed-m' => 'مایل هەر کاتژمێر',
@@ -2971,6 +3085,14 @@ $1',
 
 'exif-gpsdop-good' => 'چاک ($1)',
 
+'exif-objectcycle-a' => 'تەنیا بەیانان',
+'exif-objectcycle-p' => 'تەنیا ئێواران',
+'exif-objectcycle-b' => 'بەیانان و ئێواران',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'لای دروست',
+
+'exif-dc-contributor' => 'بەشداربووان',
 'exif-dc-date' => 'ڕۆژ(ەکان)',
 'exif-dc-publisher' => 'بڵاوکار',
 'exif-dc-relation' => 'میدیای پەیوەندیدار',
@@ -2978,8 +3100,18 @@ $1',
 'exif-dc-source' => 'سەرچاوەی میدیا',
 'exif-dc-type' => 'جۆری میدیا',
 
+'exif-rating-rejected' => 'ڕەت کراوە',
+
+'exif-isospeedratings-overflow' => 'گەورەتر لە ٦٥٥٣٥',
+
+'exif-iimcategory-ace' => 'ھونەر، چاند و تاوژین',
+'exif-iimcategory-fin' => 'ئابووری و بازرگانی',
+'exif-iimcategory-edu' => 'فێرکاری',
+'exif-iimcategory-evn' => 'ژینگە',
 'exif-iimcategory-hth' => 'تەندروستی',
+'exif-iimcategory-lab' => 'کار',
 'exif-iimcategory-pol' => 'سیاسەت',
+'exif-iimcategory-rel' => 'ئایین و باوەڕ',
 'exif-iimcategory-sci' => 'زانست و تەکنۆلۆژیا',
 'exif-iimcategory-soi' => 'بابەتە کۆمەڵایەتییەکان',
 'exif-iimcategory-spo' => 'وەرزشەکان',
@@ -3090,6 +3222,8 @@ $5
 'imgmultigoto' => 'بڕۆ بۆ پەڕەی $1',
 
 # Table pager
+'ascending_abbrev' => 'بەرەوە ژوور',
+'descending_abbrev' => 'بەرەوە ژێر',
 'table_pager_next' => 'پەڕەی داهاتوو',
 'table_pager_prev' => 'پەڕەی پێشوو',
 'table_pager_first' => 'پەرەی یەکەم',
@@ -3176,6 +3310,9 @@ $5
 'hijri-calendar-m11' => 'زولقەعدە',
 'hijri-calendar-m12' => 'زولحەججە',
 
+# Hebrew month names
+'hebrew-calendar-m7-gen' => 'نیسان',
+
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|لێدوان]])',
 'timezone-utc' => 'UTC',
@@ -3201,9 +3338,11 @@ $5
 'version-hook-subscribedby' => 'بەشداربوو لە لایەن',
 'version-version' => '(وەشانی $1)',
 'version-license' => 'مۆڵەت',
+'version-poweredby-others' => 'دیکە',
 'version-software' => 'نەرمەکاڵای دامەزراو',
 'version-software-product' => 'بەرهەم',
 'version-software-version' => 'وەشان',
+'version-entrypoints-header-url' => 'ناونیشانی ئینتەرنێتی',
 
 # Special:FilePath
 'filepath' => 'ڕێڕەوی پەڕگە',
@@ -3221,6 +3360,7 @@ $5
 'fileduplicatesearch-info' => '$1 × $2 پیکسەل<br />قەبارەی پەڕگە: $3<br />MIME جۆری: $4',
 'fileduplicatesearch-result-1' => 'پەڕگەی "$1" دووپاتکراوەیەکی کوتوموتی نییە.',
 'fileduplicatesearch-result-n' => 'پەڕگەی «$1» {{PLURAL:$2|١ دووپاتکراوەی کوتوموتی|$2 دووپاتکراوەی کوتوموتی}} ھەیە.',
+'fileduplicatesearch-noresults' => 'پەڕگەیەک بە ناوی «$1» نەدۆزرایەوە.',
 
 # Special:SpecialPages
 'specialpages' => 'پەڕە تایبەتەکان',
@@ -3230,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>
@@ -3275,6 +3415,7 @@ $5
 'compare-rev1' => 'پێداچوونەوەی ١',
 'compare-rev2' => 'پێداچوونەوەی ٢',
 'compare-submit' => 'ھەڵسەنگاندن',
+'compare-invalid-title' => 'ئەم سەردێڕە دەستنیشانت کردووە نادروستە.',
 
 # Database error messages
 'dberr-header' => 'ئەم ویکی‌یە کێشەی هەیە',
@@ -3299,20 +3440,26 @@ $5
 # New logging system
 'logentry-delete-delete' => '$1 پەڕەی $3ی سڕییەوە',
 'logentry-delete-restore' => '$1 پەڕەی $3ی ھێنایەوە',
-'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3 گۆڕیی: $4',
-'revdelete-content-hid' => 'شاردنەوەی ناوەرۆک',
+'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی گۆڕیی: $4',
+'logentry-suppress-delete' => '$1 پەڕەی $3 بەرگری کرد.',
+'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 کە پێشتر ڕەوانەکەر بوو',
-'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-subject' => 'بابەت:',
@@ -3326,9 +3473,12 @@ $5
 'searchsuggest-containing' => 'بە لەبەرگرتنەوەی ...',
 
 # API errors
+'api-error-empty-file' => 'ئەو پەڕگەیە کە ناردووتە واڵا بوو.',
+'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-illegal-filename' => 'ناوی پەڕگە رێگەپێ‌نەدراوە.',
 'api-error-unclassified' => 'ھەڵەیەکی نەزانراو ڕوویداوە.',
 'api-error-unknown-code' => 'ھەڵەی نەزانراو: «$1».',
 'api-error-unknownerror' => 'ھەڵەی نەزانراو: «$1».',
index 8ccda6b..1184b13 100644 (file)
@@ -409,9 +409,6 @@ Mini ang ginhatag nga kabangdanan "\'\'$2\'\'".',
 
 Pwede mo mapadayon usar ang {{SITENAME}}, ukon pwede ka <span class='plainlinks'>[$1 lmagsulod liwat]</span> bilang pareho ukon la-in nga manug-usar.
 Tandaan nga ang iban nga pahina magapadayon nga ipakita nga nakasulod ka man gyapon kuno abi, asta panason mo ang cache sang imo browser.",
-'welcomecreation' => '==Malipayon nga pag-abot, $1! ==
-Nahimo na ang imo account.
-Indi pagkalimtan nga islan ang imo [[Special:Preferences|mga uyon mo sa {{SITENAME}}]].',
 'yourname' => 'Hayo (username):',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'Liwata ka pindot ang password:',
@@ -610,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',
 
@@ -717,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 dc2eb5b..d8f0afd 100644 (file)
@@ -240,8 +240,8 @@ $messages = array(
 'newwindow' => '(янъы бир пенджереде ачылыр)',
 'cancel' => 'Лягъу',
 'moredotdotdot' => 'Даа...',
-'mypage' => 'Саифем',
-'mytalk' => 'Музакере саифем',
+'mypage' => 'Саифе',
+'mytalk' => 'Музакере',
 'anontalk' => 'Бу IP-нинъ музакереси',
 'navigation' => 'Сайтта ёл тапув',
 'and' => '&#32;ве',
@@ -490,9 +490,6 @@ $2',
 'logouttext' => "'''Отурымны къапаттынъыз.'''
 
 Шимди {{SITENAME}} сайтыны аноним оларакъ къулланып оласынъыз, я да янъыдан <span class='plainlinks'>[$1 отурым ачып]</span> оласынъыз (истер айны къулланыджы адынен, истер башкъа бир къулланыджы адынен). Web браузеринъиз кэшини темизлегендже базы саифелер санки аля даа отурымынъыз ачыкъ экен киби корюнип олур.",
-'welcomecreation' => '== Хош кельдинъиз, $1! ==
-Эсабынъыз ачылды.
-Бу сайтнынъ [[Special:Preferences|сазламаларыны]] шахсынъызгъа коре денъиштирмеге унутманъыз.',
 'yourname' => 'Къулланыджы адынъыз',
 'yourpassword' => 'Паролинъиз',
 'yourpasswordagain' => 'Парольни бир даа язынъыз:',
@@ -733,7 +730,6 @@ $2 къулланыджысына вакътынджа <code>$3</code> паро
 'template-protected' => '(къорчалав алтында)',
 'template-semiprotected' => '(къысмен къорчалав алтында)',
 'hiddencategories' => 'Бу саифе {{PLURAL:$1|1|$1}} гизли категориягъа менсюптир:',
-'nocreatetitle' => 'Саифе яратув сынъырлыдыр',
 'nocreatetext' => '{{SITENAME}} сайтында янъы саифе яратув сынъырлыдыр.
 Кери къайтып мевджут олгъан саифени денъиштире, [[Special:UserLogin|отурым ача я да янъы бир эсап яратып оласынъыз]].',
 'nocreate-loggedin' => 'Янъы саифелер яратмагъа изининъиз ёкътыр.',
@@ -1026,6 +1022,10 @@ $3 мына бу себепни бильдирди: ''$2''",
 'grouppage-bureaucrat' => '{{ns:project}}:Бюрократлар',
 'grouppage-suppress' => '{{ns:project}}:Тефтишчилер',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Янъы къулланыджы журналы',
+'newuserlogpagetext' => 'Энъ сонъки къайд олгъан къулланыджы журналы.',
+
 # User rights log
 'rightslog' => 'Къулланыджынынъ акълары журналы',
 
@@ -1378,10 +1378,6 @@ $3 мына бу себепни бильдирди: ''$2''",
 'listusers-submit' => 'Косьтер',
 'listusers-noresult' => 'Ич бир къулланыджы тапылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Янъы къулланыджы журналы',
-'newuserlogpagetext' => 'Энъ сонъки къайд олгъан къулланыджы журналы.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(азалар джедвели)',
 
@@ -1440,11 +1436,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 
 'enotif_mailer' => '{{SITENAME}} почта вастасынен хабер берген хызмет',
 'enotif_reset' => 'Джумле саифелерни бакъылгъан оларакъ ишаретле',
-'enotif_newpagetext' => 'Бу янъы бир саифедир.',
 'enotif_impersonal_salutation' => '{{SITENAME}} къулланыджысы',
-'changed' => 'денъиштирильди',
-'created' => 'яратылды',
-'enotif_subject' => '«{{SITENAME}}» $PAGETITLE саифеси $PAGEEDITOR къулланыджы тарафындан $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Сонъки зияретинъизден берли япылгъан денъишмелерни корьмек ичюн $1 бакъынъыз.',
 'enotif_anon_editor' => 'адсыз (аноним) къулланыджы $1',
 'enotif_body' => 'Сайгъылы $WATCHINGUSERNAME,
@@ -1477,6 +1469,8 @@ $UNWATCHURL
 
 Ярдым ве теклифлер ичюн:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'яратылды',
+'changed' => 'денъиштирильди',
 
 # Delete
 'deletepage' => 'Саифени ёкъ эт',
index 766e0ba..26c99c1 100644 (file)
@@ -234,8 +234,8 @@ $messages = array(
 'newwindow' => '(yañı bir pencerede açılır)',
 'cancel' => 'Lâğu',
 'moredotdotdot' => 'Daa...',
-'mypage' => 'Saifem',
-'mytalk' => 'Muzakere saifem',
+'mypage' => 'Saife',
+'mytalk' => 'Muzakere',
 'anontalk' => 'Bu IP-niñ muzakeresi',
 'navigation' => 'Saytta yol tapuv',
 'and' => '&#32;ve',
@@ -485,9 +485,6 @@ Sebep: ''$2''.",
 'logouttext' => "'''Oturımnı qapattıñız.'''
 
 Şimdi {{SITENAME}} saytını anonim olaraq qullanıp olasıñız, ya da yañıdan <span class='plainlinks'>[$1 oturım açıp]</span> olasıñız (ister aynı qullanıcı adınen, ister başqa bir qullanıcı adınen). Web brauzeriñiz keşini temizlegence bazı saifeler sanki alâ daa oturımıñız açıq eken kibi körünip olur.",
-'welcomecreation' => '== Hoş keldiñiz, $1! ==
-Esabıñız açıldı.
-Bu saytnıñ [[Special:Preferences|sazlamalarını]] şahsıñızğa köre deñiştirmege unutmañız.',
 'yourname' => 'Qullanıcı adıñız',
 'yourpassword' => 'Paroliñiz',
 'yourpasswordagain' => 'Parolni bir daa yazıñız:',
@@ -729,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.',
@@ -1022,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ı',
 
@@ -1373,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)',
 
@@ -1434,11 +1430,7 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]]
 
 'enotif_mailer' => '{{SITENAME}} poçta vastasınen haber bergen hızmet',
 'enotif_reset' => 'Cümle saifelerni baqılğan olaraq işaretle',
-'enotif_newpagetext' => 'Bu yañı bir saifedir.',
 'enotif_impersonal_salutation' => '{{SITENAME}} qullanıcısı',
-'changed' => 'deñiştirildi',
-'created' => 'yaratıldı',
-'enotif_subject' => '"{{SITENAME}}" $PAGETITLE saifesi $PAGEEDITOR qullanıcı tarafından $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Soñki ziyaretiñizden berli yapılğan deñişmelerni körmek içün $1 baqıñız.',
 'enotif_anon_editor' => 'adsız (anonim) qullanıcı $1',
 'enotif_body' => 'Sayğılı $WATCHINGUSERNAME,
@@ -1470,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',
index 5e9a1a0..62651d3 100644 (file)
@@ -23,6 +23,7 @@
  * @author Michawiki
  * @author Mormegil
  * @author Mr. Richard Bolla
+ * @author Quinn
  * @author Ragimiri
  * @author Reaperman
  * @author Spiffyk
@@ -492,8 +493,9 @@ $messages = array(
 'newwindow' => '(otevře se v novém okně)',
 'cancel' => 'Storno',
 'moredotdotdot' => 'Další…',
-'mypage' => 'Moje stránka',
-'mytalk' => 'Moje diskuse',
+'morenotlisted' => 'Další neuvedené…',
+'mypage' => 'Stránka',
+'mytalk' => 'Diskuse',
 'anontalk' => 'Diskuse k této IP adrese',
 'navigation' => 'Navigace',
 'and' => '&#32;a',
@@ -525,6 +527,7 @@ $messages = array(
 'namespaces' => 'Jmenné prostory',
 'variants' => 'Varianty',
 
+'navigation-heading' => 'Navigační menu',
 'errorpagetitle' => 'Chyba',
 'returnto' => 'Návrat na stránku „$1“.',
 'tagline' => 'Z {{grammar:2sg|{{SITENAME}}}}',
@@ -731,7 +734,7 @@ Dotaz: $2',
 'viewsource-title' => 'Zobrazení zdroje stránky $1',
 'actionthrottled' => 'Akce byla pozastavena',
 'actionthrottledtext' => 'Vzhledem k protispamovým opatřením nemůžete požadovanou akci provádět příliš častokrát v krátké době. Zkuste to znovu za několik minut.',
-'protectedpagetext' => 'Tato stránka byla zamčena, takže ji nelze editovat.',
+'protectedpagetext' => 'Tato stránka byla zamčena, aby se předešlo jejímu editování.',
 'viewsourcetext' => 'Můžete si prohlédnout a zkopírovat zdrojový kód této stránky:',
 'viewyourtext' => "Můžete si prohlédnout a zkopírovat zdrojový kód '''vašich změn''' této stránky:",
 'protectedinterface' => 'Tato stránka obsahuje text softwarového rozhraní a je zamčena kvůli prevenci zneužití.
@@ -765,8 +768,8 @@ Správce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3
 
 Můžete pokračovat v anonymním prohlížení a editaci {{grammar:2sg|{{SITENAME}}}}, nebo se můžete <span class='plainlinks'>[$1 znovu přihlásit]</span> jako stejný či jiný uživatel.
 Uvědomte si, že některé stránky se mohou i nadále zobrazovat, jako byste byli dosud přihlášeni, pokud nevymažete cache prohlížeče.",
-'welcomecreation' => '== Vítejte, $1! ==
-Váš účet byl úspěšně vytvořen.
+'welcomeuser' => 'Vítejte, uživateli $1!',
+'welcomecreation-msg' => 'Váš účet byl vytvořen.
 Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SITENAME}}}}]].',
 'yourname' => 'Uživatelské jméno:',
 'yourpassword' => 'Vaše heslo',
@@ -860,6 +863,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',
@@ -923,6 +927,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',
 
@@ -965,16 +970,16 @@ Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace z
 'summary-preview' => 'Náhled shrnutí:',
 'subject-preview' => 'Náhled předmětu/nadpisu:',
 'blockedtitle' => 'Uživatel zablokován',
-'blockedtext' => "Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''
+'blockedtext' => "'''Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''
 
-Zablokování provedl{{gender:$1||a}} $1.
+Zablokování provedl{{GENDER:$4||a}} $1.
 Udaným důvodem bylo ''$2''.
 
 * Začátek blokování: $8
 * Zablokování vyprší: $6
 * Blokovaný uživatel: $7
 
-Pokud chcete zablokování prodiskutovat, můžete kontaktovat {{gender:$1|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].
+Pokud chcete zablokování prodiskutovat, můžete kontaktovat {{GENDER:$4|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].
 Uvědomte si, že nemůžete použít nabídku „Poslat e-mail“, jestliže nemáte ve svém [[Special:Preferences|nastavení]] uvedenu platnou e-mailovou adresu nebo pokud vám byla tato možnost zakázána.
 Vaše IP adresa je $3 a&nbsp;identifikační číslo bloku je #$5; tyto údaje uvádějte ve všech dotazech na správce.",
 'autoblockedtext' => "Vaše IP adresa byla automaticky zablokována, protože ji používal jiný uživatel, kterého zablokoval $1.
@@ -1095,7 +1100,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.',
@@ -1491,9 +1495,9 @@ Tuto operaci nelze vrátit zpět.',
 'prefs-emailconfirm-label' => 'Ověření e-mailu:',
 'prefs-textboxsize' => 'Velikost editačního okna',
 'youremail' => 'Vaše e-mailová adresa:',
-'username' => 'Uživatelské jméno:',
-'uid' => 'Uživatelské ID:',
-'prefs-memberingroups' => 'Člen {{PLURAL:$1|skupiny|skupin}}:',
+'username' => '{{GENDER:$1|Uživatelské jméno}}:',
+'uid' => '{{GENDER:$1|Uživatelské}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Člen|Členka}} {{PLURAL:$1|skupiny|skupin}}:',
 'prefs-registration' => 'Čas registrace:',
 'yourrealname' => 'Vaše skutečné jméno:',
 'yourlanguage' => 'Jazyk rozhraní:',
@@ -1640,15 +1644,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:$2|změnil|změnila}} členství $3 ve skupinách z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách',
-'logentry-rights-autopromote' => '$1 {{GENDER:$2|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',
@@ -1882,6 +1884,7 @@ Kontaktuje prosím [[Special:ListUsers/sysop|správce]].',
 'backend-fail-notsame' => 'Odlišný soubor $1 už existuje.',
 'backend-fail-invalidpath' => '$1 je neplatná cesta k místu uložení.',
 'backend-fail-delete' => 'Soubor $1 nelze smazat.',
+'backend-fail-describe' => 'Nepodařilo se změnit metadata souboru „$1“.',
 'backend-fail-alreadyexists' => 'Soubor $1 už existuje.',
 'backend-fail-store' => 'Soubor $1 nelze uložit v $2.',
 'backend-fail-copy' => 'Soubor $1 nelze kopírovat do $2.',
@@ -2268,7 +2271,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.',
 
@@ -2287,10 +2290,6 @@ Podporované protokoly: <code>$1</code> (pokud není protokol uveden, použije s
 '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.
@@ -2357,7 +2356,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',
@@ -2385,19 +2385,23 @@ E-mailová adresa, kterou máte uvedenu v [[Special:Preferences|nastavení]], se
 
 'enotif_mailer' => 'Zasílač hlášení {{grammar:2sg|{{SITENAME}}}}',
 'enotif_reset' => 'Označit vše jako navštívené',
-'enotif_newpagetext' => 'Toto je nová stránka.',
 'enotif_impersonal_salutation' => 'Uživatel {{grammar:2sg|{{SITENAME}}}}',
-'changed' => 'upravil',
-'created' => 'vytvořil',
-'enotif_subject' => '$PAGEEDITOR upravil stránku $PAGETITLE na {{grammar:6sg|{{SITENAME}}}}.',
+'enotif_subject_deleted' => '$2 {{gender:$2|smazal|smazala}} stránku $1 na {{grammar:6sg|{{SITENAME}}}}',
+'enotif_subject_created' => '$2 {{gender:$2|založil|založila}} stránku $1 na {{grammar:6sg|{{SITENAME}}}}',
+'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' => '$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 .',
+'enotif_body_intro_changed' => 'V $PAGEEDITDATE {{gender:$2|změnil|změnila}} $2 na {{grammar:6sg|{{SITENAME}}}} stránku $1, vizte aktuální verzi na $3 .',
 'enotif_lastvisited' => 'Vizte $1 pro seznam všech změn od minulé návštěvy.',
 'enotif_lastdiff' => 'Tuto změnu vizte na $1 .',
 'enotif_anon_editor' => 'anonymní uživatel $1',
 'enotif_body' => 'Vážený uživateli $WATCHINGUSERNAME,
 
-Ve $PAGEEDITDATE $CHANGEDORCREATED $PAGEEDITOR stránku $PAGETITLE, vizte aktuální verzi na $PAGETITLE_URL .
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Shrnutí editace: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2405,8 +2409,7 @@ Uživatele, který změnu provedl, můžete kontaktovat:
 e-mailem: $PAGEEDITOR_EMAIL
 na wiki: $PAGEEDITOR_WIKI
 
-Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky.
-Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
+Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky. Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
 
        S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
 
@@ -2422,6 +2425,8 @@ $UNWATCHURL
 
 Rady a kontakt:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'vytvořil',
+'changed' => 'upravil',
 
 # Delete
 'deletepage' => 'Smazat stránku',
@@ -2487,6 +2492,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í:',
@@ -2501,9 +2508,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',
@@ -2597,9 +2604,9 @@ $1',
 'blanknamespace' => '(Hlavní)',
 
 # Contributions
-'contributions' => 'Příspěvky uživatele',
+'contributions' => 'Příspěvky {{GENDER:$1|uživatele|uživatelky}}',
 'contributions-title' => 'Příspěvky uživatele $1',
-'mycontris' => 'Mé příspěvky',
+'mycontris' => 'Příspěvky',
 'contribsub2' => '$1 ($2)',
 'nocontribs' => 'Nenalezeny žádné změny vyhovující kritériím.',
 'uctop' => ' (aktuální)',
@@ -2795,11 +2802,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í.
@@ -2970,6 +2978,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.',
@@ -3151,6 +3160,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',
@@ -3159,6 +3169,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ý',
@@ -3180,6 +3194,8 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'markedaspatrollederror' => 'Nelze označit za prověřené',
 'markedaspatrollederrortext' => 'Musíte zvolit revizi, která má být označena jako prověřená.',
 'markedaspatrollederror-noautopatrol' => 'Nemáte dovoleno označovat vlastní editace jako prověřené.',
+'markedaspatrollednotify' => 'Tato změna stránky $1 byla označena jako prověřená.',
+'markedaspatrollederrornotify' => 'Nepodařilo se označit jako prověřené.',
 
 # Patrol log
 'patrol-log-page' => 'Kniha prověřených editací',
@@ -3214,6 +3230,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.',
@@ -3243,8 +3260,11 @@ 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í}}',
+'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
 'bad_image_list' => 'Tato stránka má následující formát:
@@ -3945,8 +3965,7 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'specialpages' => 'Speciální stránky',
 'specialpages-note' => '----
 * Normální speciální stránky
-* <span class="mw-specialpagerestricted">Speciální stránky s&nbsp;vyhrazeným přístupem</span>
-* <span class="mw-specialpagecached">Speciální stránky z&nbsp;cache (mohou být zastaralé)</span>',
+* <span class="mw-specialpagerestricted">Speciální stránky s&nbsp;vyhrazeným přístupem</span>',
 'specialpages-group-maintenance' => 'Údržba',
 'specialpages-group-other' => 'Ostatní',
 'specialpages-group-login' => 'Přihlášení / vytvoření účtu',
@@ -4050,11 +4069,15 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'logentry-move-move_redir-noredirect' => '$1 přesunul stránku $3 na $4 místo přesměrování bez založení přesměrování',
 'logentry-patrol-patrol' => '$1 označil revizi $4 stránky $3 jako prověřenou',
 'logentry-patrol-patrol-auto' => '$1 automaticky označil revizi $4 stránky $3 jako prověřenou',
-'logentry-newusers-newusers' => '$1 založil uživatelský účet',
-'logentry-newusers-create' => '$1 založil uživatelský účet',
+'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-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].
index ec61e0c..ae8744a 100644 (file)
@@ -355,9 +355,6 @@ Przemëszlë dolmaczënié na [//translatewiki.net/wiki/Main_Page?setlang=csb tr
 'logouttext' => "'''Jes wëlogòwóny.'''
 Mòżesz robic dali na {{SITENAME}} jakno anonimòwi brëkòwnik abò sã <span class='plainlinks'>[$1 wlogòwac]</span> znowa jakno równy, a bò jinszi brëkòwnik.
 Bôczë, że do czasu wëczëszczenia pòdrãczny pamiãcë przezérnika, niejedné starnë bãdą wëzdrzëc jakbë të bëł wlogòwóny.",
-'welcomecreation' => ' == Witôj, $1! ==
-Twòjé kònto òstało prawie ùsôdzoné.
-Nie zbëjë zmienic swòjich nastôwów na [[Special:Preferences|{{SITENAME}}]].',
 'yourname' => 'Miono brëkòwnika',
 'yourpassword' => 'Twòja parola',
 'yourpasswordagain' => 'Pòwtórzë parolã',
@@ -713,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',
 
@@ -887,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)',
 
@@ -932,8 +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é',
-'changed' => 'zmienioné',
 'created' => 'zrobionô',
+'changed' => 'zmienioné',
 
 # Delete
 'deletepage' => 'Rëmôj starnã',
index dc29b25..12f7f34 100644 (file)
@@ -154,8 +154,8 @@ $messages = array(
 'article' => 'члѣнъ',
 'newwindow' => '(иномь окънѣ)',
 'moredotdotdot' => 'вѧщє ···',
-'mypage' => 'моꙗ страница',
-'mytalk' => 'моê\99\97 Ð±Ñ\94Ñ\81ѣда',
+'mypage' => 'страница',
+'mytalk' => 'бєсѣда',
 'navigation' => 'плаваниѥ',
 'and' => '&#32;и',
 
@@ -321,7 +321,7 @@ $messages = array(
 или [{{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 ⁖ нꙑнѣ нѣстъ ⁙
 прѣдъ сътворѥниѥмь или исправлѥниѥмь си страницѧ помꙑсли жє ащє исто тъ дѣиство ноуждьно ли',
 'clearyourcache' => "'''НАРОЧИТО''': По съхранѥнии можєши обити своѥго съмотрила съхранъ да видѣлъ би мѣнꙑ
@@ -393,7 +393,7 @@ $messages = array(
 
 # Preferences page
 'preferences' => 'строи',
-'mypreferences' => 'мои строи',
+'mypreferences' => 'строи',
 'changepassword' => 'таина словєсє иꙁмѣнѥниѥ',
 'prefs-rc' => 'послѣдьнѩ мѣнꙑ',
 'prefs-watchlist' => 'блюдєниꙗ',
@@ -445,6 +445,9 @@ $messages = array(
 'grouppage-sysop' => '{{ns:project}}:Съмотритєлє',
 'grouppage-bureaucrat' => '{{ns:project}}:Чинодатєлє',
 
+# Special:Log/newusers
+'newuserlogpage' => 'новъ мѣстъ сътворѥниꙗ їсторїꙗ',
+
 # User rights log
 'rightslog' => 'чинодатєльства їсторїꙗ',
 
@@ -489,6 +492,8 @@ $messages = array(
 'filedesc' => 'опьсаниѥ',
 'fileuploadsummary' => 'опьсаниѥ:',
 'uploadedimage' => '⁖ [[$1]] ⁖ положєнъ ѥстъ',
+'upload-source' => 'источьно дѣло',
+'sourcefilename' => 'источьна дѣла имꙗ :',
 'watchthisupload' => 'си дѣла блюдєниѥ',
 'upload-success-subj' => 'дѣло положєно ѥстъ',
 
@@ -594,15 +599,12 @@ $messages = array(
 # Special:ListUsers
 'listusers-submit' => 'виждь',
 
-# Special:Log/newusers
-'newuserlogpage' => 'новъ мѣстъ сътворѥниꙗ їсторїꙗ',
-
 # E-mail user
 'emailuser' => 'посъли єпїстолѫ',
 
 # Watchlist
 'watchlist' => 'моꙗ блюдєниꙗ',
-'mywatchlist' => 'моê\99\97 Ð±Ð»Ñ\8eдÑ\94ниê\99\97',
+'mywatchlist' => 'блюдєниꙗ',
 'addedwatchtext' => "страница ⁖ [[:$1]] ⁖ нꙑнѣ подъ твоимь [[Special:Watchlist|блюдєниѥмь]] ѥстъ ⁙
 всꙗ ѥѩ и ѥѩжє бєсѣдꙑ мѣнꙑ страницѧ ⁖ [[Special:Watchlist|моꙗ блюдєниꙗ]] ⁖ покаꙁанꙑ сѫтъ и  [[Special:RecentChanges|послѣдьнъ мѣнъ]] каталоꙃѣ '''чрьнꙑимъ''' сѧ авлꙗѭтъ",
 'removedwatchtext' => 'страница ⁖ [[:$1]] ⁖ нꙑнѣ твоѥго [[Special:Watchlist|блюдєниꙗ]] иꙁнєсєна ѥстъ',
@@ -653,7 +655,7 @@ $messages = array(
 # Contributions
 'contributions' => 'польꙃєватєлꙗ добродѣꙗниꙗ',
 'contributions-title' => 'польꙃєватєлꙗ ⁖ $1 ⁖ добродѣꙗниꙗ',
-'mycontris' => 'моê\99\97 Ð´Ð¾Ð±Ñ\80одѣê\99\97ниê\99\97',
+'mycontris' => 'добродѣꙗниꙗ',
 'contribsub2' => 'польꙃєватєлꙗ имѧ ⁖ $1 ⁖ ѥстъ ($2)',
 'uctop' => '(послѣдьнꙗ мѣна)',
 
@@ -688,6 +690,7 @@ $messages = array(
 'blocklink' => 'ꙁагради',
 'contribslink' => 'добродѣꙗниꙗ',
 'blocklogpage' => 'ꙁаграждєниꙗ їсторїꙗ',
+'blocklogentry' => 'ꙁаградихъ [[$1]] на врѣмѧ $2 $3',
 
 # Move page
 'move-page' => 'прѣимєнованиѥ ⁖ $1 ⁖',
@@ -732,6 +735,7 @@ $messages = array(
 'tooltip-t-specialpages' => 'вьсѣѩ нарочьнъ страницѧ каталогъ',
 'tooltip-t-print' => 'сѥѩ страницѧ пєчатьнъ обраꙁъ',
 'tooltip-ca-nstab-special' => 'си нарочьна страница ѥстъ · ѥѩжє иꙁмѣнꙗти нє можєши',
+'tooltip-minoredit' => 'оꙁначи ꙗко малоу мѣноу',
 'tooltip-watch' => 'си страницѧ блюдєниѥ',
 
 # Info page
@@ -796,9 +800,10 @@ $messages = array(
 'logentry-delete-delete' => '$1 поничьжихъ страницѫ ⁖ $3 ⁖',
 'logentry-move-move' => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖',
 'logentry-move-move-noredirect' => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ',
-'logentry-newusers-create' => '$1 сътворихъ польꙃєватєльско мѣсто',
+'logentry-newusers-create' => 'польꙃєватєльско мѣсто ⁖ $1 ⁖ сътворѥно ѥстъ',
 
 # Search suggestions
+'searchsuggest-search' => 'исканиѥ',
 'searchsuggest-containing' => 'сѥ дрьжащи···',
 
 # API errors
index 69ddcde..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' => 'Палăртман чухне версисене танлаштарма тулашри программăна усă курмалла',
@@ -381,9 +383,6 @@ $1',
 Сайт сире ятпа мар, IP-адрес урлă пĕлет.
 Эсир анонимла, е малтанхи евĕрлĕ çĕнĕ сеанс уçса, е  урăх ятпа ĕçлеме пултаратăр.
 Хăш-пĕр страницăсем эсир сайта кĕнĕ пек курăнма пултараççĕ, ăна тӳрлетмешкĕн браузер кэшне çĕнетĕр.',
-'welcomecreation' => '== Ырă сунса кĕтетпĕр, $1! ==
-Эсир пирĕн патăмăрта çырăнтăр.
-[[Special:Preferences|Сайт ĕнĕрлевĕсене хăвсамăра кирлĕ пек]] лартма ан манса кайăр.',
 'yourname' => 'Сирĕн ят',
 'yourpassword' => 'Вăрттăн сăмах:',
 'yourpasswordagain' => 'Вăрттăн сăмах тепре çырăр:',
@@ -519,7 +518,6 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 'templatesusedsection' => 'Ку пайра усă курнă шаблонсем:',
 'template-protected' => '(сыхланă)',
 'template-semiprotected' => '(пĕр пайне сыхланă)',
-'nocreatetitle' => 'Страницăсене хатĕрлессине чакарнă',
 
 # Parser/template warnings
 'expensive-parserfunction-category' => 'Кунта эсир чылай ресурс ыйтакан функцисемпе нумай ĕçлекен страницăсене куратăр',
@@ -662,7 +660,6 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 
 # User rights log
 'rightslogtext' => 'Ку пользовательсен прависене улăштарниссен журналě',
-'rightsnone' => '(çук)',
 
 # Recent changes
 'recentchanges' => 'Улшăнусем',
@@ -924,10 +921,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'unwatching' => 'Сăнав ят-йышĕнчен кăларса пăрахасси…',
 
 'enotif_reset' => 'Пур страницăсене те пăхнă пек палăрт',
-'enotif_newpagetext' => 'Ку çĕнĕ страница',
-'changed' => 'улăштарнă',
-'created' => 'хатĕрленĕ',
 'enotif_anon_editor' => '$1 анонимлă хутшăнакан',
+'created' => 'хатĕрленĕ',
+'changed' => 'улăштарнă',
 
 # Delete
 'deletepage' => 'Кăларса парахнă статьясем',
@@ -1217,4 +1213,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'specialpages-group-users' => 'Хутшăнакансем тата правасем',
 'specialpages-group-highuse' => 'Нумай усă куракан страницăсем',
 
+# New logging system
+'rightsnone' => '(çук)',
+
 );
index 4c3bd4d..eba65c0 100644 (file)
@@ -164,7 +164,7 @@ $messages = array(
 
 'underline-always' => 'Bob amser',
 'underline-never' => 'Byth',
-'underline-default' => 'Rhagosodyn y porwr',
+'underline-default' => "Rhagosodyn y porwr neu'r wedd",
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Arddull y ffont yn y blwch golygu:',
@@ -249,8 +249,9 @@ $messages = array(
 'newwindow' => '(yn agor mewn ffenest newydd)',
 'cancel' => 'Diddymu',
 'moredotdotdot' => 'Rhagor...',
-'mypage' => 'Fy nhudalen',
-'mytalk' => 'Fy sgwrs',
+'morenotlisted' => 'Ni restrir y lleill...',
+'mypage' => 'Tudalen defnyddiwr',
+'mytalk' => 'Sgwrs',
 'anontalk' => 'Sgwrs ar gyfer y cyfeiriad IP hwn',
 'navigation' => 'Panel llywio',
 'and' => '&#32;a/ac',
@@ -282,6 +283,7 @@ $messages = array(
 'namespaces' => 'Parthau',
 'variants' => 'Amrywiolion',
 
+'navigation-heading' => 'Llywio',
 'errorpagetitle' => 'Gwall',
 'returnto' => 'Dychwelyd at $1.',
 'tagline' => 'Oddi ar {{SITENAME}}',
@@ -392,8 +394,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}}",
@@ -490,11 +492,11 @@ 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.',
-'editinginterface' => "'''Dalier sylw:''' Rydych yn golygu tudalen sy'n rhan o destun rhyngwyneb y meddalwedd. Bydd newidiadau i'r dudalen hon yn effeithio ar y rhyngwyneb a ddefnyddir gan eraill. Os am gyfieithu'r neges, ystyriwch ddefnyddio [//translatewiki.net/wiki/Main_Page?setlang=cy translatewiki.net], sef y prosiect MediaWiki sy'n hyrwyddo creu wicïau amlieithog.",
+'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.",
+'editinginterface' => "'''Dalier sylw:''' Rydych yn golygu tudalen sy'n rhan o destun rhyngwyneb y meddalwedd. Bydd newidiadau i'r dudalen hon yn effeithio ar y rhyngwyneb a ddefnyddir ar y wici hwn yn unig. Os am gyfieithu'r neges rhagosodedig a ddefnyddir ar bob wici, ystyriwch ddefnyddio [//translatewiki.net/ translatewiki.net], sef y prosiect MediaWiki sy'n hyrwyddo creu rhyngwyneb amlieithog ar wicïau.",
 'sqlhidden' => '(cuddiwyd chwiliad SQL)',
 'cascadeprotected' => "Diogelwyd y dudalen hon rhag ei newid, oherwydd ei bod wedi ei chynnwys yn y {{PLURAL:$1|dudalen ganlynol|dudalen ganlynol|tudalennau canlynol|tudalennau canlynol|tudalennau canlynol|tudalennau canlynol}}, a {{PLURAL:$1|honno yn ei thro wedi ei|honno yn ei thro wedi ei|rheiny yn eu tro wedi eu|rheiny yn eu tro wedi eu|rheiny yn eu tro wedi eu|rheiny yn eu tro wedi eu}} diogelu, a'r dewisiad 'sgydol' ynghynn:
 $2",
@@ -522,9 +524,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.",
-'welcomecreation' => "==Croeso, $1!==
-Mae eich cyfrif wedi'i greu.
-Cofiwch osod y [[Special:Preferences|dewisiadau]] sydd fwyaf hwylus i chi ar {{SITENAME}}.",
+'welcomeuser' => 'Croeso, $1!',
 'yourname' => 'Eich enw defnyddiwr:',
 'yourpassword' => 'Eich cyfrinair:',
 'yourpasswordagain' => 'Ail-deipiwch y cyfrinair:',
@@ -612,6 +612,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',
@@ -669,6 +670,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',
 
@@ -788,7 +790,7 @@ Cofiwch bod y tudalennau .css a .js yn defnyddio llythrennau bach, e.e. {{ns:use
 'updated' => '(Diweddariad)',
 'note' => "'''Dalier sylw:'''",
 'previewnote' => "'''Cofiwch taw rhagolwg yw hwn.''' Nid yw eich gwaith wedi ei roi ar gadw eto!",
-'continue-editing' => 'Parhau i olygu',
+'continue-editing' => "Neidier i'r blwch golygu",
 'previewconflict' => "Mae'r rhagolwg hwn yn dangos y testun yn yr ardal golygu uchaf, fel ag y byddai'n ymddangos petaech yn rhoi'r dudalen ar gadw.",
 'session_fail_preview' => "'''Ymddiheurwn! Methwyd prosesu eich golygiad gan fod rhan o ddata'r sesiwn wedi'i golli. Ceisiwch eto.
 Os digwydd yr un peth eto, ceisiwch [[Special:UserLogout|allgofnodi]] ac yna mewngofnodi eto.'''",
@@ -843,7 +845,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',
@@ -868,6 +869,12 @@ Ymddengys iddi gael ei dileu.",
 Mae ar gael yn barod.',
 'defaultmessagetext' => 'Y testun rhagosodedig',
 
+# Content models
+'content-model-wikitext' => 'cystrawen wici',
+'content-model-text' => 'testun plaen',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Rhybudd:''' Mae gormod o alwadau ar ffwythiannau dosrannu sy'n dreth ar adnoddau yn y dudalen hon.
 
@@ -1076,6 +1083,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 dyn wedi dilyn hen gyswllt gwahaniaeth i dudalen sydd erbyn hyn wedi cael ei dileu.
+Mae manylion pellach i'w cael yn [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lòg y dileuon].",
 
 # Search results
 'searchresults' => "Canlyniadau'r chwiliad",
@@ -1152,7 +1163,7 @@ Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
 
 # Preferences page
 'preferences' => 'Dewisiadau',
-'mypreferences' => 'Fy newisiadau',
+'mypreferences' => 'Dewisiadau',
 'prefs-edits' => 'Nifer y golygiadau:',
 'prefsnologin' => 'Nid ydych wedi mewngofnodi',
 'prefsnologintext' => 'Rhaid i chi <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} fewngofnodi]</span> er mwyn gosod eich dewisiadau defnyddiwr.',
@@ -1178,7 +1189,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',
@@ -1228,9 +1239,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',
@@ -1379,12 +1390,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',
@@ -1628,7 +1640,7 @@ Os yw'r broblem yn parhau, cysylltwch â [[Special:ListUsers/sysop|gweinyddwr]].
 'backend-fail-internal' => 'Cafwyd gwall anhysbys yn y storfa tu ôl i\'r llenni yn "$1".',
 'backend-fail-contenttype' => 'Methwyd a dirnad pa fath o gynnwys sydd yn y ffeil y ceisir ei storio yn "$1".',
 'backend-fail-batchsize' => "Rhoddwyd llwyth o {{PLURAL:$1|$1 o weithrediadau}} ffeil i'w gwneud i'r storfa; ni all nifer y {{PLURAL:$2|gweithrediadau}} fod yn fwy na $2.",
-'backend-fail-usable' => "Ni ellid ysgrifennu'r ffeil $1 oherwydd nad oedd caniatad digonol ynteu bod cyfeiriaduron neu flychau yn eisiau.",
+'backend-fail-usable' => 'Ni ellid darllen nag ysgrifennu\'r ffeil "$1" oherwydd nad oedd caniatad digonol ynteu bod cyfeiriaduron neu flychau yn eisiau.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Methwyd cysylltu â lòg y gweithrediadau ar y storfa "$1".',
@@ -1763,7 +1775,7 @@ Mae modd golygu'r disgrifiad ohoni ar ei [$2 thudalen disgrifio] fan honno.",
 'shared-repo-from' => 'oddi ar $1',
 'shared-repo' => 'storfa cyfrannol',
 'shared-repo-name-wikimediacommons' => 'Comin Wikimedia',
-'upload-disallowed-here' => "Yn anffodus ni allwch drosysgrifo'r ddelwedd hon.",
+'upload-disallowed-here' => "Ni allwch drosysgrifo'r ffeil hon.",
 
 # File reversion
 'filerevert' => 'Gwrthdroi $1',
@@ -2000,7 +2012,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> (peidiwch ag ychwanegu\'r rhain wrth ysgrifennu\'r ymholiad).',
+{{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.",
 
@@ -2019,10 +2031,6 @@ Protocoliau sy\'n cael eu cynnal: <code>$1</code> (peidiwch ag ychwanegu\'r rhai
 '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]].",
@@ -2050,8 +2058,8 @@ er mwyn medru anfon e-bost at ddefnyddwyr eraill.',
 'emailuser-title-target' => "Ebostio'r {{GENDER:$1|defnyddiwr hwn}}",
 'emailuser-title-notarget' => 'Anfon e-bost at ddefnyddiwr',
 'emailpage' => 'Anfon e-bost at ddefnyddiwr',
-'emailpagetext' => "Os yw'r cyfeiriad e-bost sydd yn newisiadau'r defnyddiwr hwn yn un dilys, gellir anfon neges ato o'i ysgrifennu ar y ffurflen isod.
-Bydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau chithau]] yn ymddangos ym maes \"Oddi wrth\" yr e-bost, fel bod y defnyddiwr arall yn gallu anfon ateb atoch.",
+'emailpagetext' => 'Os yw\'r cyfeiriad e-bost sydd yn newisiadau\'r {{GENDER:$1|defnyddiwr}} hwn yn un dilys, gellir anfon neges ato o\'i ysgrifennu ar y ffurflen isod.
+Bydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau]] yn ymddangos ym maes "Oddi wrth" yr e-bost, fel bod y defnyddiwr arall yn gallu anfon ateb uniongyrchol atoch.',
 'usermailererror' => 'Dychwelwyd gwall gan y rhaglen e-bost:',
 'defemailsubject' => '{{SITENAME}} yn anfon e-bost oddi wrth y defnyddiwr "$1"',
 'usermaildisabled' => 'Dim modd anfon e-bost at ddefnyddwyr',
@@ -2082,17 +2090,15 @@ Bydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau chith
 
 # Watchlist
 'watchlist' => 'Fy rhestr wylio',
-'mywatchlist' => 'Fy rhestr wylio',
+'mywatchlist' => 'Rhestr wylio',
 'watchlistfor2' => 'Yn ôl gofyn $1 $2',
 'nowatchlist' => "Mae eich rhestr wylio'n wag.",
 'watchlistanontext' => "Rhaid $1 er mwyn gweld neu ddiwygio'ch rhestr wylio.",
 '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',
@@ -2120,19 +2126,19 @@ 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_newpagetext' => 'Mae hon yn dudalen newydd.',
 'enotif_impersonal_salutation' => 'at ddefnyddiwr {{SITENAME}}',
-'changed' => 'Newidiwyd',
-'created' => 'crëwyd',
-'enotif_subject' => '$CHANGEDORCREATED y dudalen \'$PAGETITLE\' ar {{SITENAME}} gan $PAGEEDITOR',
+'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 +2146,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 +2162,8 @@ $UNWATCHURL
 
 Am fwy o gymorth ac adborth:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'crëwyd',
+'changed' => 'Newidiwyd',
 
 # Delete
 'deletepage' => 'Dileer y dudalen',
@@ -2194,8 +2202,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}}]]);
@@ -2306,8 +2314,8 @@ Mae'n bosibl bod nam ar y cyswllt, neu fod y diwygiad eisoes wedi'i adfer neu we
 'undeletedrevisions' => 'wedi adfer $1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}',
 'undeletedrevisions-files' => 'Adferwyd $1 {{PLURAL:$1|fersiwn|fersiwn|fersiwn|fersiwn|fersiwn|fersiwn}} a $2 {{PLURAL:$2|ffeil|ffeil|ffeil|ffeil|ffeil|ffeil}}',
 'undeletedfiles' => 'Adferwyd $1 {{PLURAL:$1|ffeil|ffeil|ffeil|ffeil|ffeil|ffeil}}',
-'cannotundelete' => "Mae'r cais i ddad-ddileu wedi'i fethu;
-efallai bod rhywun arall wedi dad-ddileu'r dudalen yn barod.",
+'cannotundelete' => "Mae'r cais i ddad-ddileu wedi methu:
+$1",
 'undeletedpage' => "'''Adferwyd $1'''
 
 Ceir cofnod o'r tudalennau a ddilëwyd neu a adferwyd yn ddiweddar ar y [[Special:Log/delete|lòg ddileuon]].",
@@ -2339,9 +2347,9 @@ $1',
 'blanknamespace' => '(Prif)',
 
 # Contributions
-'contributions' => "Cyfraniadau'r defnyddiwr",
+'contributions' => "{{GENDER:$1|Cyfraniadau'r defnyddiwr}}",
 'contributions-title' => "Cyfraniadau'r defnyddiwr am $1",
-'mycontris' => 'Fy nghyfraniadau',
+'mycontris' => 'Cyfraniadau',
 'contribsub2' => 'Dros $1 ($2)',
 'nocontribs' => "Heb ddod o hyd i newidiadau gyda'r meini prawf hyn.",
 'uctop' => '(cyfredol)',
@@ -2382,7 +2390,7 @@ Mae'r cofnod diweddaraf yn y lòg blocio i'w weld isod:",
 'whatlinkshere-hideredirs' => '$1 ailgyfeiriadau',
 'whatlinkshere-hidetrans' => '$1 cynhwysion',
 'whatlinkshere-hidelinks' => '$1 cysylltau',
-'whatlinkshere-hideimages' => '$1 cysylltau delweddau',
+'whatlinkshere-hideimages' => '$1 cysylltau ffeiliau',
 'whatlinkshere-filters' => 'Hidlau',
 
 # Block/unblock
@@ -2691,6 +2699,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 +2735,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 +2853,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',
@@ -2851,19 +2862,32 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 'pageinfo-default-sort' => 'Allwedd trefnu diofyn',
 'pageinfo-length' => 'Hyd y dudalen (beitiau)',
 'pageinfo-article-id' => 'ID y dudalen',
+'pageinfo-language' => 'Iaith cynnwys y dudalen',
 'pageinfo-robot-policy' => 'Statws i beiriannau chwilio',
+'pageinfo-robot-index' => 'Gellir ei rhestri gan beiriannau chwilio',
+'pageinfo-robot-noindex' => 'Ni ellir ei rhestri 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',
 'pageinfo-lasttime' => 'Dyddiad y golygiad diweddaraf',
 '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',
@@ -2912,6 +2936,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.',
@@ -2921,6 +2946,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',
@@ -2942,7 +2969,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' => 'gynnau',
 
 # Bad image list
 'bad_image_list' => "Dyma'r fformat:
@@ -3676,11 +3706,12 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'logentry-move-move_redir-noredirect' => 'Symudwyd y dudalen $3 i $4 gan $1 dros ddolen ailgyfeirio heb adael dolen ailgyfeirio newydd',
 'logentry-patrol-patrol' => "Rhoddodd $1 nod ar ddiwygiad $4 o'r dudalen $3 yn dynodi ei fod wedi derbyn ymweliad patrôl",
 'logentry-patrol-patrol-auto' => "Rhoddodd $1 nod yn awtomatig ar ddiwygiad $4 o'r dudalen $3 yn dynodi ei fod wedi derbyn ymweliad patrôl",
-'logentry-newusers-newusers' => 'Crëodd $1 gyfrif defnyddiwr',
-'logentry-newusers-create' => 'Crëodd $1 gyfrif defnyddiwr',
-'logentry-newusers-create2' => 'Crëodd $1 y cyfrif defnyddiwr $3',
+'logentry-newusers-newusers' => 'Dechreuwyd y cyfrif defnyddiwr $1',
+'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.',
@@ -3698,6 +3729,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'feedback-bugnew' => "Edrychais ar y bygiau hysbys. Mae byg newydd gennyf i'w adrodd",
 
 # Search suggestions
+'searchsuggest-search' => 'Chwilio',
 'searchsuggest-containing' => 'yn cynnwys...',
 
 # API errors
index 727d017..745a4d9 100644 (file)
@@ -236,7 +236,7 @@ $messages = array(
 
 'underline-always' => 'Altid',
 'underline-never' => 'Aldrig',
-'underline-default' => 'Brug browserens indstilling',
+'underline-default' => 'Brug browserens indstilling eller standarden for det valgte udseende',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Skriftstil ved redigering:',
@@ -321,8 +321,8 @@ $messages = array(
 'newwindow' => '(åbner i et nyt vindue)',
 'cancel' => 'Afbryd',
 'moredotdotdot' => 'Mere...',
-'mypage' => 'Min side',
-'mytalk' => 'Min diskussion',
+'mypage' => 'Side',
+'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionsside for denne IP-adresse',
 'navigation' => 'Navigation',
 'and' => '&#32;og',
@@ -354,6 +354,7 @@ $messages = array(
 'namespaces' => 'Navnerum',
 'variants' => 'Varianter',
 
+'navigation-heading' => 'Navigationsmenu',
 'errorpagetitle' => 'Fejl',
 'returnto' => 'Tilbage til $1.',
 'tagline' => 'Fra {{SITENAME}}',
@@ -561,7 +562,7 @@ Forespørgsel: $2',
 'viewsource-title' => 'Se kildekoden til $1',
 'actionthrottled' => 'Begrænsning af handling',
 'actionthrottledtext' => 'For at modvirke spam, er det ikke muligt at udføre denne handling mange gange på kort tid. Du har overskredet grænsen, hvorfor handlingen er blevet afbrudt. Vær venlig at forsøge igen om et par minutter.',
-'protectedpagetext' => 'Denne side er skrivebeskyttet.',
+'protectedpagetext' => 'Denne side er blevet beskyttet, for at forhindre redigering eller andre handlinger.',
 'viewsourcetext' => 'Du kan se og kopiere kildekoden til siden:',
 'viewyourtext' => "Du kan se og kopiere kildekoden for '''dine redigeringer''' til denne side:",
 'protectedinterface' => 'Denne side indeholder teksten i brugergrænsefladen til softwaren på denne wiki, og er beskyttet for at forhindre misbrug.
@@ -594,9 +595,9 @@ Administratoren, som skrivebeskyttede den, gav følgende begrundelse: "$3".',
 
 Du kan fortsætte med at bruge {{SITENAME}} anonymt, eller du kan <span class='plainlinks'>[$1 logge på igen]</span> som den samme eller en anden bruger.
 Bemærk, at nogle sider stadigvæk kan vises som om du var logget på, indtil du tømmer din browsers cache.",
-'welcomecreation' => '== Velkommen, $1! ==
-
-Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Preferences|{{SITENAME}}-indstillinger]].',
+'welcomeuser' => 'Velkommen, $1!',
+'welcomecreation-msg' => 'Din konto er blevet oprettet.
+Glem ikke at ændre dine [[Special:Preferences|{{SITENAME}} indstillinger]].',
 'yourname' => 'Dit brugernavn:',
 'yourpassword' => 'Din adgangskode:',
 'yourpasswordagain' => 'Gentag adgangskode',
@@ -748,6 +749,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',
 
@@ -799,7 +801,7 @@ Blokeringen udløber: $6
 Blokeringen er rettet mod: $7
 
 Du kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.
-Du kan ikke bruge funktionen 'e-mail til denne bruger' medmindre der er angivet en gyldig email-adresse i dine
+Du kan ikke bruge funktionen 'e-mail til denne bruger' medmindre der er angivet en gyldig e-mailadresse i dine
 [[Special:Preferences|kontoindstillinger]], og du ikke er blevet blokeret fra at bruge den.
 
 Din nuværende IP-adresse er $3, og blokerings-id er #$5.
@@ -930,7 +932,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',
@@ -1319,10 +1320,10 @@ Her er en tilfældig genereret værdi som du kan bruge: $1',
 Det kan ikke gøres om.',
 'prefs-emailconfirm-label' => 'Bekræftelse af e-mail:',
 'prefs-textboxsize' => 'Størrelse på redigeringsvindue',
-'youremail' => 'Din e-mail-adresse:',
-'username' => 'Brugernavn:',
-'uid' => 'Brugernummer:',
-'prefs-memberingroups' => 'Medlem af {{PLURAL:$1|gruppen|grupperne}}:',
+'youremail' => 'Din e-mailadresse:',
+'username' => '{{GENDER:$1|Brugernavn}}:',
+'uid' => '{{GENDER:$1|Brugernummer}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Medlem}} af {{PLURAL:$1|gruppen|grupperne}}:',
 'prefs-registration' => 'Registreringstidspunkt:',
 'yourrealname' => 'Dit rigtige navn:',
 'yourlanguage' => 'Sprog:',
@@ -1470,12 +1471,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',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'se denne side',
@@ -1669,6 +1671,20 @@ Det er ikke tilladt at uploade Javafiler, da det kan forårsage, at sikkerhedsre
 'watchthisupload' => 'Overvåg filen',
 'filewasdeleted' => 'En fil med dette navn er tidligere uploadet og i mellemtiden slettet igen. Kontroller først indførslen i $1, før du gemmer filen.',
 'filename-bad-prefix' => "Navnet på filen du er ved at lægge op begynder med '''\"\$1\"'''. Dette er et ikkebeskrivende navn, der typisk er skabt automatisk af et digitalkamera. Vær venlig at vælge et mere beskrivende navn på dit billede.",
+'filename-prefix-blacklist' => ' #<!-- efterlad denne linje præcis som den er --> <pre>
+# Syntax is as follows:
+#   * Alt fra at "#" tegn til slutningen af linjen er en kommentar
+#   * Hver ikke tom linje er et præfiks for typiske filnavne automatisk tildelt af digitalkameraer
+CIMG # Casio
+DSC_ # Nikon
+DSCF # Fuji
+DSCN # Nikon
+DUW # nogen mobil telefoner
+IMG # generic
+JD # Jenoptik
+MGP # Pentax
+PICT # div.
+ #</pre> <!-- efterlad denne linje præcis som den er -->',
 'upload-success-subj' => 'Oplægningen er gennemført',
 'upload-success-msg' => 'Din upload fra [$2] lykkedes. Den er tilgængelig her: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'Upload problem',
@@ -1698,6 +1714,7 @@ Informer venligst en [[Special:ListUsers/sysop|systemadministrator]].',
 'backend-fail-notsame' => 'En ikke-identisk fil eksisterer allerede som $1.',
 'backend-fail-invalidpath' => '$1 er ikke en gyldig lagringssti.',
 'backend-fail-delete' => 'Kunne ikke slette filen $1.',
+'backend-fail-describe' => 'Kunne ikke ændre metadata for filen "$1".',
 'backend-fail-alreadyexists' => 'Filen $1 findes allerede.',
 'backend-fail-store' => 'Kunne ikke gemme filen $1 i $2.',
 'backend-fail-copy' => 'Kunne ikke kopiere filen $1 til $2.',
@@ -2084,7 +2101,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> (tilføj ikke protokollerne til din søgning).',
+{{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.',
 
@@ -2103,10 +2120,6 @@ Understøttede protokoller: <code>$1</code> (tilføj ikke protokollerne til din
 '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.
@@ -2166,14 +2179,15 @@ Den e-mail-adresse, du har angivet i [[Special:Preferences|dine indstillinger]],
 
 # Watchlist
 'watchlist' => 'Overvågningsliste',
-'mywatchlist' => 'Min overvågningsliste',
+'mywatchlist' => 'Overvågningsliste',
 'watchlistfor2' => 'For $1 $2',
 'nowatchlist' => 'Du har ingenting i din overvågningsliste.',
 'watchlistanontext' => 'Du skal $1, for at se din overvågningsliste eller ændre indholdet af den.',
 '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',
@@ -2201,19 +2215,23 @@ Den e-mail-adresse, du har angivet i [[Special:Preferences|dine indstillinger]],
 
 'enotif_mailer' => '{{SITENAME}} informationsmail',
 'enotif_reset' => 'Marker alle sider som besøgt',
-'enotif_newpagetext' => 'Dette er en ny side.',
 'enotif_impersonal_salutation' => '{{SITENAME}} bruger',
-'changed' => 'ændret',
-'created' => 'oprettet',
-'enotif_subject' => '{{SITENAME}}-siden $PAGETITLE er blevet ændret af $PAGEEDITOR',
+'enotif_subject_deleted' => '{{SITENAME}} side $1 er blevet slettet af {{gender:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}} side $1 er blevet oprettet af {{gender:$2|$2}}',
+'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 $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.',
+'enotif_body_intro_changed' => '{{SITENAME}} siden $1 er blevet ændret den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle version.',
 'enotif_lastvisited' => 'Se $1 for alle ændringer siden dit sidste besøg.',
 'enotif_lastdiff' => 'Se $1 for at vise denne ændring.',
 'enotif_anon_editor' => 'anonym bruger $1',
-'enotif_body' => 'Kære $WATCHINGUSERNAME,
+'enotif_body' => 'Kære $WATCHINGUSERNAME
 
-{{SITENAME}}-siden $PAGETITLE er blevet $CHANGEDORCREATED den $PAGEEDITDATE af $PAGEEDITOR, se $PAGETITLE_URL for den aktuelle version.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Bidragyderens opsummering: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2221,13 +2239,12 @@ Kontakt bidragyderen:
 e-mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Du vil ikke modtage flere beskeder om yderligere ændringer medmindre du besøger denne side.
-På din overvågningsliste kan du også nulstille alle markeringer på de sider, du overvåger.
+Du vil ikke modtage flere beskeder om yderligere ændringer medmindre du besøger denne side. På din overvågningsliste kan du også nulstille alle markeringer for de sider, du overvåger.
 
              Med venlig hilsen {{SITENAME}}s informationssystem
 
 --
-For at ændre dine indstillinger for e-mail-notifikationer, besøg
+For at ændre dine indstillinger for e-mail meddelelser, besøg
 {{canonicalurl:{{#special:Preferences}}}}
 
 For at ændre indstillingerne for din overvågningsliste, besøg
@@ -2238,6 +2255,8 @@ $UNWATCHURL
 
 Tilbagemelding og yderligere hjælp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oprettet',
+'changed' => 'ændret',
 
 # Delete
 'deletepage' => 'Slet side',
@@ -2305,6 +2324,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',
@@ -2418,9 +2439,9 @@ $1',
 'blanknamespace' => '(Hoved)',
 
 # Contributions
-'contributions' => 'Brugerbidrag',
+'contributions' => '{{GENDER:$1|Brugerbidrag}}',
 'contributions-title' => 'Brugerbidrag for $1',
-'mycontris' => 'Mine bidrag',
+'mycontris' => 'Bidrag',
 'contribsub2' => 'For $1 ($2)',
 'nocontribs' => 'Ingen ændringer er fundet som opfylder disse kriterier.',
 'uctop' => ' (seneste)',
@@ -2460,7 +2481,7 @@ Den seneste post i blokeringsloggen vises nedenfor:',
 'whatlinkshere-hideredirs' => '$1 omdirigeringer',
 'whatlinkshere-hidetrans' => '$1 inkluderinger',
 'whatlinkshere-hidelinks' => '$1 henvisninger',
-'whatlinkshere-hideimages' => '$1 fillinks',
+'whatlinkshere-hideimages' => '$1 filhenvisninger',
 'whatlinkshere-filters' => 'Filtre',
 
 # Block/unblock
@@ -2545,7 +2566,7 @@ Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'unblocklink' => 'ophæv blokering',
 'change-blocklink' => 'ændr blokering',
 'contribslink' => 'bidrag',
-'emaillink' => 'send email',
+'emaillink' => 'send e-mail',
 'autoblocker' => 'Du er automatisk blokeret, fordi du deler IP-adresse med "[[User:$1|$1]]".
 Begrundelse: "$2".',
 'blocklogpage' => 'Blokeringslog',
@@ -2785,6 +2806,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.',
@@ -2950,6 +2972,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',
@@ -2971,6 +2997,8 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 'markedaspatrollederror' => 'Markering som „kontrolleret“ ikke mulig.',
 'markedaspatrollederrortext' => 'Du skal vælge en sideændring.',
 'markedaspatrollederror-noautopatrol' => 'Du må ikke markere dine egne ændringer som kontrolleret.',
+'markedaspatrollednotify' => 'Denne ændring af $1 er blevet markeret som patruljeret.',
+'markedaspatrollederrornotify' => 'Markering som patruljeret mislykkedes.',
 
 # Patrol log
 'patrol-log-page' => 'Kontrollog',
@@ -3004,6 +3032,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.',
@@ -3034,7 +3063,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Formatet er:
@@ -3773,11 +3805,15 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 'logentry-move-move_redir-noredirect' => '$1 flyttede siden $3 til $4 hen over en omdirigering og uden at efterlade en omdirigering',
 'logentry-patrol-patrol' => '$1 markerede version $4 af siden $3 som patruljeret',
 'logentry-patrol-patrol-auto' => '$1 markerede automatisk version $4 af siden $3 som patruljeret',
-'logentry-newusers-newusers' => '$1 oprettede en brugerkonto',
-'logentry-newusers-create' => '$1 oprettede en brugerkonto',
-'logentry-newusers-create2' => '$1 oprettede brugerkontoen $3',
+'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-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].
index 50e7b28..23e4869 100644 (file)
@@ -61,6 +61,7 @@
  * @author Tischbeinahe
  * @author UV
  * @author Umherirrender
+ * @author Vogone
  * @author W (aka Wuzur)
  * @author Wikifan
  * @author Wikinaut
@@ -413,7 +414,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden',
 'tog-newpageshidepatrolled' => 'Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden',
 'tog-extendwatchlist' => 'Erweiterte Beobachtungsliste zur Anzeige aller Änderungen',
-'tog-usenewrc' => 'Seitenbezogene Gruppierung bei den „Letzten Änderungen“ und auf der Beobachtungsliste (benötigt JavaScript)',
+'tog-usenewrc' => 'Seitenbezogene Gruppierung in den „Letzten Änderungen“ und auf der Beobachtungsliste (benötigt JavaScript)',
 'tog-numberheadings' => 'Überschriften automatisch nummerieren',
 'tog-showtoolbar' => 'Bearbeiten-Werkzeugleiste anzeigen (benötigt JavaScript)',
 'tog-editondblclick' => 'Seiten mit Doppelklick bearbeiten (benötigt JavaScript)',
@@ -540,8 +541,9 @@ $messages = array(
 'newwindow' => '(wird in einem neuen Fenster geöffnet)',
 'cancel' => 'Abbrechen',
 'moredotdotdot' => 'Mehr …',
+'morenotlisted' => 'Weitere, nicht aufgeführte …',
 'mypage' => 'Eigene Seite',
-'mytalk' => 'Eigene Diskussion',
+'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionsseite dieser IP',
 'navigation' => 'Navigation',
 'and' => '&#32;und',
@@ -573,6 +575,7 @@ $messages = array(
 'namespaces' => 'Namensräume',
 'variants' => 'Varianten',
 
+'navigation-heading' => 'Navigationsmenü',
 'errorpagetitle' => 'Fehler',
 'returnto' => 'Zurück zur Seite $1.',
 'tagline' => 'Aus {{SITENAME}}',
@@ -781,7 +784,7 @@ Abfrage: $2',
 '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.',
-'protectedpagetext' => 'Diese Seite wurde geschützt, um Bearbeitungen zu verhindern.',
+'protectedpagetext' => 'Diese Seite wurde geschützt, um Bearbeitungen sowie andere Aktionen zu verhindern.',
 'viewsourcetext' => 'Du kannst den Quelltext dieser Seite betrachten und kopieren:',
 'viewyourtext' => "Du kannst den Quelltext '''deiner Bearbeitung''' dieser Seite betrachten und kopieren:",
 'protectedinterface' => 'Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.
@@ -816,10 +819,9 @@ Der Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3
 
 Du kannst {{SITENAME}} jetzt anonym weiternutzen oder dich erneut unter dem selben oder einem anderen Benutzernamen <span class='plainlinks'>[$1 anmelden]</span>.
 Beachte, dass einige Seiten noch anzeigen können, dass du angemeldet bist, solange du nicht deinen Browsercache geleert hast.",
-'welcomecreation' => '== Willkommen, $1! ==
-
-Dein Benutzerkonto wurde soeben eingerichtet.
-Vergiss nicht, deine [[Special:Preferences|Einstellungen]] für dieses Wiki anzupassen.',
+'welcomeuser' => 'Willkommen, $1!',
+'welcomecreation-msg' => 'Dein Benutzerkonto wurde erstellt.
+Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.',
 'yourname' => 'Benutzername:',
 'yourpassword' => 'Passwort:',
 'yourpasswordagain' => 'Passwort wiederholen:',
@@ -912,6 +914,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 +971,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 +1150,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',
@@ -1537,9 +1540,9 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'prefs-emailconfirm-label' => 'E-Mail-Bestätigung:',
 'prefs-textboxsize' => 'Größe des Bearbeitungsfensters',
 'youremail' => 'E-Mail-Adresse:',
-'username' => 'Benutzername:',
-'uid' => 'Benutzerkennung:',
-'prefs-memberingroups' => 'Mitglied der {{PLURAL:$1|Benutzergruppe|Benutzergruppen}}:',
+'username' => '{{GENDER:$1|Benutzername}}:',
+'uid' => '{{GENDER:$1|Benutzerkennung}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Mitglied}} der {{PLURAL:$1|Benutzergruppe|Benutzergruppen}}:',
 'prefs-memberingroups-type' => '$2',
 'prefs-registration' => 'Anmeldezeitpunkt:',
 'prefs-registration-date-time' => '$2, $3 Uhr',
@@ -1689,15 +1692,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',
@@ -1938,6 +1939,7 @@ Wenn das Problem weiter besteht, informiere einen [[Special:ListUsers/sysop|Syst
 'backend-fail-notsame' => 'Es ist bereits eine Datei $1 vorhanden, die nicht identisch ist.',
 'backend-fail-invalidpath' => '$1 ist kein gültiger Pfad zum Speichern.',
 'backend-fail-delete' => 'Die Datei $1 konnte nicht gelöscht werden.',
+'backend-fail-describe' => 'Die Metadaten für die Datei „$1“ konnten nicht geändert werden.',
 'backend-fail-alreadyexists' => 'Die Seite $1 ist bereits vorhanden',
 'backend-fail-store' => 'Die Datei $1 konnte nicht unter $2 gespeichert werden.',
 'backend-fail-copy' => 'Die Datei $1 konnte nicht nach $2 kopiert werden.',
@@ -1982,7 +1984,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.',
@@ -2320,7 +2322,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.',
 
@@ -2339,10 +2341,6 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].',
 '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.
@@ -2410,7 +2408,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',
@@ -2438,21 +2436,23 @@ Spätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werde
 
 'enotif_mailer' => '{{SITENAME}}-E-Mail-Benachrichtigungsdienst',
 'enotif_reset' => 'Alle Seiten als besucht markieren',
-'enotif_newpagetext' => 'Das ist eine neue Seite.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-Benutzer',
-'changed' => 'geändert',
-'created' => 'erstellt',
-'enotif_subject' => '[{{SITENAME}}] Die Seite „$PAGETITLE“ wurde von $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_subject_deleted' => '{{SITENAME}}-Seite $1 wurde von {{GENDER:$2|$2}} gelöscht',
+'enotif_subject_created' => '{{SITENAME}}-Seite $1 wurde von {{GENDER:$2|$2}} erstellt',
+'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.',
+'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.',
+'enotif_body_intro_changed' => 'Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} geändert. Siehe $3 für deren aktuelle Version.',
 'enotif_lastvisited' => 'Alle Änderungen auf einen Blick: $1',
 'enotif_lastdiff' => 'Siehe $1 nach dieser Änderung.',
 'enotif_anon_editor' => 'Anonymer Benutzer $1',
 'enotif_body' => 'Hallo $WATCHINGUSERNAME,
 
-die {{SITENAME}}-Seite „$PAGETITLE“ wurde von $PAGEEDITOR am $PAGEEDITDATE um $PAGEEDITTIME Uhr $CHANGEDORCREATED.
-
-Aktuelle Version: $PAGETITLE_URL
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Zusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2472,6 +2472,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',
@@ -2537,6 +2539,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:',
@@ -2549,9 +2553,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',
@@ -2649,9 +2653,9 @@ $1',
 'blanknamespace' => '(Seiten)',
 
 # Contributions
-'contributions' => 'Benutzerbeiträge',
+'contributions' => '{{GENDER:$1|Benutzerbeiträge}}',
 'contributions-title' => 'Benutzerbeiträge von „$1“',
-'mycontris' => 'Eigene Beiträge',
+'mycontris' => 'Beiträge',
 'contribsub2' => 'Von $1 ($2)',
 'nocontribs' => 'Es wurden keine Benutzerbeiträge mit diesen Kriterien gefunden.',
 'uctop' => '(aktuell)',
@@ -2741,7 +2745,7 @@ Zur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperr
 'ipb-unblock' => 'IP-Adresse/Benutzer freigeben',
 'ipb-blocklist' => 'Alle aktuellen Sperren anzeigen',
 'ipb-blocklist-contribs' => 'Benutzerbeiträge von „$1“',
-'unblockip' => 'IP-Adresse freigeben',
+'unblockip' => 'Benutzer freigeben',
 'unblockiptext' => 'Mit diesem Formular kannst du eine IP-Adresse oder einen Benutzer freigeben.',
 'ipusubmit' => 'Freigeben',
 'unblocked' => '[[User:$1|$1]] wurde freigegeben',
@@ -2846,7 +2850,7 @@ Du kannst Weiterleitungen, die auf den Originaltitel verlinken, automatisch korr
 Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten 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.
+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 Seite überschreiben.
 
 '''Warnung!'''
@@ -2857,7 +2861,7 @@ 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.
 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.
+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 Seite überschreiben.
 
 '''Warnung!'''
@@ -3021,7 +3025,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.',
@@ -3029,6 +3033,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.',
@@ -3207,11 +3212,12 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-lasttime' => 'Datum der letzten Bearbeitung',
 'pageinfo-edits' => 'Gesamtzahl der Bearbeitungen',
 'pageinfo-authors' => 'Gesamtzahl unterschiedlicher Autoren',
-'pageinfo-recent-edits' => 'Anzahl der kürzlich erfolgten Bearbeitungen (innerhalb von $1)',
-'pageinfo-recent-authors' => 'Anzahl der unterschiedlichen Autoren',
+'pageinfo-recent-edits' => 'Anzahl der kürzlich erfolgten Bearbeitungen (innerhalb der letzten $1)',
+'pageinfo-recent-authors' => 'Anzahl unterschiedlicher Autoren',
 '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',
@@ -3220,6 +3226,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',
@@ -3242,6 +3252,8 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'markedaspatrollederror' => 'Markierung als „kontrolliert“ nicht möglich.',
 'markedaspatrollederrortext' => 'Du musst eine Seitenänderung auswählen.',
 'markedaspatrollederror-noautopatrol' => 'Es ist nicht erlaubt, eigene Bearbeitungen als kontrolliert zu markieren.',
+'markedaspatrollednotify' => 'Diese Änderung an $1 wurde als kontrolliert markiert.',
+'markedaspatrollederrornotify' => 'Der Versuch, die Version als kontrolliert zu markieren, ist fehlgeschlagen.',
 
 # Patrol log
 'patrol-log-page' => 'Kontroll-Logbuch',
@@ -3275,6 +3287,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.',
@@ -3304,7 +3317,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Format:
@@ -3918,6 +3934,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)''",
@@ -4077,6 +4094,10 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'logentry-newusers-create2' => 'Benutzerkonto $3 wurde von $1 erstellt',
 '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].
index bbc7bf7..ef4e093 100644 (file)
@@ -357,7 +357,7 @@ $messages = array(
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Cayê vurnayışi de terzê nuştışi:',
-'editfont-default' => 'Cıgeyrayoğo hesıbyaye',
+'editfont-default' => 'Cıgeyrayoğo hesabiyaye',
 'editfont-monospace' => 'Terzê nusteyê sabıtcagırewtoği',
 'editfont-sansserif' => 'Babetê Sans-serifi',
 'editfont-serif' => 'Babetê serifi',
@@ -437,13 +437,13 @@ $messages = array(
 
 'linkprefix' => "'''MediaWiki niya ro.'''",
 
-'about' => 'Heqa',
+'about' => 'Heqa cı de',
 'article' => 'Wesiqe',
-'newwindow' => '<br />(teqa da newi de abena/pençereyê newey de beno a)',
+'newwindow' => '(pençereyê newey de beno a)',
 'cancel' => 'Bıtexelne',
 'moredotdotdot' => 'Vêşi...',
-'mypage' => 'Pela mı',
-'mytalk' => 'Werênayışê mı',
+'mypage' => 'Per',
+'mytalk' => 'Werênayış',
 'anontalk' => 'Pela werênayışê nê IPy',
 'navigation' => 'Geyrayış',
 'and' => '&#32;u',
@@ -460,8 +460,8 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Mesel Vırazê',
-'vector-action-delete' => 'Besterne',
-'vector-action-move' => 'Bere',
+'vector-action-delete' => 'Bestere',
+'vector-action-move' => 'Berê',
 'vector-action-protect' => 'Bıpawe',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
 'vector-action-unprotect' => 'Starkerdışi bıvurne',
@@ -472,9 +472,10 @@ $messages = array(
 'vector-view-view' => 'Bıwane',
 'vector-view-viewsource' => 'Çımey bıvêne',
 'actions' => 'Kerdışi',
-'namespaces' => 'Cayê namey',
+'namespaces' => 'Cayê namam',
 'variants' => 'Varyanti',
 
+'navigation-heading' => 'Menuya Navigasyoni',
 'errorpagetitle' => 'Xırab',
 'returnto' => 'Peyser şo $1.',
 'tagline' => '{{SITENAME}} ra',
@@ -488,13 +489,13 @@ $messages = array(
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
 'printableversion' => 'Asayışê çapkerdışi',
 'permalink' => 'Gıreyo jûqere',
-'print' => 'Çap ke',
+'print' => 'Nusten ke',
 'view' => 'Bıvin',
 'edit' => 'Bıvurnên',
 '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',
@@ -540,7 +541,7 @@ $1',
 'pool-errorunknown' => 'Xeta nêzanıtiye',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
-'aboutsite' => 'Heqa de {{SITENAME}}',
+'aboutsite' => 'Heqa {{SITENAME}}i de',
 'aboutpage' => 'Project:Heqdê cı',
 'copyright' => 'Zerrek bınê $1 dero.',
 'copyrightpage' => '{{ns:project}}:Heqa telifi',
@@ -688,7 +689,7 @@ Perse: $2',
 'actionthrottled' => 'Kerden peysnaya',
 'actionthrottledtext' => 'Riyê tedbirê anti-spami ra,  wextê do kılmek de şıma nê fealiyeti nêşkenê zaf zêde bıkerê, şıma ki no hedi viyarna ra.
 Çend deqey ra tepeya reyna bıcerrebnên.',
-'protectedpagetext' => 'No pel qey nêvuriyayiş hao (nao) pawyeno.',
+'protectedpagetext' => 'Na per qey nêvuriyayiş ho pawyeno ya zi kerdışe bini.',
 'viewsourcetext' => 'To şikinay çımey na pele bıvêne u kopya kerê:',
 'viewyourtext' => "Na pela '''Vurnayışê ke kerdê''' re şıma şenê kopya kerê:",
 'protectedinterface' => 'Na pela qandê nusnerin destegê verri dana u kes xırabin nêqero deye kerda kılit.',
@@ -722,9 +723,8 @@ Xızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: "$3".',
 
 Nıka kamiyê xo eşkera mekere u siteyê {{SITENAME}} ra eşkeni devam bıkeri, ya zi <span class='plainlinks'>[$1 newe ra hesabê xo akere]</span> (wazeni pey nameyê xo, wazeni pey yewna name).
 Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de hesabe şıma akerde aseno.",
-'welcomecreation' => '== Şıma xeyr amey, $1! ==
-
-Hesabê şıma biyo a.
+'welcomeuser' => 'Xeyr ameyê $1',
+'welcomecreation-msg' => 'Hesabê şıma abiyo.
 [[Special:Preferences|{{SITENAME}} vurnayişê tercihanê xo]], xo vir ra mekere.',
 'yourname' => 'Namey karberi',
 'yourpassword' => 'Parola',
@@ -832,7 +832,7 @@ Bıne vındere u newe ra dest pê bıkere.',
 'resetpass_forbidden' => 'parolayi nêvuryayi',
 'resetpass-no-info' => 'şıma gani hesab akere u hona bıeşke bırese cı',
 'resetpass-submit-loggedin' => 'Parola bıvurne',
-'resetpass-submit-cancel' => 'ibtal ke',
+'resetpass-submit-cancel' => 'Bıtexelne',
 'resetpass-wrong-oldpass' => 'parolayo parola maqbul niyo.
 şıma ya parolaye xo vurnayo ya zi parolayo muwaqqat waşto.',
 'resetpass-temp-password' => 'parolayo muweqet:',
@@ -894,15 +894,15 @@ Parola vêrdiye: $2',
 'image_sample' => 'Misal resim.jpg',
 'image_tip' => 'Dosyaya gumın',
 'media_sample' => 'misal.jpg',
-'media_tip' => 'Gırey dosya',
+'media_tip' => 'Gıreyê dosya',
 'sig_tip' => 'İmza u wext',
 'hr_tip' => 'Çıxiza dimdayi (hend akar mefiye)',
 
 # Edit pages
-'summary' => 'Xulasa:',
+'summary' => "<font style=\"color:Blue\">'''Xulasa:'''</font>",
 'subject' => 'Mewzu/sernuşte:',
-'minoredit' => 'Eno vurnayışo de qıckeko',
-'watchthis' => 'Ena pele seyr ke',
+'minoredit' => "<font style=\"color:Green\">'''Eno vurnayışo de qıckeko'''</font>",
+'watchthis' => "<font style=\"color:Green\">'''Ena pele seyr ke'''</font>",
 'savearticle' => 'Pele qeyd ke',
 'preview' => 'Verqayt',
 'showpreview' => 'Verqayti bımocne',
@@ -1009,8 +1009,8 @@ Vurnayışê şıma hona qeyd nêbiyo!",
 Vurnayişê şıma qey nêxerepyayişê peli tepeya geyra a.
 Eke şıma servisê proksi yo anonim şuxulneni sebebê ey noyo.'''",
 'edit_form_incomplete' => "'''Qandê form dê vurnayışa tay wastera ma nêreşti; Vurnayışê ke şıma kerdê nêalızyayê, çım ra ravyarnê u fına bıcerbnê.'''",
-'editing' => 'Şımayê kenê <font style="color:red">$1</font> bıvurnê',
-'creating' => "Pela $1'i vıraze",
+'editing' => 'Şımayê <font style="color:red">$1</font> vurnenê',
+'creating' => 'Pela <font style="color:blue">$1</font> vırazê',
 'editingsection' => 'Per da $1 de şımaye kenê ke leti bıvurnê',
 'editingcomment' => '$1 vuryeno (qısmo newe)',
 'editconflict' => 'Vurnayişê ke yewbini nêtepışeni: $1',
@@ -1048,7 +1048,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.',
@@ -1276,7 +1275,7 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 # Merge log
 'mergelog' => 'Logê yew kerdişî',
 'pagemerge-logentry' => '[[$1]] u [[$2]] yew kerd (revizyonî heta $3)',
-'revertmerge' => 'Ro mevılêşne/pê meşane',
+'revertmerge' => 'Abırnê',
 'mergelogpagetext' => 'Cêr de jû liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.',
 
 # Diffs
@@ -1341,7 +1340,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
 'searchrelated' => 'eleqeyın',
 'searchall' => 'pêro',
-'showingresults' => "Heta {{PLURAL:$1|'''1''' netice|'''$1''' neticeyan}} ke pê #'''$2''' başli beno ey bimocne .",
+'showingresults' => "#$2 netican ra {{PLURAL:$1|'''1''' netica|'''$1''' neticey}} cêr deyê.",
 'showingresultsnum' => "'''$2''' netican ra nata  {{PLURAL:$3|'''1''' netice|'''$3''' neticeyê}} cêrde liste biyê.",
 'showingresultsheader' => "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' hetê '''$3'''}} qe '''$4'''",
 'nonefound' => "'''Teme''': Teyna tay namecayan cıgeyro beno.
@@ -1369,7 +1368,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 
 # Preferences page
 'preferences' => 'Tercihi',
-'mypreferences' => 'Tercihê mı',
+'mypreferences' => 'Tercihi',
 'prefs-edits' => 'Amarê vurnayışan:',
 'prefsnologin' => 'Şıma cıkewtış nêvıraşto',
 'prefsnologintext' => 'Şıma gani be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cikewte]</span> ke tercihanê karberi xo eyar bıkerê.',
@@ -1383,7 +1382,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'prefs-user-pages' => 'Pela Karberi',
 'prefs-personal' => 'Pela karberi',
 'prefs-rc' => 'Vurnayışê peyêni',
-'prefs-watchlist' => 'Lista seyr-kerdışi',
+'prefs-watchlist' => 'Lista seyrkerdışi',
 'prefs-watchlist-days' => 'Rocê ke lista seyrkerdışi de bêrê ramocnaene',
 'prefs-watchlist-days-max' => 'tewr vêşi $1 {{PLURAL:$1|roci|roci}}',
 'prefs-watchlist-edits' => 'tewr zêde amarê vurnayışi ke lista seyrkerdışia herakerdiye de bıasê:',
@@ -1433,7 +1432,7 @@ Etıya şıma rê yew kılito raştameo ke şıma şenê bıgurenê/bıxebetnê:
 'timezoneregion-pacific' => 'Okyanuso Pasifik',
 'allowemail' => 'Karberê bini wa bışê mı rê e-posta bırışê.',
 'prefs-searchoptions' => 'Cı geyre',
-'prefs-namespaces' => 'Caê namey',
+'prefs-namespaces' => 'Cayê namam',
 'defaultns' => 'Eke heni, enê cayanê namey de cı geyre (sae ke):',
 'default' => 'qısur',
 'prefs-files' => 'Dosyey',
@@ -1601,15 +1600,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ış',
@@ -1847,6 +1844,7 @@ Eke problem dewam kerd [[Special:ListUsers/sysop|serkari]] de irtibat kewe.',
 'backend-fail-notsame' => 'Zey $1 ju dosya xora  esta.',
 'backend-fail-invalidpath' => '$1 rayê da depo kerdışa raştay niya.',
 'backend-fail-delete' => '$1 nê besterneyê',
+'backend-fail-describe' => 'Qande dosya da "$1" metadata nêvurêna.',
 'backend-fail-alreadyexists' => "Dosyay $1'ya nêwanêna",
 'backend-fail-store' => '$1 ra $2 berdışo nê wanêno',
 'backend-fail-copy' => '$1 ra $2 kopya kerdışena dosyayo nêbeno',
@@ -1961,7 +1959,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',
@@ -2014,7 +2012,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 '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.",
@@ -2089,7 +2087,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.',
@@ -2154,7 +2152,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'newpages' => 'Pelê newey',
 'newpages-username' => 'Nameyê karberi:',
 'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'Berden',
+'move' => 'Berdış',
 'movethispage' => 'Ena pele bere',
 'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
 Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
@@ -2229,9 +2227,9 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 'linksearch-pat' => 'bıgêr motif:',
 'linksearch-ns' => 'Cayênameyî:',
 'linksearch-ok' => 'Cı geyre',
-'linksearch-text' => 'Joker ê zey "*.wikipedia.org"i karneno.<br />
-Tewr tayn en cêra "*.org" wazêno. <br />
-qaydeyê destek biyayeyi: <code>$1</code> (Cı geyrayış de xo miyan enina ra yeweri de mefiye).',
+'linksearch-text' => 'Jokeri ê zey "*.wikipedia.org"i benê ke bıgureniyê.
+Tewr senık yew sewiya serêna cayê tesiri lazıma, mesela "*.org".<br />
+Qeydeyê destegbiyayey: <code>$1</code> (qet yew qeydeyo hesabiyaye http:// ke name nêbiyo).',
 'linksearch-line' => '$1, $2 ra link biya',
 'linksearch-error' => 'jokeri têna nameyê makina ya serekini de aseni/eseni.',
 
@@ -2250,10 +2248,6 @@ qaydeyê destek biyayeyi: <code>$1</code> (Cı geyrayış de xo miyan enina ra y
 '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.
@@ -2315,7 +2309,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 
 # Watchlist
 'watchlist' => 'Lista mına seyrkerdışi',
-'mywatchlist' => 'Lista mına seyrkerdışi',
+'mywatchlist' => 'Lista seyrkerdışi',
 'watchlistfor2' => 'Qandê $1 ($2)',
 'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.',
 'watchlistanontext' => 'qey vurnayişê maddeya listeya temaşakerdişi $1.',
@@ -2351,15 +2345,21 @@ Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni. Hem zi çı dem
 
 'enotif_mailer' => 'postaya xeberdayişi {{SITENAME}}',
 'enotif_reset' => 'Pela pêro ziyaret kerde deye mor ke',
-'enotif_newpagetext' => 'Ena yew pela newî ya.',
 'enotif_impersonal_salutation' => '{{SITENAME}} karber',
-'changed' => 'vurneya',
-'created' => 'viraziya',
-'enotif_subject' => 'pelê {{SITENAME}}i $PAGETITLE, hetê/perrê $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_subject_deleted' => '{{SITENAME}} de pera $1 {{gender:$2|$2}} esterıt.',
+'enotif_subject_created' => '{{SITENAME}} de pera $1 {{gender:$2|$2}} vıraşt',
+'enotif_subject_moved' => '{{SITENAME}} de pera $1 {{gender:$2|$2}} berde',
+'enotif_subject_restored' => '{{SITENAME}} de pera $1 {{gender:$2|$2}} timar ke',
+'enotif_subject_changed' => '{{SITENAME}} de pera $1 {{gender:$2|$2}} vurne',
+'enotif_body_intro_deleted' => '{{SITENAME}} de pera $1 $PAGEEDITDATE de {{gender:$2|$2}}i esterıt, rewizyonê $3 bıvin.',
+'enotif_body_intro_created' => '{{SITENAME}} de pera $1 $PAGEEDITDATE de {{gender:$2|$2}}i vıraşt, rewizyonê $3 bıvin.',
+'enotif_body_intro_moved' => '{{SITENAME}} de pera $1 $PAGEEDITDATE de {{gender:$2|$2}}i berd, rewizyonê $3 bıvin.',
+'enotif_body_intro_restored' => '{{SITENAME}} de pera $1 $PAGEEDITDATE de {{gender:$2|$2}}i timar ke, rewizyonê $3 bıvin.',
+'enotif_body_intro_changed' => '{{SITENAME}} de pera $1 $PAGEEDITDATE de {{gender:$2|$2}}i vurne, rewizyonê $3 bıvin.',
 'enotif_lastvisited' => 'ziyareta şıma ye peyini ra nata heme vuryayiş ê ke biyê bıewnê $1i re..',
 'enotif_lastdiff' => 'qey vinayişê ney vurnayişi bıewnê pelê $1i',
 'enotif_anon_editor' => 'karbero anonim $1',
-'enotif_body' => 'Embazê $WATCHINGUSERNAME,
+'enotif_body' => 'Erciyayê $WATCHINGUSERNAME,
 
 {{SITENAME}} keyepel de no $PAGETITLE pelo sernameyın re $PAGEEDITDATE no tarix de $PAGEEDITOR no karberi $CHANGEDORCREATED. şıma eşkeni bıresi halê no peli re $PAGETITLE_URL na adresi ra.
 
@@ -2376,14 +2376,19 @@ no pel o ke behs beno heta ziyaret kerdışê yewna heli, mesajê vuriyayişi n
            {{SITENAME}} sistemê hişyariyê keyepeli.
 
 --
-qey vurnayişê eyari:
+Qey vurnayişê eyari:
 {{canonicalurl:{{#Special:Watchlist/edit}}}}
 
-qey wedarayişê ena pele liste xo ra seyr kerdişi, şo
+Qey vurnayişê eyaran de lista seyri:
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+Qey wedarayişê ena pele liste xo ra seyr kerdişi, şo
 $UNWATCHURL
 
-qey hemkari u pêşniyazi:
+Qey hemkari u pêşniyazi:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'viraziya',
+'changed' => 'vurneya',
 
 # Delete
 'deletepage' => 'Pele bıestere',
@@ -2393,7 +2398,7 @@ qey hemkari u pêşniyazi:
 'exbeforeblank' => "behsê verê esteriyayişi: '$1'",
 'exblank' => 'zerreyê peli vengo',
 'delete-confirm' => '"$1" bıestere',
-'delete-legend' => 'Bıestere',
+'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.',
@@ -2571,9 +2576,9 @@ $1',
 'blanknamespace' => '(Ser)',
 
 # Contributions
-'contributions' => 'İştiraqê karberi',
+'contributions' => 'İştıraqê {{GENDER:$1|karber}}i',
 'contributions-title' => 'Dekerdenê karber de $1',
-'mycontris' => 'Cıkerdışê mı',
+'mycontris' => 'İştıraqi',
 'contribsub2' => 'Qandê $1 ($2)',
 'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
 'uctop' => '(top)',
@@ -2614,7 +2619,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'whatlinkshere-hideredirs' => 'Hetenayışê $1',
 'whatlinkshere-hidetrans' => 'Açarnayışê $1',
 'whatlinkshere-hidelinks' => 'Greyê $1',
-'whatlinkshere-hideimages' => 'Linkanê resımi $1',
+'whatlinkshere-hideimages' => 'Gıreyê dosya $1',
 'whatlinkshere-filters' => 'Avrêci',
 
 # Block/unblock
@@ -2884,7 +2889,7 @@ ma vaci: qey pelê "[[{{MediaWiki:Mainpage}}]]i " [[{{#Special:Export}}/{{MediaW
 # Namespace 8 related
 'allmessages' => 'Mesacê sistemi',
 'allmessagesname' => 'Name',
-'allmessagesdefault' => 'Hesıbyaye metnê mesaci',
+'allmessagesdefault' => 'Metnê mesacê hesabiyayey',
 'allmessagescurrent' => 'Nuşteyê mesacê rocaney',
 'allmessagestext' => 'na liste, listeya mesajê cayê nameyê wikimedya yo.
 eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [//www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
@@ -2963,15 +2968,15 @@ dosyaya emaneti vindbiyo',
 'import-rootpage-nosubpage' => 'Qan de bınnaman reçe de "$1" re mısade nedano.',
 
 # Import log
-'importlogpage' => 'Logê împortî',
+'importlogpage' => 'Defterê seyırio idxal',
 'importlogpagetext' => 'wiki yo ke nişane biyo tera kırıştışê zerredayişi nêbeno.',
 'import-logentry-upload' => 'dosyayê bar kerdişî ra [[$1]] împort biyo',
-'import-logentry-upload-detail' => '$1 {{PLURAL:$1|revizyon|revizyonî}}',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}',
 'import-logentry-interwiki' => '$1 transwiki biyo',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|revizyon|revizyonî}} $2 ra',
 
 # JavaScriptTest
-'javascripttest' => 'Cerbnayışê JavaScripti',
+'javascripttest' => 'Cerebnayışê JavaScripti',
 'javascripttest-title' => 'Testê $1 gurweyênê',
 'javascripttest-pagetext-noframework' => 'Na pela testanê JavaScripta gurweynayışi re abıryaya.',
 'javascripttest-pagetext-unknownframework' => 'Çerçeweyê "$1" cerbnayışi xırabo.',
@@ -2987,7 +2992,7 @@ dosyaya emaneti vindbiyo',
 'tooltip-pt-anontalk' => 'vurnayiş ê ke no Ipadresi ra biyo muneqeşa bıker',
 'tooltip-pt-preferences' => 'Tercihê to',
 'tooltip-pt-watchlist' => 'Lista pelanê ke to gırewtê seyrkerdış',
-'tooltip-pt-mycontris' => 'Listey iştıraqan',
+'tooltip-pt-mycontris' => 'Yew lista iştıraqanê şıma',
 'tooltip-pt-login' => 'Mayê şıma ronıştış akerdışi rê dawet keme; labelê ronıştış mecburi niyo',
 'tooltip-pt-anonlogin' => 'Seba cıkewtışi şıma rê dewato; labelê, no zeruri niyo',
 'tooltip-pt-logout' => 'Bıveciye',
@@ -2995,28 +3000,27 @@ dosyaya emaneti vindbiyo',
 'tooltip-ca-edit' => 'Tı şenay na pele bıvurnê.
 Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 'tooltip-ca-addsection' => 'Yew qısımo newe ake',
-'tooltip-ca-viewsource' => 'Ena pele kılit biyo.
-
-Çımey ena pele bıvin',
+'tooltip-ca-viewsource' => 'Ena pele kılit biya.
+Şıma şenê çımeyê aye bıvênê',
 'tooltip-ca-history' => 'Versiyonê verênê ena pele',
 'tooltip-ca-protect' => 'Ena pele kılit ke',
 'tooltip-ca-unprotect' => 'Starkerdışe ena peler bıvurne',
 'tooltip-ca-delete' => 'Ena perer besternê',
 'tooltip-ca-undelete' => 'peli biyarê halê ver hewnakerdışi',
 'tooltip-ca-move' => 'Ena pele bere',
-'tooltip-ca-watch' => 'Ena pela lista mına seyr-kerdışi ri dek',
+'tooltip-ca-watch' => 'Ena pele lista xoya seyrkerdışi ke',
 'tooltip-ca-unwatch' => 'Ena pele listeya seyir-kerdışi xo ra bıvec',
 'tooltip-search' => 'Zerreyê {{SITENAME}} de cı geyre',
 'tooltip-search-go' => 'Ebe nê namey tami şo yew pela ke esta',
 'tooltip-search-fulltext' => 'Nê  metni peran dı cı geyre',
-'tooltip-p-logo' => 'Pera serên',
+'tooltip-p-logo' => 'Pela seri bıvênên',
 'tooltip-n-mainpage' => 'Şo pela seri',
 'tooltip-n-mainpage-description' => 'Şo pela seri',
 'tooltip-n-portal' => 'Heqa projey de, kes çı şeno bıkero, çıçiyo koti deyo',
 'tooltip-n-currentevents' => 'Vurnayışanê peyênan de melumatê pey bıvêne',
 'tooltip-n-recentchanges' => 'Wiki de lista vurnayışanê peyênan',
 'tooltip-n-randompage' => 'Şırê pera ke raştameyê',
-'tooltip-n-help' => 'Qande desteg grotışi',
+'tooltip-n-help' => 'Cayê doskerdışi',
 'tooltip-t-whatlinkshere' => 'Lista pelanê wikiya pêroina ke tiya gırê bena',
 'tooltip-t-recentchangeslinked' => 'Vurnayışê peyênê pelanê ke ena pela ra gırê biyê',
 'tooltip-feed-rss' => 'RSS feed qe ena pele',
@@ -3024,14 +3028,14 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 'tooltip-t-contributions' => 'İştirakanê ena karber bevin',
 'tooltip-t-emailuser' => 'Ena karber ri yew email bışırav',
 'tooltip-t-upload' => 'Dosya bar ke',
-'tooltip-t-specialpages' => 'Listeya pelan dê xasa pêron',
+'tooltip-t-specialpages' => 'Yew lista pelanê xasanê pêroyinan',
 'tooltip-t-print' => 'Nımuney çapkerdışiê ena pele',
 'tooltip-t-permalink' => 'Gırêyo daimi be ena versiyonê pele',
 'tooltip-ca-nstab-main' => 'Pela zerreki bımocne',
 'tooltip-ca-nstab-user' => 'Pela karberi bıvin',
 'tooltip-ca-nstab-media' => 'Pele Mediya bivinên',
 'tooltip-ca-nstab-special' => 'Na yew pelê da xususiya, şıma nêşenê nae bıvurnê',
-'tooltip-ca-nstab-project' => 'Pera proci bıvin',
+'tooltip-ca-nstab-project' => 'Pela procey bıvêne',
 'tooltip-ca-nstab-image' => 'Pelay dosya bımocne',
 'tooltip-ca-nstab-mediawiki' => 'Mesacê sistemi bivinên',
 'tooltip-ca-nstab-template' => 'Şabloni bıvinê',
@@ -3046,7 +3050,7 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 'tooltip-watchlistedit-normal-submit' => 'Sernuşteya hewad',
 'tooltip-watchlistedit-raw-submit' => 'Listeyê seyri newen ke',
 'tooltip-recreate' => 'pel hewn a bışiyo zi tepiya biya',
-'tooltip-upload' => 'Bar bike',
+'tooltip-upload' => 'Dest be barkerdışi ke',
 'tooltip-rollback' => '"Peyser bia" be yew tık pela iştıraq(an)ê peyên|i(an) peyser ano.',
 'tooltip-undo' => '"Undo" ena vurnayışê newi iptal kena u vurnayışê verni a kena.
 Tı eşkeno yew sebeb bınus.',
@@ -3600,7 +3604,7 @@ mw.loader.using( 'jquery.cookie', function() {
 'pageinfo-display-title' => 'Sernuştey bımocne',
 'pageinfo-default-sort' => 'Hesıbyaye mırfeyo kılm',
 'pageinfo-length' => 'Derdeya pela (bayti heta)',
-'pageinfo-article-id' => 'Nımrey pela',
+'pageinfo-article-id' => 'Kamiya pele',
 'pageinfo-language' => 'Zıwanê zerreyê pele',
 'pageinfo-robot-policy' => 'Weziyetê motor de cıgeyrayışi',
 'pageinfo-robot-index' => 'İIndeksbiyayen',
@@ -3613,7 +3617,7 @@ mw.loader.using( 'jquery.cookie', function() {
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|hetenayış|hetenayışi}}; $3 {{PLURAL:$3|raykerdışt|raykerdışi}})',
 'pageinfo-firstuser' => 'Pela vıraşter',
 'pageinfo-firsttime' => 'Demê pela vıraştışi',
-'pageinfo-lastuser' => 'Vurnayeno peyên',
+'pageinfo-lastuser' => 'Vurnayo peyên',
 'pageinfo-lasttime' => 'Deme u vurnayışo peyên',
 'pageinfo-edits' => 'Amarina vurnayışan pêro',
 'pageinfo-authors' => 'Amarina nuştekaran pêro',
@@ -3643,7 +3647,7 @@ mw.loader.using( 'jquery.cookie', function() {
 'skinname-vector' => 'Vektor',
 
 # Patrolling
-'markaspatrolleddiff' => 'Nişan bike ke devriye biyo',
+'markaspatrolleddiff' => 'Nişan bıke ke dewriya biyo',
 'markaspatrolledtext' => 'Ena pele nişan bike ke devriye biyo',
 'markedaspatrolled' => 'Nişan biyo ke verni de devriye biyo',
 'markedaspatrolledtext' => 'Versiyone weçinaye [[:$1]] nişan biyo ke devriye biyo',
@@ -3652,6 +3656,8 @@ mw.loader.using( 'jquery.cookie', function() {
 'markedaspatrollederror' => 'Nişan nibeno ke devriye biyo',
 'markedaspatrollederrortext' => 'Ti gani revizyon işaret bike ke Nişanê devriye biyo',
 'markedaspatrollederror-noautopatrol' => 'Ti nieşkeno ke vurnayişê xo nişan bike ke devriye biyê.',
+'markedaspatrollednotify' => 'Na vurnayışa dewriye deye $1 nışan biyo.',
+'markedaspatrollederrornotify' => 'Nışan kerdışê dewriyey nêbı',
 
 # Patrol log
 'patrol-log-page' => 'Logê devriye',
@@ -3686,6 +3692,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.',
@@ -3721,6 +3728,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'hours' => 'Verdê {{PLURAL:$1|$1 seata|$1 seata}}',
 'days' => 'Verdê {{PLURAL:$1|$1 rocan|$1 rocan}}',
 'ago' => 'Verdê $1',
+'just-now' => 'Hema newke',
 
 # Bad image list
 'bad_image_list' => 'Şeklo umumi wınayo:
@@ -4427,7 +4435,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 'watchlistedit-raw-submit' => 'Listeyê seyri newen ke',
 'watchlistedit-raw-done' => 'Listeyê tuyê seyrkerdişi rocaniye biyo',
 'watchlistedit-raw-added' => '{{PLURAL:$1|1 seroğ|$1 seroğî}} de kerd:',
-'watchlistedit-raw-removed' => '{{PLURAL:$1|1 seroğ|$1 seroğî}} de wedarno:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|1 seroğ|$1 seroği}} besteriyaye:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'vurnayışanê eleqadari bıvin',
@@ -4522,7 +4530,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 'version-license' => 'Lisans',
 'version-poweredby-credits' => "Ena wiki, dezginda '''[//www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
 'version-poweredby-others' => 'Zewmi',
-'version-credits-summary' => 'Ma qayılime ke [[Special:Version|MediaWiki]] rê ke kami desteg dayo wa mayê vanime inan bışınasne.',
+'version-credits-summary' => 'Ma qayılime ke [[Special:Version|MediaWiki]] rê ke kami destek dayo wa mayê vanime inan bışınasne.',
 'version-license-info' => "MediaWiki xoseri jew nuştereno; MediaWiki'yer, weqfê xoseri nuşteren GNU lisansiya merdumi şene ke vıla kerê, bıvurnê u timar kerê.
 
 Nuşterenê MediaWiki merdumi cı ra nahfat bivinê deye êyê mısade danê; feqet ke nêşeno BIROŞO yana XOSERİ VILA KERO qerantiya ney çına. bewni rê lisansta GNU'y.
@@ -4665,11 +4673,15 @@ Ena sita dı newke xırabiya teknik esta.',
 'logentry-move-move_redir-noredirect' => '$1 hetenayışê qeydê pela da  $3 ahulnê $4 sero hetenayış vıraşt',
 'logentry-patrol-patrol' => '$1 revizyonê pela da $4 $3 ke kontrol',
 'logentry-patrol-patrol-auto' => "$1 pelay $3'i rewizyon dê $4 ya kontrol ke",
-'logentry-newusers-newusers' => '$1 deye namey karberi vıraziya',
-'logentry-newusers-create' => '$1 deye namey karberi vıraziya',
-'logentry-newusers-create2' => "$1'i $3 rê hesab vıraşt",
+'logentry-newusers-newusers' => 'Hesabê karberi $1 vıraziya',
+'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.',
index e3e50c2..91f9190 100644 (file)
@@ -291,8 +291,9 @@ $messages = array(
 'newwindow' => '(se wótcynijo w nowem woknje)',
 'cancel' => 'Pśetergnuś',
 'moredotdotdot' => 'Wěcej…',
-'mypage' => 'Mój bok',
-'mytalk' => 'mója diskusija',
+'morenotlisted' => 'Dalšne njepódane...',
+'mypage' => 'Bok',
+'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusija z toś teju IP',
 'navigation' => 'Nawigacija',
 'and' => '&#32;a',
@@ -324,6 +325,7 @@ $messages = array(
 'namespaces' => 'Mjenjowe rumy',
 'variants' => 'Warianty',
 
+'navigation-heading' => 'Nawigaciski meni',
 'errorpagetitle' => 'Zmólka',
 'returnto' => 'Slědk k bokoju $1.',
 'tagline' => 'Z {{GRAMMAR:genitiw|{{SITENAME}}}}',
@@ -530,7 +532,7 @@ Wótpšašanje: $2',
 'viewsource-title' => 'Žrědłowy tekst za $1 se woglědaś',
 'actionthrottled' => 'Akcije limitowane',
 'actionthrottledtext' => 'Ako napšawa pśeśiwo spamoju, móžoš toś tu akciju jano někotare raze we wěstym case wuwjasć. Sy toś ten limit dośěgnuł. Pšosym wopytaj za někotare minuty hyšći raz.',
-'protectedpagetext' => 'Wobźěłanje toś togo boka jo se znjemóžniło.',
+'protectedpagetext' => 'Toś ten bok jo pśeśiwo wobźěłowanjeju abo drugim akcijam šćitany.',
 'viewsourcetext' => 'Žrědłowy tekst togo boka móžoš se woglědaś a kopěrowaś:',
 'viewyourtext' => "Móžoš se žrědłowy tekst '''swójich změnow''' woglědaś a do toś togo bok kopěrowaś:",
 'protectedinterface' => 'Toś ten bok wopśimujo tekst za rěcny zwjerch softwary na toś tom wikiju a šćita se, aby se znjewužywanjeju zadorało.
@@ -562,9 +564,8 @@ Administrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: "$3".',
 
 Móžoš {{SITENAME}} anomymnje dalej wužywaś abo móžoš <span class='plainlinks'>[$1 se znowego pśizjawiś]</span> ako samski abo hynakšy wužywaŕ.
 Źiwaj na to, až někotare boki se dalej tak zwobraznjuju ako by hyšći pśizjawjeny był, až njewuproznijoš cache swójego wobglědowaka.",
-'welcomecreation' => '== Witaj, $1! ==
-
-Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences|nastajenja {{SITENAME}}]].',
+'welcomeuser' => 'Witaj $1',
+'welcomecreation-msg' => 'Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences|nastajenja za {{SITENAME}}]].',
 'yourname' => 'mě wužywarja',
 'yourpassword' => 'šćitne gronidło:',
 'yourpasswordagain' => 'Šćitne gronidło hyšći raz zapódaś:',
@@ -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',
@@ -1190,7 +1192,7 @@ Drobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 
 # Preferences page
 'preferences' => 'Nastajenja',
-'mypreferences' => 'nastajenja',
+'mypreferences' => 'Nastajenja',
 'prefs-edits' => 'Licba wobźěłanjow:',
 'prefsnologin' => 'Njejsy pśizjawjony',
 'prefsnologintext' => 'Musyš se <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} pśizjawiś]</span>, aby mógał swóje nastajenja změniś.',
@@ -1266,9 +1268,9 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'prefs-emailconfirm-label' => 'E-mailowe wobkšuśenje:',
 'prefs-textboxsize' => 'Wjelikosć wobźěłowańskego wokna',
 'youremail' => 'E-mail:',
-'username' => 'Wužywarske mě:',
-'uid' => 'ID wužywarja:',
-'prefs-memberingroups' => 'Cłonk {{PLURAL:$1|wužywarskeje skupiny|wužywarskeju kupkowu|wužywarskich kupkow|wužiwarskich kupkow}}:',
+'username' => 'Mě {{GENDER:$1|wužywarja|wužywarki}}:',
+'uid' => 'ID {{GENDER:$1|wužywarja|wužywarki}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Cłon|Cłonka}} {{PLURAL:$1|wužywarskeje kupki|wužiwarskeju kupkowu|wužywarskich kupkow}}:',
 'prefs-registration' => 'Cas registracije:',
 'yourrealname' => 'Realne mě *:',
 'yourlanguage' => 'Rěc:',
@@ -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ś',
@@ -1659,6 +1659,7 @@ $1',
 'backend-fail-notsame' => 'Njeidentiska dataja $1 južo eksistěrujo.',
 'backend-fail-invalidpath' => '$1 njejo płaśiwy puśik za składowanje.',
 'backend-fail-delete' => 'Dataja $1 njedajo se wulašowaś.',
+'backend-fail-describe' => 'Metadaty za dataju "$1" njedaju se změniś.',
 'backend-fail-alreadyexists' => 'Dataja $1 južo eksistěrujo.',
 'backend-fail-store' => 'Dataja $1 njedajo se pód $2 składowaś.',
 'backend-fail-copy' => 'Dataja $1 njedajo se pód $2 kopěrowaś.',
@@ -2039,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> (pšosym njepódaj je w swójom pytanju).',
+{{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ś.',
 
@@ -2058,10 +2059,6 @@ Pódpěrane protokole: <code>$1</code> (pšosym njepódaj je w swójom pytanju).
 '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ś.',
@@ -2119,15 +2116,15 @@ E-mailowa adresa, kótaruž sy zapódał w [[Special:Preferences|swójich wužyw
 
 # Watchlist
 'watchlist' => 'Wobglědowańka',
-'mywatchlist' => 'wobglědowańka',
+'mywatchlist' => 'Wobglědowańka',
 'watchlistfor2' => 'Za wužywarja $1 $2',
 'nowatchlist' => 'Žedne zapise w twójej wobglědowańce.',
 'watchlistanontext' => 'Dejš $1, aby mógał swóju wobglědowańku wiźeś abo zapise w njej wobźěłaś.',
 '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ś',
@@ -2155,19 +2152,23 @@ Pózdźejšne změny na toś tom boku a w pśisłušecej diskusiji se tam nalicu
 
 'enotif_mailer' => '{{SITENAME}} e-mailowe powěsći',
 'enotif_reset' => 'Wšykne boki ako woglědane markěrowaś',
-'enotif_newpagetext' => 'To jo nowy bok.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-wužywaŕ',
-'changed' => 'změnił',
-'created' => 'napórał',
-'enotif_subject' => '[{{SITENAME}}] $PAGEEDITOR jo bok "$PAGETITLE" $CHANGEDORCREATED',
+'enotif_subject_deleted' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se wót {{GENDER:$2|$2}} wulašował',
+'enotif_subject_created' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se wót {{GENDER:$2|$2}} napórał',
+'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.',
+'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.',
+'enotif_body_intro_changed' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se na $PAGEEDITDATE wót {{GENDER:$2|$2}} změnił, glědaj $3 za aktualnu wersiju.',
 'enotif_lastvisited' => 'Wšykne změny na jadno póglědnjenje: $1',
 'enotif_lastdiff' => 'Za toś tu změnu glědaj w $1.',
 'enotif_anon_editor' => 'anonymny wužywaŕ $1',
 'enotif_body' => 'Luby $WATCHINGUSERNAME,
 
-$PAGEEDITOR jo bok $PAGETITLE na {{GRAMMAR:lokatiw|{{SITENAME}}}} $PAGEEDITDATE $CHANGEDORCREATED, glědaj $PAGETITLE_URL za aktualnu wersiju.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Zespominanje wobźěłarja: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2175,10 +2176,9 @@ Kontakt z wobźěłarjom:
 E-mail: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Njebudu žedne dalšne powěźeńki w paźe dalšnych změnow, snaźkuli woglědujoš se toś ten bok.
-Móźoś teke chórgojcki powěźeńkow za wšykne twóje wobglědowane boki slědk stajiś.
+Njebudu žedne dalšne powěźeńki w paźe dalšnych změnow, snaźkuli woglědujoš se toś ten bok. Móźoś teke chórgojcki powěźeńkow za wšykne twóje wobglědowane boki slědk stajiś.
 
-             Twój pśijaśelny powěsćowy system {{SITENAME}}
+Twój pśijaśelny powěsćowy system {{SITENAME}}
 --
 Aby swoje nastajenja za e-mailowe zdźělenja změnił, woglědaj
 {{canonicalurl:{{#special:Preferences}}}}
@@ -2191,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ś',
@@ -2256,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:',
@@ -2268,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',
@@ -2366,9 +2370,9 @@ $1',
 'blanknamespace' => '(Nastawki)',
 
 # Contributions
-'contributions' => 'Wužywarske pśinoski',
+'contributions' => 'Pśinoski {{GENDER:$1|wužywarja|wužywarki}}',
 'contributions-title' => 'Wužywarske pśinoski wót $1',
-'mycontris' => 'móje pśinoski',
+'mycontris' => 'Pśinoski',
 'contribsub2' => 'Za $1 ($2)',
 'nocontribs' => 'Za toś te kriterije njejsu žedne změny se namakali.',
 'uctop' => '(aktualny)',
@@ -2736,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.',
@@ -2892,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',
@@ -2900,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',
@@ -2921,6 +2931,8 @@ W zespominanju dajo se pśicyna pódaś.',
 'markedaspatrollederror' => 'Markěrowanje ako "kontrolěrowane" njejo móžne.',
 'markedaspatrollederrortext' => 'Musyš wersiju wuzwóliś.',
 'markedaspatrollederror-noautopatrol' => 'Njesmějoš swóje změny ako kontrolěrowane markěrowaś.',
+'markedaspatrollednotify' => 'Toś ta změna do $1 jo se ako doglědowana markěrowała.',
+'markedaspatrollederrornotify' => 'Markěrowanje ako doglědowane jo se njeraźiło.',
 
 # Patrol log
 'patrol-log-page' => 'Protokol kontrolow',
@@ -2953,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.',
@@ -2982,7 +2995,10 @@ $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',
 
 # Bad image list
 'bad_image_list' => 'Format jo slědujucy:
@@ -3729,11 +3745,15 @@ Wobraze se w połnym wótgranicowanju pokazuju, druge datajowe typy se ze zwěza
 'logentry-move-move_redir-noredirect' => '$1 jo pśesunuł bok $3 do $4 a jo pśepisał dalejpósrědnjenje, mimo až jo napórał dalejpósrědnjenje',
 'logentry-patrol-patrol' => '$1 jo markěrował wersiju $4 boka $3 ako doglědowanu',
 'logentry-patrol-patrol-auto' => '$1 jo awtomatiski markěrował wersiju $4 boka $3 ako doglědowanu',
-'logentry-newusers-newusers' => '$1 jo załožył wužywarske konto',
-'logentry-newusers-create' => '$1 jo załožył wužywarske konto',
+'logentry-newusers-newusers' => 'Wužywarske konto $1 jo se załožyło',
+'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].
index 9508efc..a0153f0 100644 (file)
@@ -426,9 +426,6 @@ Mongungulud di minongunsi pinopointalang do kointalangan diti: "$3".',
 
 Milo ko do monilombus mongoguno {{SITENAME}} poinlisok, toi <span class='plainlinks'>[$1 sumuang log koh kawagu]</span> miagal ngaran di tiinu toi mongoguno ngaran suai.
 Birio do kipipiro bolikon popokito do maso poinsuang log koh poh gisom no do opugas nu dangkob do pogigihumnu.",
-'welcomecreation' => '== Kopiwosian, $1! ==
-Nowonsoi no takaunnu.
-Soroho no do mongolon [[Special:Preferences|{{SITENAME}} komoisoonnu]].',
 'yourname' => 'Ngarandait:',
 'yourpassword' => 'Kaatalib:',
 'yourpasswordagain' => 'Mintaipo kaatalib:',
@@ -733,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.',
@@ -1046,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',
 
@@ -1205,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..71ee574 100644 (file)
@@ -10,6 +10,8 @@
  * @author Deviathan (on dv.wikipedia.org)
  * @author Glacious
  * @author MF-Warburg
+ * @author Ushau97
+ * @author Zhatre
  * @author לערי ריינהארט
  */
 
@@ -57,12 +59,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 +86,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 +110,7 @@ $messages = array(
 'october-gen' => 'އޮކްޓޯބަރ',
 'november-gen' => 'ނޮވެމްބަރ',
 'december-gen' => 'ޑިސެމްބަރ',
-'jan' => 'Þ\96Þ¬Þ\82ÞªÞ\87ަރީ',
+'jan' => 'Þ\96Þ¦Þ\82Þ¦Þ\88ަރީ',
 'feb' => 'ފެބްރުއަރީ',
 'mar' => 'މާޗް',
 'apr' => 'އޭޕްރިލް',
@@ -116,15 +124,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 +149,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 +363,8 @@ $messages = array(
 'italic_sample' => 'ކަތި އިބާރާތް',
 'italic_tip' => 'ކަތި އިބާރާތް',
 'headline_sample' => 'ސުރުހީގެ އިބާރާތް',
+'media_tip' => 'ފައިލު ފާލަން',
+'sig_tip' => 'ތިޔަބޭފުޅާގެ ސޮއި، ތާރީޚް ތަތްގަނޑާއެކު',
 
 # Edit pages
 'summary' => 'ހުލާސާ:',
@@ -248,64 +375,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 +538,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 +642,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'deletecomment' => 'ސަބަބު',
 
 # Rollback
+'rollbacklink' => 'ކުރީގެ ނުސްހާ އަކަށް ބަދަލުކުރައްވާ',
 'cantrollback' => 'އުނިއިތުރު އިއާދައެއް ނުކުރެވޭނެ؛ އެހެނީ އެންމެ ފަހު އުނިއިތުރުގައި ހިއްސާވި ފަރާތަކީ މިޞަފްޙާގެ ހަމައެކަނި މުއައްލިފެވެ.',
 
 # Protect
@@ -401,6 +656,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'undelete' => 'ފޮހެލެވިފައިވާ ޞަފްޙާތައް ބައްލަވާ',
 'viewdeletedpage' => 'ފޮހެލެވިފައިވާ ޞަފްޙާތައް ބައްލަވާ',
 'undeletebtn' => 'އިއާދަ ކުރޭ!',
+'undeleteviewlink' => 'ބައްލަވާ',
+'undelete-show-file-submit' => 'އާދެ',
 
 # Namespace form on various pages
 'blanknamespace' => '(މައި)',
@@ -409,7 +666,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'contributions' => 'މެންބަރު ގެ ހިއްސާ',
 'mycontris' => 'މަގޭ ހިއްސާ',
 
+'sp-contributions-talk' => 'ވާހަކަ',
 'sp-contributions-userrights' => 'މެންބަރުގެ ހައްގުތަކުގެ އިންތިޒާމް',
+'sp-contributions-search' => 'ހިއްސާތަށް ހޯއްދަވާ',
 
 # What links here
 'whatlinkshere' => 'މިއާ ގުޅެނީ ކޮންއެއްޗެއް',
@@ -418,9 +677,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 +710,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 +816,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:SpecialPages
 'specialpages' => 'ހާއްސަ ޞަފްޙާތައް',
 
+# Search suggestions
+'searchsuggest-search' => 'ހޯއްދަވާ',
+
 );
index 3525193..a49218b 100644 (file)
  * @author Demmy
  * @author Evropi
  * @author Flyax
+ * @author FocalPoint
  * @author Geraki
  * @author Glavkos
  * @author Grondin
  * @author Kaganer
  * @author Kiolalis
  * @author Kiriakos
+ * @author Kongr43gpen
  * @author Lou
  * @author MF-Warburg
  * @author Malafaya
@@ -358,48 +360,48 @@ $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' => 'Παράλειψη διαφοράς μετά την εκτέλεση επαναφοράς',
 
 'underline-always' => 'Πάντα',
 'underline-never' => 'Ποτέ',
-'underline-default' => 'ΠÏ\81οεÏ\80ιλογή Ï\84οÏ\85 browser',
+'underline-default' => 'ΠÏ\81οεÏ\80ιλεγμένο Ï\80Ï\81Ï\8cγÏ\81αμμα Ï\80εÏ\81ιήγηÏ\83ηÏ\82',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Τύπος γραμματοσειράς της περιοχής επεξεργασίας:',
@@ -462,10 +464,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 συνολικά.}}',
@@ -475,8 +477,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' => 'Σχετικά',
@@ -484,8 +486,8 @@ $messages = array(
 'newwindow' => '(ανοίγει σε ξεχωριστό παράθυρο)',
 'cancel' => 'Ακύρωση',
 'moredotdotdot' => 'Περισσότερα...',
-'mypage' => 'Î\97 Ï\83ελίδα Î¼Î¿Ï\85',
-'mytalk' => 'Î\9fι Ï\83Ï\85ζηÏ\84ήÏ\83ειÏ\82 Î¼Î¿Ï\85',
+'mypage' => 'Σελίδα',
+'mytalk' => 'ΣÏ\85ζήÏ\84ηÏ\83η',
 'anontalk' => 'Οι συζητήσεις αυτής της διεύθυνσης IP',
 'navigation' => 'Πλοήγηση',
 'and' => '&#32;και',
@@ -506,17 +508,18 @@ $messages = array(
 'vector-action-move' => 'Μετακίνηση',
 'vector-action-protect' => 'Προστασία',
 'vector-action-undelete' => 'Επαναφορά',
-'vector-action-unprotect' => 'Î\91λλάξÏ\84ε Ï\84ην Ï\80Ï\81οÏ\83Ï\84αÏ\83ία',
-'vector-simplesearch-preference' => 'Î\95νεÏ\81γοÏ\80οίηÏ\83η ÎµÎ½Î¹Ï\83Ï\87Ï\85μένÏ\89ν Ï\80Ï\81οÏ\84άÏ\83εÏ\89ν Î±Î½Î±Î¶Î®Ï\84ηÏ\83ηÏ\82',
+'vector-action-unprotect' => 'Î\91λλαγή Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82',
+'vector-simplesearch-preference' => 'Î\95νεÏ\81γοÏ\80οίηÏ\83η Î±Ï\80λοÏ\80οιημένηÏ\82 Î¼Ï\80άÏ\81αÏ\82 Î±Î½Î±Î¶Î®Ï\84ηÏ\83ηÏ\82 (μÏ\8cνον Vector skin)',
 'vector-view-create' => 'Δημιουργία',
 'vector-view-edit' => 'Επεξεργασία',
 'vector-view-history' => 'Προβολή ιστορικού',
 'vector-view-view' => 'Ανάγνωση',
 'vector-view-viewsource' => 'Εμφάνιση κώδικα',
 'actions' => 'Ενέργειες',
-'namespaces' => 'ΠεÏ\81ιοÏ\87έÏ\82 ονομάτων',
+'namespaces' => 'ΧÏ\8eÏ\81οι ονομάτων',
 'variants' => 'Παραλλαγές',
 
+'navigation-heading' => 'Μενού πλοήγησης',
 'errorpagetitle' => 'Σφάλμα',
 'returnto' => 'Επιστροφή στη σελίδα $1.',
 'tagline' => 'Από {{SITENAME}}',
@@ -533,9 +536,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 επεξεργασιών}}.',
@@ -543,8 +546,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' => 'Συζήτηση',
@@ -582,7 +585,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}}:Πνευματικά Δικαιώματα',
@@ -627,7 +630,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;',
@@ -635,16 +638,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' => 'Ειδική σελίδα',
@@ -668,12 +671,12 @@ $1',
 # General errors
 'error' => 'Σφάλμα',
 'databaseerror' => 'Σφάλμα στη βάση δεδομένων',
-'dberrortext' => 'ΣημειÏ\8eθηκε Ï\83Ï\85νÏ\84ακÏ\84ικÏ\8c Ï\83Ï\86άλμα Ï\83ε Î±Î¯τημα προς τη βάση δεδομένων.
+'dberrortext' => 'ΣημειÏ\8eθηκε Ï\83Ï\85νÏ\84ακÏ\84ικÏ\8c Ï\83Ï\86άλμα Ï\83ε ÎµÏ\81Ï\8eτημα προς τη βάση δεδομένων.
 Πιθανόν να πρόκειται για ένδειξη σφάλματος στο λογισμικό.
 Το τελευταίο αίτημα προς τη βάση δεδομένων που επιχειρήθηκε ήταν:
-<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"
@@ -705,11 +708,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' => 'Οι ενημερώσεις για αυτή τη σελίδα είναι απενεργοποιημένες. Τα δεδομένα εδώ δεν θα ανανεωθούν προς το παρόν.',
@@ -719,14 +724,17 @@ $1',
 'viewsource' => 'Εμφάνιση κώδικα',
 'viewsource-title' => 'Προβολή πηγής για $1',
 'actionthrottled' => 'Περιορισμένη ενέργεια',
-'actionthrottledtext' => 'Σαν μέτρο anti-spam, περιορίζεται η πολλαπλή επανάληψη αυτής της ενέργειας σε μικρό χρονικό διάστημα. Ξεπεράσατε αυτό το όριο. Παρακαλούμε δοκιμάστε ξανά σε λίγα λεπτά.',
-'protectedpagetext' => 'Αυτή η σελίδα έχει κλειδωθεί για αποτροπή επεξεργασίας της.',
+'actionthrottledtext' => 'Σαν μέτρο κατά του spam, υπάρχει όριο στην εκτέλεση αυτής της ενέργειας πολλές φορές μέσα σε μικρό χρονικό διάστημα και έχετε ξεπεράσει αυτό το όριο.
+Παρακαλούμε δοκιμάστε ξανά σε λίγα λεπτά.',
+'protectedpagetext' => 'Αυτή η σελίδα έχει προστατευθεί για πρόληψη επεξεργασίας ή άλλες ενέργειες.',
 'viewsourcetext' => 'Μπορείτε να δείτε και να αντιγράψετε τον κώδικα αυτής της σελίδας:',
 'viewyourtext' => "Μπορείτε να προβάλετε και να αντιγράψετε τον κώδικα των '''επεξεργασιών σας''' σε αυτήν τη σελίδα:",
-'protectedinterface' => 'Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό, και έχει κλειδωθεί για πρόληψη τυχόν βανδαλισμού.',
-'editinginterface' => "'''Προσοχή:''' Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτή τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για τους άλλους χρήστες. Εάν θέλετε να διορθώσετε τη μετάφραση, μπορείτε να χρησιμοποιήσετε το [//translatewiki.net/wiki/Main_Page?setlang=el translatewiki.net], που ασχολείται με τις μεταφράσεις των μηνυμάτων MediaWiki.",
+'protectedinterface' => 'Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για αποτροπή τυχόν βανδαλισμού.
+
+Για να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα 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, επειδή περιέχει προσωπικές ρυθμίσεις άλλου χρήστη.',
@@ -737,6 +745,8 @@ $2',
 'filereadonlyerror' => 'Δεν είναι δυνατή η τροποποίηση του αρχείου " $1 " επειδή το αποθετήριο αρχείων " $2 " είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.
 
 Ο διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: " $3 ".',
+'invalidtitle-knownnamespace' => 'Μη έγκυρος τίτλος με χώρο ονομάτων «$2» και κείμενο «$3»',
+'invalidtitle-unknownnamespace' => 'Μη έγκυρος τίτλος με άγνωστο αριθμό χώρου ονομάτων $1 και κείμενο «$2»',
 'exception-nologin' => 'Δεν έχετε συνδεθεί.',
 'exception-nologin-text' => 'Αυτή η σελίδα ή η ενέργεια απαιτεί να είστε {{GENDER:|συνδεμένος|συνδεμένη}} στο wiki.',
 
@@ -750,15 +760,16 @@ $2',
 
 Μπορείτε να παραμείνετε στο {{SITENAME}} ανώνυμα, ή μπορείτε <span class='plainlinks'>[$1 να συνδεθείτε ξανά]</span> με το ίδιο ή με διαφορετικό (εάν έχετε) όνομα χρήστη.
 Έχετε υπόψη σας πως αρκετές σελίδες θα συνεχίσουν να εμφανίζονται κανονικά, σαν να μην έχετε αποσυνδεθεί, μέχρι να καθαρίσετε τη λανθάνουσα μνήμη του φυλλομετρητή σας.",
-'welcomecreation' => '== Καλώς ήλθατε, $1! ==
-Ο λογαριασμός σας έχει δημιουργηθεί.
-Μην ξεχάσετε να ρυθμίσετε τις [[Special:Preferences|προτιμήσεις]] σας στο {{SITENAME}}.',
+'welcomeuser' => 'Καλώς ορίσατε, $1!',
+'welcomecreation-msg' => 'Ο λογαριασμός σας έχει δημιουργηθεί.
+Μην ξεχάσετε να αλλάξετε τις [[Special:Preferences|{{SITENAME}} προτιμήσεις]] σας.',
 'yourname' => 'Όνομα χρήστη:',
 'yourpassword' => 'Κωδικός:',
 'yourpasswordagain' => 'Πληκτρολογήστε ξανά τον κωδικό',
 'remembermypassword' => 'Διατήρηση του κωδικού πρόσβασης σε αυτόν τον υπολογιστή (για μέγιστο $1 {{PLURAL:$1|ημέρα|ημέρες}})',
 'securelogin-stick-https' => 'Μείνετε συνδεδεμένοι με HTTPS μετά την είσοδο',
 'yourdomainname' => 'Το domain σας:',
+'password-change-forbidden' => 'Δεν μπορείτε να αλλάξετε τους κωδικούς πρόσβασης σε αυτό το βίκι.',
 'externaldberror' => 'Είτε συνέβη κάποιο σφάλμα εξωτερικής πιστοποίησης της βάσης δεδομένων είτε δεν σας έχει επιτραπεί να ενημερώσετε τον εξωτερικό σας λογαριασμό.',
 'login' => 'Είσοδος',
 'nav-login-createaccount' => 'Δημιουργία Λογαριασμού/Είσοδος',
@@ -816,7 +827,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' => 'Δεν έχει ορισθεί ηλεκτρονική διεύθυνση, οι λειτουργίες που ακολουθούν δεν θα είναι δυνατόν να ολοκληρωθούν.',
@@ -838,7 +849,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
@@ -885,9 +896,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' => 'Αλλαγή της διεύθυνσης ηλεκτρονικού ταχυδρομείου',
@@ -897,6 +908,7 @@ $2
 'changeemail-oldemail' => 'Τρέχουσα διεύθυνση ηλεκτρονικού ταχυδρομείου:',
 'changeemail-newemail' => 'Νέα διεύθυνση ηλεκτρονικού ταχυδρομείου:',
 'changeemail-none' => '(κανένα)',
+'changeemail-password' => 'Ο κωδικός πρόσβασής σας στο εγχείρημα {{SITENAME}}:',
 'changeemail-submit' => 'Αλλαγή διεύθυνσης ηλεκτρονικού ταχυδρομείου',
 'changeemail-cancel' => 'Ακύρωση',
 
@@ -911,8 +923,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',
@@ -986,17 +998,20 @@ $2
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} να αναζητήσετε τα σχετικά ιστορικά],
 ή να [{{fullurl:{{FULLPAGENAME}}|action=edit}} επεξεργαστείτε τη σελίδα αυτή]</span>.',
 'noarticletext-nopermission' => 'Δεν υπάρχει κείμενο σε αυτή τη σελίδα αυτή τη στιγμή.
-Μπορείτε να [[Special:Search/{{PAGENAME}}|αναζητήσετε αυτόν τον τίτλο]] σε άλλες σελίδες,
-ή <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} να αναζητήσετε τα σχετικά αρχεία]</span>.',
+Μπορείτε να [[Special:Search/{{PAGENAME}}|αναζητήσετε αυτόν τον τίτλο σελίδας]] σε άλλες σελίδες,
+ή <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} να αναζητήσετε τα σχετικά αρχεία]</span>, αλλά δεν έχεις την άδεια να δημιουργήσεις αυτή τη σελίδα.',
+'missing-revision' => 'Δεν υπάρχει αναθεώρηση με αριθμό $1 για τη σελίδα με όνομα «{{PAGENAME}}».
+
+Αυτό συνήθως προκαλείται από παλιό σύνδεσμο ιστορικού προς σελίδα που έχει διαγραφεί.
+Λεπτομέρειες θα βρείτε στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ημερολόγιο καταγραφής διαγραφών].',
 'userpage-userdoesnotexist' => 'Ο Λογαριασμός του χρήστη "<nowiki>$1</nowiki>" δεν είναι καταχωρημένος. Παρακαλώ δείτε αν θα θέλατε να δημιουργήσετε/επεξεργαστείτε αυτή τη σελίδα.',
 'userpage-userdoesnotexist-view' => 'Ο λογαριασμός χρήστη "$1" δεν είναι εγγεγραμμένος.',
 'blocked-notice-logextract' => 'Επί του παρόντος, αυτός ο χρήστης έχει υποστεί φραγή. Παρακάτω παρέχεται για αναφορά η πιο πρόσφατη καταχώρηση του αρχείου φραγών.',
-'clearyourcache' => "''' Σημείωση:''' μετά την αποθήκευση, ίσως χρειαστεί να παρακάμψετε το χώρο προσωρινής αποθήκευσης του προγράμματος περιήγησής σας για να δείτε τις αλλαγές.
- * '''Firefox / Safari:''' Κρατήστε ''Shift'' κάνοντας κλικ στο κουμπί ''Ανανέωση'' ή πατήστε ''Ctrl-F5'' ή ''Ctrl-R'' ('' ⌘-R'' σε Mac)
- * '''Google Chrome:''' Πιέστε τα πλήκτρα ''Ctrl-Shift-R'' (''⌘-Shift-R'' σε Mac)
- * '''Internet Explorer:''' Κρατήστε ''Ctrl'' κάνοντας κλικ στην επιλογή ''Ανανέωση'', ή πατήστε ''Ctrl-F5'' 
- * '''Konqueror:''' Κάντε κλικ στο κουμπί '' Ανανέωση'' ή  πιέστε το πλήκτρο ''F5''
- * '''Opera:''' Εκκαθαρίστε την προσωρινή μνήμη στο ''Εργαλεία → Προτιμήσεις''",
+'clearyourcache' => "''' Σημείωση:''' μετά την αποθήκευση, ίσως χρειαστεί να παρακάμψετε την προσωρινή μνήμη του προγράμματος περιήγησής σας για να δείτε τις αλλαγές.
+ * '''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 του χρήστη -δεν το έχετε ακόμα αποθηκεύσει! '''",
@@ -1010,7 +1025,7 @@ $2
 'note' => "'''Προσοχή: '''",
 'previewnote' => "'''Να θυμάστε ότι αυτή είναι μόνο μια προεπισκόπηση.'''
 Οι αλλαγές σας δεν έχουν ακόμη αποθηκευτεί!",
-'continue-editing' => 'ΣÏ\85νέÏ\87εια επεξεργασίας',
+'continue-editing' => 'Î\9cεÏ\84αβείÏ\84ε Ï\83Ï\84ην Ï\80εÏ\81ιοÏ\87ή επεξεργασίας',
 'previewconflict' => 'Αυτή η προεπισκόπηση απεικονίζει το κείμενο στην επάνω περιοχή επεξεργασίας κειμένου, όπως θα εμφανιστεί εάν επιλέξετε να το αποθηκεύσετε.',
 'session_fail_preview' => "'''Συγγνώμη! Δεν μπορούσαμε να διεκπεραιώσουμε την επεξεργασία σας λόγω απώλειας των δεδομένων της συνεδρίας.
 Παρακαλώ προσπαθήστε ξανά. Αν δεν δουλεύει ξανά, δοκιμάστε να αποσυνδεθείτε και να συνδεθείτε πάλι.'''",
@@ -1034,8 +1049,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' => 'Διαφορές',
@@ -1065,7 +1080,6 @@ $2
 'template-semiprotected' => '(ημιπροστατευμένη)',
 'hiddencategories' => 'Αυτή η σελίδα είναι μέλος {{PLURAL:$1|μίας κρυμμένης κατηγορίας|$1 κρυμμένων κατηγοριών}}',
 'edittools' => '<!-- Το κείμενο εδώ θα φαίνεται κάτω από τις φόρμες επεξεργασίας και επιφόρτωσης. -->',
-'nocreatetitle' => 'Περιορισμένη δημιουργία σελίδων',
 'nocreatetext' => 'Το {{SITENAME}} έχει περιορίσει την ικανότητα δημιουργίας νέων σελίδων.
 Μπορείτε να πάτε πίσω και να επεξεργαστείτε μια υπάρχουσα σελίδα, ή να [[Special:UserLogin|συνδεθείτε ή να δημιουργήσετε ένα λογαριασμό]].',
 'nocreate-loggedin' => 'Δεν έχετε άδεια να δημιουργήσετε νέες σελίδες.',
@@ -1090,6 +1104,14 @@ $2
 'edit-already-exists' => 'Δεν ήταν εφικτό να δημιουργηθεί η νέα σελίδα.
 Υπάρχει ήδη.',
 'defaultmessagetext' => 'Προεπιλεγμένο κείμενο μηνύματος',
+'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' => 'Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.
@@ -1105,6 +1127,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' => 'Η επεξεργασία μπορεί να αναστραφεί. Παρακαλώ ελέγξτε την σύγκριση παρακάτω για να επιβεβαιώσετε ότι αυτό είναι το οποίο θέλετε να κάνετε, και έπειτα αποθηκεύστε τις αλλαγές παρακάτω για να τελειώσετε την αναστροφή της επεξεργασίας.',
@@ -1237,8 +1260,10 @@ $1",
 Παρακαλώ ελέξτε τα αρχεία καταγραφών.',
 'revdelete-only-restricted' => 'Σφάλμα κατα την απόκρυψη του αντικειμένου στις $2, $1: δεν μπορείτε να αποκρύψετε τη προβολή στοιχείων από τους διαχειριστές χωρίς ταυτόχρονα να επιλέξετε και μία από τις άλλες επιλογές απόκρυψης.',
 'revdelete-reason-dropdown' => '*Συνήθεις αιτίες διαγραφής
-** Παραβίαση δικαιωμάτων
-** Ανάρμοστες προσωπικές πληροφορίες',
+** Παραβίαση πνευματικών δικαιωμάτων
+** Ανάρμοστα σχόλια ή προσωπικές πληροφορίες 
+** Ανάρμοστο όνομα χρήστη 
+** Εν δυνάμει δυσφημιστική πληροφορία',
 'revdelete-otherreason' => 'Άλλος/πρόσθετος λόγος:',
 'revdelete-reasonotherlist' => 'Άλλος λόγος',
 'revdelete-edit-reasonlist' => 'Επεξεργασία λόγων διαγραφής',
@@ -1289,6 +1314,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' => 'Αποτελέσματα αναζήτησης',
@@ -1363,7 +1392,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Προτιμήσεις',
-'mypreferences' => 'Î\9fι Ï\80Ï\81οÏ\84ιμήÏ\83ειÏ\82 Î¼Î¿Ï\85',
+'mypreferences' => 'ΠÏ\81οÏ\84ιμήÏ\83ειÏ\82',
 'prefs-edits' => 'Αριθμός επεξεργασιών:',
 'prefsnologin' => 'Δεν έχετε συνδεθεί.',
 'prefsnologintext' => 'Πρέπει να έχετε <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} συνδεθεί]</span> για να καθορίσετε τις προτιμήσεις χρήστη.',
@@ -1385,7 +1414,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' => 'Εμφάνιση',
@@ -1426,7 +1455,7 @@ $1",
 'timezoneregion-indian' => 'Ινδικός Ωκεανός',
 'timezoneregion-pacific' => 'Ειρηνικός Ωκεανός',
 'allowemail' => 'Ενεργοποίηση παραλαβής μηνύματος ηλεκτρονικού ταχυδρομείου από άλλους χρήστες',
-'prefs-searchoptions' => 'Î\95Ï\80ιλογέÏ\82 Î±Î½Î±Î¶Î®Ï\84ηÏ\83ηÏ\82',
+'prefs-searchoptions' => 'Î\91ναζήÏ\84ηÏ\83η',
 'prefs-namespaces' => 'Περιοχές ονομάτων',
 'defaultns' => 'Ειδάλλως αναζήτηση σε αυτές τις περιοχές ονομάτων:',
 'default' => 'προεπιλογή',
@@ -1438,9 +1467,9 @@ $1",
 'prefs-emailconfirm-label' => 'Επιβεβαίωση e-mail:',
 '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' => 'Γλώσσα:',
@@ -1551,6 +1580,7 @@ $1",
 'right-writeapi' => 'Χρήση του API για επεξεργασία',
 'right-delete' => 'Διαγραφή σελίδων',
 'right-bigdelete' => 'Διαγραφή σελίδων με εκτεταμένο ιστορικό',
+'right-deletelogentry' => 'Διαγραφή και επαναφορά διαγραφής συγκεκριμένων καταχωρήσεων στη λίστα καταγραφών',
 'right-deleterevision' => 'Διαγραφή και επαναφορά συγκεκριμένων εκδόσεων σελίδων',
 'right-deletedhistory' => 'Προβολή διαγραμμένων εκδόσεων του ιστορικού, χωρίς το σχετικό κείμενο',
 'right-deletedtext' => 'Εμφάνιση διεγραμμένου κειμένου και αλλαγών ανάμεσα στις διεγραμμένες εκδόσεις',
@@ -1587,12 +1617,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',
-'rightsnone' => '(κανένα)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'να διαβάσετε αυτή τη σελίδα',
@@ -1830,6 +1861,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.',
@@ -1839,15 +1871,19 @@ $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".',
 'backend-fail-internal' => 'Παρουσιάστηκε ένα άγνωστο σφάλμα στην αποθήκευση παρασκηνίου "$1".',
 'backend-fail-contenttype' => 'Δεν μπόρεσε να προσδιοριστεί ο τύπος περιεχομένου του αρχείου για την αποθήκευση σε "$1".',
+'backend-fail-usable' => 'Δεν ήταν δυνατή η ανάγνωση ή εγγραφή του αρχείου "$1" λόγω ανεπαρκών δικαιωμάτων ή απουσίας καταλόγων/φακέλων.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Δεν μπορέσατε να  ξεκλειδώσετε το " $1 ". Δεν είναι κλειδωμένο.',
-'lockmanager-fail-closelock' => 'Δεν μπόρεσε να κλείσει το κλειδωμένο αρχείο για " $1 ".',
+'lockmanager-fail-closelock' => 'Δεν μπόρεσε να κλείσει το κλειδωμένο αρχείο για "$1".',
+'lockmanager-fail-deletelock' => 'Δεν μπόρεσε να διαγράψει το αρχείο κλειδώματος για το "$1".',
+'lockmanager-fail-openlock' => 'Δεν μπόρεσε να ανοίξει το αρχείο κλειδώματος για το "$1".',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Παρουσιάστηκε σφάλμα κατά το άνοιγμα του αρχείου για ZIP ελέγχους.',
@@ -1962,6 +1998,7 @@ $1',
 'shared-repo-from' => 'από το $1',
 'shared-repo' => 'ένα κοινό εναποθετήριο',
 'shared-repo-name-wikimediacommons' => 'Κοινά Wikimedia',
+'upload-disallowed-here' => 'Δεν μπορείτε να αντικαταστήσετε αυτό το αρχείο.',
 
 # File reversion
 'filerevert' => 'Επαναφορά $1',
@@ -2032,7 +2069,7 @@ $1',
 'statistics-edits' => 'Επεξεργασίες σελίδων από τη δημιουργία του εγχειρήματος {{SITENAME}}',
 'statistics-edits-average' => 'Μέσος όρος επεξεργασιών ανά σελίδα',
 'statistics-views-total' => 'Συνολικές εμφανίσεις',
-'statistics-views-total-desc' => ' Επισκέψεις σε μη  υπάρχουσες σελίδες και ειδικές σελίδες δεν συμπεριλαμβάνονται',
+'statistics-views-total-desc' => 'Επισκέψεις σε μη υπάρχουσες σελίδες και ειδικές σελίδες δεν συμπεριλαμβάνονται',
 'statistics-views-peredit' => 'Εμφανίσεις ανά επεξεργασία',
 'statistics-users' => 'Εγγεγραμμένοι [[Special:ListUsers|χρήστες]]',
 'statistics-users-active' => 'Ενεργοί χρήστες',
@@ -2066,6 +2103,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|αναθεώρηση|αναθεωρήσεις}}',
@@ -2094,6 +2132,7 @@ $1',
 'mostlinkedtemplates' => 'Περισσότερο χρησιμοποιούμενα πρότυπα',
 'mostcategories' => 'Άρθρα με τις περισσότερες κατηγορίες',
 'mostimages' => 'Περισσότερο χρησιμοποιούμενα αρχεία',
+'mostinterwikis' => 'Σελίδες με τους περισσότερους διαγλωσσικούς συνδέσμους',
 'mostrevisions' => 'Άρθρα με τις περισσότερες αναθεωρήσεις',
 'prefixindex' => 'Όλες οι σελίδες με πρόθεμα',
 'prefixindex-namespace' => 'Όλες οι σελίδες με πρόθεμα (περιοχής  $1)',
@@ -2147,6 +2186,7 @@ $1',
 'alllogstext' => 'Εποπτική εμφάνιση όλων των ενεργειών φόρτωσης αρχείων, διαγραφής, προστασίας, φραγής και όλων των καταγραφών των διαχειριστών στο αρχείο γεγονότων του {{SITENAME}}. Μπορείτε να περιορίσετε τα αποτελέσματα που εμφανίζονται επιλέγοντας συγκεκριμένο είδος γεγονότων, όνομα χρήστη ή τη σελίδα που επηρεάστηκε.',
 'logempty' => 'Δεν υπάρχουν στοιχεία που να ταιριάζουν στο αρχείο καταγραφών.',
 'log-title-wildcard' => 'Αναζήτησε τίτλους που αρχίζουν με αυτό το κείμενο',
+'showhideselectedlogentries' => 'Εμφάνιση/απόκρυψη επιλεγμένων καταχωρήσεων στη λίστα καταγραφών',
 
 # Special:AllPages
 'allpages' => 'Όλες οι σελίδες',
@@ -2190,9 +2230,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 />
-Υποστηριζόμενα πρωτόκολλα: <code> $1 </code> (μην προσθέτετε οποιαδήποτε από αυτές στην αναζήτησή σας).',
+'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 />
+Υποστηριζόμενα πρωτόκολλα: <code>$1</code> (αν δεν οριστεί πρωτόκολλο η προεπιλογή είναι http://).',
 'linksearch-line' => 'Η $1 συνδεδεμένη από την $2',
 'linksearch-error' => 'Λέξεις-μπαλαντέρ μπορεί να εμφανιστούν μόνο στην αρχή τού ονόματος ιστοτόπου (hostname).',
 
@@ -2211,10 +2251,6 @@ $1',
 'activeusers-hidesysops' => 'Απόκρυψη διαχειριστών',
 'activeusers-noresult' => 'Δεν βρέθηκε χρήστης.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Αρχείο δημιουργίας χρηστών',
-'newuserlogpagetext' => 'Αυτή είναι μια καταγραφή δημιουργίας χρηστών.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Δικαιώματα ομάδων χρηστών',
 'listgrouprights-summary' => 'Ακόλουθεί μία λίστα με τις ομάδες χρηστών σε αυτό το wiki καθώς και με τα δικαιώματα πρόσβασης αυτών.
@@ -2243,7 +2279,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 χρήστη είναι απενεργοποιημένο',
@@ -2282,11 +2319,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' => 'Παρακολούθηση',
@@ -2314,44 +2348,49 @@ $1',
 
 'enotif_mailer' => 'Σύστημα ειδοποίησης μέσω αλληλογραφίας του {{SITENAME}}',
 'enotif_reset' => 'Σημειώστε όλες τις σελίδες ως αναγνωσμένες.',
-'enotif_newpagetext' => 'Αυτή είναι μια νέα σελίδα.',
 'enotif_impersonal_salutation' => 'Χρήστης του ιστοτόπου "{{SITENAME}}"',
-'changed' => 'έχει αλλάξει',
-'created' => 'δημιουργήθηκε',
-'enotif_subject' => 'Η σελίδα $PAGETITLE του εγχειρήματος {{SITENAME}} $CHANGEDORCREATED από το χρήστη $PAGEEDITOR',
+'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' => 'Διαγραφή σελίδας',
@@ -2501,7 +2540,7 @@ $UNWATCHURL
 'undeletedrevisions' => '{{PLURAL:$1|τροποποίηση|τροποποιήσεις}} αποκαταστάθηκαν',
 'undeletedrevisions-files' => '$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}} και $2 {{PLURAL:$2|αρχείο|αρχεία}} επαναφέρθηκαν',
 'undeletedfiles' => '$1 {{PLURAL:$1|αρχείο|αρχεία}} επαναφέρθηκαν',
-'cannotundelete' => 'Î\97 ÎµÏ\80αναÏ\86οÏ\81ά Î±Ï\80έÏ\84Ï\85Ï\87ε: ÎºÎ¬Ï\80οιοÏ\82 Î¬Î»Î»Î¿Ï\82 Î¼Ï\80οÏ\81εί Î½Î± Î­Ï\87ει ÎµÏ\80αναÏ\86έÏ\81ει Ï\84η Ï\83ελίδα Ï\80Ï\81Ï\8eÏ\84οÏ\82.',
+'cannotundelete' => 'Î\97 Î±Î½Î±Î¯Ï\81εÏ\83η Î´Î¹Î±Î³Ï\81αÏ\86ήÏ\82 Î±Ï\80έÏ\84Ï\85Ï\87ε: $1',
 'undeletedpage' => "'''Η $1 έχει επαναφερθεί'''
 
 Συμβουλευτείτε το [[Special:Log/delete|αρχείο καταγραφής διαγραφών]] για ένα μητρώο των πρόσφατων διαγραφών και επαναφορών.",
@@ -2527,14 +2566,14 @@ $1',
 'namespace' => 'Περιοχή:',
 'invert' => 'Αντιστροφή της επιλογής',
 'tooltip-invert' => 'Επιλέξτε αυτό το πλαίσιο για να αποκρύψετε αλλαγές σε σελίδες μέσα στον επιλεγμένο χώρο ονομάτων (και των συσχετικών χώρων ονομάτων, εάν επιλεγχθούν)',
-'namespace_association' => 'Συσχετισμένο namespace',
+'namespace_association' => 'Συσχετισμένος ονοματοχώρος',
 'tooltip-namespace_association' => 'Επιλέξτε αυτό το πλαίσιο για να συμπεριλάβετε τον χώρο ονομάτων συζήτησης ή θέματος που σχετίζονται με τον επιλεγμένο χώρο ονομάτων',
 'blanknamespace' => '(Αρχική περιοχή)',
 
 # Contributions
-'contributions' => 'Συνεισφορές χρήστη',
+'contributions' => 'Συνεισφορές {{GENDER:$1|χρήστη}}',
 'contributions-title' => 'Συνεισφορές του χρήστη $1',
-'mycontris' => 'Î\9fι Ï\83Ï\85νειÏ\83Ï\86οÏ\81έÏ\82 Î¼Î¿Ï\85',
+'mycontris' => 'ΣÏ\85νειÏ\83Ï\86οÏ\81έÏ\82',
 'contribsub2' => 'Για τον/την $1 ($2)',
 'nocontribs' => 'Δεν βρέθηκαν αλλαγές με αυτά τα κριτήρια.',
 'uctop' => '(τελευταία)',
@@ -2574,7 +2613,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 ανακατευθύνσεις',
 'whatlinkshere-hidetrans' => '$1 υπερκλεισμοί',
 'whatlinkshere-hidelinks' => '$1 συνδέσμων',
-'whatlinkshere-hideimages' => '$1 Ï\83Ï\8dνδεÏ\83μοι ÎµÎ¹ÎºÏ\8cνων',
+'whatlinkshere-hideimages' => '$1 Ï\83Ï\8dνδεÏ\83μοι Î±Ï\81Ï\87είων',
 'whatlinkshere-filters' => 'Φίλτρα',
 
 # Block/unblock
@@ -2658,7 +2697,7 @@ $1',
 'blocklink' => 'φραγή',
 'unblocklink' => 'Άρση φραγής',
 'change-blocklink' => 'αλλαγή φραγής',
-'contribslink' => 'Συνεισφορές/Προσθήκες',
+'contribslink' => 'συνεισφορές',
 'emaillink' => 'αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου',
 'autoblocker' => 'Έχετε υποστεί αυτόματα φραγή από το σύστημα επειδή χρησιμοποιείτε την ίδια διεύθυνση IP με το χρήστη "[[User:$1|$1]]". Η αιτιολογία για την φραγή του $1 είναι "$2".',
 'blocklogpage' => 'Αρχείο καταγραφής φραγών',
@@ -2908,6 +2947,9 @@ $1',
 'import-error-edit' => 'Η σελίδα "$1" δεν εισήχθηκε επειδή δεν επιτρέπεται να το επεξεργαστείτε.',
 'import-error-create' => 'Η σελίδα "$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' => 'Αρχείο καταγραφής εισαγωγών',
@@ -2938,8 +2980,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' => 'Παλιές αναθεωρήσεις του άρθρου.',
@@ -2950,25 +2992,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' => 'Άρθρο',
@@ -3045,6 +3087,7 @@ $1',
 'spambot_username' => 'Καθαρισμός spam από το MediaWiki',
 'spam_reverting' => 'Επαναφορά στην τελευταία έκδοση που δεν περιέχει συνδέσμους στο $1',
 'spam_blanking' => 'Όλες οι αναθεωρήσεις περιείχαν συνδέσμους προς το $1, εξάλειψη',
+'spam_deleting' => 'Διαγραφή όλων των αναθεωρήσεων που περιείχαν συνδέσμους προς το $1',
 
 # Info page
 'pageinfo-title' => 'Πληροφορίες για "$1"',
@@ -3059,18 +3102,21 @@ $1',
 'pageinfo-article-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-edits' => 'Πρόσφατος αριθμός επεξεργασιών (σε διάστημα $1)',
 'pageinfo-recent-authors' => 'Πρόσφατος αριθμός μοναδικών συντακτών',
 'pageinfo-magic-words' => '{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)',
@@ -3080,7 +3126,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' => 'Κλασσικό',
@@ -3131,6 +3182,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, ονομαστικό μέγεθος σε pixels: $1 × $2, μέγεθος αρχείου: $3',
+'svg-long-error' => 'Μη έγκυρο αρχείο SVG: $1',
 'show-big-image' => 'Πλήρης ανάλυση',
 'show-big-image-preview' => 'Μέγεθος αυτής της προεπισκόπησης: $1 .',
 'show-big-image-other' => 'Άλλες {{PLURAL:$2|ανάλυση|αναλύσεις}}: $1.',
@@ -3140,6 +3193,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' => 'Πινακοθήκη νέων εικόνων',
@@ -3159,6 +3214,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 ώρα|$1 ώρες}}',
 'days' => '{{PLURAL:$1|$1 μέρα|$1 μέρες}}',
 'ago' => '$1 πριν',
+'just-now' => 'μόλις τώρα',
 
 # Bad image list
 'bad_image_list' => 'Η σύνταξη είναι ως εξής:
@@ -3648,7 +3704,8 @@ $5
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Η ενσωμάτωση εξωτερικών ιστοσελίδων σε αυτό το Wiki είναι απενεργοποιημένη.]',
-'scarytranscludefailed' => '[Η προσκόμιση προτύπου για το $1 απέτυχε.]',
+'scarytranscludefailed' => '[Η λήψη προτύπου για το $1 απέτυχε.]',
+'scarytranscludefailed-httpstatus' => '[Η λήψη προτύπου απέτυχε για  το $1: HTTP  $2]',
 'scarytranscludetoolong' => '[Η διεύθυνση URL είναι πολύ μεγάλη.]',
 
 # Delete conflict
@@ -3756,8 +3813,9 @@ $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· είτε της δεύτερης έκδοσης της άδειας, είτε (κατ' επιλογή σας) οποιασδήποτε επόμενης έκδοσης.
 
 Το MediaWiki διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ· ούτε καν την σιωπηρή εγγύηση ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ή ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΕΝΑ ΣΥΓΚΕΚΡΙΜΕΝΟ ΣΚΟΠΟ. Βλ. GNU General Public License για περισσότερες λεπτομέρειες.
@@ -3766,6 +3824,8 @@ $5
 'version-software' => 'Εγκατεστημένο λογισμικό',
 'version-software-product' => 'Προϊόν',
 'version-software-version' => 'Έκδοση',
+'version-entrypoints' => 'Διευθύνσεις URL σημείων εισόδου',
+'version-entrypoints-header-entrypoint' => 'Σημείο εισόδου',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -3844,7 +3904,7 @@ $5
 'compare-revision-not-exists' => 'Η αναθεώρηση που καθορίσατε δεν υπάρχει.',
 
 # Database error messages
-'dberr-header' => 'Αυτό το wiki έχει ένα πρόβλημα',
+'dberr-header' => 'Αυτό το wiki έχει πρόβλημα',
 'dberr-problems' => 'Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.',
 'dberr-again' => 'Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.',
 'dberr-info' => '(Δεν μπορεί να επικοινωνήσει με τον εξυπηρετητή της βάσης δεδομένων: $1)',
@@ -3869,11 +3929,13 @@ $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-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-revision-legacy' => '$1 κρυφά άλλαξαν την  ορατότητα των αναθεωρήσεων στη σελίδα $3',
 'revdelete-content-hid' => 'το περιεχόμενο αποκρύφθηκε',
 'revdelete-summary-hid' => 'Η σύνοψη επεξεργασίας αποκρύφθηκε',
@@ -3889,11 +3951,14 @@ $5
 'logentry-move-move_redir-noredirect' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε την σελίδα $3 στην $4 πάνω από ανακατεύθυνση χωρίς να αφήσει ανακατεύθυνση',
 'logentry-patrol-patrol' => '{{GENDER:$1|Ο|Η}} $1 σήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη',
 'logentry-patrol-patrol-auto' => '{{GENDER:$1|Ο|Η}} $1 αυτόματα σήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη',
-'logentry-newusers-newusers' => '{{GENDER:$1|Ο|Η}} $1 δημιούργησε έναν λογαριασμό χρήστη',
-'logentry-newusers-create' => '{{GENDER:$1|Ο|Η}} $1 δημιούργησε έναν λογαριασμό χρήστη',
-'logentry-newusers-create2' => '{{GENDER:$1|Ο|Η}} $1 δημιούργησε τον λογαριασμό χρήστη $3',
+'logentry-newusers-newusers' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
+'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  κάντε μια αναφορά σφάλματος].
@@ -3926,10 +3991,12 @@ $5
 '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' => 'Εσωτερικό σφάλμα: δεν είναι δυνατή η σύνδεση με το διακομιστή.',
@@ -3949,9 +4016,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
@@ -3962,7 +4029,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|χιλιετία|χιλιετίες}}',
 
 );
index ab5e6a3..ab27dc6 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',
@@ -569,6 +569,7 @@ $preloadedMessages = array(
        'searcharticle',
        'searchbutton',
        'sidebar',
+       'navigation-heading',
        'site-atom-feed',
        'sitenotice',
        'specialpages',
@@ -774,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',
@@ -807,71 +809,72 @@ XHTML id names.
 'namespaces'                     => 'Namespaces',
 'variants'                       => 'Variants',
 
-'errorpagetitle'    => 'Error',
-'returnto'          => 'Return to $1.',
-'tagline'           => 'From {{SITENAME}}',
-'help'              => 'Help',
-'search'            => 'Search',
-'searchbutton'      => 'Search',
-'go'                => 'Go',
-'searcharticle'     => 'Go',
-'history'           => 'Page history',
-'history_short'     => 'History',
-'updatedmarker'     => 'updated since my last visit',
-'printableversion'  => 'Printable version',
-'permalink'         => 'Permanent link',
-'print'             => 'Print',
-'view'              => 'View',
-'edit'              => 'Edit',
-'create'            => 'Create',
-'editthispage'      => 'Edit this page',
-'create-this-page'  => 'Create this page',
-'delete'            => 'Delete',
-'deletethispage'    => 'Delete this page',
-'undelete_short'    => 'Undelete {{PLURAL:$1|one edit|$1 edits}}',
-'viewdeleted_short' => 'View {{PLURAL:$1|one deleted edit|$1 deleted edits}}',
-'protect'           => 'Protect',
-'protect_change'    => 'change',
-'protectthispage'   => 'Protect this page',
-'unprotect'         => 'Change protection',
-'unprotectthispage' => 'Change protection of this page',
-'newpage'           => 'New page',
-'talkpage'          => 'Discuss this page',
-'talkpagelinktext'  => 'Talk',
-'specialpage'       => 'Special page',
-'personaltools'     => 'Personal tools',
-'postcomment'       => 'New section',
-'addsection'        => '+', # do not translate or duplicate this message to other languages
-'articlepage'       => 'View content page',
-'talk'              => 'Discussion',
-'views'             => 'Views',
-'toolbox'           => 'Toolbox',
-'userpage'          => 'View user page',
-'projectpage'       => 'View project page',
-'imagepage'         => 'View file page',
-'mediawikipage'     => 'View message page',
-'templatepage'      => 'View template page',
-'viewhelppage'      => 'View help page',
-'categorypage'      => 'View category page',
-'viewtalkpage'      => 'View discussion',
-'otherlanguages'    => 'In other languages',
-'redirectedfrom'    => '(Redirected from $1)',
-'redirectpagesub'   => 'Redirect page',
-'talkpageheader'    => '-', # do not translate or duplicate this message to other languages
-'lastmodifiedat'    => 'This page was last modified on $1, at $2.',
-'viewcount'         => 'This page has been accessed {{PLURAL:$1|once|$1 times}}.',
-'protectedpage'     => 'Protected page',
-'jumpto'            => 'Jump to:',
-'jumptonavigation'  => 'navigation',
-'jumptosearch'      => 'search',
-'view-pool-error'   => 'Sorry, the servers are overloaded at the moment.
+'navigation-heading' => 'Navigation menu',
+'errorpagetitle'     => 'Error',
+'returnto'           => 'Return to $1.',
+'tagline'            => 'From {{SITENAME}}',
+'help'               => 'Help',
+'search'             => 'Search',
+'searchbutton'       => 'Search',
+'go'                 => 'Go',
+'searcharticle'      => 'Go',
+'history'            => 'Page history',
+'history_short'      => 'History',
+'updatedmarker'      => 'updated since my last visit',
+'printableversion'   => 'Printable version',
+'permalink'          => 'Permanent link',
+'print'              => 'Print',
+'view'               => 'View',
+'edit'               => 'Edit',
+'create'             => 'Create',
+'editthispage'       => 'Edit this page',
+'create-this-page'   => 'Create this page',
+'delete'             => 'Delete',
+'deletethispage'     => 'Delete this page',
+'undelete_short'     => 'Undelete {{PLURAL:$1|one edit|$1 edits}}',
+'viewdeleted_short'  => 'View {{PLURAL:$1|one deleted edit|$1 deleted edits}}',
+'protect'            => 'Protect',
+'protect_change'     => 'change',
+'protectthispage'    => 'Protect this page',
+'unprotect'          => 'Change protection',
+'unprotectthispage'  => 'Change protection of this page',
+'newpage'            => 'New page',
+'talkpage'           => 'Discuss this page',
+'talkpagelinktext'   => 'Talk',
+'specialpage'        => 'Special page',
+'personaltools'      => 'Personal tools',
+'postcomment'        => 'New section',
+'addsection'         => '+', # do not translate or duplicate this message to other languages
+'articlepage'        => 'View content page',
+'talk'               => 'Discussion',
+'views'              => 'Views',
+'toolbox'            => 'Toolbox',
+'userpage'           => 'View user page',
+'projectpage'        => 'View project page',
+'imagepage'          => 'View file page',
+'mediawikipage'      => 'View message page',
+'templatepage'       => 'View template page',
+'viewhelppage'       => 'View help page',
+'categorypage'       => 'View category page',
+'viewtalkpage'       => 'View discussion',
+'otherlanguages'     => 'In other languages',
+'redirectedfrom'     => '(Redirected from $1)',
+'redirectpagesub'    => 'Redirect page',
+'talkpageheader'     => '-', # do not translate or duplicate this message to other languages
+'lastmodifiedat'     => 'This page was last modified on $1, at $2.',
+'viewcount'          => 'This page has been accessed {{PLURAL:$1|once|$1 times}}.',
+'protectedpage'      => 'Protected page',
+'jumpto'             => 'Jump to:',
+'jumptonavigation'   => 'navigation',
+'jumptosearch'       => 'search',
+'view-pool-error'    => 'Sorry, the servers are overloaded at the moment.
 Too many users are trying to view this page.
 Please wait a while before you try to access this page again.
 
 $1',
-'pool-timeout'      => 'Timeout waiting for the lock',
-'pool-queuefull'    => 'Pool queue is full',
-'pool-errorunknown' => 'Unknown error',
+'pool-timeout'       => 'Timeout waiting for the lock',
+'pool-queuefull'     => 'Pool queue is full',
+'pool-errorunknown'  => 'Unknown error',
 
 # 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'            => 'About {{SITENAME}}',
@@ -1018,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.
@@ -1031,20 +1034,20 @@ Query: $2',
 'actionthrottled'               => 'Action throttled',
 'actionthrottledtext'           => 'As an anti-spam measure, you are limited from performing this action too many times in a short space of time, and you have exceeded this limit.
 Please try again in a few minutes.',
-'protectedpagetext'             => 'This page has been protected to prevent editing.',
+'protectedpagetext'             => 'This page has been protected to prevent editing or other actions.',
 'viewsourcetext'                => 'You can view and copy the source of this page:',
 '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)',
-'cascadeprotected'              => 'This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the "cascading" option turned on:
+'cascadeprotected'              => 'This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the "cascading" option turned on:
 $2',
 'namespaceprotected'            => "You do not have permission to edit pages in the '''$1''' namespace.",
-'customcssprotected'            => "You do not have permission to edit this CSS page, because it contains another user's personal settings.",
-'customjsprotected'             => "You do not have permission to edit this JavaScript page, because it contains another user's personal settings.",
+'customcssprotected'            => "You do not have permission to edit this CSS page because it contains another user's personal settings.",
+'customjsprotected'             => "You do not have permission to edit this JavaScript page because it contains another user's personal settings.",
 'ns-specialprotected'           => 'Special pages cannot be edited.',
 'titleprotected'                => 'This title has been protected from creation by [[User:$1|$1]].
 The reason given is "\'\'$2\'\'".',
@@ -1066,8 +1069,8 @@ The administrator who locked it offered this explanation: "$3".',
 
 You can continue to use {{SITENAME}} anonymously, or you can <span class='plainlinks'>[$1 log in again]</span> as the same or as a different user.
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-'welcomecreation'            => '== Welcome, $1! ==
-Your account has been created.
+'welcomeuser'                => 'Welcome, $1!',
+'welcomecreation-msg'        => 'Your account has been created.
 Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'yourname'                   => 'Username:',
 'yourpassword'               => 'Password:',
@@ -1176,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
@@ -1190,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',
@@ -1259,6 +1263,7 @@ Temporary password: $2',
 'changeemail-oldemail' => 'Current e-mail address:',
 'changeemail-newemail' => 'New e-mail address:',
 'changeemail-none'     => '(none)',
+'changeemail-password' => 'Your {{SITENAME}} password:',
 'changeemail-submit'   => 'Change e-mail',
 'changeemail-cancel'   => 'Cancel',
 
@@ -1445,7 +1450,7 @@ The administrator who locked it offered this explanation: $1",
 The latest log entry is provided below for reference:",
 'semiprotectedpagewarning'         => "'''Note:''' This page has been protected so that only registered users can edit it.
 The latest log entry is provided below for reference:",
-'cascadeprotectedwarning'          => "'''Warning:''' This page has been protected so that only users with administrator privileges can edit it, because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
+'cascadeprotectedwarning'          => "'''Warning:''' This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
 'titleprotectedwarning'            => "'''Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.'''
 The latest log entry is provided below for reference:",
 'templatesused'                    => '{{PLURAL:$1|Template|Templates}} used on this page:',
@@ -1456,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.',
@@ -1477,7 +1481,7 @@ It gave no explanation.',
 'edit-gone-missing'                => 'Could not update the page.
 It appears to have been deleted.',
 'edit-conflict'                    => 'Edit conflict.',
-'edit-no-change'                   => 'Your edit was ignored, because no change was made to the text.',
+'edit-no-change'                   => 'Your edit was ignored because no change was made to the text.',
 'edit-already-exists'              => 'Could not create a new page.
 It already exists.',
 'addsection-preload'               => '', # do not translate or duplicate this message to other languages
@@ -1501,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]]',
@@ -1888,9 +1892,9 @@ This cannot be undone.',
 'prefs-emailconfirm-label'      => 'E-mail confirmation:',
 'prefs-textboxsize'             => 'Size of editing window',
 'youremail'                     => 'E-mail:',
-'username'                      => 'Username:',
-'uid'                           => 'User ID:',
-'prefs-memberingroups'          => 'Member of {{PLURAL:$1|group|groups}}:',
+'username'                      => '{{GENDER:$1|Username}}:',
+'uid'                           => '{{GENDER:$1|User}} ID:',
+'prefs-memberingroups'          => '{{GENDER:$2|Member}} of {{PLURAL:$1|group|groups}}:',
 'prefs-memberingroups-type'     => '$1', # only translate this message to other languages if you have to change it
 'prefs-registration'            => 'Registration time:',
 'prefs-registration-date-time'  => '$1', # only translate this message to other languages if you have to change it
@@ -1899,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.
@@ -2047,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',
@@ -2255,8 +2257,8 @@ 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.
-Uploading Java files is not allowed, because they can cause security restrictions to be bypassed.',
+'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:',
 'sourceurl'                   => 'Source URL:',
@@ -2314,6 +2316,7 @@ If the problem persists, contact an [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-notsame'       => 'A non-identical file already exists at "$1".',
 'backend-fail-invalidpath'   => '"$1" is not a valid storage path.',
 'backend-fail-delete'        => 'Could not delete file "$1".',
+'backend-fail-describe'      => 'Could not change metadata for file "$1".',
 'backend-fail-alreadyexists' => 'The file "$1" already exists.',
 'backend-fail-store'         => 'Could not store file "$1" at "$2".',
 'backend-fail-copy'          => 'Could not copy file "$1" to "$2".',
@@ -2353,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.',
@@ -2519,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',
 
@@ -2560,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]].',
@@ -2724,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',
 
@@ -2757,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.',
 
@@ -2777,10 +2780,6 @@ Supported protocols: <code>$1</code> (defaults to http:// if no protocol is spec
 '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.
@@ -2810,7 +2809,6 @@ There may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] a
 'emailuser-title-notarget' => 'E-mail user',
 'emailuser-summary'        => '', # do not translate or duplicate this message to other languages
 'emailpage'                => 'E-mail user',
-// Dummy GENDER to prevent warnings at translatewiki
 'emailpagetext'            => 'You can use the form below to send an e-mail message to this {{GENDER:$1|user}}.
 The e-mail address you entered in [[Special:Preferences|your user preferences]] will appear as the "From" address of the e-mail, so the recipient will be able to reply directly to you.',
 'usermailererror'          => 'Mail object returned error:',
@@ -2852,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, and the page will appear '''bolded''' in the [[Special:RecentChanges|list of recent changes]] to make it easier to pick out.",
+'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',
@@ -2865,7 +2863,7 @@ Future changes to this page and its associated talk page will be listed there, a
 '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}}.',
@@ -2881,20 +2879,23 @@ Future changes to this page and its associated talk page will be listed there, a
 
 'enotif_mailer'                => '{{SITENAME}} notification mailer',
 'enotif_reset'                 => 'Mark all pages visited',
-'enotif_newpagetext'           => 'This is a new page.',
 'enotif_impersonal_salutation' => '{{SITENAME}} user',
-'changed'                      => 'changed',
-'created'                      => 'created',
-'enotif_subject'               => '{{SITENAME}} page $PAGETITLE has been $CHANGEDORCREATED by $PAGEEDITOR',
+'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.',
+'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_lastvisited'           => 'See $1 for all changes since your last visit.',
 'enotif_lastdiff'              => 'See $1 to view this change.',
 'enotif_anon_editor'           => 'anonymous user $1',
 'enotif_body'                  => 'Dear $WATCHINGUSERNAME,
 
-
-The {{SITENAME}} page $PAGETITLE has been $CHANGEDORCREATED on $PAGEEDITDATE by $PAGEEDITOR, see $PAGETITLE_URL for the current revision.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Editor\'s summary: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2902,8 +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
 
@@ -2919,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',
@@ -2980,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',
@@ -3112,7 +3117,7 @@ $1',
 'blanknamespace'                => '(Main)',
 
 # Contributions
-'contributions'         => 'User contributions',
+'contributions'         => '{{GENDER:$1|User}} contributions',
 'contributions-summary' => '', # do not translate or duplicate this message to other languages
 'contributions-title'   => 'User contributions for $1',
 'mycontris'             => 'Contributions',
@@ -3295,7 +3300,7 @@ You cannot create an account',
 'cant-block-while-blocked'        => 'You cannot block other users while you are blocked.',
 'cant-see-hidden-user'            => "The user you are trying to block has already been blocked and hidden.
 Since you do not have the hideuser right, you cannot see or edit the user's block.",
-'ipbblocked'                      => 'You cannot block or unblock other users, because you are yourself blocked',
+'ipbblocked'                      => 'You cannot block or unblock other users because you are yourself blocked',
 'ipbnounblockself'                => 'You are not allowed to unblock yourself',
 'ipb-default-expiry'              => '', # do not translate or duplicate this message to other languages
 
@@ -3331,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 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!'''
@@ -3342,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!'''
@@ -3370,7 +3375,7 @@ In those cases, you will have to move or merge the page manually if desired.",
 'movepage-moved-noredirect'    => 'The creation of a redirect has been suppressed.',
 'articleexists'                => 'A page of that name already exists, or the name you have chosen is not valid.
 Please choose another name.',
-'cantmove-titleprotected'      => 'You cannot move a page to this location, because the new title has been protected from creation',
+'cantmove-titleprotected'      => 'You cannot move a page to this location because the new title has been protected from creation',
 'talkexists'                   => "'''The page itself was moved successfully, but the talk page could not be moved because one already exists at the new title.
 Please merge them manually.'''",
 'movedto'                      => 'moved to',
@@ -3520,6 +3525,7 @@ Please try again.',
 'import-error-interwiki'     => 'Page "$1" is not imported because its name is reserved for external linking (interwiki).',
 'import-error-special'       => 'Page "$1" is not imported because it belongs to a special namespace that does not allow pages.',
 'import-error-invalid'       => 'Page "$1" is not imported because its name is invalid.',
+'import-error-unserialize'   => 'Revision $2 of page "$1" could not be unserialized. The revision was reported to use content model $3 serialized as $4.',
 'import-options-wrong'       => 'Wrong {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid'    => 'Given root page is an invalid title.',
 'import-rootpage-nosubpage'  => 'Namespace "$1" of the root page does not allow subpages.',
@@ -3745,47 +3751,52 @@ This is probably caused by a link to a blacklisted external site.',
 'spam_deleting'       => 'All revisions contained links to $1, deleting',
 
 # Info page
-'pageinfo-header'              => '-', # do not translate or duplicate this message to other languages
-'pageinfo-title'               => 'Information for "$1"',
-'pageinfo-not-current'         => 'Sorry, it\'s impossible to provide this information for old revisions.',
-'pageinfo-header-basic'        => 'Basic information',
-'pageinfo-header-edits'        => 'Edit history',
-'pageinfo-header-restrictions' => 'Page protection',
-'pageinfo-header-properties'   => 'Page properties',
-'pageinfo-display-title'       => 'Display title',
-'pageinfo-default-sort'        => 'Default sort key',
-'pageinfo-length'              => 'Page length (in bytes)',
-'pageinfo-article-id'          => 'Page ID',
-'pageinfo-language'            => 'Page content language',
-'pageinfo-robot-policy'        => 'Search engine status',
-'pageinfo-robot-index'         => 'Indexable',
-'pageinfo-robot-noindex'       => 'Not indexable',
-'pageinfo-views'               => 'Number of views',
-'pageinfo-watchers'            => 'Number of page watchers',
-'pageinfo-redirects-name'      => 'Redirects to this page',
-'pageinfo-redirects-value'     => '$1', # only translate this message to other languages if you have to change it
-'pageinfo-subpages-name'       => 'Subpages of this page',
-'pageinfo-subpages-value'      => '$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})',
-'pageinfo-firstuser'           => 'Page creator',
-'pageinfo-firsttime'           => 'Date of page creation',
-'pageinfo-lastuser'            => 'Latest editor',
-'pageinfo-lasttime'            => 'Date of latest edit',
-'pageinfo-edits'               => 'Total number of edits',
-'pageinfo-authors'             => 'Total number of distinct authors',
-'pageinfo-recent-edits'        => 'Recent number of edits (within past $1)',
-'pageinfo-recent-authors'      => 'Recent number of distinct authors',
-'pageinfo-magic-words'         => 'Magic {{PLURAL:$1|word|words}} ($1)',
-'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-toolboxlink'         => 'Page information',
-'pageinfo-redirectsto'         => 'Redirects to',
-'pageinfo-redirectsto-info'    => 'info',
-'pageinfo-contentpage'         => 'Counted as a content page',
-'pageinfo-contentpage-yes'     => 'Yes',
+'pageinfo-header'                 => '-', # do not translate or duplicate this message to other languages
+'pageinfo-title'                  => 'Information for "$1"',
+'pageinfo-not-current'            => "Sorry, it's impossible to provide this information for old revisions.",
+'pageinfo-header-basic'           => 'Basic information',
+'pageinfo-header-edits'           => 'Edit history',
+'pageinfo-header-restrictions'    => 'Page protection',
+'pageinfo-header-properties'      => 'Page properties',
+'pageinfo-display-title'          => 'Display title',
+'pageinfo-default-sort'           => 'Default sort key',
+'pageinfo-length'                 => 'Page length (in bytes)',
+'pageinfo-article-id'             => 'Page ID',
+'pageinfo-language'               => 'Page content language',
+'pageinfo-robot-policy'           => 'Search engine status',
+'pageinfo-robot-index'            => 'Indexable',
+'pageinfo-robot-noindex'          => 'Not indexable',
+'pageinfo-views'                  => 'Number of views',
+'pageinfo-watchers'               => 'Number of page watchers',
+'pageinfo-redirects-name'         => 'Redirects to this page',
+'pageinfo-redirects-value'        => '$1', # only translate this message to other languages if you have to change it
+'pageinfo-subpages-name'          => 'Subpages of this page',
+'pageinfo-subpages-value'         => '$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})',
+'pageinfo-firstuser'              => 'Page creator',
+'pageinfo-firsttime'              => 'Date of page creation',
+'pageinfo-lastuser'               => 'Latest editor',
+'pageinfo-lasttime'               => 'Date of latest edit',
+'pageinfo-edits'                  => 'Total number of edits',
+'pageinfo-authors'                => 'Total number of distinct authors',
+'pageinfo-recent-edits'           => 'Recent number of edits (within past $1)',
+'pageinfo-recent-authors'         => 'Recent number of distinct authors',
+'pageinfo-magic-words'            => 'Magic {{PLURAL:$1|word|words}} ($1)',
+'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',
+'pageinfo-contentpage'            => 'Counted as a content page',
+'pageinfo-contentpage-yes'        => 'Yes',
 '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
@@ -3809,6 +3820,8 @@ This is probably caused by a link to a blacklisted external site.',
 'markedaspatrollederror'              => 'Cannot mark as patrolled',
 'markedaspatrollederrortext'          => 'You need to specify a revision to mark as patrolled.',
 'markedaspatrollederror-noautopatrol' => 'You are not allowed to mark your own changes as patrolled.',
+'markedaspatrollednotify'             => 'This change to $1 has been marked as patrolled.',
+'markedaspatrollederrornotify'        => 'Marking as patrolled failed.',
 
 # Patrol log
 'patrol-log-page'      => 'Patrol log',
@@ -3821,7 +3834,7 @@ This is probably caused by a link to a blacklisted external site.',
 'filedeleteerror-long'            => 'Errors were encountered while deleting the file:
 
 $1',
-'filedelete-missing'              => 'The file "$1" cannot be deleted, because it does not exist.',
+'filedelete-missing'              => 'The file "$1" cannot be deleted because it does not exist.',
 'filedelete-old-unregistered'     => 'The specified file revision "$1" is not in the database.',
 'filedelete-current-unregistered' => 'The specified file "$1" is not in the database.',
 'filedelete-archive-read-only'    => 'The archive directory "$1" is not writable by the webserver.',
@@ -3843,6 +3856,7 @@ By executing it, your system may be compromised.",
 'file-nohires'                => 'No higher resolution available.',
 'svg-long-desc'               => 'SVG file, nominally $1 × $2 pixels, file size: $3',
 'svg-long-desc-animated'      => 'Animated SVG file, nominally $1 × $2 pixels, file size: $3',
+'svg-long-error'              => 'Invalid SVG file: $1',
 'show-big-image'              => 'Full resolution',
 'show-big-image-preview'      => 'Size of this preview: $1.',
 'show-big-image-other'        => 'Other {{PLURAL:$2|resolution|resolutions}}: $1.',
@@ -3877,7 +3891,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'The format is as follows:
@@ -4866,11 +4883,15 @@ This site is experiencing technical difficulties.',
 'logentry-move-move_redir-noredirect' => '$1 moved page $3 to $4 over a redirect without leaving a redirect',
 'logentry-patrol-patrol'              => '$1 marked revision $4 of page $3 patrolled',
 'logentry-patrol-patrol-auto'         => '$1 automatically marked revision $4 of page $3 patrolled',
-'logentry-newusers-newusers'          => '$1 created a user account',
-'logentry-newusers-create'            => '$1 created a user account',
-'logentry-newusers-create2'           => '$1 created a user account $3',
-'logentry-newusers-autocreate'        => 'Account $1 was created automatically',
+'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-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
@@ -4894,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].
index 7121523..f19e10e 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
@@ -443,8 +446,8 @@ $messages = array(
 'newwindow' => '(en nova fenestro)',
 'cancel' => 'Nuligi',
 'moredotdotdot' => 'Pli...',
-'mypage' => 'Mia paĝo',
-'mytalk' => 'Mia diskuto',
+'mypage' => 'Paĝo',
+'mytalk' => 'Diskuto',
 'anontalk' => 'Diskutpaĝo por tiu ĉi IP',
 'navigation' => 'Navigado',
 'and' => '&#32;kaj',
@@ -476,6 +479,7 @@ $messages = array(
 'namespaces' => 'Nomspacoj',
 'variants' => 'Variantoj',
 
+'navigation-heading' => 'Navigacia menuo',
 'errorpagetitle' => 'Eraro',
 'returnto' => 'Reiri al $1.',
 'tagline' => 'El {{SITENAME}}',
@@ -718,13 +722,13 @@ 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.",
-'welcomecreation' => '== Bonvenon, $1! ==
-Via konto estas kreita.
-Ne forgesu fari viajn [[Special:Preferences|{{SITENAME}}-preferojn]].',
+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' => 'Via konto estas kreita.
+Ne forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]',
 'yourname' => 'Salutnomo:',
 'yourpassword' => 'Pasvorto:',
 'yourpasswordagain' => 'Retajpu pasvorton',
@@ -883,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',
 
@@ -1064,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',
@@ -1088,6 +1092,15 @@ Verŝajne ĝi estis forigita.',
 'edit-already-exists' => 'Ne eblis krei novan paĝon.
 Ĝi jam ekzistas.',
 'defaultmessagetext' => 'Defaŭlta teksto',
+'content-failed-to-parse' => 'Oni malsukcesis analizi $2-entenon laŭ la $1-modelo: $3',
+'invalid-content-data' => 'Enhavo estas malvalida',
+'content-not-allowed-here' => 'Enhavo de $1 ne estas permesita en paĝo [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'vikiteksto',
+'content-model-text' => 'ordinara teksto',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Averto: Ĉi tiu paĝo enhavas tro da multekostaj sintaksaj funkcio-vokoj.
@@ -1377,7 +1390,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 
 # Preferences page
 'preferences' => 'Preferoj',
-'mypreferences' => 'Miaj preferoj',
+'mypreferences' => 'Preferoj',
 'prefs-edits' => 'Nombro de redaktoj:',
 'prefsnologin' => 'Ne jam salutis!',
 'prefsnologintext' => 'Vi devas esti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ensalutita]</span> por fari viajn preferojn.',
@@ -1440,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',
@@ -1453,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',
@@ -1603,12 +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',
-'rightsnone' => '(nenia)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'legi ĉi tiun paĝon',
@@ -1835,6 +1849,7 @@ Se la problemo kontinuas, kontaku [[Special:ListUsers/sysop|sisteman administran
 'backend-fail-notsame' => 'Malsama dosiero jam ekzistas ĉe $1.',
 'backend-fail-invalidpath' => '$1 ne estas valida pado por konservujo.',
 'backend-fail-delete' => 'Ne povis forigi dosieron "$1".',
+'backend-fail-describe' => 'Ne povis ŝanĝi la metadatenon de la dosiero "$1".',
 'backend-fail-alreadyexists' => 'La dosiero "$1" jam ekzistas.',
 'backend-fail-store' => 'Ne povis konservi dosieron $1 ĉe $2.',
 'backend-fail-copy' => 'Ne povis kopii dosieron $1 al $2.',
@@ -2222,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.',
 
@@ -2241,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.
@@ -2271,7 +2282,7 @@ Estas [[{{MediaWiki:Listgrouprights-helppage}}|aldona informo]] pri individuaj r
 'emailuser-title-target' => 'Retpoŝti ĉi tiun {{GENDER:$1|uzanton}}',
 'emailuser-title-notarget' => 'Retpoŝti uzanton',
 'emailpage' => 'Retpoŝti uzanton',
-'emailpagetext' => 'Vi povas uzi la jenan paĝon por sendi retpoŝtan mesaĝon al ĉi tiu uzanto.
+'emailpagetext' => 'Vi povas uzi la jenan paĝon por sendi retpoŝtan mesaĝon al ĉi tiu {{GENDER:$1|uzanto|uzantino}}.
 La retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel la "De" adreso de la retpoŝto, do la ricevonto eblos respondi rekte al vi.',
 'usermailererror' => 'Resendita retmesaĝa erarsubjekto:',
 'defemailsubject' => '{{SITENAME}} retmesaĝo de uzanto "$1"',
@@ -2310,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',
@@ -2338,19 +2349,26 @@ La retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel
 
 'enotif_mailer' => 'Averta retmesaĝo de {{SITENAME}}',
 'enotif_reset' => 'Marki ĉiujn paĝojn vizititaj',
-'enotif_newpagetext' => 'Tiu ĉi estas nova paĝo',
 'enotif_impersonal_salutation' => 'Uzanto de {{SITENAME}}',
-'changed' => 'ŝanĝita',
-'created' => 'kreita',
-'enotif_subject' => 'la paĝo $PAGETITLE de {{SITENAME}} estis $CHANGEDORCREATED de $PAGEEDITOR',
+'enotif_subject_deleted' => 'La paĝon $1 de {{SITENAME}} forigis {{gender:$2|$2}}',
+'enotif_subject_created' => 'La paĝon $1 de {{SITENAME}} kreis {{gender:$2|$2}}',
+'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.',
+'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.',
+'enotif_body_intro_changed' => 'La paĝon $1 de {{SITENAME}} ŝanĝis {{gender:$2|$2}} je $PAGEEDITDATE; bonvole vidu $3 pri la nuna revizio.',
 'enotif_lastvisited' => 'Vidi $1 por ĉiuj ŝanĝoj de post via lasta vizito.',
 'enotif_lastdiff' => 'Vidi $1 por rigardi ĉi tiun ŝanĝon.',
 'enotif_anon_editor' => 'anonima uzanto $1',
 'enotif_body' => 'Kara $WATCHINGUSERNAME,
 
-La paĝo $PAGETITLE de {{SITENAME}} estis $CHANGEDORCREATED je $PAGEEDITDATE de $PAGEEDITOR; vidu $PAGETITLE_URL por la nuna revizio.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+Redaktinta resumo:
+$PAGESUMMARY $PAGEMINOREDIT
 
 Resumo pri la ŝanĝo de la redaktinto: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2358,22 +2376,24 @@ Kontaktu la redaktinton:
 retpoŝte: $PAGEEDITOR_EMAIL
 vikie: $PAGEEDITOR_WIKI
 
-Ne estos aliaj avertoj kaze de sekvaj ŝanĝoj krom se vi vizitus la paĝon. Vi povas ankaŭ malaktivigi la avertsignalon por ĉiuj priatentitaj paĝoj de via atentaro.
+Ne estos aliaj avertoj kaze de sekvaj ŝanĝoj krom se vi vizitus ĉi tiun paĝon. Vi povas ankaŭ malaktivigi la avertsignalon por ĉiuj priatentitaj paĝoj de via atentaro.
 
             Sincere via, la avertsistemo de {{SITENAME}}
 
 --
-Por ŝanĝi vian retpoŝtan notigadan preferon, klaku
+Por ŝanĝi vian retpoŝtan avertadajn preferojn, klaku
 {{canonicalurl:{{#special:Preferences}}}}
 
-Por ŝanĝi vian preferon de la atentaro, klaku
+Por ŝanĝi vian preferojn de la atentaro, klaku
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Por forigi la paĝon de via atentaro, klaku
+Por forigi ĉi tiun paĝon de via atentaro, klaku
 $UNWATCHURL
 
 Komentoj kaj plia helpo:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kreita',
+'changed' => 'ŝanĝita',
 
 # Delete
 'deletepage' => 'Forigi paĝon',
@@ -2555,9 +2575,9 @@ $1',
 'blanknamespace' => '(Artikoloj)',
 
 # Contributions
-'contributions' => 'Kontribuoj de uzanto',
+'contributions' => 'Kontribuoj de {{GENDER:$1|uzanto|uzantino}}',
 'contributions-title' => 'Kontribuoj de uzanto $1',
-'mycontris' => 'Miaj kontribuoj',
+'mycontris' => 'Kontribuoj',
 'contribsub2' => 'De $1 ($2)',
 'nocontribs' => 'Trovis neniajn redaktojn laŭ tiu kriterio.',
 'uctop' => ' (lasta)',
@@ -2828,6 +2848,7 @@ La celartikolo "[[:$1]]" jam ekzistas. Ĉu vi volas forigi ĝin por krei spacon
 'immobile-target-namespace-iw' => 'Intervikia ligilo ne estas valida celo por paĝa movo.',
 'immobile-source-page' => 'Ĉi tiu paĝo ne estas movebla.',
 'immobile-target-page' => 'Ne povas movi al tiu destina titolo.',
+'bad-target-model' => 'La celo dezira uzas malakordan entenmodelon. Ne povas  ŝanĝi el $1 al $2.',
 'imagenocrossnamespace' => 'Ne povas movi dosieron al nedosiera nomspaco',
 'nonfile-cannot-move-to-file' => 'Ne povas movi ne-dosieron al dosiera nomspaco',
 'imagetypemismatch' => 'La nova dosierfinaĵo ne kongruas ĝian dosiertipon.',
@@ -2940,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.',
@@ -3102,6 +3124,7 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'pageinfo-default-sort' => 'Pravaloro de ordiga ŝlosilo',
 'pageinfo-length' => 'Paĝgrandeco (en bajtoj)',
 'pageinfo-article-id' => 'Paĝa identigo',
+'pageinfo-language' => 'Lingvo de paĝa enhavo',
 'pageinfo-robot-policy' => 'Statuso de la serĉilo',
 'pageinfo-robot-index' => 'Indeksebla',
 'pageinfo-robot-noindex' => 'Ne indeksebla',
@@ -3151,6 +3174,8 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'markedaspatrollederror' => 'Ne povas marki kiel patrolitan',
 'markedaspatrollederrortext' => 'Vi devas specifi version por marki kiel patrolitan.',
 'markedaspatrollederror-noautopatrol' => 'Vi ne rajtas marki viajn proprajn ŝanĝojn kiel patrolitajn.',
+'markedaspatrollednotify' => 'Ĉi tiun ŝanĝon al $1 markis kiel patrolatan.',
+'markedaspatrollederrornotify' => 'Malsukcesis marki la dosieron kiel patrolatan.',
 
 # Patrol log
 'patrol-log-page' => 'Protokolo pri patrolado',
@@ -3183,6 +3208,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.',
@@ -3212,7 +3238,9 @@ $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}}',
 'ago' => 'antaŭ $1',
+'just-now' => 'ĵus nune',
 
 # Bad image list
 'bad_image_list' => 'La formato estas jen:
@@ -3425,6 +3453,7 @@ Aliaj estos kaŝitaj defaŭlte.
 'exif-compression-2' => 'CCITT-Grupo 3 modifita ciferado laŭ Huffman Dimensio-1',
 'exif-compression-3' => 'CCITT Grupo-3 ĉifrado por faksilo',
 'exif-compression-4' => 'CCITT Grupo-4 ĉifrado por faksilo',
+'exif-compression-8' => 'Malŝveli (Adobe)',
 
 'exif-copyrighted-true' => 'Sub aŭtorrajto',
 'exif-copyrighted-false' => 'Sub publika domajno',
@@ -3790,6 +3819,64 @@ Vi povas ankaŭ [[Special:EditWatchlist|redakti norme]].',
 'watchlisttools-edit' => 'Rigardi kaj redakti atentaron',
 'watchlisttools-raw' => 'Redakti krudan atentaron',
 
+# Iranian month names
+'iranian-calendar-m1' => 'farvardino',
+'iranian-calendar-m2' => 'ordibeheŝto',
+'iranian-calendar-m3' => 'ĥordado',
+'iranian-calendar-m4' => 'tiro',
+'iranian-calendar-m5' => 'mordado',
+'iranian-calendar-m6' => 'ŝahrivaro',
+'iranian-calendar-m7' => 'mehro',
+'iranian-calendar-m8' => 'abano',
+'iranian-calendar-m9' => 'azaro',
+'iranian-calendar-m10' => 'dejo',
+'iranian-calendar-m11' => 'bahmano',
+'iranian-calendar-m12' => 'esfando',
+
+# Hijri month names
+'hijri-calendar-m1' => 'muharamo',
+'hijri-calendar-m2' => 'safaro',
+'hijri-calendar-m3' => 'rabi-ul-aŭŭalo',
+'hijri-calendar-m4' => 'rabi-us-sanio',
+'hijri-calendar-m5' => 'ĵumada-l-ulo',
+'hijri-calendar-m6' => 'ĵumada-l-aĥiro',
+'hijri-calendar-m7' => 'raĵabo',
+'hijri-calendar-m8' => 'ŝabano',
+'hijri-calendar-m9' => 'ramadano',
+'hijri-calendar-m10' => 'ŝaŭalo',
+'hijri-calendar-m11' => 'du-l-kado',
+'hijri-calendar-m12' => 'du-l-hiĵo',
+
+# Hebrew month names
+'hebrew-calendar-m1' => 'tiŝrio',
+'hebrew-calendar-m2' => 'ĥeŝvano',
+'hebrew-calendar-m3' => 'kislevo',
+'hebrew-calendar-m4' => 'teveto',
+'hebrew-calendar-m5' => 'ŝevato',
+'hebrew-calendar-m6' => 'adaro',
+'hebrew-calendar-m6a' => 'adaro 1',
+'hebrew-calendar-m6b' => 'adaro 2',
+'hebrew-calendar-m7' => 'nisano',
+'hebrew-calendar-m8' => 'ijaro',
+'hebrew-calendar-m9' => 'sivano',
+'hebrew-calendar-m10' => 'tamuzo',
+'hebrew-calendar-m11' => 'abo',
+'hebrew-calendar-m12' => 'elulo',
+'hebrew-calendar-m1-gen' => 'tiŝrio',
+'hebrew-calendar-m2-gen' => 'ĥeŝvano',
+'hebrew-calendar-m3-gen' => 'kislevo',
+'hebrew-calendar-m4-gen' => 'teveto',
+'hebrew-calendar-m5-gen' => 'ŝevato',
+'hebrew-calendar-m6-gen' => 'adaro',
+'hebrew-calendar-m6a-gen' => 'adaro 1',
+'hebrew-calendar-m6b-gen' => 'adaro 2',
+'hebrew-calendar-m7-gen' => 'nisano',
+'hebrew-calendar-m8-gen' => 'ijaro',
+'hebrew-calendar-m9-gen' => 'sivano',
+'hebrew-calendar-m10-gen' => 'tamuzo',
+'hebrew-calendar-m11-gen' => 'abo',
+'hebrew-calendar-m12-gen' => 'elulo',
+
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskuto]])',
 
@@ -3817,6 +3904,7 @@ Vi povas ankaŭ [[Special:EditWatchlist|redakti norme]].',
 'version-license' => 'Permesilo',
 'version-poweredby-credits' => "Ĉi tiu vikio funkcias per '''[//www.mediawiki.org/ MediaWiki]''', aŭtorrajto ©&thinsp;2001–$1 $2.",
 'version-poweredby-others' => 'aliaj',
+'version-credits-summary' => 'Ni ŝatus agnoski la sekvajn personojn pro siaj kontribuoj al [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki estas libera programaro. Vi povas redistribui ĝin kaj/aŭ modifi ĝin sub la kondiĉoj de la GNU General Public Licens (GNU Ĝenerala Publika Permesilo) en ties eldono de la Free Software Foundation (Libera Softvara Fondaĵo) - aŭ versio 2 de la Permesilo, aŭ (laŭ via elekto) iu ajn posta versio.
 
 Tiun ĉi verkon ni distribuas esperante, ke ĝi utilos, sed SEN IA AJN GARANTIO; eĉ sen la implica garantio de SURMERKATIGEBLECO aŭ TAŬGECO POR IA DIFINITA CELO. Vidu GNU General Public License por pliaj detaloj.
@@ -3956,11 +4044,15 @@ Bildoj montriĝas en plena distingivo, aliaj dosiertipoj estas malfermataj rekte
 'logentry-move-move_redir-noredirect' => '$1 movis paĝon $3 al $4 anstataŭigante alidirektilon sen lasante alidirektilon',
 'logentry-patrol-patrol' => '$1 markis revizion $4 de paĝo $3 kiel patrolita',
 'logentry-patrol-patrol-auto' => '$1 aŭtomate markis revizion $4 de paĝo $3 kiel patrolita',
-'logentry-newusers-newusers' => '$1 kreis salutnomon',
-'logentry-newusers-create' => '$1 kreis salutnomon',
-'logentry-newusers-create2' => '$1 kreis salutnomo $3',
+'logentry-newusers-newusers' => '$1 kreis konton',
+'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].
index a52f812..81f22e8 100644 (file)
@@ -42,6 +42,7 @@
  * @author Fitoschido
  * @author Fluence
  * @author Gustronico
+ * @author Gwickwire
  * @author Hercule
  * @author Icvav
  * @author Imre
@@ -68,6 +69,7 @@
  * @author Piolinfax
  * @author Platonides
  * @author PoLuX124
+ * @author Ralgis
  * @author Remember the dot
  * @author Richard Wolf VI
  * @author Sanbec
@@ -76,6 +78,7 @@
  * @author Spacebirdy
  * @author Technorum
  * @author The Evil IP address
+ * @author TheBITLINK
  * @author Titoxd
  * @author Toniher
  * @author Translationista
@@ -353,7 +356,7 @@ $dateFormats = array(
        'dmy both' => 'H:i j M Y',
 );
 
-$separatorTransformTable = array( ',' => '.', '.' => ',' );
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 $linkTrail = '/^([a-záéíóúñ]+)(.*)$/sDu';
 
 $messages = array(
@@ -510,7 +513,7 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Nueva sección',
 'vector-action-delete' => 'Borrar',
-'vector-action-move' => 'Mover',
+'vector-action-move' => 'Trasladar',
 'vector-action-protect' => 'Proteger',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Cambiar protección',
@@ -524,6 +527,7 @@ $messages = array(
 'namespaces' => 'Espacios de nombres',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menú de navegación',
 'errorpagetitle' => 'Error',
 'returnto' => 'Volver a $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -572,7 +576,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',
@@ -612,7 +616,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',
@@ -731,7 +735,7 @@ Consulta: $2',
 'viewsource-title' => 'Ver el código fuente de «$1»',
 'actionthrottled' => 'Acción bloqueada',
 'actionthrottledtext' => "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
-'protectedpagetext' => 'Esta página ha sido protegida para evitar su edición.',
+'protectedpagetext' => 'Esta página ha sido protegida para evitar su edición u otras acciones.',
 'viewsourcetext' => 'Puedes ver y copiar el código fuente de esta página:',
 'viewyourtext' => "Puedes ver y copiar el código de '''tus ediciones''' a esta página:",
 'protectedinterface' => 'Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.
@@ -765,10 +769,9 @@ El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 
 Puedes continuar usando {{SITENAME}} de forma anónima, o puedes <span class='plainlinks'>[$1 iniciar sesión otra vez]</span> con el mismo u otro usuario.
 Ten en cuenta que las páginas que tengas abiertas en otras ventanas o pestañas pueden verse como si siguieras identificado hasta que las refresques.",
-'welcomecreation' => '== ¡Bienvenido(a), $1! ==
-
-Tu cuenta ha sido creada.
-No olvides personalizar [[Special:Preferences|tus preferencias]].',
+'welcomeuser' => '¡Bienvenido, $1!',
+'welcomecreation-msg' => 'Tu cuenta ha sido creada.
+No olvides cambiar tus [[Special:Preferences|preferencias de {{SITENAME}} ]].',
 'yourname' => 'Nombre de usuario:',
 'yourpassword' => 'Contraseña:',
 'yourpasswordagain' => 'Confirma la contraseña:',
@@ -924,14 +927,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
@@ -1041,7 +1045,7 @@ La última entrada del registro de bloqueos se proporciona debajo para mayor ref
 * '''Opera:''' vacía la caché en ''Herramientas → Preferencias''",
 'usercssyoucanpreview' => "'''Consejo:''' Usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
 'userjsyoucanpreview' => "'''Consejo:''' Usa el botón «{{int:showpreview}}» para probar el nuevo JS antes de guardarlo.",
-'usercsspreview' => "'''Recuerda que solo estás previsualizando tu CSS de usuario.'''
+'usercsspreview' => "'''Recuerda que sólo estás previsualizando tu CSS de usuario.'''
 '''¡Aún no se ha guardado!'''",
 'userjspreview' => "'''¡Recuerda que solo estás previsualizando tu JavaScript de usuario.'''
 '''¡Aún no se ha guardado!'''",
@@ -1049,7 +1053,7 @@ La última entrada del registro de bloqueos se proporciona debajo para mayor ref
 '''¡Aún no se ha guardado!'''",
 'sitejspreview' => "'''Recuerda que sólo estás previsualizando este código JavaScript.'''
 '''¡Aún no se ha guardado!'''",
-'userinvalidcssjstitle' => "'''Aviso:''' No existe la skin «$1». Recuerda que las páginas personalizadas ''.css'' y ''.js'' tienen un título en minúsculas. Por ejemplo, {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
+'userinvalidcssjstitle' => "'''Aviso:''' No existe la piel «$1». Recuerda que las páginas personalizadas ''.css'' y ''.js'' tienen un título en minúsculas. Por ejemplo, {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
 'updated' => '(Actualizado)',
 'note' => "'''Nota:'''",
 'previewnote' => "'''Recuerda que esto es solo una previsualización.'''
@@ -1108,7 +1112,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.',
@@ -1193,8 +1196,8 @@ El motivo dado por $3 es ''$2''",
 'page_first' => 'primeras',
 'page_last' => 'últimas',
 'histlegend' => "Selección de diferencias: marca los selectores de las versiones a comparar y pulsa ''enter'' o el botón de abajo.<br />
-Leyenda: (act) = diferencias con la versión actual,
-(prev) = diferencias con la versión previa, M = edición menor",
+Leyenda: '''(act)''' = diferencias con la versión actual,
+'''(ant)''' = diferencias con la versión anterior, '''m''' = edición menor",
 'history-fieldset-title' => 'Buscar en el historial',
 'history-show-deleted' => 'Solo ediciones ocultadas',
 'histfirst' => 'Primeras',
@@ -1257,7 +1260,7 @@ Aún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:
 'revdelete-text' => "Las revisiones borradas aún aparecerán en el historial de la página y en los registros, pero sus contenidos no serán accesibles al público.'''
 Otros administradores de {{SITENAME}} aún podrán acceder al contenido oculto y podrán deshacer el borrado a través de la misma interfaz, a menos que se establezcan restricciones adicionales.",
 'revdelete-confirm' => 'Por favor confirma que deseas realizar la operación, que entiendes las consecuencias y que estás ejecutando dicha acción acorde con [[{{MediaWiki:Policy-url}}|las políticas]].',
-'revdelete-suppress-text' => "La herramienta de supresión '''sólo''' debería usarse en los siguientes casos:
+'revdelete-suppress-text' => "La herramienta de supresión '''solo''' debería usarse en los siguientes casos:
 * Información potencialmente injuriosa o calumniante.
 * Información personal inapropiada, tal como:
 *: ''nombres, domicilios, números de teléfono, números de la seguridad social e información análoga.",
@@ -1455,8 +1458,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',
@@ -1508,10 +1511,10 @@ Esto no se puede deshacer.',
 'prefs-emailconfirm-label' => 'Confirmación de correo electrónico:',
 'prefs-textboxsize' => 'Tamaño de la página de edición',
 'youremail' => 'Correo electrónico:',
-'username' => 'Nombre de usuario:',
-'uid' => 'ID de usuario:',
-'prefs-memberingroups' => 'Miembro {{PLURAL:$1|del grupo|de los grupos}}:',
-'prefs-registration' => 'Hora de registro:',
+'username' => '{{GENDER:$1|Nombre de usuario|Nombre de usuaria}}:',
+'uid' => 'ID de {{GENDER:$1|usuario|usuaria}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Miembro}} {{PLURAL:$1|del grupo|de los grupos}}:',
+'prefs-registration' => 'Fecha y hora de registro:',
 'yourrealname' => 'Nombre real:',
 'yourlanguage' => 'Idioma:',
 'yourvariant' => 'Variante lingüística del contenido:',
@@ -1605,8 +1608,8 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'right-minoredit' => 'Marcar ediciones como «menores»',
 'right-move' => 'Trasladar páginas',
 'right-move-subpages' => 'Trasladar páginas con sus subpáginas',
-'right-move-rootuserpages' => 'Mover páginas del usuario raíz',
-'right-movefile' => 'Mover archivos',
+'right-move-rootuserpages' => 'Trasladar páginas de usuario raíz',
+'right-movefile' => 'Trasladar archivos',
 'right-suppressredirect' => 'No crear redirecciones de las páginas fuente  al trasladar páginas',
 'right-upload' => 'Subir archivos',
 'right-reupload' => 'Subir una nueva versión de un archivo existente',
@@ -1658,15 +1661,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ó la pertenencia a grupos para $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',
@@ -1675,10 +1676,10 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'action-createtalk' => 'crear páginas de discusión',
 'action-createaccount' => 'crear esta cuenta de usuario',
 'action-minoredit' => 'marcar este cambio como menor',
-'action-move' => 'mover esta página',
-'action-move-subpages' => 'mover esta página y sus subpáginas',
-'action-move-rootuserpages' => 'mover páginas del usuario raíz',
-'action-movefile' => 'mover este archivo',
+'action-move' => 'trasladar esta página',
+'action-move-subpages' => 'trasladar esta página y sus subpáginas',
+'action-move-rootuserpages' => 'trasladar páginas de usuario raíz',
+'action-movefile' => 'trasladar este archivo',
 'action-upload' => 'subir este archivo',
 'action-reupload' => 'reemplazar este archivo existente',
 'action-reupload-shared' => 'reemplazar este archivo existente en un depósito compartido',
@@ -1904,10 +1905,11 @@ $1',
 'backend-fail-notsame' => 'Ya existe un fichero distinto en $1.',
 'backend-fail-invalidpath' => '$1 no es una ruta de almacenamiento válida',
 'backend-fail-delete' => 'No se pudo borrar el archivo «$1».',
+'backend-fail-describe' => 'No pudieron cambiar los metadatos del archivo "$1".',
 'backend-fail-alreadyexists' => 'El archivo  $1  ya existe.',
 'backend-fail-store' => 'No se pudo almacenar el archivo $1 en $2.',
 'backend-fail-copy' => 'No se pudo copiar el archivo $1 a $2.',
-'backend-fail-move' => 'No se pudo mover el archivo $1 a $2.',
+'backend-fail-move' => 'No se pudo trasladar el archivo $1 a $2.',
 'backend-fail-opentemp' => 'No se pudo crear archivo temporal.',
 'backend-fail-writetemp' => 'No se pudo escribir en el archivo temporal.',
 'backend-fail-closetemp' => 'No se pudo cerrar el archivo temporal.',
@@ -2123,7 +2125,7 @@ Entrada: contenttype/subtype, p. ej. <code>image/jpeg</code>.',
 'statistics-articles' => 'Páginas de contenido',
 'statistics-pages' => 'Páginas',
 'statistics-pages-desc' => 'Todas las páginas en el wiki, incluyendo páginas de discusión, redirecciones, etc.',
-'statistics-files' => 'Ficheros subidos',
+'statistics-files' => 'Archivos subidos',
 'statistics-edits' => 'Ediciones en páginas desde que {{SITENAME}} fue instalado',
 'statistics-edits-average' => 'Media de ediciones por página',
 'statistics-views-total' => 'Visitas totales',
@@ -2292,7 +2294,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 especidica 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.',
 
@@ -2311,10 +2313,6 @@ Protocolos soportados: <code>$1</code> (si no se especidica ninguno, el protocol
 '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.
@@ -2380,7 +2378,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',
@@ -2408,31 +2406,33 @@ La dirección de correo electrónico que indicaste en [[Special:Preferences|tus
 
 'enotif_mailer' => 'Notificación por correo de {{SITENAME}}',
 'enotif_reset' => 'Marcar todas las páginas como visitadas',
-'enotif_newpagetext' => 'Se trata de una nueva página.',
 'enotif_impersonal_salutation' => 'usuario de {{SITENAME}}',
-'changed' => 'modificada',
-'created' => 'creada',
-'enotif_subject' => 'La página $PAGETITLE de {{SITENAME}} ha sido $CHANGEDORCREATED por $PAGEEDITOR',
+'enotif_subject_deleted' => 'La página $1 de {{SITENAME}} ha sido eliminada por {{gender:$2|$2}}',
+'enotif_subject_created' => 'La página $1 de {{SITENAME}} ha sido creada por {{GENDER:$2|$2}}',
+'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.',
+'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.',
+'enotif_body_intro_changed' => 'La página $1 de {{SITENAME}} ha sido cambiada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.',
 'enotif_lastvisited' => 'Consulta $1 para ver todos los cambios realizados desde tu última visita.',
 'enotif_lastdiff' => 'Consulta $1 para ver este cambio.',
 'enotif_anon_editor' => 'usuario anónimo $1',
 'enotif_body' => 'Estimado/a $WATCHINGUSERNAME,
 
-La página de {{SITENAME}} $PAGETITLE ha sido $CHANGEDORCREATED el $PAGEEDITDATE por el usuario $PAGEEDITOR.
-La versión actual se encuentra en $PAGETITLE_URL
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
-El resumen de edición es: $PAGESUMMARY $PAGEMINOREDIT
+Resumen de edición: $PAGESUMMARY $PAGEMINOREDIT
 
-Contacta al editor:
+Contacta con el editor:
 Correo electrónico: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-No habrá otras notificaciones en caso de cambios adicionales, a menos que visites esta página nuevamente.
-También puedes reestablecer las notificaciones para todas tus páginas vigiladas en tu página de vigilancia.
+No habrá otras notificaciones en caso de cambios adicionales, a menos que visites esta página nuevamente. También puedes reestablecer las notificaciones de todas tus páginas que sigas en tu página de vigilancia.
 
-             El sistema de notificación de {{SITENAME}}.
+El sistema de notificaciones de {{SITENAME}}.
 
 --
 Para cambiar las opciones de tu lista de seguimiento, visita:
@@ -2441,8 +2441,10 @@ Para cambiar las opciones de tu lista de seguimiento, visita:
 Para borrar la página de tu lista de seguimiento visita:
 $UNWATCHURL
 
-Retroalimentación y asistencia adicional:
+Comentarios y asistencia adicional:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Borrar esta página',
@@ -2625,14 +2627,14 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contribuciones {{GENDER:{{BASEPAGENAME}}|del usuario|de la usuaria}}',
+'contributions' => 'Contribuciones {{GENDER:$1|del usuario|de la usuaria}}',
 'contributions-title' => 'Contribuciones {{GENDER:$1|del usuario|de la usuaria}} $1',
-'mycontris' => 'Mis contribuciones',
+'mycontris' => 'Contribuciones',
 'contribsub2' => '$1 ($2)',
 'nocontribs' => 'No se encontraron cambios que cumplieran estos criterios.',
 'uctop' => '(última edición)',
-'month' => 'Desde el mes (y anterior):',
-'year' => 'Desde el año (y anterior):',
+'month' => 'Desde el mes (y anteriores):',
+'year' => 'Desde el año (y anteriores):',
 
 'sp-contributions-newbies' => 'Mostrar solo las contribuciones de usuarios nuevos',
 'sp-contributions-newbies-sub' => 'Para cuentas nuevas',
@@ -2769,7 +2771,7 @@ Consulta la [[Special:BlockList|lista de bloqueos]] para ver la lista de bloqueo
 'block-log-flags-noemail' => 'correo electrónico deshabilitado',
 'block-log-flags-nousertalk' => 'no puede editar su propia página de discusión',
 'block-log-flags-angry-autoblock' => 'autobloqueo avanzado habilitado',
-'block-log-flags-hiddenname' => 'nombre de usuario oculto',
+'block-log-flags-hiddenname' => 'nombre de usuario ocultado',
 'range_block_disabled' => 'La facultad de administrador de crear bloqueos por rangos está deshabilitada.',
 'ipb_expiry_invalid' => 'El tiempo de caducidad no es válido.',
 'ipb_expiry_temp' => 'Los bloqueos a nombres de usuario ocultos deben ser permanentes.',
@@ -2817,7 +2819,7 @@ Sin embargo, está bloqueada como parte del rango $2, que puede ser desbloqueado
 # Move page
 'move-page' => 'Trasladar $1',
 'move-page-legend' => 'Renombrar página',
-'movepagetext' => "Usando el siguiente formulario se renombrará una página, moviendo todo su historial al nuevo nombre.
+'movepagetext' => "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.
 El título anterior se convertirá en una redirección al nuevo título.
 Los enlaces al antiguo título de la página no se cambiarán.
 Asegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].
@@ -2829,7 +2831,7 @@ Esto significa que podrás renombrar una página a su título original si has co
 '''¡Aviso!'''
 Este puede ser un cambio drástico e inesperado para una página popular;
 por favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
-'movepagetext-noredirectfixer' => "Usando el siguiente formulario se renombrará una página, moviendo todo su historial al nuevo nombre.
+'movepagetext-noredirectfixer' => "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.
 El título anterior se convertirá en una redirección al nuevo título.
 Asegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].
 Tú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que deberían hacerlo.
@@ -2841,19 +2843,19 @@ Esto significa que podrás renombrar una página a su título original si has co
 Este puede ser un cambio drástico e inesperado para una página popular;
 por favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
 'movepagetalktext' => "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''
-*Esté moviendo la página entre espacios de nombres diferentes,
+*Estés trasladando la página entre espacios de nombres diferentes,
 *Una página de discusión no vacía ya exista con el nombre nuevo, o
-*No actives la opción «Renombrar la página de discusión también».
+*No marques el recuadro «Renombrar la página de discusión asociada».
 
 En estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
 'movearticle' => 'Renombrar página',
-'moveuserpage-warning' => "'''Aviso:''' estás a punto de mover una página de usuario. Ten en cuenta que solo será trasladada la página; el usuario '''no''' será renombrado.",
+'moveuserpage-warning' => "'''Aviso:''' estás a punto de trasladar una página de usuario. Ten en cuenta que solo será trasladada la página; el usuario '''no''' será renombrado.",
 'movenologin' => 'No has iniciado sesión',
 'movenologintext' => 'Es necesario ser usuario registrado y [[Special:UserLogin|haber iniciado sesión]] para renombrar una página.',
-'movenotallowed' => 'No tienes permiso para mover páginas.',
-'movenotallowedfile' => 'No tienes permiso para mover archivos.',
-'cant-move-user-page' => 'No tienes permiso para mover páginas de usuario (excepto subpáginas).',
-'cant-move-to-user-page' => 'No tienes permiso para mover una página a una página de usuario (excepto a subpáginas de usuario).',
+'movenotallowed' => 'No tienes permiso para trasladar páginas.',
+'movenotallowedfile' => 'No tienes permiso para trasladar archivos.',
+'cant-move-user-page' => 'No tienes permiso para trasladar páginas de usuario (excepto subpáginas).',
+'cant-move-to-user-page' => 'No tienes permiso para trasladar una página a una página de usuario (excepto a subpáginas de usuario).',
 'newtitle' => 'A título nuevo:',
 'move-watch' => 'Vigilar páginas de origen y destino',
 'movepagebtn' => 'Renombrar página',
@@ -2863,8 +2865,8 @@ En estos casos, deberás trasladar manualmente el contenido de la página de dis
 'movepage-moved-noredirect' => 'Se ha suprimido la creación de la redirección.',
 'articleexists' => 'Ya existe una página con ese nombre, o el nombre que has escogido no es válido.
 Por favor, elige otro nombre.',
-'cantmove-titleprotected' => 'No puedes mover la página a esta ubicación, porque el nuevo título ha sido protegido para evitar su creación.',
-'talkexists' => 'La página fue renombrada con éxito, pero la discusión no se pudo mover porque ya existe una en el título nuevo. Por favor incorpora sus contenidos manualmente.',
+'cantmove-titleprotected' => 'No puedes trasladar la página a esta ubicación, porque el nuevo título ha sido protegido para evitar su creación.',
+'talkexists' => 'La página fue renombrada con éxito, pero la discusión no se pudo trasladar porque ya existe una con el título nuevo. Por favor, incorpora sus contenidos manualmente.',
 'movedto' => 'renombrado a',
 'movetalk' => 'Renombrar la página de discusión asociada',
 'move-subpages' => 'Intentar trasladar las subpáginas (hasta $1)',
@@ -2872,7 +2874,7 @@ Por favor, elige otro nombre.',
 'movepage-page-exists' => 'La página $1 ya existe, por lo que no puede ser renombrada automáticamente.',
 'movepage-page-moved' => 'La página $1 ha sido trasladada a $2.',
 'movepage-page-unmoved' => 'La página $1 no se ha podido trasladar a $2.',
-'movepage-max-pages' => 'Se {{PLURAL:$1|ha trasladado un máximo de una página|han trasladado un máximo de $1 páginas}}, y no se van a mover más automáticamente.',
+'movepage-max-pages' => 'Se {{PLURAL:$1|ha trasladado un máximo de una página|han trasladado un máximo de $1 páginas}}, y no van a trasladarse más automáticamente.',
 'movelogpage' => 'Registro de traslados',
 'movelogpagetext' => 'Abajo se encuentra una lista de páginas trasladadas.',
 'movesubpage' => '{{PLURAL:$1|Subpágina|Subpáginas}}',
@@ -2895,7 +2897,7 @@ no se puede trasladar una página sobre sí misma.',
 'immobile-target-page' => 'No se puede trasladar a tal título.',
 'bad-target-model' => 'El destino deseado utiliza un modelo diferente de contenido. No se puede realizar la conversión de $1 a $2.',
 'imagenocrossnamespace' => 'No se puede trasladar el fichero a otro espacio de nombres',
-'nonfile-cannot-move-to-file' => 'No es posible mover un no-archivo al espacio de nombres de archivo',
+'nonfile-cannot-move-to-file' => 'No es posible trasladar lo que no es un archivo al espacio de nombres de archivo',
 'imagetypemismatch' => 'La nueva extensión de archivo no corresponde con su tipo',
 'imageinvalidfilename' => 'El nombre del fichero de destino no es válido',
 'fix-double-redirects' => 'Actualizar las redirecciones que apuntan al título original',
@@ -2905,7 +2907,7 @@ A continuación se muestra la última entrada de registro para referencia:",
 'semiprotectedpagemovewarning' => "'''Nota:''' Esta página ha sido bloqueada para que  solamente usuarios registrados pueden moverla.
 A continuación se muestra la última entrada de registro para referencia:",
 'move-over-sharedrepo' => '== El archivo existe ==
-[[:$1]] existe en un repositorio compartido. Mover el archivo a este título invalidará el archivo compartido.',
+[[:$1]] existe en un repositorio compartido. El traslado a este título invalidará la compartición del archivo.',
 'file-exists-sharedrepo' => 'El nombre de archivo elegido ya está siendo usado en un repositorio compartido.
 Por favor, elige otro nombre.',
 
@@ -3007,6 +3009,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.',
@@ -3050,8 +3053,8 @@ Puedes ver su código fuente',
 'tooltip-ca-unprotect' => 'Cambiar protección de esta página',
 'tooltip-ca-delete' => 'Borrar esta página',
 'tooltip-ca-undelete' => 'Restaurar las ediciones hechas a esta página antes de que fuese borrada',
-'tooltip-ca-move' => 'Mover esta página',
-'tooltip-ca-watch' => 'Añadir esta página a su lista de seguimiento',
+'tooltip-ca-move' => 'Trasladar esta página',
+'tooltip-ca-watch' => 'Añadir esta página a tu lista de seguimiento',
 'tooltip-ca-unwatch' => 'Borrar esta página de su lista de seguimiento',
 'tooltip-search' => 'Buscar en {{SITENAME}}',
 'tooltip-search-go' => 'Ir al artículo con este nombre exacto si existe',
@@ -3089,7 +3092,7 @@ Puedes ver su código fuente',
 'tooltip-preview' => 'Previsualiza los cambios realizados. ¡Por favor, hazlo antes de grabar!',
 'tooltip-diff' => 'Muestra los cambios que ha introducido en el texto.',
 'tooltip-compareselectedversions' => 'Ver las diferencias entre las dos versiones seleccionadas de esta página.',
-'tooltip-watch' => 'Añadir esta página a su lista de seguimiento',
+'tooltip-watch' => 'Añadir esta página a tu lista de seguimiento',
 'tooltip-watchlistedit-normal-submit' => 'Borrar páginas',
 'tooltip-watchlistedit-raw-submit' => 'Actualizar lista de seguimiento',
 'tooltip-recreate' => 'Recupera una página que ha sido borrada',
@@ -3101,16 +3104,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 */',
@@ -3191,7 +3194,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-recent-authors' => 'Número de autores distintos recientes',
 '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-templates' => '{{PLURAL:$1|Plantilla incluida|Plantillas incluidas}} ($1)',
 'pageinfo-toolboxlink' => 'Información de la página',
 'pageinfo-redirectsto' => 'Redirige a',
 'pageinfo-redirectsto-info' => 'Información',
@@ -3200,6 +3203,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',
@@ -3222,6 +3229,8 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'markedaspatrollederror' => 'No se puede marcar como patrullada',
 'markedaspatrollederrortext' => 'Debes especificar una revisión para marcarla como patrullada.',
 'markedaspatrollederror-noautopatrol' => 'No tienes permisos para marcar tus propios cambios como revisados.',
+'markedaspatrollednotify' => 'Este cambio realizado en $1 se ha marcado como revisado.',
+'markedaspatrollederrornotify' => 'Error al marcar como revisado.',
 
 # Patrol log
 'patrol-log-page' => 'Registro de revisiones',
@@ -3256,6 +3265,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.',
@@ -3271,7 +3281,7 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 # Special:NewFiles
 'newimages' => 'Galería de imágenes nuevas',
 'imagelisttext' => "Debajo hay una lista de '''$1''' {{PLURAL:$1|imagen|imágenes}} ordenadas $2.",
-'newimages-summary' => 'Esta página especial muestra una galería de los últimos ficheros subidos.',
+'newimages-summary' => 'Esta página especial muestra una galería de los últimos archivos subidos.',
 'newimages-legend' => 'Nombre del fichero',
 'newimages-label' => 'Nombre del fichero (o una parte):',
 'showhidebots' => '($1 bots)',
@@ -3290,6 +3300,7 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'hours' => '{{PLURAL:$1|una hora|$1 horas}}',
 'days' => '{{PLURAL:$1|un día|$1 días}}',
 'ago' => 'hace $1',
+'just-now' => 'Ahora mismo',
 
 # Bad image list
 'bad_image_list' => 'El formato es el siguiente:
@@ -4023,9 +4034,9 @@ Este sitio está experimentando dificultades técnicas.',
 'logentry-suppress-revision' => '$1 modificó secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4',
 'logentry-suppress-event-legacy' => '$1 modificó secretamente la visibilidad de los eventos del registro en $3',
 'logentry-suppress-revision-legacy' => '$1 modificó secretamente la visibilidad de las ediciones en la página $3',
-'revdelete-content-hid' => 'contenido oculto',
+'revdelete-content-hid' => 'contenido ocultado',
 'revdelete-summary-hid' => 'resumen de edición oculto',
-'revdelete-uname-hid' => 'nombre de usuario oculto',
+'revdelete-uname-hid' => 'nombre de usuario ocultado',
 'revdelete-content-unhid' => 'contenido mostrado',
 'revdelete-summary-unhid' => 'resumen de edición mostrado',
 'revdelete-uname-unhid' => 'nombre de usuario mostrado',
@@ -4037,11 +4048,15 @@ Este sitio está experimentando dificultades técnicas.',
 'logentry-move-move_redir-noredirect' => '$1 movió la página $3 a $4 sobre una redirección, sin dejar redirección',
 'logentry-patrol-patrol' => '$1 marcó la edición $4 de la página $3 como patrullada',
 'logentry-patrol-patrol-auto' => '$1 marcó automáticamente la edición $4 de la página $3 como patrullada',
-'logentry-newusers-newusers' => '$1 creó una cuenta de usuario',
-'logentry-newusers-create' => '$1 creó una cuenta de usuario',
-'logentry-newusers-create2' => '$1 creó una cuenta de usuario $3',
+'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-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.
index a73374c..847affb 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.
@@ -698,10 +699,9 @@ Administraator lukustas selle järgmisel põhjusel: "$3".',
 
 Võid jätkata {{GRAMMAR:genitive|{{SITENAME}}}} kasutamist anonüümselt, aga ka sama või mõne teise kasutajana uuesti <span class='plainlinks'>[$1 sisse logida]</span>.
 Pane tähele, et seni kuni sa pole oma võrgulehitseja puhvrit tühjendanud, võidakse mõni lehekülg endiselt nii kuvada nagu oleksid ikka sisse logitud.",
-'welcomecreation' => '== Tere tulemast, $1! ==
-
-Sinu konto on loodud.
-Ära unusta oma {{GRAMMAR:genitive|{{SITENAME}}}} [[Special:Preferences|eelistusi]] seada.',
+'welcomeuser' => 'Tere tulemast, $1!',
+'welcomecreation-msg' => 'Sinu konto on loodud.
+Ära unusta seada oma {{GRAMMAR:genitive|{{SITENAME}}}} [[Eri:Eelistused|eelistusi]].',
 'yourname' => 'Kasutajanimi:',
 'yourpassword' => 'Parool:',
 'yourpasswordagain' => 'Sisesta parool uuesti:',
@@ -848,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',
 
@@ -972,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.
@@ -1028,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.',
@@ -1052,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.",
@@ -1411,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:',
@@ -1562,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',
@@ -1799,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.',
@@ -1932,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',
@@ -2170,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.',
 
@@ -2189,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.
@@ -2219,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',
@@ -2257,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,19 +2292,23 @@ 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_newpagetext' => 'See on uus lehekülg.',
 'enotif_impersonal_salutation' => '{{GRAMMAR:genitive|{{SITENAME}}}} kasutaja',
-'changed' => 'muutnud lehekülge',
-'created' => 'loonud lehekülje',
-'enotif_subject' => '$PAGEEDITOR on {{GRAMMAR:inessive|{{SITENAME}}}} $CHANGEDORCREATED $PAGETITLE',
+'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
 
@@ -2309,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
@@ -2325,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',
@@ -2478,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.",
@@ -2510,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',
@@ -2552,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
@@ -3024,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',
@@ -3032,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',
@@ -3051,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',
@@ -3073,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',
@@ -3106,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.',
@@ -3137,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 *).
@@ -3708,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.
@@ -3847,11 +3872,12 @@ 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 a490b8c..56cb1f4 100644 (file)
@@ -173,7 +173,7 @@ $messages = array(
 
 'underline-always' => 'Beti',
 'underline-never' => 'Inoiz ez',
-'underline-default' => 'Nabigatzailearen lehenetsitako balioa',
+'underline-default' => 'Lehenetsitako nabigatzailea',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Aldatu eremuko letra tipoa:',
@@ -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',
@@ -258,8 +258,8 @@ $messages = array(
 'newwindow' => '(leiho berrian irekitzen da)',
 'cancel' => 'Utzi',
 'moredotdotdot' => 'Gehiago...',
-'mypage' => 'Nire orrialdea',
-'mytalk' => 'Nire eztabaida',
+'mypage' => 'Orrialdea',
+'mytalk' => 'Eztabaida',
 'anontalk' => 'IP honen eztabaida',
 'navigation' => 'Nabigazioa',
 'and' => '&#32;eta',
@@ -281,7 +281,7 @@ $messages = array(
 'vector-action-protect' => 'Babestu',
 'vector-action-undelete' => 'Berreskuratu',
 'vector-action-unprotect' => 'Babesa aldatu',
-'vector-simplesearch-preference' => 'Baimendu bilaketa gomendio hobetuak (Vector itxurarekin bakarrik)',
+'vector-simplesearch-preference' => 'Bilaketa barra sinplifikatua gaitu (Vector itxurarekin bakarrik)',
 'vector-view-create' => 'Sortu',
 'vector-view-edit' => 'Aldatu',
 'vector-view-history' => 'Historia ikusi',
@@ -291,6 +291,7 @@ $messages = array(
 'namespaces' => 'Izen-tarteak',
 'variants' => 'Aldaerak',
 
+'navigation-heading' => 'Nabigazio menua',
 'errorpagetitle' => 'Errorea',
 'returnto' => '$1(e)ra itzuli.',
 'tagline' => '{{SITENAME}}(e)tik',
@@ -316,7 +317,7 @@ $messages = array(
 'viewdeleted_short' => 'Ikusi ezabatutako {{PLURAL:$1|bidalketa bat|$1 bidalketa}}',
 'protect' => 'Babestu',
 'protect_change' => 'aldatu',
-'protectthispage' => 'Orrialde hau babestu',
+'protectthispage' => 'Orri hau babestu',
 'unprotect' => 'Babesa aldatu',
 'unprotectthispage' => 'Orrialde honen babesa aldatu',
 'newpage' => 'Orrialde berria',
@@ -351,6 +352,7 @@ Erabiltzaile gehiegi ari da orrialde hau ikusi nahiean.
 Mesedez itxaron ezazu unetxo bat orrialde honetara berriz sartzen saiatu baino lehen.
 
 $1',
+'pool-timeout' => 'Lock-a itxoiten denbora amaitu da',
 'pool-queuefull' => 'Prozesuen zerrenda beteta dago',
 'pool-errorunknown' => 'Errore ezezaguna',
 
@@ -410,6 +412,8 @@ $1',
 'page-rss-feed' => '"$1" RSS Jarioa',
 'page-atom-feed' => '"$1" Atom Jarioa',
 'red-link-title' => '$1 (orria ez da existitzen)',
+'sort-descending' => 'Sailkatu beherantz',
+'sort-ascending' => 'Sailkatu gorantz',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Orrialdea',
@@ -475,7 +479,7 @@ Mesedez, bidali gertakar hau administradore bati, URLaren izena jarriz.',
 'unexpected' => 'Espero ez zen balioa: "$1"="$2".',
 'formerror' => 'Errorea: ezin izan da formularioa bidali',
 'badarticleerror' => 'Ezin da ekintza hau orrialde honetan burutu.',
-'cannotdelete' => 'Ezin izan da "$1" orrialde edo fitxategia ezabatu.
+'cannotdelete' => 'Ezin izan da «$1» orria edo fitxategia ezabatu.
 Baliteke beste norbaitek ezabatu izana.',
 'cannotdelete-title' => 'Ezin da "$1" orrialdea ezabatu',
 'badtitle' => 'Izenburu ezegokia',
@@ -492,11 +496,13 @@ Kontsulta: $2',
 'actionthrottledtext' => 'Spamaren aurkako neurri gisa ekintza hau denbora tarte laburrean aldi askotan egiteko mugapena duzu, eta muga hori zeharkatu duzu.
 Saia zaitez berriro minutu batzuen buruan, mesedez.',
 'protectedpagetext' => 'Orrialde hau aldaketak saihesteko blokeatu egin da.',
-'viewsourcetext' => 'Orrialde honen testua ikusi eta kopiatu dezakezu:',
-'protectedinterface' => 'Orrialde honek softwarearentzako interfaze testua gordetzen du eta blokeatuta dago bandalismoak saihesteko.',
-'editinginterface' => "'''Oharra:''' Softwarearentzako interfaze testua duen orrialde bat aldatzen ari zara.
-Orrialde honetako aldaketek erabiltzaile guztiei eragingo die.
-Itzulpenetarako, [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] erabili ezazu, MediaWiki proiektuan.",
+'viewsourcetext' => 'Orri honen iturburu-testua ikusi eta kopiatu dezakezu:',
+'viewyourtext' => "Orrialde honetara '''zure aldaketen''' jatorria ikus eta kopiatu ahal duzu:",
+'protectedinterface' => 'Orrialde honek softwarearentzako interfaze testua gordetzen du eta blokeatuta dago bandalismoak saihesteko.
+Wiki guztientzako aldaketak egin edo gehitzeko, mesedez erabili [//translatewiki.net/ translatewiki.net], MediaWikiren lokalizazio proiektua.',
+'editinginterface' => "'''Oharra:''' Softwarearen interfazerako testua duen orri bat aldatzen ari zara.
+Orri honetako aldaketek wiki honetako erabiltzaile guztiei eragingo diete.
+Itzulpenetarako, erabil ezazu [//translatewiki.net/ translatewiki.net], MediaWiki proiektuan.",
 'sqlhidden' => '(ezkutuko SQL kontsulta)',
 'cascadeprotected' => "Orrialde hau aldaketen aurka babestua dago, ''kaskada'' aukerarekin babestu {{PLURAL:$1|duten orrialde honetan|dituzten orrialde hauetan}} txertaturik dagoelako:
 $2",
@@ -504,6 +510,7 @@ $2",
 'ns-specialprotected' => 'Ezin dira {{ns:special}} izen-tarteko orrialdeak editatu.',
 'titleprotected' => "[[User:$1|$1]]ek izenburu hau sortzea ekidin zuen.
 Emandako arrazoia ''$2'' izan zen.",
+'exception-nologin' => 'Saioa hasi gabe',
 
 # Virus scanner
 'virus-badscanner' => "Ezarpen txarrak: antibirus ezezaguna: ''$1''",
@@ -515,9 +522,7 @@ Emandako arrazoia ''$2'' izan zen.",
 
 Erabiltzaile anonimo bezala jarrai dezakezu {{SITENAME}} erabiltzen, edo <span class='plainlinks'>[$1 saioa has dezakezu berriz]</span> erabiltzaile berdinarekin edo ezberdin batekin.
 Kontuan izan orrialde batzuk saioa hasita bazenu bezala ikus ditzakezula nabigatzailearen katxea garbitu arte.",
-'welcomecreation' => '== Ongi etorri, $1! ==
-
-Zure kontua sortu egin da. Ez ahaztu [[Special:Preferences|{{SITENAME}}(e)ko hobespenak]] aldatzea.',
+'welcomeuser' => 'Ongi etorri, $1!',
 'yourname' => 'Erabiltzaile izena',
 'yourpassword' => 'Pasahitza:',
 'yourpasswordagain' => 'Pasahitza berriz',
@@ -593,6 +598,7 @@ Ondorioz, ezin duzu kontu gehiago sortu.',
 'invalidemailaddress' => 'Ezin da e-posta helbide hori ontzat eman baliogabeko formatua duela dirudielako.
 
 Mesedez, formatu egokia duen helbide bat zehaztu, edo hutsik utzi.',
+'emaildisabled' => 'Gune honek ezin du e-postarik bidali.',
 'accountcreated' => 'Kontua sortuta',
 'accountcreatedtext' => '$1 erabiltzaile kontua sortu egin da.',
 'createaccount-title' => '{{SITENAME}}-rako kontua sortu',
@@ -734,9 +740,9 @@ Erabiltzaile anonimoa bazara eta zurekin zerikusirik ez duten mezuak jasotzen ba
 Beste orrialde batzuetan [[Special:Search/{{PAGENAME}}|bilatu dezakezu izenburu hau]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} bilatu lotutako logak],
 edo [{{fullurl:{{FULLPAGENAME}}|action=edit}} berau aldatu ere egin dezakezu]</span>.',
-'noarticletext-nopermission' => 'Une honetan ez dago texturik orri honetan.
-Beste orrietan [[Special:Search/{{PAGENAME}}|testua bilatu dezakezu]],
-edo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} erlazionatutako erregistroak ikusi]</span>.',
+'noarticletext-nopermission' => 'Une honetan ez dago testurik orrialde honetan.
+Beste orrialdeetan [[Special:Search/{{PAGENAME}}|izenburu hau bilatu dezakezu]],
+edo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} erlazionatutako erregistroak bilatu]</span>, baina ez duzu orrialde hau sortzeko baimenik.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" lankidea ez dago erregistatuta. Mesedez, konprobatu orri hau editatu/sortu nahi duzun.',
 'userpage-userdoesnotexist-view' => '"$1" erabiltzaile-kontua ez dago erregistraturik.',
 'blocked-notice-logextract' => 'Erabiltzaile hau blokeatuta dago une honetan.
@@ -760,7 +766,7 @@ Azken blokeoaren erregistroa ageri da behean, erreferentzia gisa:',
 'note' => "'''Oharra:'''",
 'previewnote' => "'''Gogoratu hau aurrikuspen bat dela.'''
 Zure aldaketak ez dira oraindik gorde!",
-'continue-editing' => 'Aldatzen jarraitu',
+'continue-editing' => 'Edizio-eremura joan',
 'previewconflict' => 'Aurreikuspenak aldaketen koadroan idatzitako testua erakusten du, gorde ondoren agertuko den bezala.',
 'session_fail_preview' => "'''Sentitzen dugu! Ezin izan da zure aldaketa prozesatu, saioko datu batzuen galera dela-eta. Mesedez, saiatu berriz. Arazoak jarraitzen badu, saiatu saioa amaitu eta berriz hasten.'''",
 'session_fail_preview_html' => "'''Sentitzen dugu! Ezin izan dugu zure aldaketa burutu, saio datu galera bat medio.'''
@@ -811,18 +817,17 @@ 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 daukazu orrialde berriak sortzeko baimenik.',
+'nocreate-loggedin' => 'Ez duzu orri berriak sortzeko baimenik.',
 'sectioneditnotsupported-title' => 'Ezin dira atalak aldatu',
 'sectioneditnotsupported-text' => 'Ezin dira atalak aldatu orrialde honetan.',
 'permissionserrors' => 'Baimen erroreak',
 'permissionserrorstext' => 'Ez duzu hori egiteko baimenik, hurrengo {{PLURAL:$1|arrazoia dela eta|arrazoiak direla eta}}:',
 'permissionserrorstext-withaction' => 'Ez duzu $2 egiteko eskumenik, honako {{PLURAL:$1|arrazoia dela eta:|arrazoiak direla eta:}}',
-'recreate-moveddeleted-warn' => "'''Oharra: Lehenago ezabatutako orrialdea birsortzen ari zara.'''
+'recreate-moveddeleted-warn' => "'''Oharra: Lehenago ezabatutako orri bat berriz sortzen ari zara.'''
 
-Pentsatu ea orrialde hau editatzen jarraitzeak zentzurik baduen.
-Hemen duzu orrialde honen ezabaketa erregistroa badaezpada ere:",
+Pentsatu ea orri hau editatzen jarraitzeak zentzurik baduen.
+Hemen duzu orri honen ezabaketa erregistroa, badaezpada ere:",
 'moveddeleted-notice' => 'Orrialde hau ezabatua izan da.
 Orrialdearen ezabatze erregistroa behean agertzen da erreferentzia gisa.',
 'log-fulllog' => 'Erregistro osoa ikusi',
@@ -834,6 +839,12 @@ Ez du azalpenik eman.',
 'edit-already-exists' => 'Ezin izan da orri berria sortu.
 Jada existitzen da.',
 
+# Content models
+'content-model-wikitext' => 'wikitestua',
+'content-model-text' => 'testu laua',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Adi: Orrialde honek parser funtzio deialdi oso garesti gehiegi ditu.
 
@@ -1093,7 +1104,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'powersearch-field' => 'Bilatu',
 'powersearch-togglelabel' => 'Egiaztatu:',
 'powersearch-toggleall' => 'Guztiak',
-'powersearch-togglenone' => 'Bat ere',
+'powersearch-togglenone' => 'Bat ere ez',
 'search-external' => 'Kanpo bilaketa',
 'searchdisabled' => '{{SITENAME}}(e)n ezgaituta dago bilaketa. Dena dela, Google erabiliz ere egin dezakezu bilaketa. Kontuan izan bertan dituzten {{SITENAME}}(e)ko emaitzak zaharkituta egon daitezkeela.',
 
@@ -1107,7 +1118,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 
 # Preferences page
 'preferences' => 'Hobespenak',
-'mypreferences' => 'Nire hobespenak',
+'mypreferences' => 'Hobespenak',
 'prefs-edits' => 'Aldaketa kopurua:',
 'prefsnologin' => 'Saioa hasi gabe',
 'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Izena eman]</span> behar duzu zure hobespenak ezartzeko.',
@@ -1118,6 +1129,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'prefs-beta' => 'Beta ezaugarriak',
 'prefs-datetime' => 'Data eta ordua',
 'prefs-labs' => 'Labs ezaugarriak',
+'prefs-user-pages' => 'Erabiltzaile orrialdeak',
 'prefs-personal' => 'Erabiltzaile profila',
 'prefs-rc' => 'Azken aldaketak',
 'prefs-watchlist' => 'Jarraipen zerrenda',
@@ -1166,7 +1178,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'timezoneregion-indian' => 'Indiar Ozeanoa',
 'timezoneregion-pacific' => 'Ozeano Barea',
 'allowemail' => 'Beste erabiltzaileengandik e-posta mezuak jasotzea gaitu',
-'prefs-searchoptions' => 'Bilaketa aukerak',
+'prefs-searchoptions' => 'Bilatu',
 'prefs-namespaces' => 'Izen-tarteak',
 'defaultns' => 'Bestela izen-tarte hauetan bilatu:',
 'default' => 'lehenetsia',
@@ -1324,11 +1336,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',
@@ -1396,14 +1410,15 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|lankide|lankide}} jarraitzen]',
 'rc_categories' => 'Kategorietara mugatu ("|" karaktereaz banandu)',
 'rc_categories_any' => 'Edozein',
+'rc-change-size-new' => '{{PLURAL:$1|Byte 1|$1 byte}} aldaketaren ostean',
 'newsectionsummary' => '/* $1 */ atal berria',
 'rc-enhanced-expand' => 'Erakutsi xehetasunak (JavaScript beharrezkoa da)',
 'rc-enhanced-hide' => 'Xehetasunak ezkutatu',
 
 # Recent changes linked
-'recentchangeslinked' => 'Lotutako orrialdeen aldaketak',
-'recentchangeslinked-feed' => 'Lotutako orrialdeen aldaketak',
-'recentchangeslinked-toolbox' => 'Lotutako orrialdeen aldaketak',
+'recentchangeslinked' => 'Lotutako orrietako aldaketak',
+'recentchangeslinked-feed' => 'Lotutako orrietako aldaketak',
+'recentchangeslinked-toolbox' => 'Lotutako orrietako aldaketak',
 'recentchangeslinked-title' => '"$1"(e)kin harremanetan dauden aldaketak',
 'recentchangeslinked-noresult' => 'Emandako epean ez da egon aldaketarik loturiko orrialdetan.',
 'recentchangeslinked-summary' => "Zerrenda honetan zehazturiko orrialde bati (edo kategoria berezi bateko azkeneko kideei) lotura duten orrietan eginiko azken aldaketak agertzen dira.
@@ -1795,7 +1810,7 @@ Erregistro mota, erabiltzailearen izena edota orrialdearen izena iragaziz bistar
 'log-title-wildcard' => 'Testu honekin hasten diren izenburuak bilatu',
 
 # Special:AllPages
-'allpages' => 'Orrialde guztiak',
+'allpages' => 'Orri guztiak',
 'alphaindexline' => '$1(e)tik $2(e)raino',
 'nextpage' => 'Hurrengo orrialdea ($1)',
 'prevpage' => 'Aurreko orrialdea ($1)',
@@ -1836,7 +1851,7 @@ Ikus, gainera [[Special:WantedCategories|kategoriarik eskatuenak]].',
 'linksearch-ok' => 'Bilatu',
 'linksearch-text' => '"*.wikipedia.org" bezalako izartxoak erabil daitezke.
 Gutxienez goi mailako domeinua behar du, adibidez "*.org".<br />
-Baimendutako protokoloak: <code>$1</code> (zure bilaketan hauek ez gehitu).',
+Baimendutako protokoloak: <code>$1</code> (protokoloa zehazten ez bada http:// hartzen da lehenetsitzat).',
 'linksearch-line' => '$1, $2(e)tik lotuta',
 'linksearch-error' => 'Komodinak izenaren hasieran bakarrik agertu beharko lirateke.',
 
@@ -1854,10 +1869,6 @@ Baimendutako protokoloak: <code>$1</code> (zure bilaketan hauek ez gehitu).',
 '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.
@@ -1910,7 +1921,7 @@ Badago [[{{MediaWiki:Listgrouprights-helppage}}|informazio osagarria]] banakako
 
 # Watchlist
 'watchlist' => 'Nire jarraipen zerrenda',
-'mywatchlist' => 'Nire jarraipen zerrenda',
+'mywatchlist' => 'Jarraipen zerrenda',
 'watchlistfor2' => '$1 ($2)',
 'nowatchlist' => 'Zure jarraipen zerrenda hutsik dago.',
 'watchlistanontext' => 'Mesedez $1 zure jarraipen zerrendako orrialdeak ikusi eta aldatu ahal izateko.',
@@ -1944,11 +1955,7 @@ Jarraipen zerrendatik artikulua kentzeko, artikuluan ''ez jarraitu''ri eman.",
 
 'enotif_mailer' => '{{SITENAME}}(e)ko Oharpen Postaria',
 'enotif_reset' => 'Orrialde guztiak bisitatu bezala markatu',
-'enotif_newpagetext' => 'Honako hau orrialde berria da.',
 'enotif_impersonal_salutation' => '{{SITENAME}} erabiltzailea',
-'changed' => 'aldatu',
-'created' => 'sortu',
-'enotif_subject' => '{{SITENAME}}(e)ko $PAGETITLE orrialdea $PAGEEDITOR(e)k $CHANGEDORCREATED du',
 'enotif_lastvisited' => 'Jo $1 orrialdera zure azken bisitaz geroztik izandako aldaketa guztiak ikusteko.',
 'enotif_lastdiff' => 'Jo $1(e)ra aldaketa hau ikusteko.',
 'enotif_anon_editor' => '$1 erabiltzaile anonimoa',
@@ -1981,6 +1988,8 @@ $UNWATCHURL
 
 Laguntza:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'sortu',
+'changed' => 'aldatu',
 
 # Delete
 'deletepage' => 'Orrialdea ezabatu',
@@ -2015,9 +2024,10 @@ Ezabatzeak ezbeharrak eragin ditzake {{SITENAME}}ren datu-basean;
 kontu izan.',
 
 # Rollback
-'rollback' => 'Aldaketak desegin',
+'rollback' => 'Desegin aldaketak',
 'rollback_short' => 'Desegin',
 'rollbacklink' => 'desegin',
+'rollbacklinkcount' => 'desegin {{PLURAL:$1|edizio bat|$1 edizio}}',
 'rollbackfailed' => 'Desegiteak huts egin dud',
 'cantrollback' => 'Ezin da aldaketa desegin; erabiltzaile bakarrak hartu du parte.',
 'alreadyrolled' => 'Ezin da [[User:$2|$2]](e)k ([[User talk:$2|Eztabaida]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) [[$1]](e)n egindako azken aldaketa desegin;
@@ -2158,7 +2168,7 @@ $1',
 # Contributions
 'contributions' => 'Lankidearen ekarpenak',
 'contributions-title' => '$1(r)entzat lankidearen ekarpenak',
-'mycontris' => 'Nire ekarpenak',
+'mycontris' => 'Ekarpenak',
 'contribsub2' => '$1 ($2)',
 'nocontribs' => 'Ez da ezaugarri horiekin bat datorren aldaketarik aurkitu.',
 'uctop' => ' (Azken aldaketa)',
@@ -2182,7 +2192,7 @@ Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:',
 'sp-contributions-submit' => 'Bilatu',
 
 # What links here
-'whatlinkshere' => 'Orri honetaranzko lotura dutenak',
+'whatlinkshere' => 'Honanzko lotura duten orriak',
 'whatlinkshere-title' => '$1(e)ra lotura duten orriak',
 'whatlinkshere-page' => 'Orrialdea:',
 'linkshere' => "Hauek dute '''[[:$1]]''' orrialderako lotura:",
@@ -2197,10 +2207,11 @@ Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:',
 'whatlinkshere-hideredirs' => '$1 birzuzenketak',
 'whatlinkshere-hidetrans' => '$1 transklusioak',
 'whatlinkshere-hidelinks' => '$1 loturak',
-'whatlinkshere-hideimages' => '$1 irudiak loturak ditu',
+'whatlinkshere-hideimages' => '$1 irudi loturak',
 'whatlinkshere-filters' => 'Iragazleak',
 
 # Block/unblock
+'autoblockid' => 'Blokeo automatikoa #$1',
 'block' => 'Erabiltzailea blokeatu',
 'unblock' => 'Erabiltzailea desblokeatu',
 'blockip' => 'Erabiltzailea blokeatu',
@@ -2531,7 +2542,7 @@ Fitxategiaren atal bat baino ez zen igo.',
 'tooltip-n-randompage' => 'Ausazko orrialde bat kargatu',
 'tooltip-n-help' => 'Aurkitzeko lekua.',
 'tooltip-t-whatlinkshere' => 'Orri honetara lotura duten wiki orri guztien zerrenda',
-'tooltip-t-recentchangeslinked' => 'Orrialde honetatik lotutako orrialdeen azken aldaketak',
+'tooltip-t-recentchangeslinked' => 'Orri honetatik lotura duten orrietako azken aldaketak',
 'tooltip-feed-rss' => 'Orrialde honen RSS jarioa',
 'tooltip-feed-atom' => 'Orrialde honen atom jarioa',
 'tooltip-t-contributions' => 'Lankide honen ekarpen zerrenda ikusi',
@@ -2596,9 +2607,39 @@ Baliteke zerrenda beltzean dagoen kanpo lotura batek sortzea arazo hori.',
 'spam_blanking' => 'Berrikuspen guztiek $1(e)rako lotura zeukaten, husten',
 
 # Info page
+'pageinfo-header-basic' => 'Oinarrizko informazioa',
 'pageinfo-header-edits' => 'Aldaketen historia',
+'pageinfo-header-restrictions' => 'Orriaren babesa',
+'pageinfo-header-properties' => 'Orriaren propietateak',
+'pageinfo-display-title' => 'Ageri den izenburua',
+'pageinfo-default-sort' => 'Ordenatze irizpide lehenetsia',
+'pageinfo-length' => 'Orriaren neurria (byteak)',
+'pageinfo-article-id' => 'Orriaren identifikazio zenbakia',
+'pageinfo-language' => 'Orriaren edukiaren hizkuntza',
+'pageinfo-robot-policy' => 'Bilaketa motorraren egoera',
+'pageinfo-robot-index' => 'Indexagarria',
+'pageinfo-robot-noindex' => 'Indexaezina',
 'pageinfo-views' => 'Bistaratze-kopurua',
-'pageinfo-edits' => 'Aldaketa kopuru totala',
+'pageinfo-watchers' => 'Orriaren jarraitzaileen kopurua',
+'pageinfo-redirects-name' => 'Orri honetara dakarten birzuzenketak',
+'pageinfo-subpages-name' => 'Orri honen azpiorriak',
+'pageinfo-firstuser' => 'Orriaren sortzailea',
+'pageinfo-firsttime' => 'Orriaren sortze data',
+'pageinfo-lastuser' => 'Azken editorea',
+'pageinfo-lasttime' => 'Azken edizioaren data',
+'pageinfo-edits' => 'Edizio kopurua, guztira',
+'pageinfo-authors' => 'Egile kopurua, guztira',
+'pageinfo-recent-edits' => 'Oraintsuko edizioen kopurua (azken $1)',
+'pageinfo-recent-authors' => 'Oraintsuko egileen kopurua',
+'pageinfo-hidden-categories' => 'Ezkutuko {{PLURAL:$1|kategoria|kategoriak}} ($1)',
+'pageinfo-templates' => 'Txertatutako {{PLURAL:$1|txantiloia|txantiloiak}} ($1)',
+'pageinfo-toolboxlink' => 'Orri honen datuak',
+'pageinfo-redirectsto-info' => 'Informazioa',
+'pageinfo-contentpage' => 'Eduki-orritzat zenbatua',
+'pageinfo-contentpage-yes' => 'Bai',
+'pageinfo-protect-cascading' => 'Serieko babesa, orri honetatik',
+'pageinfo-protect-cascading-yes' => 'Bai',
+'pageinfo-protect-cascading-from' => 'Serieko babesak aktibatuta. Sorburua:',
 
 # Skin names
 'skinname-standard' => 'Lehenetsia',
@@ -3120,7 +3161,7 @@ Egiaztapen kode hau $4 iraungiko da.',
 'autosumm-blank' => 'Orritik eduki guztia ezabatuta',
 'autosumm-replace' => 'Orriaren edukiaren ordez, «$1» jarri da',
 'autoredircomment' => '[[$1]] orrialdera birzuzentzentzen',
-'autosumm-new' => 'Orrialde berria $1-(e)kin sortua',
+'autosumm-new' => 'Orria sortu da. Edukia: $1',
 
 # Live preview
 'livepreview-loading' => 'Kargatzen…',
@@ -3207,12 +3248,12 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'fileduplicatesearch-result-n' => '"$1" fitxategiak {{PLURAL:$2|kopia zehatz bakarra du|$2 kopia zehatz ditu}}.',
 
 # Special:SpecialPages
-'specialpages' => 'Orrialde bereziak',
+'specialpages' => 'Orri bereziak',
 'specialpages-note' => '----
-* Orrialde berezi arruntak.
-* <strong class="mw-specialpagerestricted">Mugatutako orrialde bereziak.</strong>',
+* Orri berezi arruntak.
+* <strong class="mw-specialpagerestricted">Mugatutako orri bereziak.</strong>',
 'specialpages-group-maintenance' => 'Mantentze-oharrak',
-'specialpages-group-other' => 'Beste orrialde berezi batzuk',
+'specialpages-group-other' => 'Beste orri berezi batzuk',
 'specialpages-group-login' => 'Saioa hasi / kontua sortu',
 'specialpages-group-changes' => 'Aldaketa berriak eta erregistroak',
 'specialpages-group-media' => 'Artxiboen orriak',
@@ -3282,11 +3323,18 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'htmlform-selectorother-other' => 'Beste bat',
 
 # New logging system
+'logentry-delete-delete' => '$1 wikilariak $3 orria ezabatu du',
 'revdelete-restricted' => 'administratzaileentzako mugak ezarri dira',
 'revdelete-unrestricted' => 'administratzaileentzako mugak kendu dira',
 'logentry-move-move' => '$1 wikilariak «$3» orria «$4» izenera aldatu du',
+'logentry-move-move-noredirect' => '$1 wikilariak «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe',
+'logentry-move-move_redir' => '$1 wikilariak «$3» orria «$4» izenera aldatu du, birzuzenketaren gainetik',
 'logentry-move-move_redir-noredirect' => '$1 wikilariak «$3» orria «$4» izenera aldatu du, birzuzenketa bat gainidatzita, birzuzenketarik utzi gabe',
+'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 bbfb129..2d52418 100644 (file)
@@ -378,10 +378,6 @@ La razón es la siguienti: ''$2''.",
 'logouttext' => "'''Cuenta afechá corretamenti.'''<br />
 Pueis acontinal gastandu {{SITENAME}} de holma anónima, u <span class='plainlinks'>[$1 entral ena tu cuenta]</span> con el mesmu ussuáriu, u con otru.
 Dati cuenta que hata que nu esborris el caché del tu escrucaol pué paecel que la tu cuenta acontina abierta n'angunas páginas.",
-'welcomecreation' => "== Bienviniu, $1! ==
-
-La tu cuenta d'ussuáriu á siu criá.
-Alcuerdati de chambal las tus [[Special:Preferences|preferéncias de {{SITENAME}}]].",
 'yourname' => "Nombri d'usuáriu:",
 'yourpassword' => 'Consínia:',
 'yourpasswordagain' => 'Escrebi e nuevu la consínia:',
@@ -615,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.',
@@ -953,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',
@@ -1344,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',
@@ -1421,11 +1414,7 @@ Si quieis ehal de vehilal la páhina, pursa sobri \"Ehal de vehilal\".",
 
 'enotif_mailer' => 'Notificaeru pol correu e {{SITENAME}}',
 'enotif_reset' => 'Aseñalal tolas páhinas vesitás',
-'enotif_newpagetext' => 'Esta páhina es nueva.',
 'enotif_impersonal_salutation' => 'usuáriu e {{SITENAME}}',
-'changed' => 'chambau',
-'created' => 'criá',
-'enotif_subject' => '{{SITENAME}}: la páhina $PAGETITLE á siu $CHANGEDORCREATED pol $PAGEEDITOR',
 'enotif_lastvisited' => 'Vai pa $1 pa visoreal tolos chambus hechus dendi la tu úrtima vesita.',
 'enotif_lastdiff' => 'Vai pa $1 pa visoreal esti chambu.',
 'enotif_anon_editor' => 'usuáriu anónimu $1',
@@ -1452,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',
@@ -2414,5 +2405,6 @@ Las imahin se muestran a resolución compreta; las demas crasis d'archivu s'ehec
 '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 3b321b4..bb0931b 100644 (file)
  * @author Asoxor
  * @author Baqeri
  * @author Behdarvandyani
+ * @author Dalba
+ * @author E THP
  * @author Ebraminio
+ * @author Goudarz
  * @author Huji
  * @author Ibrahim
  * @author Ladsgroup
@@ -474,7 +477,7 @@ $messages = array(
 
 'underline-always' => 'همیشه',
 'underline-never' => 'هرگز',
-'underline-default' => 'پیش‌فرض مرورگر',
+'underline-default' => 'پوسته یا مرورگر پیش‌فرض',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'سبک قلم جعبهٔ ویرایش:',
@@ -559,8 +562,9 @@ $messages = array(
 'newwindow' => '(در پنجرهٔ جدید باز می‌شود)',
 'cancel' => 'لغو',
 'moredotdotdot' => 'بیشتر...',
-'mypage' => 'صفحهٔ من',
-'mytalk' => 'بحث من',
+'morenotlisted' => 'ادامه لیست...',
+'mypage' => 'صفحه',
+'mytalk' => 'بحث',
 'anontalk' => 'بحث برای این آی‌پی',
 'navigation' => 'گشتن',
 'and' => '&#32;و',
@@ -592,6 +596,7 @@ $messages = array(
 'namespaces' => 'فضاهای نام',
 'variants' => 'گویش‌ها',
 
+'navigation-heading' => 'منوی ناوبری',
 'errorpagetitle' => 'خطا',
 'returnto' => 'بازگشت به $1.',
 'tagline' => 'از {{SITENAME}}',
@@ -808,7 +813,7 @@ $1',
 'actionthrottled' => 'جلوی عمل شما گرفته شد',
 'actionthrottledtext' => 'به منظور جلوگیری از انتشار اسپم، اجازه ندارید که چنین عملی را بیش از چند بار در یک مدت زمان کوتاه انجام بدهید.
 لطفاً پس از چند دقیقه دوباره تلاش کنید.',
-'protectedpagetext' => 'این صفحه برای جلوگیری از ویرایش محافظت شده‌است.',
+'protectedpagetext' => 'این صفحه برای جلوگیری از ویرایش یا فعالیت دیگر محافظت شده‌است.',
 'viewsourcetext' => 'می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:',
 'viewyourtext' => "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
 'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.
@@ -843,9 +848,9 @@ $2',
 
 شما می‌توانید به استفادهٔ گمنام از {{SITENAME}} ادامه دهید، یا با همین حساب کاربری یا حسابی دیگر <span class='plainlinks'>[$1 به سامانه وارد شوید]</span>.
 توجه کنید که تا زمانی که میانگیر مرورگرتان را پاک نکنید، بعضی صفحه‌ها ممکن است به گونه‌ای نمایش یابند که گویی هنوز از سامانه خارج نشده‌اید.",
-'welcomecreation' => '==$1، خوش آمدید!==
-حساب شما ایجاد شد.
\81راÙ\85Ù\88Ø´ Ù\86Ú©Ù\86Û\8cد Ú©Ù\87 [[Special:Preferences|ترجÛ\8cحات {{SITENAME}}]] Ø±Ø§ Ø¨Ø±Ø§Û\8c Ø®Ù\88د تغییر دهید.',
+'welcomeuser' => 'خوشامدید، $1!',
+'welcomecreation-msg' => 'حساب کاربری شما ایجاد شده است.
\81راÙ\85Ù\88Ø´ Ù\86Ú©Ù\86Û\8cد Ú©Ù\87 [[Special:Preferences|ترجÛ\8cحات {{SITENAME}}]] Ø®Ù\88د Ø±Ø§ تغییر دهید.',
 'yourname' => 'نام کاربری:',
 'yourpassword' => 'گذرواژه:',
 'yourpasswordagain' => 'تکرار گذرواژه:',
@@ -947,6 +952,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی',
 'user-mail-no-addy' => 'تلاش برای ارسال نامه بدون یک آدرس رایانامه.',
+'user-mail-no-body' => 'تلاش برای فرستادن پست‌الکترونیک بی‌دلیل کوتاه یا خالی',
 
 # Change password dialog
 'resetpass' => 'تغییر گذرواژه',
@@ -995,7 +1001,7 @@ $2
 شما باید هم‌اکنون وارد شده و یک گذرواژهٔ جدید برگزینید. اگر شخص دیگری این درخواست را داده است، یا اگر گذرواژهٔ اصلی‌تان را به خاطر آوردید، و دیگر نمی‌خواهید که آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.',
 'passwordreset-emailelement' => 'نام کاربری: $1
 گذرواژهٔ موقت: $2',
-'passwordreset-emailsent' => 'یک نامهٔ یادآور فرستاده شده است.',
+'passwordreset-emailsent' => 'یک نامهٔ یادآور فرستاده شد.',
 'passwordreset-emailsent-capture' => 'رایانامهٔ یادآور فرستاده شد، که به شرح زیر است.',
 'passwordreset-emailerror-capture' => 'رایانامهٔ یادآور همانطور که در زیر مشاهده می‌فرمایید ایجاد شد ولی ارسال آن به کاربر موفقیت‌آمیز نبود: $1',
 
@@ -1007,6 +1013,7 @@ $2
 'changeemail-oldemail' => 'نشانی رایانامهٔ کنونی:',
 'changeemail-newemail' => 'نشانی رایانامهٔ جدید:',
 'changeemail-none' => '(هیچ)',
+'changeemail-password' => ' {{SITENAME}} رمز عبور شما:',
 'changeemail-submit' => 'تغییر رایانامه',
 'changeemail-cancel' => 'انصراف',
 
@@ -1114,7 +1121,7 @@ $2
 'userpage-userdoesnotexist-view' => 'حساب کاربری «$1» ثبت نشده‌است.',
 'blocked-notice-logextract' => 'دسترسی این کاربر در حال حاضر بسته است.
 آخرین مورد سیاهه قطع دسترسی در زیر آمده‌است:',
-'clearyourcache' => "''نکته:''' پس از ذخیره‌کردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
+'clearyourcache' => "'''نکته:''' پس از ذخیره‌کردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
 *'''فایرفاکس / سافاری:'''  کلید ''Shift'' را نگه دارید و روی دکمهٔ ''Reload'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' یا ''Ctrl-R'' را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ''⌘-R'')
 *'''گوگل کروم:'''کلیدهای ''Ctrl+Shift+R'' را با هم فشار دهید. (در رایانه‌های اپل مکینتاش کلید‌های ''⌘-Shift-R'')
 *'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگه‌دارید و روی دکمهٔ ''Refresh'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' را با هم فشار دهید
@@ -1195,7 +1202,6 @@ $2
 'template-semiprotected' => '(نیمه‌حفاظت‌شده)',
 'hiddencategories' => 'این صفحه در {{PLURAL:$1|یک ردهٔ پنهان|$1 ردهٔ پنهان}} قرار دارد:',
 'edittools' => '<!-- متن این قسمت زیر صفحه‌های ویرایش و بارگذاری نشان داده می‌شود -->',
-'nocreatetitle' => 'ایجاد صفحه محدود شده‌است',
 'nocreatetext' => '{{SITENAME}} قابلیت ایجاد صفحه‌های جدید را محدود کرده‌است.
 می‌توانید بازگردید و صفحه‌ای موجود را ویرایش کنید یا اینکه  [[Special:UserLogin|به سامانه وارد شوید یا حساب کاربری ایجاد کنید]].',
 'nocreate-loggedin' => 'شما اجازهٔ ایجاد صفحه‌های جدید را ندارید.',
@@ -1519,7 +1525,7 @@ $1",
 
 # Preferences page
 'preferences' => 'ترجیحات',
-'mypreferences' => 'ترجیحات من',
+'mypreferences' => 'ترجیحات',
 'prefs-edits' => 'تعداد ویرایش‌ها:',
 'prefsnologin' => 'به سامانه وارد نشده‌اید',
 'prefsnologintext' => 'برای تنظیم ترجیحات کاربر باید <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} به سامانه وارد شوید]</span>.',
@@ -1595,9 +1601,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' => 'زبان:',
@@ -1749,12 +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 ارتقا یافت',
-'rightsnone' => '(هیچ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'خواندن این صفحه',
@@ -1992,6 +1999,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 کپی کرد.',
@@ -2383,7 +2391,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'linksearch-ok' => 'جستجو',
 'linksearch-text' => 'نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.
 حداقل یک دامنه سطح بالا ، به عنوان مثال "*.org" نیاز دارد.<br />
-پروتکل‌های پشتیبانی‌شده: <code>$1</code> (هیچ یک از این موارد را در جستجوی خود نیافزایید)',
+{{PLURAL:$2|پروتکل|پروتکل‌های}} پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است).',
 'linksearch-line' => '$1 از $2 پیوند دارد',
 'linksearch-error' => 'نشانه‌ها فقط در ابتدای نام میزبان اینترنتی می‌توانند استفاده شوند.',
 
@@ -2402,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' => 'فهرست زیر شامل گروه‌های کاربری تعریف شده در این ویکی و اختیارات داده شده به آن‌ها است.
@@ -2464,15 +2468,15 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 
 # Watchlist
 'watchlist' => 'فهرست پی‌گیری‌های من',
-'mywatchlist' => 'Ù¾Û\8câ\80\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87اÛ\8c Ù\85Ù\86',
+'mywatchlist' => 'Ù\81Ù\87رست Ù¾Û\8câ\80\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87ا',
 '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' => 'پی‌گیری',
@@ -2500,19 +2504,24 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 
 'enotif_mailer' => 'رایانامهٔ اطلاع‌رسانی {{SITENAME}}',
 'enotif_reset' => 'علامت‌گذاری همهٔ صفحه‌ها به عنوان بازدید شده',
-'enotif_newpagetext' => 'این یک صفحهٔ تازه‌است.',
 'enotif_impersonal_salutation' => 'کاربر {{SITENAME}}',
-'changed' => 'تغییر یافته',
-'created' => 'ایجاد شده',
-'enotif_subject' => 'صفحهٔ «$PAGETITLE» در {{SITENAME}} به دست $PAGEEDITOR $CHANGEDORCREATED است.',
+'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' => 'صفحهٔ $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 را برای نسخهٔ کنونی شاهده کنید.',
+'enotif_body_intro_changed' => '{{SITENAME}} صفحهٔ $1 در تاریخ $PAGEEDITDATE توسط {{gender:$2|$2}} تغییر کرد، $3 را برای نسخهٔ کنونی شاهده کنید.',
 'enotif_lastvisited' => 'برای دیدن همهٔ تغییرات از آخرین باری که سر زده‌اید $1 را ببینید.',
 'enotif_lastdiff' => 'برای نمایش این تغییر $1 را ببینید.',
 'enotif_anon_editor' => 'کاربر ناشناس $1',
 'enotif_body' => '$WATCHINGUSERNAME گرامی،
 
-صفحهٔ «$PAGETITLE» در {{SITENAME}} در $PAGEEDITDATE به‌دست $PAGEEDITOR $CHANGEDORCREATED است. برای دیدن نسخهٔ کنونی $PAGETITLE_URL را ببینید.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
 
 توضیح ویراستار: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2521,7 +2530,7 @@ $NEWPAGE
 ویکی: $PAGEEDITOR_WIKI
 
 تا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ تغییراتِ بیشتر، اعلانیه‌ای برای شما فرستاده نخواهد شد.
-شما همچنین می‌توانید در صفحهٔ پی‌گیری‌های خود پرچم‌های مربوط به آگاهی‌رسانی را صفر کنید.
+شما همچنین می‌توانید در صفحهٔ پی‌گیری‌های خود پرچم‌های مربوط به آگاهی‌رسانی را صفر کنید همچنین می‌توانید پرچم‌های آگاهی‌سازی را بازنشانی کنید.
 
 دوستدار شما، سامانهٔ آگاهی‌رسانی {{SITENAME}}
 
@@ -2534,6 +2543,8 @@ $NEWPAGE
 
 بازخورد و کمک بیشتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ایجاد شده',
+'changed' => 'تغییر یافته',
 
 # Delete
 'deletepage' => 'حذف صفحه',
@@ -2608,6 +2619,8 @@ $NEWPAGE
 'prot_1movedto2' => '[[$1]] به [[$2]] منتقل شد',
 'protect-badnamespace-title' => 'فضای نام بدون محافظت',
 'protect-badnamespace-text' => 'صفحه‌های موجود در این فضای نام، نمی‌توانند محافظت شوند.',
+'protect-norestrictiontypes-text' => 'امکان محافظت این صفحه به علت نبودن نوع محدودیت، مقدور نیست.',
+'protect-norestrictiontypes-title' => 'صفحهٔ غیرقابل محافظت',
 'protect-legend' => 'تأیید محافظت',
 'protectcomment' => 'دلیل:',
 'protectexpiry' => 'زمان سرآمدن:',
@@ -2624,8 +2637,8 @@ $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)',
@@ -2726,9 +2739,9 @@ $1',
 'blanknamespace' => '(اصلی)',
 
 # Contributions
-'contributions' => 'مشارکت‌های کاربری',
+'contributions' => 'مشارکت‌های {{GENDER:$1|کاربر}}',
 'contributions-title' => 'مشارکت‌های کاربری $1',
-'mycontris' => 'مشارکت‌های من',
+'mycontris' => 'مشارکت‌ها',
 'contribsub2' => 'برای $1 ($2)',
 'nocontribs' => 'هیچ تغییری با این مشخصات یافت نشد.',
 'uctop' => ' (بالا)',
@@ -2769,7 +2782,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 تغییرمسیر',
 'whatlinkshere-hidetrans' => '$1 تراگنجانش‌ها',
 'whatlinkshere-hidelinks' => '$1 پیوند',
-'whatlinkshere-hideimages' => '$1 پیوند به تصویر',
+'whatlinkshere-hideimages' => '$1 پیوندهای پرونده',
 'whatlinkshere-filters' => 'پالایه‌ها',
 
 # Block/unblock
@@ -2808,7 +2821,7 @@ $1',
 'ipb-disableusertalk' => 'جلوگیری از ویرایشی صفحهً بحث توسط خود کاربر در زمانی که بسته است',
 'ipb-change-block' => 'بستن دوبارهٔ کاربر با این تنظیم‌ها',
 'ipb-confirm' => 'تأیید بستن',
-'badipaddress' => 'نشانی آی‌ی غیر مجاز',
+'badipaddress' => 'نشانی آی‌پی غیر مجاز',
 'blockipsuccesssub' => 'بستن با موفقیت انجام شد',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] بسته شد.<br />
 برای بررسی بسته‌شده‌ها [[Special:BlockList|فهرست بسته‌شده‌ها]] را ببینید.',
@@ -3119,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" صفحهٔ مبنا اجازهٔ زیرصفحه نمی‌دهد.',
@@ -3242,7 +3256,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'اطلاعات در مورد «$1»',
-'pageinfo-not-current' => 'اطلاعات ممکن است تنها برای نسخهٔ فعلی نمایش داده شود.',
+'pageinfo-not-current' => 'متاسفانه تهیه اطلاعات ویرایش‌های قدیمی غیرممکن است.',
 'pageinfo-header-basic' => 'اطلاعات اولیه',
 'pageinfo-header-edits' => 'ویرایش تاریخچه',
 'pageinfo-header-restrictions' => 'حفاظت از صفحه',
@@ -3271,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' => 'اطلاعات',
@@ -3279,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' => 'کلاسیک',
@@ -3301,6 +3320,8 @@ $1',
 'markedaspatrollederror' => 'برچسب گشت زده نشد',
 'markedaspatrollederrortext' => 'باید یک نسخه را مشخص کنید تا برچسب گشت بخورد.',
 'markedaspatrollederror-noautopatrol' => 'شما نمی‌توانید به تغییرات انجام شده توسط خودتان برچسب گشت بزنید.',
+'markedaspatrollednotify' => 'این تغییر روی $1 برچسب گشت خورده است.',
+'markedaspatrollederrornotify' => 'زدن برچسب گشت، ناموفق بود.',
 
 # Patrol log
 'patrol-log-page' => 'سیاههٔ گشت',
@@ -3335,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.',
@@ -3364,7 +3386,10 @@ $1',
 'minutes' => '{{PLURAL: $1|دقیقه|دقیقه}}',
 'hours' => '{{PLURAL: $1|ساعت|ساعت}}',
 'days' => '{{PLURAL: $1|روز|روز}}',
+'months' => '{{PLURAL:$1|$1 ماه|}}',
+'years' => '{{PLURAL:$1|$1 سال|}}',
 'ago' => '$1 پیش',
+'just-now' => 'هم‌اکنون',
 
 # Bad image list
 'bad_image_list' => 'اطلاعات را باید اینگونه وارد کنید:
@@ -4036,6 +4061,7 @@ $5
 'version-license' => 'اجازه‌نامه',
 'version-poweredby-credits' => "این ویکی توسط '''[//www.mediawiki.org/ مدیاویکی]''' پشتیبانی می‌شود، کلیهٔ حقوق محفوظ است © 2001-$1 $2.",
 'version-poweredby-others' => 'دیگران',
+'version-credits-summary' => 'افراد زیر را به خاطر ویرایش‌هایش در [[Special:Version|مدیاویکی]] معرفی می‌نمائیم.',
 'version-license-info' => 'مدیاویکی نرم‌افزاری رایگان است؛ می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو که توسط بنیاد نرم‌افزار رایگان منتشر شده‌است، بازنشر کنید؛ یا نسخهٔ ۲ از این مجوز، یا (بنا به اختیار) نسخه‌های بعدی.
 
 مدیاویکی به این امید که مفید واقع شود منتشر شده‌است، ولی بدون هیچ‌گونه ضمانتی؛ بدون ضمانت ضمنی که تجاری یا برای کار خاصی مناسب باشد. برای اطلاعات بیشتر مجوز گنو جی‌پی‌ال را مشاهده کنید.
@@ -4165,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 منتقل کرد',
@@ -4176,11 +4202,15 @@ $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' => 'گذرواژه بوسیله رایانامه ارسال شد',
+'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]» افزوده خواهد شد.',
index 35f02ec..1791338 100644 (file)
@@ -32,6 +32,7 @@
  * @author Tarmo
  * @author Tofu II
  * @author Veikk0.ma
+ * @author VezonThunder
  * @author Wix
  * @author Yaamboo
  * @author ZeiP
@@ -317,15 +318,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 +334,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ä',
@@ -349,7 +350,7 @@ $messages = array(
 'tog-watchlisthidebots' => 'Piilota bottien muokkaukset',
 'tog-watchlisthideminor' => 'Piilota pienet muokkaukset',
 'tog-watchlisthideliu' => 'Piilota kirjautuneiden käyttäjien muokkaukset tarkkailulistalta',
-'tog-watchlisthideanons' => 'Piilota anonyymien käyttäjien muokkaukset tarkkailulistalta',
+'tog-watchlisthideanons' => 'Piilota rekisteröitymättömien käyttäjien muokkaukset tarkkailulistalta',
 'tog-watchlisthidepatrolled' => 'Piilota tarkastetut muokkaukset tarkkailulistalta',
 'tog-ccmeonemails' => 'Lähetä minulle kopio MediaWikin kautta lähetetyistä sähköposteista',
 'tog-diffonly' => 'Älä näytä sivun sisältöä versioita vertailtaessa',
@@ -422,7 +423,7 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Luokka|Luokat}}',
-'category_header' => "Luokan ''$1'' sisältämät sivut",
+'category_header' => 'Sivut, jotka ovat luokassa $1',
 'subcategories' => 'Alaluokat',
 'category-media-header' => 'Tiedostot, jotka ovat luokassa $1',
 'category-empty' => "''Tässä luokassa ei ole sivuja eikä tiedostoja.''",
@@ -455,7 +456,7 @@ $messages = array(
 'qbbrowse' => 'Selaa',
 'qbedit' => 'Muokkaa',
 'qbpageoptions' => 'Sivuasetukset',
-'qbmyoptions' => 'Asetukset',
+'qbmyoptions' => 'Omat sivut',
 'qbspecialpages' => 'Toimintosivut',
 'faq' => 'Usein kysytyt kysymykset',
 'faqpage' => 'Project:Usein kysytyt kysymykset',
@@ -477,6 +478,7 @@ $messages = array(
 'namespaces' => 'Nimiavaruudet',
 'variants' => 'Kirjoitusjärjestelmät',
 
+'navigation-heading' => 'Navigointivalikko',
 'errorpagetitle' => 'Virhe',
 'returnto' => 'Palaa sivulle $1.',
 'tagline' => '{{SITENAME}}',
@@ -593,7 +595,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',
@@ -667,11 +669,11 @@ Ilmoita tämän sivun osoite wikin [[Special:ListUsers/sysop|ylläpitäjälle]].
 'cannotdelete' => 'Sivun tai tiedoston ”$1” poisto epäonnistui.
 Joku muu on saattanut poistaa sen.',
 'cannotdelete-title' => 'Sivua $1 ei voi poistaa',
-'delete-hook-aborted' => 'Laajennuskoohdi esti muokkauksen antamatta syytä.',
+'delete-hook-aborted' => 'Laajennuskoodi esti poiston antamatta syytä.',
 'badtitle' => 'Virheellinen otsikko',
 'badtitletext' => 'Pyytämäsi sivuotsikko oli virheellinen, tyhjä tai väärin linkitetty kieltenvälinen tai wikienvälinen linkki.',
-'perfcached' => 'Tiedot ovat välimuistista eivätkä välttämättä ole ajan tasalla. Välimuistissa on saatavilla enintään {{PLURAL:$1|yksi tulos|$1 tulosta}}.',
-'perfcachedts' => 'Tiedot ovat välimuistista ja se päivitettiin viimeksi $1. Välimuistissa on saatavilla enintään {{PLURAL:$4|yksi tulos|$4 tulosta}}.',
+'perfcached' => 'Nämä tiedot ovat välimuistista eivätkä välttämättä ole ajan tasalla. Välimuistissa on saatavilla enintään {{PLURAL:$1|yksi tulos|$1 tulosta}}.',
+'perfcachedts' => 'Nämä tiedot ovat välimuistista, ja ne on päivitetty viimeksi $1. Välimuistissa on saatavilla enintään {{PLURAL:$4|yksi tulos|$4 tulosta}}.',
 'querypage-no-updates' => 'Tämän sivun tietoja ei toistaiseksi päivitetä.',
 'wrong_wfQuery_params' => 'Virheelliset parametrit wfQuery()<br />Funktio: $1<br />Tiedustelu: $2',
 'viewsource' => 'Lähdekoodi',
@@ -700,7 +702,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
@@ -713,8 +715,8 @@ Lukituksen asettanut ylläpitäjä on antanut seuraavan syyn toimenpiteelle: $3.
 
 Voit jatkaa {{GRAMMAR:genitive|{{SITENAME}}}} käyttöä nimettömänä, tai <span class='plainlinks'>[$1 kirjautua uudelleen sisään]</span>.
 Huomaa, että jotkut sivut saattavat näkyä edelleen kuin olisit kirjautunut sisään, kunnes tyhjennät selaimen välimuistin.",
-'welcomecreation' => '== Tervetuloa $1! ==
-Käyttäjätunnuksesi on luotu.
+'welcomeuser' => 'Tervetuloa $1!',
+'welcomecreation-msg' => 'Käyttäjätunnuksesi on luotu.
 Älä unohda virittää {{GRAMMAR:genitive|{{SITENAME}}}} [[Special:Preferences|asetuksiasi]].',
 'yourname' => 'Käyttäjätunnus',
 'yourpassword' => 'Salasana',
@@ -860,6 +862,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',
 
@@ -879,7 +882,7 @@ Väliaikainen salasana: $2',
 'image_sample' => 'Esimerkki.jpg',
 'image_tip' => 'Tallennettu tiedosto',
 'media_sample' => 'Esimerkki.ogg',
-'media_tip' => 'Mediatiedostolinkki',
+'media_tip' => 'Tiedostolinkki',
 'sig_tip' => 'Allekirjoitus aikamerkinnällä',
 'hr_tip' => 'Vaakasuora viiva',
 
@@ -1026,7 +1029,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.',
@@ -1414,9 +1416,9 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1',
 'prefs-emailconfirm-label' => 'Sähköpostin varmistus',
 'prefs-textboxsize' => 'Muokkauskentän koko',
 'youremail' => 'Sähköpostiosoite',
-'username' => 'Käyttäjätunnus',
-'uid' => 'Tunniste',
-'prefs-memberingroups' => 'Jäsenenä {{PLURAL:$1|ryhmässä|ryhmissä}}',
+'username' => '{{GENDER:$1|Käyttäjätunnus}}',
+'uid' => '{{GENDER:$1|Tunniste}}',
+'prefs-memberingroups' => '{{GENDER:$2|Jäsenenä}} {{PLURAL:$1|ryhmässä|ryhmissä}}',
 'prefs-registration' => 'Rekisteröintiaika',
 'yourrealname' => 'Oikea nimi',
 'yourlanguage' => 'Käyttöliittymän kieli',
@@ -1563,13 +1565,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',
@@ -1799,6 +1801,7 @@ $1',
 'backend-fail-notsame' => 'Epäidenttinen tiedosto on jo olemassa sijainnissa $1.',
 'backend-fail-invalidpath' => '$1 ei ole sallittu tallennuspolku.',
 'backend-fail-delete' => 'Tiedostoa $1 ei voitu poistaa.',
+'backend-fail-describe' => 'Tiedoston ”$1” metatietojen muuttaminen epäonnistui.',
 'backend-fail-alreadyexists' => 'Tiedosto $1 on jo olemassa.',
 'backend-fail-store' => 'Tiedostoa $1 ei voitu tallentaa polkuun $2.',
 'backend-fail-copy' => 'Tiedostoa ei voitu kopioida kohteesta $1 kohteeseen $2.',
@@ -1906,7 +1909,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 sillä ajan 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',
@@ -2179,9 +2182,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> (älä lisää näitä hakuusi).',
+'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.',
 
@@ -2200,10 +2203,6 @@ Tuetut protokollat: <code>$1</code> (älä lisää näitä hakuusi).',
 '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.
@@ -2268,7 +2267,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',
@@ -2284,7 +2284,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',
@@ -2296,19 +2296,23 @@ 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_newpagetext' => 'Tämä on uusi sivu.',
-'enotif_impersonal_salutation' => '{{SITENAME}}-käyttäjä',
-'changed' => 'muuttanut sivua',
-'created' => 'luonut sivun',
-'enotif_subject' => '$PAGEEDITOR on $CHANGEDORCREATED $PAGETITLE',
+'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',
 'enotif_body' => '$WATCHINGUSERNAME,
 
-{{GRAMMAR:genitive|{{SITENAME}}}} käyttäjä $PAGEEDITOR on $CHANGEDORCREATED $PAGETITLE $PAGEEDITDATE. Nykyinen versio on osoitteessa $PAGETITLE_URL .
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Muokkaajan yhteenveto: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2332,6 +2336,8 @@ $UNWATCHURL
 
 Palaute ja lisäapu osoitteessa:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'luonut sivun',
+'changed' => 'muuttanut sivua',
 
 # Delete
 'deletepage' => 'Poista sivu',
@@ -2408,7 +2414,7 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 '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 anonyymit käyttäjät',
+'protect-level-autoconfirmed' => 'Estä uudet ja kirjautumattomat käyttäjät',
 'protect-level-sysop' => 'Vain ylläpitäjät',
 'protect-summary-cascade' => 'laajennettu',
 'protect-expiring' => 'vanhentuu $1 (UTC)',
@@ -2435,10 +2441,10 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'pagesize' => 'tavua',
 
 # Restrictions (nouns)
-'restriction-edit' => 'muokkaus',
-'restriction-move' => 'siirto',
-'restriction-create' => 'luonti',
-'restriction-upload' => 'tiedostotallennus',
+'restriction-edit' => 'Muokkaus',
+'restriction-move' => 'Siirto',
+'restriction-create' => 'Luonti',
+'restriction-upload' => 'Tiedostotallennus',
 
 # Restriction levels
 'restriction-level-sysop' => 'täysin suojattu',
@@ -2504,7 +2510,7 @@ $1',
 'blanknamespace' => '(sivut)',
 
 # Contributions
-'contributions' => 'Käyttäjän muokkaukset',
+'contributions' => '{{GENDER:$1|Käyttäjän}} muokkaukset',
 'contributions-title' => 'Käyttäjän $1 muokkaukset',
 'mycontris' => 'Omat muokkaukset',
 'contribsub2' => 'Käyttäjän $1 ($2) muokkaukset',
@@ -3023,7 +3029,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 
 # Info page
 'pageinfo-title' => 'Tietoja sivusta $1',
-'pageinfo-not-current' => 'Tiedot voidaan näyttää vain sivun viimeisimmälle versiolle.',
+'pageinfo-not-current' => 'Tätä tietoa on mahdoton näyttää vanhoille versiolle.',
 'pageinfo-header-basic' => 'Perustiedot',
 'pageinfo-header-edits' => 'Muutoshistoria',
 'pageinfo-header-restrictions' => 'Sivun suojaus',
@@ -3032,6 +3038,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'pageinfo-default-sort' => 'Oletuslajitteluavain',
 'pageinfo-length' => 'Sivun pituus (tavuina)',
 'pageinfo-article-id' => 'Sivun tunniste',
+'pageinfo-language' => 'Sivun sisällön kieli',
 'pageinfo-robot-policy' => 'Hakukonemerkinnät',
 'pageinfo-robot-index' => 'Indeksoitava',
 'pageinfo-robot-noindex' => 'Ei indeksoitava',
@@ -3078,6 +3085,8 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'markedaspatrollederror' => 'Muutoksen merkitseminen tarkastetuksi epäonnistui.',
 'markedaspatrollederrortext' => 'Tarkastetuksi merkittävää versiota ei ole määritelty.',
 'markedaspatrollederror-noautopatrol' => 'Et voi merkitä omia muutoksiasi tarkastetuiksi.',
+'markedaspatrollednotify' => 'Tämä muutos sivuun $1 on merkitty tarkastetuksi.',
+'markedaspatrollederrornotify' => 'Tarkastetuksi merkitseminen epäonnistui.',
 
 # Patrol log
 'patrol-log-page' => 'Muutostentarkastusloki',
@@ -3111,6 +3120,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.',
@@ -3141,6 +3151,7 @@ Suorittamalla sen järjestelmäsi voi muuttua epäluotettavaksi.",
 'hours' => '{{PLURAL:$1|$1 tunti|$1 tuntia}}',
 'days' => '{{PLURAL:$1|$1 päivä|$1 päivää}}',
 'ago' => '$1 sitten',
+'just-now' => 'juuri nyt',
 
 # Bad image list
 'bad_image_list' => 'Listan muoto on seuraava:
@@ -3746,6 +3757,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.
@@ -3884,11 +3896,14 @@ Kuvat näytetään täysikokoisina. Muut tiedostot avataan niille määritetyss
 'logentry-move-move_redir-noredirect' => '$1 siirsi sivun $3 ohjauksen $4 päälle luomatta ohjausta',
 'logentry-patrol-patrol' => '$1 merkitsi sivun $3 muutoksen $4 tarkastetuksi',
 'logentry-patrol-patrol-auto' => '$1 merkitsi automaattisesti sivun $3 muutoksen $4 tarkastetuksi',
-'logentry-newusers-newusers' => '$1 loi käyttäjätunnuksen',
-'logentry-newusers-create' => '$1 loi käyttäjätunnuksen',
+'logentry-newusers-newusers' => 'Käyttäjätunnus $1 luotiin',
+'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-autopromote' => '$1 ylennettiin automaattisesti ryhmistä $4 ryhmiin $5',
+'rightsnone' => '(ei oikeuksia)',
 
 # Feedback
 'feedback-bugornote' => 'Jos voit kuvailla teknisen ongelman tarkasti – [$1 ilmoita ohjelmointivirheestä].
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 81a4c15..c449f1e 100644 (file)
@@ -245,7 +245,7 @@ $messages = array(
 'cancel' => 'Ógilda',
 'moredotdotdot' => 'Meira...',
 'mypage' => 'Mín síða',
-'mytalk' => 'Mítt kjak',
+'mytalk' => 'Kjak',
 'anontalk' => 'Kjak til hesa ip-adressuna',
 'navigation' => 'Navigatión',
 'and' => '&#32;og',
@@ -514,10 +514,9 @@ Givin orsøk er "\'\'$2\'\'".',
 'logouttext' => "'''Tú hevur nú ritað út.'''
 Tú kanst halda fram at brúka {{SITENAME}} sum dulnevndur, ella kanst tú <span class='plainlinks'>[\$1 logga á aftur]</span> sum sami ella sum annar brúkari. 
 Legg til merkis, at summar síður framvegis vera vístar, sum um tú enn vart loggaður á, til tú hevur reinsa tín brovsara fyri \"cache\".",
-'welcomecreation' => '== Vælkomin, $1! ==
-
-Tín konta er nú stovnað.
-Gloym ikki at broyta tínar [[Special:Preferences|{{SITENAME}} innstillingar]].',
+'welcomeuser' => 'Vælkomin, $1!',
+'welcomecreation-msg' => 'Tín konta er nú stovnað.
+Gloym ikki at broyta tínar [[Special:Preferences|{{SITENAME}}-innstillingar]].',
 'yourname' => 'Títt brúkaranavn:',
 'yourpassword' => 'Títt loyniorð:',
 'yourpasswordagain' => 'Skriva loyniorð umaftur:',
@@ -794,7 +793,6 @@ Tann seinasti sperringar gerðalistin er her niðanfyri fyri ávísing:',
 * '''Firefox / Safari:''' Halt ''Shift'' meðan tú klikkir á ''Reload'', ella trýst antin ''Ctrl-F5'' ella ''Ctrl-R'' (''Command-R'' á einari Mac)
 * '''Google Chrome:''' Trýst ''Ctrl-Shift-R'' (''⌘-Shift-R'' á einari Mac)
 * '''Internet Explorer:''' Halt ''Ctrl'' meðan tú trýstir á ''Refresh'', ella trýst á ''Ctrl-F5''
-* '''Konqueror:''' Trýst ''Reload'' ella trýst ''F5''
 * '''Opera:''' Reinsa cache í ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Gott ráð:''' Brúka \"{{int:showpreview}}\" knappin fyri at royna tína nýggju CSS áðrenn tú goymir.",
 'userjsyoucanpreview' => "'''Gott ráð:''' Brúka \"{{int:showpreview}}\" knappin fyri at royna títt nýggja JavaScript áðrenn tú goymir.",
@@ -861,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.',
@@ -1103,7 +1100,7 @@ Legg til merkis, at teirra innihaldsyvirlit av {{SITENAME}} kann vera gamalt og
 
 # Preferences page
 'preferences' => 'Innstillingar',
-'mypreferences' => 'Mínar innstillingar',
+'mypreferences' => 'Innstillingar',
 'prefs-edits' => 'Tal av rættingum:',
 'prefsnologin' => 'Tú hevur ikki ritað inn',
 'changepassword' => 'Broyt loyniorð',
@@ -1288,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',
@@ -1688,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.
@@ -1764,7 +1758,6 @@ Vilt tú flyta síðuna undan tínum eftirliti, kanst tú trýsta á \"Strika ef
 'watching' => 'Eftirlitir...',
 'unwatching' => 'Strikar eftirlit...',
 
-'enotif_newpagetext' => 'Hetta er ein nýggj síða.',
 'enotif_impersonal_salutation' => '{{SITENAME}}brúkari',
 'created' => 'stovnað',
 
@@ -1856,16 +1849,16 @@ broytti tað aftur til seinastu versjón hjá $2.',
 'blanknamespace' => '(Greinir)',
 
 # Contributions
-'contributions' => 'Brúkaraíkast',
-'contributions-title' => 'Brúkara íkøst fyri $1',
-'mycontris' => 'Mítt íkast',
+'contributions' => '{{GENDER:$1|Brúkaraíkøst}}',
+'contributions-title' => 'Brúkaraíkøst fyri $1',
+'mycontris' => 'Íkøst',
 'contribsub2' => 'Eftir $1 ($2)',
 'uctop' => '(ovast)',
 'month' => 'Frá mánaði (og áðrenn):',
 'year' => 'Frá ár (og áðrenn):',
 
 'sp-contributions-newbies' => 'Vís bert íkast frá nýggjum kontoum',
-'sp-contributions-blocklog' => 'Bannagerðabók',
+'sp-contributions-blocklog' => 'bannagerðabók',
 'sp-contributions-uploads' => 'uploads',
 'sp-contributions-logs' => 'gerðalistar (logglistar)',
 'sp-contributions-talk' => 'kjak',
@@ -1889,7 +1882,7 @@ broytti tað aftur til seinastu versjón hjá $2.',
 'whatlinkshere-hideredirs' => '$1 umdirigeringar',
 'whatlinkshere-hidetrans' => '$1 innkluderingar (transclusions)',
 'whatlinkshere-hidelinks' => '$1 slóðir',
-'whatlinkshere-hideimages' => '$1 mynda slóðir',
+'whatlinkshere-hideimages' => '$1 fíluslóðir',
 'whatlinkshere-filters' => 'Filtur',
 
 # Block/unblock
@@ -2120,6 +2113,12 @@ Vinarliga vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] o
 'ilsubmit' => 'Leita',
 'bydate' => 'eftir dato',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 sekund}}',
+'minutes' => '{{PLURAL:$1|$1 minuttur|$1 minuttir}}',
+'hours' => '{{PLURAL:$1|$1 tími|$1 tímar}}',
+'days' => '{{PLURAL:$1|$1 dagur|$1 dagar}}',
+
 # Bad image list
 'bad_image_list' => 'Støddin er soleiðis: 
 
@@ -2244,11 +2243,16 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Tag]] filtur:',
+'tags-edit' => 'rætta',
+'tags-hitcount' => '$1 {{PLURAL:$1|broyting|broytingar}}',
 
 # Special:ComparePages
 'compare-page1' => 'Síða 1',
 'compare-page2' => 'Síða 2',
 
+# New logging system
+'rightsnone' => '(ongin)',
+
 # Search suggestions
 'searchsuggest-search' => 'Leita',
 
@@ -2261,4 +2265,14 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 'api-error-unclassified' => 'Ein ókendur feilur hendi.',
 'api-error-unknown-code' => 'Ókendur feilur: "$1"',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekund}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuttur|minuttir}}',
+'duration-hours' => '$1 {{PLURAL:$1|tími|tímar}}',
+'duration-days' => '$1 {{PLURAL:$1|dagur|dagar}}',
+'duration-weeks' => '$1 {{PLURAL:$1|vika|vikur}}',
+'duration-years' => '$1 {{PLURAL:$1|ár}}',
+'duration-decades' => '$1 {{PLURAL:$1|áratíggju}}',
+'duration-centuries' => '$1 {{PLURAL:$1|øld|øldir}}',
+
 );
index be8f141..b6eeb76 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
  * @author Gomoko
  * @author Grondin
@@ -39,6 +42,7 @@
  * @author Houcinee1
  * @author Hégésippe Cormier
  * @author IAlex
+ * @author Isildur
  * @author Jagwar
  * @author Jean-Frédéric
  * @author JeanVoisin
@@ -51,6 +55,7 @@
  * @author Litlok
  * @author Lloffiwr
  * @author Louperivois
+ * @author Ltrlg
  * @author Lucyin
  * @author McDutchie
  * @author Meithal
@@ -73,7 +78,9 @@
  * @author Tititou36
  * @author TouzaxA
  * @author Tpt
+ * @author Trizek
  * @author Urhixidur
+ * @author VIGNERON
  * @author Verdy p
  * @author WikiEoFrEn
  * @author Wyz
@@ -506,8 +513,9 @@ $messages = array(
 'newwindow' => '(ouvre une nouvelle fenêtre)',
 'cancel' => 'Annuler',
 'moredotdotdot' => 'Plus...',
-'mypage' => 'Ma page',
-'mytalk' => 'Page de discussion',
+'morenotlisted' => 'Davantage non listé…',
+'mypage' => 'Page',
+'mytalk' => 'Discussion',
 'anontalk' => 'Discussion avec cette adresse IP',
 'navigation' => 'Navigation',
 'and' => '&#32;et',
@@ -539,6 +547,7 @@ $messages = array(
 'namespaces' => 'Espaces de noms',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menu de navigation',
 'errorpagetitle' => 'Erreur',
 'returnto' => 'Revenir à la page $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -637,8 +646,8 @@ $1",
 'newmessagesdifflink' => 'dernière modification',
 'youhavenewmessagesfromusers' => "Vous avez $1 {{PLURAL:$3|d'un autre utilisateur|de $3 autres utilisateurs}} ($2).",
 'youhavenewmessagesmanyusers' => 'Vous avez $1 de nombreux utilisateurs ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un message|nouveaux messages}}',
-'newmessagesdifflinkplural' => 'dernières modification{{PLURAL:$1||s}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un message|de nouveaux messages}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|dernière modification|dernières modifications}}',
 'youhavenewmessagesmulti' => 'Vous avez de nouveaux messages sur $1.',
 'editsection' => 'modifier',
 'editold' => 'modifier',
@@ -711,7 +720,7 @@ L'administrateur ayant verrouillé la base de données a fourni l'explication su
 
 Généralement, cela survient en suivant un lien vers un diff périmé ou vers l'historique d'une page supprimée.
 
-Si ce n'est pas le cas, il peut s'agir d'un bogue dans le programme.
+Si ce n'est pas le cas, il peut s'agir d'un bug dans le programme.
 Veuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oublier de lui indiquer l'URL du lien.",
 'missingarticle-rev' => '(numéro de version : $1)',
 'missingarticle-diff' => '(diff : $1, $2)',
@@ -747,7 +756,7 @@ Requête : $2',
 'actionthrottled' => 'Action limitée',
 'actionthrottledtext' => "Pour lutter contre le spam, l'utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court. Il s'avère que vous avez dépassé cette limite.
 Essayez à nouveau dans quelques minutes.",
-'protectedpagetext' => 'Cette page a été protégée pour empêcher sa modification.',
+'protectedpagetext' => "Cette page a été protégée pour empêcher sa modification ou d'autres actions.",
 'viewsourcetext' => 'Vous pouvez voir et copier le contenu de la page :',
 'viewyourtext' => "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
 'protectedinterface' => "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.
@@ -781,27 +790,26 @@ L'administrateur qui l'a verrouillé a fourni ce motif: « $3 ».",
 
 Vous pouvez continuer à utiliser {{SITENAME}} de façon anonyme, <span class='plainlinks'>[$1 vous reconnecter]</span> sous le même nom ou un autre.
 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.",
-'welcomecreation' => '== Bienvenue, $1 ! ==
-
-Votre compte a été créé.
-N’oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{SITENAME}}]].',
-'yourname' => 'Nom d’utilisateur :',
+'welcomeuser' => 'Bienvenue, $1&nbsp;!',
+'welcomecreation-msg' => "Votre compte a été créé.
+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 :',
 'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites avec ce navigateur (au maximum $1&nbsp;{{PLURAL:$1|jour|jours}})',
 'securelogin-stick-https' => 'Rester connecté en HTTPS après la connexion',
 'yourdomainname' => 'Votre domaine :',
 'password-change-forbidden' => 'Vous ne pouvez pas modifier les mots de passe sur ce wiki.',
-'externaldberror' => 'Une erreur s’est produite avec la base de données d’authentification externe, ou bien vous n’êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.',
+'externaldberror' => "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous n'êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.",
 'login' => 'Connexion',
 'nav-login-createaccount' => 'Créer un compte ou se connecter',
-'loginprompt' => "Vous devez activer les témoins (''cookies'') pour vous connecter à {{SITENAME}}.",
+'loginprompt' => 'Vous devez activer les cookies pour vous connecter à {{SITENAME}}.',
 'userlogin' => 'Créer un compte ou se connecter',
 'userloginnocreate' => 'Connexion',
 'logout' => 'Se déconnecter',
 'userlogout' => 'Déconnexion',
 'notloggedin' => 'Non connecté',
-'nologin' => 'Vous n’êtes pas encore inscrit ? $1.',
+'nologin' => "Vous n'êtes pas encore inscrit ? $1.",
 'nologinlink' => 'Créer un compte',
 'createaccount' => 'Créer un compte',
 'gotaccount' => "Vous avez déjà un compte ? '''$1'''.",
@@ -810,51 +818,51 @@ N’oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{S
 'createaccountmail' => 'par courriel',
 'createaccountreason' => 'Motif :',
 'badretype' => 'Les mots de passe que vous avez saisis ne correspondent pas.',
-'userexists' => 'Nom d’utilisateur entré déjà utilisé.
-Veuillez choisir un nom différent.',
+'userexists' => "Nom d'utilisateur entré déjà utilisé.
+Veuillez choisir un nom différent.",
 'loginerror' => 'Erreur de connexion',
 'createaccounterror' => 'Impossible de créer le compte : $1',
-'nocookiesnew' => "Le compte utilisateur a été créé, mais vous n’êtes pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} utilise des témoins (''cookies'') pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
-'nocookieslogin' => "{{SITENAME}} utilise des témoins (''cookies'') pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.",
-'nocookiesfornew' => 'Le compte utilisateur n’a pas été créé, car nous n’avons pas pu identifier son origine.
-Vérifiez que vous avez activé les cookies, rechargez la page et réessayez.',
-'noname' => 'Vous n’avez pas saisi un nom d’utilisateur valide.',
+'nocookiesnew' => "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
+'nocookieslogin' => '{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.',
+'nocookiesfornew' => "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.
+Vérifiez que vous avez activé les cookies, rechargez la page et réessayez.",
+'noname' => "Vous n'avez pas saisi un nom d'utilisateur valide.",
 'loginsuccesstitle' => 'Connexion réussie',
 'loginsuccess' => 'Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».',
-'nosuchuser' => 'L’utilisateur « $1 » n’existe pas.
-Les noms dutilisateurs sont sensibles à la casse.
-Vérifiez l’orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].',
-'nosuchusershort' => 'Il n’y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l’orthographe.',
-'nouserspecified' => 'Vous devez saisir un nom d’utilisateur.',
+'nosuchuser' => "L'utilisateur « $1 » n'existe pas.
+Les noms d'utilisateurs sont sensibles à la casse.
+Vérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
+'nosuchusershort' => "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
+'nouserspecified' => "Vous devez saisir un nom d'utilisateur.",
 'login-userblocked' => 'Cet utilisateur est bloqué. Connexion non autorisée.',
 'wrongpassword' => 'Le mot de passe est incorrect. Veuillez essayer à nouveau.',
-'wrongpasswordempty' => 'Vous n’avez pas entré de mot de passe. Veuillez essayer à nouveau.',
+'wrongpasswordempty' => "Vous n'avez pas entré de mot de passe. Veuillez essayer à nouveau.",
 'passwordtooshort' => 'Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.',
-'password-name-match' => 'Votre mot de passe doit être différent de votre nom d’utilisateur.',
-'password-login-forbidden' => "Lutilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
+'password-name-match' => "Votre mot de passe doit être différent de votre nom d'utilisateur.",
+'password-login-forbidden' => "L'utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
 'mailmypassword' => 'Recevoir un nouveau mot de passe par courriel',
 'passwordremindertitle' => 'Nouveau mot de passe temporaire pour {{SITENAME}}',
-'passwordremindertext' => 'Quelqu’un (probablement vous, ayant l’adresse IP $1) a demandé un nouveau mot de
+'passwordremindertext' => "Quelqu'un (probablement vous, ayant l'adresse IP $1) a demandé un nouveau mot de
 passe pour {{SITENAME}} ($4 ). Un mot de passe temporaire a été créé pour
-lutilisateur « $2 » et est « $3 ». Si cela était votre intention, vous devrez
+l'utilisateur « $2 » et est « $3 ». Si cela était votre intention, vous devrez
 vous connecter et choisir un nouveau mot de passe.
 Votre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.
 
-Si vous n’êtes pas l’auteur de cette demande, ou si vous vous souvenez à présent
+Si vous n'êtes pas l'auteur de cette demande, ou si vous vous souvenez à présent
 de votre ancien mot de passe et que vous ne souhaitez plus en changer, vous
-pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.',
-'noemail' => "Aucune adresse de courriel na été enregistrée pour l'utilisateur « $1 ».",
+pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+'noemail' => "Aucune adresse de courriel n'a été enregistrée pour l'utilisateur « $1 ».",
 'noemailcreate' => 'Vous devez fournir une adresse de courriel valide',
 'passwordsent' => "Un nouveau mot de passe a été envoyé à l'adresse de courriel de l'utilisateur « $1 ». Veuillez vous reconnecter après l'avoir reçu.",
 'blocked-mailpassword' => 'Votre adresse IP est bloquée en écriture, la fonction de rappel du mot de passe est donc désactivée pour éviter les abus.',
-'eauthentsent' => 'Un courriel de confirmation a été envoyé à l’adresse indiquée.
-Avant qu’un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.',
-'throttled-mailpassword' => 'Un courriel de rappel de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d’éviter les abus, un seul courriel de rappel sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.',
-'mailerror' => 'Erreur lors de l’envoi du courriel : $1',
-'acct_creation_throttle_hit' => 'Quelqu’un utilisant votre adresse IP a créé {{PLURAL:$1|un compte|$1 comptes}} au cours des dernières 24 heures, ce qui constitue la limite autorisée dans cet intervalle de temps.
-Par conséquent, la création de compte a été temporairement désactivée pour cette adresse IP.',
+'eauthentsent' => "Un courriel de confirmation a été envoyé à l'adresse indiquée.
+Avant qu'un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.",
+'throttled-mailpassword' => "Un courriel de rappel de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d'éviter les abus, un seul courriel de rappel sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.",
+'mailerror' => "Erreur lors de l'envoi du courriel : $1",
+'acct_creation_throttle_hit' => "Quelqu'un utilisant votre adresse IP a créé {{PLURAL:$1|un compte|$1 comptes}} au cours des dernières 24 heures, ce qui constitue la limite autorisée dans cet intervalle de temps.
+Par conséquent, la création de compte a été temporairement désactivée pour cette adresse IP.",
 'emailauthenticated' => 'Votre adresse de courriel a été authentifiée le $2 à $3.',
-'emailnotauthenticated' => 'Votre adresse de courriel n’est <strong>pas encore authentifiée</strong>. Aucun courriel ne sera envoyé pour chacune des fonctions suivantes.',
+'emailnotauthenticated' => "Votre adresse de courriel n'est <strong>pas encore authentifiée</strong>. Aucun courriel ne sera envoyé pour chacune des fonctions suivantes.",
 'noemailprefs' => 'Indiquez une adresse de courriel dans vos préférences pour utiliser ces fonctions.',
 'emailconfirmlink' => 'Confirmez votre adresse de courriel',
 'invalidemailaddress' => 'Cette adresse courriel ne peut pas être acceptée car elle semble avoir un format incorrect.
@@ -863,25 +871,26 @@ Entrez une adresse bien formatée ou laissez ce champ vide.',
 'emaildisabled' => 'Ce site ne peut pas envoyer de courriels.',
 'accountcreated' => 'Compte créé',
 'accountcreatedtext' => 'Le compte utilisateur pour $1 a été créé.',
-'createaccount-title' => 'Création d’un compte pour {{SITENAME}}',
-'createaccount-text' => 'Quelqu’un a créé un compte pour votre adresse de courriel sur {{SITENAME}} ($4) intitulé « $2 », avec le mot de passe « $3 ».
+'createaccount-title' => "Création d'un compte pour {{SITENAME}}",
+'createaccount-text' => "Quelqu'un a créé un compte pour votre adresse de courriel sur {{SITENAME}} ($4) intitulé « $2 », avec le mot de passe « $3 ».
 Vous devriez ouvrir une session et modifier dès à présent votre mot de passe.
 
-Ignorez ce message si ce compte a été créé par erreur.',
-'usernamehasherror' => 'Le nom d’utilisateur ne peut pas contenir des caractères de hachage',
-'login-throttled' => 'Vous avez tenté un trop grand nombre de connexions dernièrement.
-Veuillez attendre avant d’essayer à nouveau.',
+Ignorez ce message si ce compte a été créé par erreur.",
+'usernamehasherror' => "Le nom d'utilisateur ne peut pas contenir des caractères de hachage",
+'login-throttled' => "Vous avez tenté un trop grand nombre de connexions dernièrement.
+Veuillez attendre avant d'essayer à nouveau.",
 'login-abort-generic' => 'Votre tentative de connexion a échoué',
 'loginlanguagelabel' => 'Langue : $1',
-'suspicious-userlogout' => 'Votre demande de déconnexion a été refusée car il semble qu’elle a été envoyée par un navigateur cassé ou la mise en cache d’un proxy.',
+'suspicious-userlogout' => "Votre demande de déconnexion a été refusée car il semble qu'elle a été envoyée par un navigateur cassé ou la mise en cache d'un proxy.",
 
 # 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-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',
-'resetpass_announce' => 'Vous vous êtes enregistré{{GENDER:||e|(e)}} avec un mot de passe temporaire envoyé par courriel. Pour terminer l’enregistrement, vous devez entrer un nouveau mot de passe ici :',
+'resetpass_announce' => "Vous vous êtes enregistré{{GENDER:||e|(e)}} avec un mot de passe temporaire envoyé par courriel. Pour terminer l'enregistrement, vous devez entrer un nouveau mot de passe ici :",
 'resetpass_text' => '<!-- Ajoutez le texte ici -->',
 'resetpass_header' => 'Changer le mot de passe du compte',
 'oldpassword' => 'Ancien mot de passe :',
@@ -903,37 +912,38 @@ Vous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mo
 'passwordreset-legend' => 'Remise à zéro du mot de passe',
 'passwordreset-disabled' => 'La réinitialisation des mots de passe a été désactivée sur ce wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Entrez un élément de données ci-dessous}}',
-'passwordreset-username' => 'Nom d’utilisateur :',
+'passwordreset-username' => "Nom d'utilisateur :",
 'passwordreset-domain' => 'Domaine :',
 'passwordreset-capture' => 'Voir le courriel résultant?',
-'passwordreset-capture-help' => 'Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu’il sera envoyé à l’utilisateur.',
+'passwordreset-capture-help' => "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu'il sera envoyé à l'utilisateur.",
 'passwordreset-email' => 'Adresse de courriel :',
 'passwordreset-emailtitle' => 'Détails du compte sur {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Quelqu’un (probablement vous, depuis l’adresse IP $1) a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
+'passwordreset-emailtext-ip' => "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
 
 $2
 
-{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.',
-'passwordreset-emailtext-user' => 'L’utilisateur $1 sur {{SITENAME}} a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
+{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+'passwordreset-emailtext-user' => "L'utilisateur $1 sur {{SITENAME}} a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
 
 $2
 
-{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.',
-'passwordreset-emailelement' => 'Nom d’utilisateur : $1
-Mot de passe temporaire : $2',
+{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+'passwordreset-emailelement' => "Nom d'utilisateur : $1
+Mot de passe temporaire : $2",
 'passwordreset-emailsent' => 'Un courriel de rappel a été envoyé.',
 'passwordreset-emailsent-capture' => 'Un courriel de rappel a été envoyé, qui est affiché ci-dessous.',
-'passwordreset-emailerror-capture' => 'Un courriel de rappel a été généré, qui est affiché ci-dessous, mais l’envoi à l’utilisateur a échoué : $1',
+'passwordreset-emailerror-capture' => "Un courriel de rappel a été généré, qui est affiché ci-dessous, mais l'envoi à l'utilisateur a échoué : $1",
 
 # Special:ChangeEmail
-'changeemail' => 'Changer l’adresse de courriel',
-'changeemail-header' => 'Changer l’adresse de courriel du compte',
+'changeemail' => "Changer l'adresse de courriel",
+'changeemail-header' => "Changer l'adresse de courriel du compte",
 'changeemail-text' => 'Remplissez ce formulaire pour changer votre adresse de courriel. Vous devrez entrer votre mot de passe pour confirmer ce changement.',
 'changeemail-no-info' => 'Vous devez être connecté pour pouvoir accéder directement à cette page.',
 'changeemail-oldemail' => 'Adresse de courriel actuelle :',
 'changeemail-newemail' => 'Nouvelle adresse de courriel :',
 'changeemail-none' => '(aucune)',
-'changeemail-submit' => 'Changer l’adresse de courriel',
+'changeemail-password' => 'Votre mot de passe sur {{SITENAME}}:',
+'changeemail-submit' => "Changer l'adresse de courriel",
 'changeemail-cancel' => 'Annuler',
 
 # Edit page toolbar
@@ -944,7 +954,7 @@ Mot de passe temporaire : $2',
 'link_sample' => 'Titre du lien',
 'link_tip' => 'Lien interne',
 'extlink_sample' => 'http://www.example.com titre du lien',
-'extlink_tip' => 'Lien externe (n’oubliez pas le préfixe http://)',
+'extlink_tip' => "Lien externe (n'oubliez pas le préfixe http://)",
 'headline_sample' => 'Texte du titre',
 'headline_tip' => 'Sous-titre niveau 2',
 'nowiki_sample' => 'Entrez le texte non formaté ici',
@@ -966,16 +976,16 @@ Mot de passe temporaire : $2',
 'showpreview' => 'Prévisualiser',
 'showlivepreview' => 'Aperçu rapide',
 'showdiff' => 'Modifications en cours',
-'anoneditwarning' => "'''Attention :''' vous n’êtes pas identifié(e). Votre adresse IP sera enregistrée dans l’historique de cette page.",
-'anonpreviewwarning' => "''Vous n’êtes pas identifié. Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
-'missingsummary' => "'''Rappel :''' vous navez pas encore fourni le résumé de votre modification.
+'anoneditwarning' => "'''Attention :''' vous n'êtes pas identifié(e). Votre adresse IP sera enregistrée dans l'historique de cette page.",
+'anonpreviewwarning' => "''Vous n'êtes pas identifié. Sauvegarder enregistrera votre adresse IP dans l'historique des modifications de la page.''",
+'missingsummary' => "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.
 Si vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
 'missingcommenttext' => 'Veuillez entrer un commentaire ci-dessous.',
-'missingcommentheader' => "'''Rappel :''' vous navez pas fourni de sujet ou de titre à ce commentaire.
+'missingcommentheader' => "'''Rappel :''' vous n'avez pas fourni de sujet ou de titre à ce commentaire.
 Si vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans titre.",
 'summary-preview' => 'Aperçu du résumé :',
 'subject-preview' => 'Prévisualisation du sujet/titre :',
-'blockedtitle' => 'L’utilisateur est bloqué.',
+'blockedtitle' => "L'utilisateur est bloqué.",
 'blockedtext' => "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''
 
 Le blocage a été effectué par $1.
@@ -986,7 +996,7 @@ La raison invoquée est la suivante : ''$2''.
 * Compte bloqué : $7.
 
 Vous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.
-Vous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que cette fonctionnalité na pas été bloquée.
+Vous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que cette fonctionnalité n'a pas été bloquée.
 Votre adresse IP actuelle est $3 et votre identifiant de blocage est $5.
 Veuillez préciser ces indications dans toutes les requêtes que vous ferez.",
 'autoblockedtext' => "Votre adresse IP a été bloquée automatiquement car elle a été utilisée par un autre utilisateur, lui-même bloqué par $1.
@@ -998,9 +1008,9 @@ La raison invoquée est :
 * Expiration du blocage : $6
 * Compte bloqué : $7
 
-Vous pouvez contacter $1 ou lun des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.
+Vous pouvez contacter $1 ou l'un des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.
 
-Notez que vous ne pourrez utiliser la fonctionnalité d’envoi de courriel que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que la fonctionnalité n’a pas été désactivée.
+Notez que vous ne pourrez utiliser la fonctionnalité d'envoi de courriel que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que la fonctionnalité n'a pas été désactivée.
 
 Votre adresse IP actuelle est $3, et le numéro de blocage est $5.
 Veuillez préciser ces indications dans toutes les requêtes que vous ferez.",
@@ -1009,100 +1019,100 @@ Veuillez préciser ces indications dans toutes les requêtes que vous ferez.",
 'confirmedittext' => 'Vous devez confirmer votre adresse de courriel avant de modifier les pages.
 Veuillez entrer et valider votre adresse de courriel dans vos [[Special:Preferences|préférences]].',
 'nosuchsectiontitle' => 'Impossible de trouver la section',
-'nosuchsectiontext' => 'Vous avez essayé de modifier une section qui n’existe pas.
-Elle a peut-être été déplacée ou supprimée depuis que vous avez lu cette page.',
+'nosuchsectiontext' => "Vous avez essayé de modifier une section qui n'existe pas.
+Elle a peut-être été déplacée ou supprimée depuis que vous avez lu cette page.",
 'loginreqtitle' => 'Connexion nécessaire',
 'loginreqlink' => 'connecter',
 'loginreqpagetext' => 'Vous devez vous $1 pour voir les autres pages.',
 'accmailtitle' => 'Mot de passe envoyé.',
 'accmailtext' => "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.
-Le mot de passe pour ce nouveau compte peut être changé sur la page ''[[Special:ChangePassword|de changement de mot de passe]]'' après sêtre connecté.",
+Le mot de passe pour ce nouveau compte peut être changé sur la page ''[[Special:ChangePassword|de changement de mot de passe]]'' après s'être connecté.",
 'newarticle' => '(Nouveau)',
-'newarticletext' => "Vous avez suivi un lien vers une page qui nexiste pas encore ou qui a été [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} effacée].
-Pour créer cette page, entrez votre texte dans la boîte ci-dessous (vous pouvez consulter [[{{MediaWiki:Helppage}}|la page d’aide]] pour plus d’informations).
+'newarticletext' => "Vous avez suivi un lien vers une page qui n'existe pas encore ou qui a été [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} effacée].
+Pour créer cette page, entrez votre texte dans la boîte ci-dessous (vous pouvez consulter [[{{MediaWiki:Helppage}}|la page d'aide]] pour plus d'informations).
 Si vous êtes arrivé{{GENDER:||e|(e)}} ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
-'anontalkpagetext' => "---- ''Vous êtes sur la page de discussion d’un utilisateur anonyme qui n’a pas encore créé de compte ou qui n’en utilise pas. Pour cette raison, nous devons utiliser son adresse IP pour l’identifier. Une adresse IP peut être partagée par plusieurs utilisateurs. Si vous êtes un{{GENDER:||e|}} utilisat{{GENDER:|eur|rice|eur}} anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:UserLogin/signup|créer un compte]] ou [[Special:UserLogin|vous connecter]] afin d’éviter toute confusion future avec d’autres contributeurs anonymes.''",
-'noarticletext' => 'Il n’y a pour l’instant aucun texte sur cette page.
+'anontalkpagetext' => "---- ''Vous êtes sur la page de discussion d'un utilisateur anonyme qui n'a pas encore créé de compte ou qui n'en utilise pas. Pour cette raison, nous devons utiliser son adresse IP pour l'identifier. Une adresse IP peut être partagée par plusieurs utilisateurs. Si vous êtes un{{GENDER:||e|}} utilisat{{GENDER:|eur|rice|eur}} anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:UserLogin/signup|créer un compte]] ou [[Special:UserLogin|vous connecter]] afin d'éviter toute confusion future avec d'autres contributeurs anonymes.''",
+'noarticletext' => 'Il n\'y a pour l\'instant aucun texte sur cette page.
 Vous pouvez [[Special:Search/{{PAGENAME}}|lancer une recherche sur ce titre]] dans les autres pages,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les opérations liées]
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} créer cette page]</span>.',
-'noarticletext-nopermission' => 'Il n’y a pour l’instant aucun texte sur cette page.
+'noarticletext-nopermission' => 'Il n\'y a pour l\'instant aucun texte sur cette page.
 Vous pouvez [[Special:Search/{{PAGENAME}}|faire une recherche sur ce titre]] dans les autres pages,
 ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les journaux associés]</span>.',
 'missing-revision' => "La révision n° $1 de la page intitulée « {{PAGENAME}} » n'existe pas.
 
 Cela survient en général en suivant un lien historique obsolète vers une page qui a été supprimée.
 Vous pouvez trouver plus de détails dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].",
-'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 :',
+'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 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) ;
 * '''Internet Explorer :''' Maintenez la touche ''Ctrl'' en cliquant sur le bouton ''Actualiser'' ou pressez ''Ctrl-F5'' ;
 * '''Opera :''' Videz le cache dans ''Outils → Préférences''.",
-'usercssyoucanpreview' => "'''Astuce :''' utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille CSS avant de lenregistrer.",
-'userjsyoucanpreview' => "'''Astuce :''' utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille JavaScript avant de lenregistrer.",
-'usercsspreview' => "'''Rappelez-vous que vous n’êtes qu’en train de prévisualiser votre propre feuille CSS.'''
-'''Elle na pas encore été enregistrée !'''",
-'userjspreview' => "'''Rappelez-vous que vous êtes en train de visualiser ou de tester votre code JavaScript et qu’il n’a pas encore été enregistré !'''",
+'usercssyoucanpreview' => "'''Astuce :''' utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille CSS avant de l'enregistrer.",
+'userjsyoucanpreview' => "'''Astuce :''' utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille JavaScript avant de l'enregistrer.",
+'usercsspreview' => "'''Rappelez-vous que vous n'êtes qu'en train de prévisualiser votre propre feuille CSS.'''
+'''Elle n'a pas encore été enregistrée !'''",
+'userjspreview' => "'''Rappelez-vous que vous êtes en train de visualiser ou de tester votre code JavaScript et qu'il n'a pas encore été enregistré !'''",
 'sitecsspreview' => "'''Souvenez-vous que vous êtes seulement en train de prévisualiser cette feuille de style.'''
-'''Elle na pas encore été enregistrée !'''",
+'''Elle n'a pas encore été enregistrée !'''",
 'sitejspreview' => "'''Souvenez-vous que vous êtes seulement en train de prévisualiser ce code JavaScript.'''
-'''Il na pas encore été enregistré !'''",
-'userinvalidcssjstitle' => "'''Attention :''' il n’existe pas d’habillage « $1 ». Rappelez-vous que les pages personnelles avec extensions .css et .js utilisent des titres en minuscules, par exemple {{ns:user}}:Foo/vector.css et non {{ns:user}}:Foo/Vector.css.",
+'''Il n'a pas encore été enregistré !'''",
+'userinvalidcssjstitle' => "'''Attention :''' il n'existe pas d'habillage « $1 ». Rappelez-vous que les pages personnelles avec extensions .css et .js utilisent des titres en minuscules, par exemple {{ns:user}}:Foo/vector.css et non {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Mis à jour)',
 'note' => "'''Note :'''",
-'previewnote' => "'''Rappelez-vous que ce n’est qu’une prévisualisation.'''
-Vos modifications nont pas encore été enregistrées !",
+'previewnote' => "'''Rappelez-vous que ce n'est qu'une prévisualisation.'''
+Vos modifications n'ont pas encore été enregistrées !",
 'continue-editing' => 'Aller à la zone de modification',
-'previewconflict' => 'Cette prévisualisation montre le texte de la boîte supérieure de modification tel qu’il apparaîtra si vous choisissez de le publier.',
-'session_fail_preview' => "'''Nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.'''
+'previewconflict' => "Cette prévisualisation montre le texte de la boîte supérieure de modification tel qu'il apparaîtra si vous choisissez de le publier.",
+'session_fail_preview' => "'''Nous ne pouvons enregistrer votre modification à cause d'une perte d'informations concernant votre session.'''
 Veuillez réessayer.
 Si cela échoue de nouveau, essayez en vous [[Special:UserLogout|déconnectant]], puis en vous reconnectant.",
-'session_fail_preview_html' => "'''Nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.'''
+'session_fail_preview_html' => "'''Nous ne pouvons enregistrer votre modification à cause d'une perte d'informations concernant votre session.'''
 
 ''Parce que {{SITENAME}} a activé le HTML brut, la prévisualisation a été masquée afin de prévenir les attaques par JavaScript.''
 
 '''Si la tentative de modification était légitime, veuillez réessayer.'''
 Si cela échoue de nouveau, [[Special:UserLogout|déconnectez-vous]], puis reconnectez-vous.",
-'token_suffix_mismatch' => "'''Votre modification n’a pas été acceptée car votre navigateur a mal codé les caractères de ponctuation dans l’identifiant de modification.'''
+'token_suffix_mismatch' => "'''Votre modification n'a pas été acceptée car votre navigateur a mal codé les caractères de ponctuation dans l'identifiant de modification.'''
 Ce rejet est nécessaire pour empêcher la corruption du texte de la page.
 Ce problème se produit parfois lorsque vous utilisez un serveur mandataire anonyme problématique basé sur le web.",
-'edit_form_incomplete' => "'''Certaines parties du formulaire de modification nont pas atteint le serveur, vérifiez que vos modifications sont intactes et essayez à nouveau.'''",
+'edit_form_incomplete' => "'''Certaines parties du formulaire de modification n'ont pas atteint le serveur, vérifiez que vos modifications sont intactes et essayez à nouveau.'''",
 'editing' => 'Modification de $1',
 'creating' => 'Création de $1',
 'editingsection' => 'Modification de $1 (section)',
 'editingcomment' => 'Modification de $1 (nouvelle section)',
 'editconflict' => 'Conflit de modification : $1',
 'explainconflict' => "Cette page a été changée après que vous ayez commencé à la modifier.
-La zone de modification supérieure contient le texte tel quil est actuellement enregistré dans la base de données.
+La zone de modification supérieure contient le texte tel qu'il est actuellement enregistré dans la base de données.
 Vos modifications apparaissent dans la zone de modification inférieure.
 Vous allez devoir fusionner vos modifications dans le texte existant.
 '''Seul''' le texte de la zone supérieure sera sauvegardé si vous cliquez sur « {{int:savearticle}} ».",
 'yourtext' => 'Votre texte',
 'storedversion' => 'La version enregistrée',
-'nonunicodebrowser' => "'''Attention : Votre navigateur ne supporte pas lUnicode.'''
+'nonunicodebrowser' => "'''Attention : Votre navigateur ne supporte pas l'Unicode.'''
 Une solution de rechange a été trouvée pour vous permettre de modifier en toute sûreté une page : les caractères non-ASCII apparaîtront dans votre boîte de modification en tant que codes hexadécimaux. Vous devriez utiliser un navigateur plus récent.",
 'editingold' => "'''Attention : vous êtes en train de modifier une ancienne version de cette page.
 Si vous la publiez, toutes les modifications effectuées depuis cette version seront perdues.'''",
 'yourdiff' => 'Différences',
 'copyrightwarning' => "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
-Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
-'copyrightwarning2' => "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par dautres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
-Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails).
-'''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
+Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l'avez copié d'une source provenant du domaine public, ou d'une ressource libre. '''N'UTILISEZ PAS DE TRAVAUX SOUS DROIT D'AUTEUR SANS AUTORISATION EXPRESSE !'''",
+'copyrightwarning2' => "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d'autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
+Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l'avez copié d'une source provenant du domaine public, ou d'une ressource libre. (voir $1 pour plus de détails).
+'''N'UTILISEZ PAS DE TRAVAUX SOUS DROIT D'AUTEUR SANS AUTORISATION EXPRESSE !'''",
 '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 linstant.'''
+'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.
 
-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 dadministrateur peuvent la modifier.'''<br />
+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 :",
-'cascadeprotectedwarning' => "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent léditer. Cette protection est héritée par son inclusion par {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
+'cascadeprotectedwarning' => "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent l'éditer. Cette protection est héritée par son inclusion par {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
 'titleprotectedwarning' => "'''ATTENTION : Cette page a été protégée de telle manière que des [[Special:ListGroupRights|droits spécifiques]] sont requis pour pouvoir la créer.''' La dernière entrée du journal est affichée ci-dessous pour référence :",
 'templatesused' => '{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} par cette page :',
 'templatesusedpreview' => '{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} dans cette prévisualisation :',
@@ -1111,28 +1121,27 @@ 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.',
+'nocreate-loggedin' => "Vous n'avez pas la permission de créer de nouvelles pages.",
 'sectioneditnotsupported-title' => 'Modification de section non prise en charge',
-'sectioneditnotsupported-text' => 'La modification d’une section n’est pas prise en charge pour cette page.',
+'sectioneditnotsupported-text' => "La modification d'une section n'est pas prise en charge pour cette page.",
 'permissionserrors' => 'Erreur de permissions',
-'permissionserrorstext' => 'Vous n’avez pas la permission d’effectuer l’opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :',
-'permissionserrorstext-withaction' => 'Vous n’êtes pas autorisé{{GENDER:||e|(e)}} à $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :',
+'permissionserrorstext' => "Vous n'avez pas la permission d'effectuer l'opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
+'permissionserrorstext-withaction' => "Vous n'êtes pas autorisé{{GENDER:||e|(e)}} à $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
 'recreate-moveddeleted-warn' => "'''Attention : vous êtes en train de recréer une page qui a été précédemment supprimée.'''
 
-Assurez-vous quil est pertinent de poursuivre les modifications sur cette page. Le journal des suppressions et des déplacements est affiché ci-dessous :",
+Assurez-vous qu'il est pertinent de poursuivre les modifications sur cette page. Le journal des suppressions et des déplacements est affiché ci-dessous :",
 'moveddeleted-notice' => 'Cette page a été supprimée. Le journal des suppressions et des déplacements est affiché ci-dessous pour référence.',
 'log-fulllog' => 'Voir le journal complet',
 'edit-hook-aborted' => 'Échec de la modification par une extension.
 Cause inconnue',
-'edit-gone-missing' => 'N’a pas pu mettre à jour la page.
-Il semble qu’elle ait été supprimée.',
+'edit-gone-missing' => "N'a pas pu mettre à jour la page.
+Il semble qu'elle ait été supprimée.",
 'edit-conflict' => 'Conflit de modification.',
-'edit-no-change' => 'Votre modification a été ignorée car aucun changement n’a été fait au texte.',
-'edit-already-exists' => 'La nouvelle page n’a pas pu être créée.
-Elle existe déjà.',
+'edit-no-change' => "Votre modification a été ignorée car aucun changement n'a été fait au texte.",
+'edit-already-exists' => "La nouvelle page n'a pas pu être créée.
+Elle existe déjà.",
 'defaultmessagetext' => 'Message par défaut',
 'content-failed-to-parse' => "Échec de l'analyse du contenu de $2 pour le modèle $1: $3",
 'invalid-content-data' => 'Données du contenu non valides',
@@ -1145,13 +1154,13 @@ Elle existe déjà.',
 'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => 'Attention : cette page contient de trop nombreux appels à des fonctions coûteuses de l’analyseur syntaxique.
+'expensive-parserfunction-warning' => "Attention : cette page contient de trop nombreux appels à des fonctions coûteuses de l'analyseur syntaxique.
 
-Il devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu’il y en a maintenant $1.',
-'expensive-parserfunction-category' => 'Pages avec trop d’appels dispendieux de fonctions de l’analyseur syntaxique',
-'post-expand-template-inclusion-warning' => 'Attention : Cette page contient trop d’inclusions de modèles. Certaines inclusions ne seront pas effectuées.',
-'post-expand-template-inclusion-category' => 'Pages contenant trop d’inclusions de modèles',
-'post-expand-template-argument-warning' => 'Attention : Cette page contient au moins un paramètre de modèle dont l’inclusion est rendue impossible. Après extension, celui-ci aurait produit un résultat trop long, il n’a donc pas été inclus.',
+Il devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu'il y en a maintenant $1.",
+'expensive-parserfunction-category' => "Pages avec trop d'appels dispendieux de fonctions de l'analyseur syntaxique",
+'post-expand-template-inclusion-warning' => "Attention : Cette page contient trop d'inclusions de modèles. Certaines inclusions ne seront pas effectuées.",
+'post-expand-template-inclusion-category' => "Pages contenant trop d'inclusions de modèles",
+'post-expand-template-argument-warning' => "Attention : Cette page contient au moins un paramètre de modèle dont l'inclusion est rendue impossible. Après extension, celui-ci aurait produit un résultat trop long, il n'a donc pas été inclus.",
 'post-expand-template-argument-category' => 'Pages contenant des paramètres de modèle non évalués',
 'parser-template-loop-warning' => 'Modèle en boucle détecté : [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limite de profondeur des appels de modèles dépassée ($1)',
@@ -1165,9 +1174,9 @@ Il devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu’il y en a maint
 'converter-manual-rule-error' => 'Erreur détectée dans la règle manuelle de conversion de langue',
 
 # "Undo" feature
-'undo-success' => 'Cette modification va être défaite. Veuillez vérifier les modifications ci-dessous, puis publier si c’est bien ce que vous voulez faire.',
+'undo-success' => "Cette modification va être défaite. Veuillez vérifier les modifications ci-dessous, puis publier si c'est bien ce que vous voulez faire.",
 'undo-failure' => 'Cette modification ne peut pas être défaite : cela entrerait en conflit avec les modifications intermédiaires.',
-'undo-norev' => 'La modification n’a pas pu être défaite parce qu’elle est inexistante ou qu’elle a été supprimée.',
+'undo-norev' => "La modification n'a pas pu être défaite parce qu'elle est inexistante ou qu'elle a été supprimée.",
 'undo-summary' => 'Annulation des modifications $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]])',
 
 # Account creation failure
@@ -1178,7 +1187,7 @@ La raison donnée était ''$2''.",
 
 # History pages
 'viewpagelogs' => 'Voir les opérations sur cette page',
-'nohistory' => 'Il n’existe pas d’historique pour cette page.',
+'nohistory' => "Il n'existe pas d'historique pour cette page.",
 'currentrev' => 'Version actuelle',
 'currentrev-asof' => 'Version actuelle en date du $1',
 'revisionasof' => 'Version du $1',
@@ -1192,7 +1201,7 @@ La raison donnée était ''$2''.",
 'page_first' => 'première',
 'page_last' => 'dernière',
 'histlegend' => 'Légende : ({{int:cur}}) = différence avec la version actuelle, ({{int:last}}) = différence avec la version précédente, <b>{{int:minoreditletter}}</b> = modification mineure',
-'history-fieldset-title' => 'Naviguer dans l’historique',
+'history-fieldset-title' => "Naviguer dans l'historique",
 'history-show-deleted' => 'Masqués seulement',
 'histfirst' => 'première page',
 'histlast' => 'dernière page',
@@ -1203,15 +1212,15 @@ La raison donnée était ''$2''.",
 'history-feed-title' => 'Historique des versions',
 'history-feed-description' => 'Historique pour cette page sur le wiki',
 'history-feed-item-nocomment' => '$1 le $2',
-'history-feed-empty' => 'La page demandée n’existe pas.
+'history-feed-empty' => "La page demandée n'existe pas.
 Elle a peut-être été effacée ou renommée.
-Essayez de [[Special:Search|rechercher sur le wiki]] pour trouver des pages en rapport.',
+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'''.
@@ -1224,13 +1233,13 @@ Vous pouvez toujours [$1 voir cette version] si vous le voulez.",
 Vous pouvez la visualiser ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des effacements].",
 'rev-suppressed-text-view' => "Cette version de la page a été '''supprimée'''.
 Vous pouvez la visualiser ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des suppressions].",
-'rev-deleted-no-diff' => "Vous ne pouvez pas voir ce diff parce quune des versions a été '''effacée'''.
+'rev-deleted-no-diff' => "Vous ne pouvez pas voir ce diff parce qu'une des versions a été '''effacée'''.
 Des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des effacements].",
 'rev-suppressed-no-diff' => "Vous ne pouvez pas voir cette différence car une des révisions a été '''supprimée'''.",
 'rev-deleted-unhide-diff' => "Une des révisions de cette différence a été '''effacée'''.
 Des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des effacements].
 Vous pouvez toujours [$1 voir cette différence] si vous le voulez.",
-'rev-suppressed-unhide-diff' => "Lune des révisions de ce diff a été '''supprimée'''.
+'rev-suppressed-unhide-diff' => "L'une des révisions de ce diff a été '''supprimée'''.
 Des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des suppressions].
 Vous pouvez toujours [$1 voir ce diff] si vous souhaitez poursuivre.",
 'rev-deleted-diff-view' => "Une des révisions de ce diff a été '''supprimée'''.
@@ -1241,17 +1250,17 @@ Vous pouvez voir ce diff ; des détails sont disponibles dans le [{{fullurl:{{#S
 'rev-showdeleted' => 'afficher',
 'revisiondelete' => 'Supprimer ou restaurer des événements',
 'revdelete-nooldid-title' => 'Version cible non valide',
-'revdelete-nooldid-text' => 'Vous n’avez pas précisé la version cible de cette fonction, elle n’existe pas, ou il s’agit de la version actuelle.',
+'revdelete-nooldid-text' => "Vous n'avez pas précisé la version cible de cette fonction, elle n'existe pas, ou il s'agit de la version actuelle.",
 'revdelete-nologtype-title' => 'Aucun type de journal spécifié',
-'revdelete-nologtype-text' => 'Vous n’avez pas spécifié un type de journal sur lequel cette action doit être réalisée.',
+'revdelete-nologtype-text' => "Vous n'avez pas spécifié un type de journal sur lequel cette action doit être réalisée.",
 'revdelete-nologid-title' => 'Entrée du journal invalide',
-'revdelete-nologid-text' => 'Vous n’avez pas spécifié une entrée du journal sur laquelle cette action doit être effectuée, ou alors l’événement spécifié n’existe pas.',
-'revdelete-no-file' => 'Le fichier spécifié n’existe pas.',
+'revdelete-nologid-text' => "Vous n'avez pas spécifié une entrée du journal sur laquelle cette action doit être effectuée, ou alors l'événement spécifié n'existe pas.",
+'revdelete-no-file' => "Le fichier spécifié n'existe pas.",
 'revdelete-show-file-confirm' => 'Êtes-vous sûr de vouloir voir la révision supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?',
 'revdelete-show-file-submit' => 'Oui',
 'revdelete-selected' => "'''{{PLURAL:$2|Version sélectionnée|Versions sélectionnées}} de '''[[:$1]]''' :'''",
-'logdelete-selected' => "'''{{PLURAL:$1|Événement d’historique sélectionné|Événements d’historique sélectionnés}} :'''",
-'revdelete-text' => "'''Les versions et événements supprimés seront encore présents dans lhistorique de la page et dans les journaux, mais leur contenu textuel sera inaccessible au public.'''
+'logdelete-selected' => "'''{{PLURAL:$1|Événement d'historique sélectionné|Événements d'historique sélectionnés}} :'''",
+'revdelete-text' => "'''Les versions et événements supprimés seront encore présents dans l'historique de la page et dans les journaux, mais leur contenu textuel sera inaccessible au public.'''
 Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu caché et le restaurer à travers cette même interface, à moins que des restrictions supplémentaires ne soient mises en place.",
 'revdelete-confirm' => 'Confirmez que vous voulez effectuer cette action, que vous en comprenez les conséquences, et que vous le faites en accord avec [[{{MediaWiki:Policy-url}}|les règles]].',
 'revdelete-suppress-text' => "La suppression ne doit être utilisée '''que''' dans les cas suivants :
@@ -1260,43 +1269,43 @@ Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu
 'revdelete-legend' => 'Mettre en place des restrictions de visibilité :',
 'revdelete-hide-text' => 'Masquer le texte de la version',
 'revdelete-hide-image' => 'Masquer le contenu du fichier',
-'revdelete-hide-name' => 'Masquer l’action et la cible',
+'revdelete-hide-name' => "Masquer l'action et la cible",
 'revdelete-hide-comment' => 'Masquer le commentaire de modification',
-'revdelete-hide-user' => 'Masquer le pseudo ou l’adresse IP du contributeur.',
-'revdelete-hide-restricted' => 'Supprimer ces données aux administrateurs ainsi qu’aux autres',
+'revdelete-hide-user' => "Masquer le pseudo ou l'adresse IP du contributeur.",
+'revdelete-hide-restricted' => "Supprimer ces données aux administrateurs ainsi qu'aux autres",
 '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}}',
 'revdelete-success' => "'''Visibilité des versions mise à jour avec succès.'''",
-'revdelete-failure' => "'''La visibilité de la version na pas pu être mise à jour :'''
+'revdelete-failure' => "'''La visibilité de la version n'a pas pu être mise à jour :'''
 $1",
 'logdelete-success' => "'''Visibilité du journal paramétrée avec succès.'''",
-'logdelete-failure' => "'''La visibilité du journal na pas pu être définie :'''
+'logdelete-failure' => "'''La visibilité du journal n'a pas pu être définie :'''
 $1",
 'revdel-restore' => 'modifier la visibilité',
 'revdel-restore-deleted' => 'révisions supprimées',
 'revdel-restore-visible' => 'révisions visibles',
 'pagehist' => 'Historique de la page',
 'deletedhist' => 'Historique supprimé',
-'revdelete-hide-current' => 'Erreur lors de la suppression de l’élément daté du $1 à $2 : il est la révision courante.
-Il ne peut pas être supprimé.',
-'revdelete-show-no-access' => 'Erreur lors de l’affichage de l’élément daté du $1 à $2 : il est marqué comme « restreint ».
-Vous n’y avez pas accès.',
-'revdelete-modify-no-access' => 'Erreur lors de la modification de l’élément daté du $1 à $2 : il est marqué comme « restreint ».
-Vous n’y avez pas accès.',
-'revdelete-modify-missing' => 'Erreur lors de la modification de l’élément avec l’ID $1 : il est manquant dans la base de données !',
-'revdelete-no-change' => "'''Attention :''' Lélément daté du $1 à $2 a déjà les paramètres de visibilité demandés.",
-'revdelete-concurrent-change' => 'Erreur lors de la modification de l’élément daté du $1 à $2 : son statut a été changé par quelqu’un d’autre pendant que vous le modifiez.
-Vérifiez les journaux.',
-'revdelete-only-restricted' => 'Erreur lors de la suppression de l’entrée datée du $1 à $2 : vous ne pouvez pas supprimer ces éléments aux administrateurs sans également sélectionner des autres options de suppression.',
-'revdelete-reason-dropdown' => '* Raisons courantes de suppression :
-** Violation des droits dauteurs ;
+'revdelete-hide-current' => "Erreur lors de la suppression de l'élément daté du $1 à $2 : il est la révision courante.
+Il ne peut pas être supprimé.",
+'revdelete-show-no-access' => "Erreur lors de l'affichage de l'élément daté du $1 à $2 : il est marqué comme « restreint ».
+Vous n'y avez pas accès.",
+'revdelete-modify-no-access' => "Erreur lors de la modification de l'élément daté du $1 à $2 : il est marqué comme « restreint ».
+Vous n'y avez pas accès.",
+'revdelete-modify-missing' => "Erreur lors de la modification de l'élément avec l'ID $1 : il est manquant dans la base de données !",
+'revdelete-no-change' => "'''Attention :''' L'élément daté du $1 à $2 a déjà les paramètres de visibilité demandés.",
+'revdelete-concurrent-change' => "Erreur lors de la modification de l'élément daté du $1 à $2 : son statut a été changé par quelqu'un d'autre pendant que vous le modifiez.
+Vérifiez les journaux.",
+'revdelete-only-restricted' => "Erreur lors de la suppression de l'entrée datée du $1 à $2 : vous ne pouvez pas supprimer ces éléments aux administrateurs sans également sélectionner des autres options de suppression.",
+'revdelete-reason-dropdown' => "* Raisons courantes de suppression :
+** Violation des droits d'auteurs ;
 ** Commentaires ou renseignements personnels inappropriés ;
-** Informations potentiellement diffamatoires.',
+** Informations potentiellement diffamatoires.",
 'revdelete-otherreason' => 'Autre raison / raison supplémentaire :',
 'revdelete-reasonotherlist' => 'Autre raison',
 'revdelete-edit-reasonlist' => 'Modifier les motifs fréquents de suppression',
@@ -1309,32 +1318,32 @@ Voir la [[Special:BlockList|liste des blocages]] pour la liste des bannissements
 
 # History merging
 'mergehistory' => 'Fusionner les historiques des pages',
-'mergehistory-header' => 'Cette page vous permet de fusionner des versions de l’historique d’une page d’origine vers une nouvelle page.
-Assurez-vous que cette opération conservera la continuité de l’historique de la page.',
+'mergehistory-header' => "Cette page vous permet de fusionner des versions de l'historique d'une page d'origine vers une nouvelle page.
+Assurez-vous que cette opération conservera la continuité de l'historique de la page.",
 'mergehistory-box' => 'Fusionner les versions de deux pages :',
-'mergehistory-from' => 'Page d’origine :',
+'mergehistory-from' => "Page d'origine :",
 'mergehistory-into' => 'Page de destination :',
 'mergehistory-list' => 'Historique fusionnable des modifications',
-'mergehistory-merge' => 'Les versions suivantes de [[:$1]] peuvent être fusionnées avec [[:$2]]. Utilisez la colonne de boutons radio pour fusionner uniquement les versions créées du début jusqu’à la date indiquée. Notez bien que l’utilisation des liens de navigation réinitialisera cette colonne.',
+'mergehistory-merge' => "Les versions suivantes de [[:$1]] peuvent être fusionnées avec [[:$2]]. Utilisez la colonne de boutons radio pour fusionner uniquement les versions créées du début jusqu'à la date indiquée. Notez bien que l'utilisation des liens de navigation réinitialisera cette colonne.",
 'mergehistory-go' => 'Voir les modifications qui peuvent être fusionnées',
 'mergehistory-submit' => 'Fusionner les versions',
 'mergehistory-empty' => 'Aucune version ne peut être fusionnée.',
 'mergehistory-success' => '$3 version{{PLURAL:$3||s}} de [[:$1]] fusionnée{{PLURAL:$3||s}} dans [[:$2]].',
 'mergehistory-fail' => 'Impossible de procéder à la fusion des historiques. Resélectionner la page ainsi que les paramètres de date.',
-'mergehistory-no-source' => 'La page d’origine $1 n’existe pas.',
-'mergehistory-no-destination' => 'La page de destination $1 n’existe pas.',
-'mergehistory-invalid-source' => 'La page d’origine doit avoir un titre valide.',
+'mergehistory-no-source' => "La page d'origine $1 n'existe pas.",
+'mergehistory-no-destination' => "La page de destination $1 n'existe pas.",
+'mergehistory-invalid-source' => "La page d'origine doit avoir un titre valide.",
 'mergehistory-invalid-destination' => 'La page de destination doit avoir un titre valide.',
 'mergehistory-autocomment' => '[[:$1]] fusionnée avec [[:$2]]',
 'mergehistory-comment' => '[[:$1]] fusionnée avec [[:$2]] : $3',
-'mergehistory-same-destination' => 'Les pages d’origine et de destination ne peuvent pas être la même',
+'mergehistory-same-destination' => "Les pages d'origine et de destination ne peuvent pas être la même",
 'mergehistory-reason' => 'Motif :',
 
 # Merge log
 'mergelog' => 'Journal des fusions',
-'pagemerge-logentry' => '[[$1]] fusionnée avec [[$2]] (versions jusqu’au $3)',
+'pagemerge-logentry' => "[[$1]] fusionnée avec [[$2]] (versions jusqu'au $3)",
 'revertmerge' => 'Séparer',
-'mergelogpagetext' => 'Voici la liste des fusions de l’historique d’une page dans celui d’une autre les plus récentes.',
+'mergelogpagetext' => "Voici la liste des fusions de l'historique d'une page dans celui d'une autre les plus récentes.",
 
 # Diffs
 'history-title' => '$1 : Historique des versions',
@@ -1346,7 +1355,7 @@ Assurez-vous que cette opération conservera la continuité de l’historique de
 'showhideselectedversions' => 'Afficher/masquer les versions sélectionnées',
 'editundo' => 'défaire',
 'diff-multi' => '({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par {{PLURAL:$2|un utilisateur|$2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})',
-'diff-multi-manyusers' => '({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par plus {{PLURAL:$2|d’un utilisateur|de $2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})',
+'diff-multi-manyusers' => "({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par plus {{PLURAL:$2|d'un utilisateur|de $2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})",
 'difference-missing-revision' => "{{PLURAL:$2|Une révision|$2 révisions}} de cette différence ($1) {{PLURAL:$2|n'a pas été trouvée|n'ont pas été trouvées}}.
 
 Cela survient en général en suivant un lien de différence obsolète vers une page qui a été supprimée.
@@ -1355,10 +1364,10 @@ Vous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page
 # Search results
 'searchresults' => 'Résultats de la recherche',
 'searchresults-title' => 'Résultats de recherche pour « $1 »',
-'searchresulttext' => 'Pour plus d’informations sur la recherche dans {{SITENAME}}, voir [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchresulttext' => "Pour plus d'informations sur la recherche dans {{SITENAME}}, voir [[{{MediaWiki:Helppage}}|{{int:help}}]].",
 'searchsubtitle' => "Vous avez recherché « '''[[:$1]]''' » ([[Special:Prefixindex/$1|toutes les pages commençant par « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|toutes les pages qui ont un lien vers « $1 »]])",
 'searchsubtitleinvalid' => "Vous avez recherché « '''$1''' »",
-'toomanymatches' => 'Un trop grand nombre d’occurrences a été renvoyé, veuillez soumettre une requête différente.',
+'toomanymatches' => "Un trop grand nombre d'occurrences a été renvoyé, veuillez soumettre une requête différente.",
 'titlematches' => 'Correspondances dans les titres des pages',
 'notitlematches' => 'Aucun titre de page ne correspond à la recherche.',
 'textmatches' => 'Correspondances dans le texte des pages',
@@ -1375,7 +1384,7 @@ Vous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page
 'searchhelp-url' => 'Help:Accueil',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Rechercher les pages commençant par ce préfixe]]',
 'searchprofile-articles' => 'Pages de contenu',
-'searchprofile-project' => 'Pages d’aide et de projet',
+'searchprofile-project' => "Pages d'aide et de projet",
 'searchprofile-images' => 'Multimédia',
 'searchprofile-everything' => 'Tout',
 'searchprofile-advanced' => 'Recherche avancée',
@@ -1402,8 +1411,8 @@ Vous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page
 'showingresultsnum' => 'Affichage de <b>$3</b> résultat{{PLURAL:$3||s}} à partir du n°<b>$2</b>.',
 'showingresultsheader' => "{{PLURAL:$5|Résultat '''$1'''|Résultats '''$1–$2'''}} de '''$3''' pour '''$4'''",
 'nonefound' => "'''Note''' : par défaut, seuls certains espaces de noms sont utilisés pour la recherche.
-Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (y compris les pages de discussion, les modèles, etc.) ou bien utilisez lespace de noms souhaité comme préfixe.",
-'search-nonefound' => 'Il n’y a aucun résultat correspondant à la requête.',
+Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (y compris les pages de discussion, les modèles, etc.) ou bien utilisez l'espace de noms souhaité comme préfixe.",
+'search-nonefound' => "Il n'y a aucun résultat correspondant à la requête.",
 'powersearch' => 'Rechercher',
 'powersearch-legend' => 'Recherche avancée',
 'powersearch-ns' => 'Rechercher dans les espaces de noms :',
@@ -1416,20 +1425,20 @@ Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (
 'searchdisabled' => 'La recherche sur {{SITENAME}} est désactivée. En attendant la réactivation, vous pouvez effectuer une recherche via Google. Attention, leur indexation du contenu de {{SITENAME}} peut ne pas être à jour.',
 
 # Quickbar
-'qbsettings' => 'Barre d’outils',
+'qbsettings' => "Barre d'outils",
 'qbsettings-none' => 'Aucune',
 'qbsettings-fixedleft' => 'Gauche',
 'qbsettings-fixedright' => 'Droite',
 'qbsettings-floatingleft' => 'Flottante à gauche',
 'qbsettings-floatingright' => 'Flottante à droite',
-'qbsettings-directionality' => 'Fixe, en fonction de la directivité d’écriture de votre langue',
+'qbsettings-directionality' => "Fixe, en fonction de la directivité d'écriture de votre langue",
 
 # Preferences page
 'preferences' => 'Préférences',
 'mypreferences' => 'Préférences',
 'prefs-edits' => 'Nombre de modifications :',
 'prefsnologin' => 'Non connecté',
-'prefsnologintext' => 'Vous devez être <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} connecté]</span> pour modifier vos préférences dutilisateur.',
+'prefsnologintext' => 'Vous devez être <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} connecté]</span> pour modifier vos préférences d\'utilisateur.',
 'changepassword' => 'Changer de mot de passe',
 'prefs-skin' => 'Habillage',
 'skin-preview' => 'Prévisualiser',
@@ -1448,7 +1457,7 @@ Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (
 'prefs-watchlist-token' => 'Jeton pour la liste de suivi :',
 'prefs-misc' => 'Préférences diverses',
 'prefs-resetpass' => 'Changer de mot de passe',
-'prefs-changeemail' => 'Changer l’adresse de courriel',
+'prefs-changeemail' => "Changer l'adresse de courriel",
 'prefs-setemail' => 'Définir une adresse de courriel',
 'prefs-email' => 'Options des courriels',
 'prefs-rendering' => 'Apparence',
@@ -1466,7 +1475,7 @@ Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (
 'recentchangesdays' => 'Nombre de jours à afficher dans les modifications récentes :',
 'recentchangesdays-max' => '(maximum $1 jour{{PLURAL:$1||s}})',
 'recentchangescount' => 'Nombre de modifications à afficher par défaut :',
-'prefs-help-recentchangescount' => 'Ceci inclut les modifications récentes, les pages d’historiques et les journaux.',
+'prefs-help-recentchangescount' => "Ceci inclut les modifications récentes, les pages d'historiques et les journaux.",
 'prefs-help-watchlist-token' => 'Remplissez ce champ avec une valeur secrète et un flux RSS sera généré pour votre liste de suivi.
 Toute personne connaissant ce jeton pourra lire votre liste de suivi, choisissez donc une valeur sécurisée.
 Voici une valeur générée aléatoirement que vous pouvez utiliser : $1',
@@ -1488,7 +1497,7 @@ Voici une valeur générée aléatoirement que vous pouvez utiliser : $1',
 'timezoneregion-europe' => 'Europe',
 'timezoneregion-indian' => 'Océan indien',
 'timezoneregion-pacific' => 'Océan pacifique',
-'allowemail' => 'Autoriser l’envoi de courriels venant d’autres utilisateurs',
+'allowemail' => "Autoriser l'envoi de courriels venant d'autres utilisateurs",
 'prefs-searchoptions' => 'Recherche',
 'prefs-namespaces' => 'Espaces de noms',
 'defaultns' => 'Rechercher par défaut dans ces espaces de noms :',
@@ -1501,10 +1510,10 @@ Voici une valeur générée aléatoirement que vous pouvez utiliser : $1',
 'prefs-emailconfirm-label' => 'Confirmation du courriel :',
 'prefs-textboxsize' => 'Taille de la fenêtre de modification',
 'youremail' => 'Courriel :',
-'username' => 'Nom d’utilisateur :',
-'uid' => 'Numéro d’utilisateur :',
-'prefs-memberingroups' => 'Membre {{PLURAL:$1|du groupe|des groupes}} :',
-'prefs-registration' => 'Date d’inscription :',
+'username' => "{{GENDER:$1|Nom d'utilisateur|Nom d'utilisatrice}}:",
+'uid' => "Numéro d'{{GENDER:$1|utilisateur|utilisatrice}}:",
+'prefs-memberingroups' => '{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}}:',
+'prefs-registration' => "Date d'inscription :",
 'yourrealname' => 'Nom réel :',
 'yourlanguage' => 'Langue :',
 'yourvariant' => 'Variante de la langue du contenu :',
@@ -1519,10 +1528,10 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'gender-unknown' => 'Non renseigné',
 'gender-male' => 'Masculin',
 'gender-female' => 'Féminin',
-'prefs-help-gender' => 'Facultatif : utilisé pour accorder en genre les messages de l’interface. Cette information sera publique.',
+'prefs-help-gender' => "Facultatif : utilisé pour accorder en genre les messages de l'interface. Cette information sera publique.",
 'email' => 'Courriel',
 'prefs-help-realname' => 'Facultatif : si vous le spécifiez, il sera utilisé pour vous attribuer vos contributions.',
-'prefs-help-email' => 'L’adresse de courriel est facultative, mais elle est nécessaire pour réinitialiser votre mot de passe, si vous veniez à l’oublier.',
+'prefs-help-email' => "L'adresse de courriel est facultative, mais elle est nécessaire pour réinitialiser votre mot de passe, si vous veniez à l'oublier.",
 'prefs-help-email-others' => 'Vous pourriez aussi choisir de laisser les autres vous contacter sur votre page de discussion utilisateur sans que soit nécessaire de révéler votre identité.',
 'prefs-help-email-required' => 'Une adresse de courriel est requise.',
 'prefs-info' => 'Informations de base',
@@ -1535,9 +1544,9 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'prefs-advancedrendering' => 'Options avancées',
 'prefs-advancedsearchoptions' => 'Options avancées',
 'prefs-advancedwatchlist' => 'Options avancées',
-'prefs-displayrc' => 'Options d’affichage',
-'prefs-displaysearchoptions' => 'Options d’affichage',
-'prefs-displaywatchlist' => 'Options d’affichage',
+'prefs-displayrc' => "Options d'affichage",
+'prefs-displaysearchoptions' => "Options d'affichage",
+'prefs-displaywatchlist' => "Options d'affichage",
 'prefs-diffs' => 'Différences',
 
 # User preference: e-mail validation using jQuery
@@ -1546,23 +1555,23 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 
 # User rights
 'userrights' => 'Gestion des droits des utilisateurs',
-'userrights-lookup-user' => 'Gestion des groupes d’utilisateurs',
-'userrights-user-editname' => 'Entrez un nom d’utilisateur :',
-'editusergroup' => 'Modification des groupes d’utilisateurs',
-'editinguser' => "Modification des droits de l{{GENDER:$1|utilisateur|utilisatrice}} '''[[User:$1|$1]]''' $2",
+'userrights-lookup-user' => "Gestion des groupes d'utilisateurs",
+'userrights-user-editname' => "Entrez un nom d'utilisateur :",
+'editusergroup' => "Modification des groupes d'utilisateurs",
+'editinguser' => "Modification des droits de l'{{GENDER:$1|utilisateur|utilisatrice}} '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => "Modifier les groupes de l'utilisateur",
-'saveusergroups' => 'Enregistrer les groupes de l’utilisateur',
+'saveusergroups' => "Enregistrer les groupes de l'utilisateur",
 'userrights-groupsmember' => 'Membre de :',
 'userrights-groupsmember-auto' => 'Membre implicite de :',
-'userrights-groups-help' => 'Vous pouvez modifier les groupes auxquels appartient cet utilisateur:
-* Une case cochée signifie que lutilisateur se trouve dans ce groupe.
-* Une case non cochée signifie qu’{{GENDER:$1|il|elle}} ne s’y trouve pas.
-* Un astérisque (*) indique que vous ne pouvez pas retirer ce groupe une fois que vous l’avez ajouté, ou vice-versa.',
+'userrights-groups-help' => "Vous pouvez modifier les groupes auxquels appartient cet utilisateur:
+* Une case cochée signifie que l'utilisateur se trouve dans ce groupe.
+* Une case non cochée signifie qu'{{GENDER:$1|il|elle}} ne s'y trouve pas.
+* Un astérisque (*) indique que vous ne pouvez pas retirer ce groupe une fois que vous l'avez ajouté, ou vice-versa.",
 'userrights-reason' => 'Motif :',
-'userrights-no-interwiki' => 'Vous n’avez pas la permission de modifier des droits d’utilisateurs sur d’autres wikis.',
-'userrights-nodatabase' => 'La base de donnée « $1 » n’existe pas ou n’est pas locale.',
-'userrights-nologin' => 'Vous devez vous [[Special:UserLogin|connecter]] avec un compte d’administrateur pour modifier des droits d’utilisateur.',
-'userrights-notallowed' => 'Votre compte n’a pas la permission de modifier des droits d’utilisateur.',
+'userrights-no-interwiki' => "Vous n'avez pas la permission de modifier des droits d'utilisateurs sur d'autres wikis.",
+'userrights-nodatabase' => "La base de donnée « $1 » n'existe pas ou n'est pas locale.",
+'userrights-nologin' => "Vous devez vous [[Special:UserLogin|connecter]] avec un compte d'administrateur pour modifier des droits d'utilisateur.",
+'userrights-notallowed' => "Votre compte n'a pas la permission de modifier des droits d'utilisateur.",
 'userrights-changeable-col' => 'Les groupes que vous pouvez modifier',
 'userrights-unchangeable-col' => 'Les groupes que vous ne pouvez pas modifier',
 
@@ -1599,68 +1608,66 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'right-minoredit' => 'Marquer ses modifications comme mineures',
 'right-move' => 'Renommer des pages',
 'right-move-subpages' => 'Renommer des pages avec leurs sous-pages',
-'right-move-rootuserpages' => 'Renommer la page principale d’un utilisateur',
+'right-move-rootuserpages' => "Renommer la page principale d'un utilisateur",
 'right-movefile' => 'Renommer des fichiers',
-'right-suppressredirect' => 'Ne pas créer de redirection depuis le titre d’origine en renommant une page',
+'right-suppressredirect' => "Ne pas créer de redirection depuis le titre d'origine en renommant une page",
 'right-upload' => 'Importer des fichiers',
 'right-reupload' => 'Écraser un fichier existant',
-'right-reupload-own' => 'Écraser un fichier que l’on a soi-même importé',
+'right-reupload-own' => "Écraser un fichier que l'on a soi-même importé",
 'right-reupload-shared' => 'Écraser localement un fichier présent sur un dépôt partagé',
 'right-upload_by_url' => 'Importer un fichier depuis une adresse URL',
 'right-purge' => 'Purger le cache des pages sans demande de confirmation',
 'right-autoconfirmed' => 'Modifier les pages semi-protégées',
 'right-bot' => 'Être traité comme un processus automatisé',
-'right-nominornewtalk' => 'Ne pas déclencher la notification de nouveau message lorsqu’on effectue une modification mineure sur la page de discussion d’un utilisateur',
+'right-nominornewtalk' => "Ne pas déclencher la notification de nouveau message lorsqu'on effectue une modification mineure sur la page de discussion d'un utilisateur",
 'right-apihighlimits' => 'Utiliser des limites plus élevées dans les requêtes API',
-'right-writeapi' => 'Utiliser l’API de modification du wiki',
+'right-writeapi' => "Utiliser l'API de modification du wiki",
 'right-delete' => 'Supprimer des pages',
 'right-bigdelete' => 'Supprimer des pages ayant un gros historique',
 'right-deletelogentry' => 'Supprimer et restaurer une entrée particulière du journal',
-'right-deleterevision' => 'Supprimer ou restaurer une version particulière d’une page',
+'right-deleterevision' => "Supprimer ou restaurer une version particulière d'une page",
 'right-deletedhistory' => 'Voir les entrées des historiques supprimées, mais sans leur texte',
 'right-deletedtext' => 'Voir le texte supprimé et les différences entre les versions supprimées',
 'right-browsearchive' => 'Rechercher des pages supprimées',
 'right-undelete' => 'Restaurer une page supprimée',
 'right-suppressrevision' => 'Examiner et restaurer les versions masquées aux administrateurs',
 'right-suppressionlog' => 'Voir les journaux privés',
-'right-block' => 'Bloquer en écriture d’autres utilisateurs',
-'right-blockemail' => 'Empêcher un utilisateur d’envoyer des courriels',
+'right-block' => "Bloquer en écriture d'autres utilisateurs",
+'right-blockemail' => "Empêcher un utilisateur d'envoyer des courriels",
 'right-hideuser' => 'Bloquer un utilisateur en masquant son nom au public',
-'right-ipblock-exempt' => 'Ne pas être affecté par les IP bloquées, les blocages automatiques et les blocages de plages d’IP',
+'right-ipblock-exempt' => "Ne pas être affecté par les IP bloquées, les blocages automatiques et les blocages de plages d'IP",
 'right-proxyunbannable' => 'Ne pas être affecté par les blocages automatiques de serveurs mandataires',
 'right-unblockself' => 'Se débloquer eux-mêmes',
 'right-protect' => 'Modifier le niveau de protection des pages et modifier les pages protégées',
 'right-editprotected' => 'Modifier les pages protégées (sans protection en cascade)',
-'right-editinterface' => 'Modifier l’interface utilisateur',
-'right-editusercssjs' => 'Modifier les fichiers CSS et JavaScript d’autres utilisateurs',
-'right-editusercss' => 'Modifier les fichiers CSS d’autres utilisateurs',
-'right-edituserjs' => 'Modifier les fichiers JavaScript d’autres utilisateurs',
-'right-rollback' => 'Révoquer rapidement les modifications du dernier contributeur d’une page particulière',
+'right-editinterface' => "Modifier l'interface utilisateur",
+'right-editusercssjs' => "Modifier les fichiers CSS et JavaScript d'autres utilisateurs",
+'right-editusercss' => "Modifier les fichiers CSS d'autres utilisateurs",
+'right-edituserjs' => "Modifier les fichiers JavaScript d'autres utilisateurs",
+'right-rollback' => "Révoquer rapidement les modifications du dernier contributeur d'une page particulière",
 'right-markbotedits' => 'Marquer des modifications révoquées comme ayant été faites par un robot.',
 'right-noratelimit' => 'Ne pas être affecté par les limites de taux',
-'right-import' => 'Importer des pages depuis d’autres wikis',
+'right-import' => "Importer des pages depuis d'autres wikis",
 'right-importupload' => 'Importer des pages depuis un fichier',
 'right-patrol' => 'Marquer des modifications des autres comme vérifiées',
 'right-autopatrol' => 'Avoir ses modifications automatiquement marquées comme surveillées',
 'right-patrolmarks' => 'Voir les marquages de surveillance dans les modifications récentes',
 'right-unwatchedpages' => 'Voir la liste des pages non suivies',
 'right-mergehistory' => 'Fusionner les historiques des pages',
-'right-userrights' => 'Modifier tous les droits d’un utilisateur',
-'right-userrights-interwiki' => 'Modifier les droits d’utilisateurs qui sont sur un autre wiki',
+'right-userrights' => "Modifier tous les droits d'un utilisateur",
+'right-userrights-interwiki' => "Modifier les droits d'utilisateurs qui sont sur un autre wiki",
 'right-siteadmin' => 'Verrouiller ou déverrouiller la base de données',
-'right-override-export-depth' => 'Exporter les pages en incluant les pages liées jusqu’à une profondeur de 5 niveaux',
+'right-override-export-depth' => "Exporter les pages en incluant les pages liées jusqu'à une profondeur de 5 niveaux",
 '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)',
+'rightslog' => "Journal des modifications de droits d'utilisateurs",
+'rightslogtext' => "Voici l'historique des modifications des droits des utilisateurs.",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lire cette page',
@@ -1671,16 +1678,16 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'action-minoredit' => 'marquer cette modification comme mineure',
 'action-move' => 'renommer cette page',
 'action-move-subpages' => 'renommer cette page et ses sous-pages',
-'action-move-rootuserpages' => 'renommer la page principale d’un utilisateur',
+'action-move-rootuserpages' => "renommer la page principale d'un utilisateur",
 'action-movefile' => 'renommer ce fichier',
 'action-upload' => 'importer ce fichier',
 'action-reupload' => 'écraser ce fichier existant',
 'action-reupload-shared' => 'outrepasser localement ce fichier présent sur un dépôt partagé',
-'action-upload_by_url' => 'importer ce fichier à partir d’une adresse URL',
-'action-writeapi' => 'utiliser l‘API d’écriture',
+'action-upload_by_url' => "importer ce fichier à partir d'une adresse URL",
+'action-writeapi' => "utiliser l‘API d'écriture",
 'action-delete' => 'supprimer cette page',
 'action-deleterevision' => 'supprimer cette version',
-'action-deletedhistory' => 'voir l’historique supprimé de cette page',
+'action-deletedhistory' => "voir l'historique supprimé de cette page",
 'action-browsearchive' => 'rechercher des pages supprimées',
 'action-undelete' => 'restaurer cette page',
 'action-suppressrevision' => 'visionner et rétablir cette version supprimée',
@@ -1688,14 +1695,14 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'action-block' => 'bloquer en écriture cet utilisateur',
 'action-protect' => 'modifier les niveaux de protection pour cette page',
 'action-rollback' => 'annuler rapidement les modifications du dernier utilisateur qui a modifié une page donnée',
-'action-import' => 'importer cette page à partir d’un autre wiki',
-'action-importupload' => 'importer cette page à partir d’un fichier',
+'action-import' => "importer cette page à partir d'un autre wiki",
+'action-importupload' => "importer cette page à partir d'un fichier",
 'action-patrol' => 'marquer la modification des autres comme relue',
 'action-autopatrol' => 'avoir votre modification marquée comme relue',
 'action-unwatchedpages' => 'voir la liste des pages non suivies',
-'action-mergehistory' => 'fusionner l’historique de cette page',
-'action-userrights' => 'modifier tous les droits d’utilisateur',
-'action-userrights-interwiki' => 'modifier les droits des utilisateurs sur d’autres wikis',
+'action-mergehistory' => "fusionner l'historique de cette page",
+'action-userrights' => "modifier tous les droits d'utilisateur",
+'action-userrights-interwiki' => "modifier les droits des utilisateurs sur d'autres wikis",
 'action-siteadmin' => 'verrouiller ou déverrouiller la base de données',
 'action-sendemail' => 'envoyer des courriels',
 
@@ -1708,8 +1715,8 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'recentchanges-label-newpage' => 'Cette modification a créé une nouvelle page',
 'recentchanges-label-minor' => 'Cette modification est mineure',
 'recentchanges-label-bot' => 'Cette modification a été effectuée par un robot.',
-'recentchanges-label-unpatrolled' => 'Cette modification n’a pas encore été patrouillée.',
-'rcnote' => 'Voici {{PLURAL:$1|la dernière modification effectuée|les $1 dernières modifications effectuées}} durant {{PLURAL:$2|la dernière journée|les <b>$2</b> derniers jours}} jusqu’à $5 le $4.',
+'recentchanges-label-unpatrolled' => "Cette modification n'a pas encore été patrouillée.",
+'rcnote' => "Voici {{PLURAL:$1|la dernière modification effectuée|les $1 dernières modifications effectuées}} durant {{PLURAL:$2|la dernière journée|les <b>$2</b> derniers jours}} jusqu'à $5 le $4.",
 'rcnotefrom' => "Voici les modifications effectuées depuis le '''$2''' ('''$1''' au maximum).",
 'rclistfrom' => 'Afficher les nouvelles modifications depuis le $1.',
 'rcshowhideminor' => '$1 les modifications mineures',
@@ -1740,35 +1747,35 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'recentchangeslinked-feed' => 'Suivi des pages liées',
 'recentchangeslinked-toolbox' => 'Suivi des pages liées',
 'recentchangeslinked-title' => 'Suivi des pages associées à « $1 »',
-'recentchangeslinked-noresult' => 'Il n’y a pas de modification des pages liées pendant la période choisie.',
+'recentchangeslinked-noresult' => "Il n'y a pas de modification des pages liées pendant la période choisie.",
 'recentchangeslinked-summary' => "Cette page spéciale montre les modifications récentes sur les pages qui sont liées. Les pages de votre liste de suivi sont '''en gras'''.",
 'recentchangeslinked-page' => 'Nom de la page :',
-'recentchangeslinked-to' => 'Afficher les modifications des pages qui comportent un lien vers la page donnée plutôt que l’inverse',
+'recentchangeslinked-to' => "Afficher les modifications des pages qui comportent un lien vers la page donnée plutôt que l'inverse",
 
 # Upload
 'upload' => 'Importer un fichier',
 'uploadbtn' => 'Importer le fichier',
-'reuploaddesc' => 'Annuler et retourner au formulaire d’import',
+'reuploaddesc' => "Annuler et retourner au formulaire d'import",
 'upload-tryagain' => 'Envoyer la description du fichier modifiée',
 'uploadnologin' => 'Non connecté(e)',
 'uploadnologintext' => 'Vous devez être [[Special:UserLogin|connecté(e)]] pour importer des fichiers sur le serveur.',
-'upload_directory_missing' => 'Le répertoire d’import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.',
-'upload_directory_read_only' => 'Le répertoire d’import de fichier ($1) n’est pas accessible en écriture depuis le serveur web.',
-'uploaderror' => 'Erreur lors de l’import',
+'upload_directory_missing' => "Le répertoire d'import de fichier ($1) est introuvable et n'a pas pu être créé par le serveur web.",
+'upload_directory_read_only' => "Le répertoire d'import de fichier ($1) n'est pas accessible en écriture depuis le serveur web.",
+'uploaderror' => "Erreur lors de l'import",
 'upload-recreate-warning' => "'''Attention : Un fichier portant ce nom a été supprimé ou déplacé.'''
 
 Le journal des suppressions et celui des déplacements de cette page sont affichés ici pour informations :",
 'uploadtext' => "Utilisez ce formulaire pour importer des fichiers sur le serveur.
-Pour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. Limport est aussi enregistrés dans le [[Special:Log/upload|journal d'import des fichiers]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].
+Pour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. L'import est aussi enregistrés dans le [[Special:Log/upload|journal d'import des fichiers]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].
 
 Pour inclure un fichier dans une page, utilisez un lien de la forme :
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code>''', pour afficher le fichier en pleine résolution (dans le cas dune image) ;
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code>''', pour afficher le fichier en pleine résolution (dans le cas d'une image) ;
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.png|200px|thumb|left|texte descriptif]]</nowiki></code>''' pour utiliser une miniature de 200 pixels de large dans une boîte à gauche avec « texte descriptif » comme description ;
-* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fichier.ogg]]</nowiki></code>''' pour lier directement vers le fichier sans lafficher.",
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fichier.ogg]]</nowiki></code>''' pour lier directement vers le fichier sans l'afficher.",
 'upload-permitted' => 'Formats de fichiers autorisés : $1.',
 'upload-preferred' => 'Formats de fichiers préférés : $1.',
 'upload-prohibited' => 'Formats de fichiers interdits : $1.',
-'uploadlog' => 'Journal d’import de fichiers',
+'uploadlog' => "Journal d'import de fichiers",
 'uploadlogpage' => "Journal d'import de fichiers",
 'uploadlogpagetext' => 'Voici la liste des derniers fichiers importés sur le serveur.
 Voyez la [[Special:NewFiles|galerie des nouvelles images]] pour une présentation plus visuelle.',
@@ -1776,62 +1783,62 @@ Voyez la [[Special:NewFiles|galerie des nouvelles images]] pour une présentatio
 'filedesc' => 'Description',
 'fileuploadsummary' => 'Description :',
 'filereuploadsummary' => 'Modifications du fichier :',
-'filestatus' => 'Statut du droit d’auteur :',
+'filestatus' => "Statut du droit d'auteur :",
 'filesource' => 'Source :',
 'uploadedfiles' => 'Fichiers importés',
-'ignorewarning' => 'Ignorer l’avertissement et sauvegarder le fichier quand même',
+'ignorewarning' => "Ignorer l'avertissement et sauvegarder le fichier quand même",
 'ignorewarnings' => 'Ignorer les avertissements',
 'minlength1' => 'Le noms de fichiers doivent comprendre au moins une lettre.',
 'illegalfilename' => "Le nom de fichier « $1 » contient des caractères interdits dans les titres de pages. Merci de le renommer et de l'importer à nouveau.",
 'filename-toolong' => 'Le nom du fichier ne peut pas dépasser 240 octets.',
 'badfilename' => 'Le fichier a été renommé en « $1 ».',
-'filetype-mime-mismatch' => 'L’extension du fichier « .$1 » ne correspond pas au type MIME détecté du fichier ($2).',
+'filetype-mime-mismatch' => "L'extension du fichier « .$1 » ne correspond pas au type MIME détecté du fichier ($2).",
 'filetype-badmime' => 'Les fichiers du type MIME « $1 » ne peuvent pas être importés.',
-'filetype-bad-ie-mime' => 'Le fichier ne peut pas être importé parce qu’il serait détecté comme « $1 » par Internet Explorer, ce qui correspond à un type de fichier interdit car potentiellement dangereux.',
+'filetype-bad-ie-mime' => "Le fichier ne peut pas être importé parce qu'il serait détecté comme « $1 » par Internet Explorer, ce qui correspond à un type de fichier interdit car potentiellement dangereux.",
 'filetype-unwanted-type' => "'''« .$1 »''' est un format de fichier non désiré.
 {{PLURAL:$3|Le type de fichier préconisé est|Les types de fichiers préconisés sont}} $2.",
-'filetype-banned-type' => "''' « .$1 » '''{{PLURAL:$4|nest pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. 
+'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.",
-'filetype-missing' => 'Le fichier n’a aucune extension (comme « .jpg » par exemple).',
+'filetype-missing' => "Le fichier n'a aucune extension (comme « .jpg » par exemple).",
 'empty-file' => 'Le fichier que vous avez soumis était vide.',
 'file-too-large' => 'Le fichier que vous avez soumis était trop grand.',
 'filename-tooshort' => 'Le nom du fichier est trop court.',
 'filetype-banned' => 'Ce type de fichier est interdit.',
 'verification-error' => 'Ce fichier ne passe pas la vérification des fichiers.',
 'hookaborted' => 'La modification que vous avez essayé de faire a été annulée par une extension.',
-'illegal-filename' => 'Le nom du fichier n’est pas autorisé.',
-'overwrite' => 'Écraser un fichier existant n’est pas autorisé.',
-'unknown-error' => 'Une erreur inconnue s’est produite.',
+'illegal-filename' => "Le nom du fichier n'est pas autorisé.",
+'overwrite' => "Écraser un fichier existant n'est pas autorisé.",
+'unknown-error' => "Une erreur inconnue s'est produite.",
 'tmp-create-error' => 'Impossible de créer le fichier temporaire.',
-'tmp-write-error' => 'Erreur d’écriture du fichier temporaire.',
+'tmp-write-error' => "Erreur d'écriture du fichier temporaire.",
 'large-file' => 'Les fichiers importés ne devraient pas dépasser $1 ; ce fichier fait $2.',
 'largefileserver' => 'La taille de ce fichier est supérieure au maximum autorisé.',
 'emptyfile' => 'Le fichier que vous voulez importer semble vide.
 Ceci peut être dû à une erreur dans le nom du fichier.
 Veuillez vérifier que vous désirez vraiment importer ce fichier.',
 'windows-nonascii-filename' => 'Ce wiki ne supporte pas les noms de fichiers avec des caractères spéciaux.',
-'fileexists' => 'Un fichier existe déjà sous ce nom.
-Merci de vérifier <strong>[[:$1]]</strong> si vous nêtes pas certain{{GENDER:||e|}} de vouloir le modifier.
-[[$1|thumb]]',
-'filepageexists' => 'La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n’existe actuellement sous ce nom.
-Le résumé que vous allez spécifier napparaîtra pas sur la page de description.
-Pour que ce soit le cas, vous devrez modifier manuellement la page. [[$1|thumb]]',
+'fileexists' => "Un fichier existe déjà sous ce nom.
+Merci de vérifier <strong>[[:$1]]</strong> si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le modifier.
+[[$1|thumb]]",
+'filepageexists' => "La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n'existe actuellement sous ce nom.
+Le résumé que vous allez spécifier n'apparaîtra pas sur la page de description.
+Pour que ce soit le cas, vous devrez modifier manuellement la page. [[$1|thumb]]",
 'fileexists-extension' => 'Un fichier existe avec un nom proche : [[$2|thumb]]
 * Nom du fichier à importer : <strong>[[:$1]]</strong>
 * Nom du fichier existant : <strong>[[:$2]]</strong>
 Veuillez choisir un autre nom.',
 'fileexists-thumbnail-yes' => "Le fichier semble être une image en taille réduite ''(vignette)''. [[$1|thumb]]
 Veuillez vérifier le fichier <strong>[[:$1]]</strong>.
-Si le fichier vérifié est la même image avec la taille initiale, il n’y a pas besoin d’importer une version réduite.",
+Si le fichier vérifié est la même image avec la taille initiale, il n'y a pas besoin d'importer une version réduite.",
 '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)''.
+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]]',
+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}} :',
-'file-deleted-duplicate' => 'Un fichier identique à celui-ci ([[:$1]]) a déjà été supprimé. Vous devriez vérifier le journal des suppressions de ce fichier avant de l’importer à nouveau.',
+'file-deleted-duplicate' => "Un fichier identique à celui-ci ([[:$1]]) a déjà été supprimé. Vous devriez vérifier le journal des suppressions de ce fichier avant de l'importer à nouveau.",
 'uploadwarning' => 'Attention !',
 'uploadwarning-text' => 'Modifiez la description du fichier et essayez de nouveau.',
 'savefile' => 'Sauvegarder le fichier',
@@ -1839,9 +1846,9 @@ Si vous voulez toujours importer votre fichier, veuillez revenir en arrière et
 'overwroteimage' => 'a importé une nouvelle version de « [[$1]] »',
 'uploaddisabled' => "Désolé, l'import de fichiers est désactivé.",
 'copyuploaddisabled' => 'Import de fichier par URL désactivé.',
-'uploadfromurl-queued' => 'Votre fichier a été mis dans la file d’attente.',
+'uploadfromurl-queued' => "Votre fichier a été mis dans la file d'attente.",
 'uploaddisabledtext' => "L'import de fichiers est désactivé sur ce wiki.",
-'php-uploaddisabledtext' => "L'import de fichiers a été désactivé dans PHP. Vérifiez loption de configuration file_uploads.",
+'php-uploaddisabledtext' => "L'import de fichiers a été désactivé dans PHP. Vérifiez l'option de configuration file_uploads.",
 'uploadscripted' => 'Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur web.',
 'uploadvirus' => 'Ce fichier contient un virus ! Pour plus de détails, consultez : $1',
 'uploadjava' => "C'est un fichier ZIP qui contient un fichier Java .class.
@@ -1854,8 +1861,8 @@ Le téléchargement de fichiers Java n'est pas autorisé, car ils peuvent contou
 'upload-description' => 'Description du fichier',
 '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.',
+'filewasdeleted' => "Un fichier avec ce nom a déjà été importé, puis supprimé.
+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>
@@ -1887,9 +1894,9 @@ $1',
 'upload-file-error-text' => 'Une erreur interne est survenue en voulant créer un fichier temporaire sur le serveur. Veuillez contacter un [[Special:ListUsers/sysop|administrateur]].',
 'upload-misc-error' => "Erreur d'import inconnue",
 'upload-misc-error-text' => "Une erreur inconnue est survenue pendant l'import.
-Veuillez vérifier que lURL est valide et accessible, puis essayer à nouveau.
+Veuillez vérifier que l'URL est valide et accessible, puis essayer à nouveau.
 Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]].",
-'upload-too-many-redirects' => 'L’URL contient trop de redirections.',
+'upload-too-many-redirects' => "L'URL contient trop de redirections.",
 'upload-unknown-size' => 'Taille inconnue',
 'upload-http-error' => 'Une erreur HTTP est survenue : $1',
 'upload-copy-upload-invalid-domain' => "La copie des téléchargements n'est pas disponible depuis ce domaine.",
@@ -1900,8 +1907,9 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'backend-fail-notexists' => "Le fichier $1 n'existe pas.",
 'backend-fail-hashes' => "Impossible d'obtenir les hachages du fichier pour comparaison.",
 'backend-fail-notsame' => 'Un fichier différent existe déjà pour $1 .',
-'backend-fail-invalidpath' => '$1 n’est pas un chemin de stockage valide.',
+'backend-fail-invalidpath' => "$1 n'est pas un chemin de stockage valide.",
 'backend-fail-delete' => 'Impossible de supprimer le fichier $1.',
+'backend-fail-describe' => 'Impossible de modifier les métadonnées du fichier "$1".',
 'backend-fail-alreadyexists' => 'Le fichier $1 existe déjà.',
 'backend-fail-store' => 'Impossible de stocker le fichier $1 en $2.',
 'backend-fail-copy' => 'Impossible de copier le fichier $1 en $2.',
@@ -1910,26 +1918,26 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'backend-fail-writetemp' => "Impossible d'écrire dans le fichier temporaire.",
 'backend-fail-closetemp' => 'Impossible de fermer le fichier temporaire.',
 'backend-fail-read' => 'Impossible de lire le fichier $1.',
-'backend-fail-create' => 'Impossible d’écrire le fichier $1.',
-'backend-fail-maxsize' => "Impossible décrire le fichier $1 parce qu'il est plus grand {{PLURAL:$2|qu'un octet|que $2 octets}}.",
+'backend-fail-create' => "Impossible d'écrire le fichier $1.",
+'backend-fail-maxsize' => "Impossible d'écrire le fichier $1 parce qu'il est plus grand {{PLURAL:$2|qu'un octet|que $2 octets}}.",
 'backend-fail-readonly' => 'Le support de stockage "$1" est actuellement en lecture seule. La raison indiquée est: "$2"',
 'backend-fail-synced' => 'Le fichier "$1" est dans un état incohérent dans les supports de stockage internes',
 'backend-fail-connect' => 'Impossible de se connecter au support de stockage "$1".',
 'backend-fail-internal' => 'Une erreur inconnue s\'est produite dans le support de stockage "$1".',
 'backend-fail-contenttype' => 'Impossible de déterminer le type de contenu du fichier à stocker en "$1".',
 'backend-fail-batchsize' => 'Le support de stockage a fourni un lot de $1 {{PLURAL:$1|opération|opérations}} de fichier; la limite est $2 {{PLURAL:$2|opération|opérations}}.',
-'backend-fail-usable' => 'Impossible de lire ou d’écrire le fichier « $1 » en raison de droits insuffisants ou répertoires/conteneurs manquants.',
+'backend-fail-usable' => "Impossible de lire ou d'écrire le fichier « $1 » en raison de droits insuffisants ou répertoires/conteneurs manquants.",
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Impossible de se connecter à la base de données du journal pour le terminal de stockage "$1".',
 'filejournal-fail-dbquery' => 'Impossible de mettre à jour la base de données du journal pour le terminal de stockage "$1".',
 
 # Lock manager
-'lockmanager-notlocked' => 'Impossible de déverrouiller « $1 » ; elle n’est pas verrouillée.',
+'lockmanager-notlocked' => "Impossible de déverrouiller « $1 » ; elle n'est pas verrouillée.",
 'lockmanager-fail-closelock' => 'Impossible de fermer le fichier de verrou pour « $1 ».',
 'lockmanager-fail-deletelock' => 'Impossible de supprimer le fichier de verrou pour « $1 ».',
-'lockmanager-fail-acquirelock' => 'Impossible d’obtenir le verrou pour « $1 ».',
-'lockmanager-fail-openlock' => 'Impossible d’ouvrir le fichier de verrou pour « $1» .',
+'lockmanager-fail-acquirelock' => "Impossible d'obtenir le verrou pour « $1 ».",
+'lockmanager-fail-openlock' => "Impossible d'ouvrir le fichier de verrou pour « $1» .",
 'lockmanager-fail-releaselock' => 'Impossible de relâcher le verrou pour « $1 ».',
 'lockmanager-fail-db-bucket' => 'Impossible de contacter suffisamment de bases de données de verrouillage dans le godet $1.',
 'lockmanager-fail-db-release' => 'Impossible de relâcher les verrous sur la base de données $1.',
@@ -1937,8 +1945,8 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'lockmanager-fail-svr-release' => 'Impossible de relâcher les verrous sur le serveur $1.',
 
 # ZipDirectoryReader
-'zip-file-open-error' => 'Une erreur s’est produite lors de l’ouverture du fichier ZIP pour contrôle.',
-'zip-wrong-format' => 'Le fichier spécifié n’est pas une archive ZIP.',
+'zip-file-open-error' => "Une erreur s'est produite lors de l'ouverture du fichier ZIP pour contrôle.",
+'zip-wrong-format' => "Le fichier spécifié n'est pas une archive ZIP.",
 'zip-bad' => 'Le fichier est une archive ZIP corrompue ou illisible.
 Il ne peut pas être correctement vérifié pour la sécurité.',
 'zip-unsupported' => 'Le fichier est une archive ZIP qui utilise des caractéristiques non supportées par MediaWiki. 
@@ -1956,36 +1964,36 @@ Sa sécurité ne peut pas être correctement vérifiée.',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Accès refusé',
-'img-auth-nopathinfo' => 'PATH_INFO manquant.
-Votre serveur nest pas paramétré pour passer cette information.
+'img-auth-nopathinfo' => "PATH_INFO manquant.
+Votre serveur n'est pas paramétré pour passer cette information.
 Il fonctionne peut-être en CGI et ne supporte pas img_auth.
-Voyez https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
-'img-auth-notindir' => "Le chemin demandé nest pas le répertoire d'import configuré.",
+Voyez https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
+'img-auth-notindir' => "Le chemin demandé n'est pas le répertoire d'import configuré.",
 'img-auth-badtitle' => 'Impossible de construire un titre valide à partir de « $1 ».',
-'img-auth-nologinnWL' => 'Vous n’êtes pas connecté et « $1 » n’est pas dans la liste blanche.',
-'img-auth-nofile' => 'Le fichier « $1 » n’existe pas.',
-'img-auth-isdir' => 'Vous essayez d’accéder au répertoire « $1 ».
-Seul l’accès aux fichiers est permis.',
+'img-auth-nologinnWL' => "Vous n'êtes pas connecté et « $1 » n'est pas dans la liste blanche.",
+'img-auth-nofile' => "Le fichier « $1 » n'existe pas.",
+'img-auth-isdir' => "Vous essayez d'accéder au répertoire « $1 ».
+Seul l'accès aux fichiers est permis.",
 'img-auth-streaming' => 'Lecture en continu de « $1 ».',
-'img-auth-public' => 'La fonction de img_auth.php est d’afficher des fichiers d’un wiki privé.
+'img-auth-public' => "La fonction de img_auth.php est d'afficher des fichiers d'un wiki privé.
 Ce wiki est configuré comme un wiki public.
-Pour une sécurité optimale, img_auth.php est désactivé.',
-'img-auth-noread' => 'L’utilisateur n’a pas le droit en lecture sur « $1 ».',
+Pour une sécurité optimale, img_auth.php est désactivé.",
+'img-auth-noread' => "L'utilisateur n'a pas le droit en lecture sur « $1 ».",
 'img-auth-bad-query-string' => "L'URL a une chaîne de requête invalide.",
 
 # HTTP errors
 'http-invalid-url' => 'URL incorrecte : $1',
 'http-invalid-scheme' => 'Les URL avec le schéma « $1 » ne sont pas supportées.',
-'http-request-error' => 'Erreur inconnue lors de l’envoi de la requête.',
+'http-request-error' => "Erreur inconnue lors de l'envoi de la requête.",
 'http-read-error' => 'Erreur de lecture HTTP.',
 'http-timed-out' => 'La requête HTTP a expiré.',
-'http-curl-error' => 'Erreur lors de la récupération de l’URL : $1',
-'http-host-unreachable' => 'Impossible d’atteindre l’URL.',
+'http-curl-error' => "Erreur lors de la récupération de l'URL : $1",
+'http-host-unreachable' => "Impossible d'atteindre l'URL.",
 'http-bad-status' => 'Il y a eu un problème lors de la requête HTTP : $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL injoignable',
-'upload-curl-error6-text' => 'L’URL fournie ne peut pas être atteinte. Veuillez vérifier que l’URL est correcte et que le site est en ligne.',
+'upload-curl-error6-text' => "L'URL fournie ne peut pas être atteinte. Veuillez vérifier que l'URL est correcte et que le site est en ligne.",
 'upload-curl-error28' => "Dépassement du délai lors de l'import",
 'upload-curl-error28-text' => 'Le site a mis trop longtemps à répondre. Vérifiez que le site est en ligne, attendez un peu et réessayez. Vous pouvez aussi réessayer à une heure de moindre affluence.',
 
@@ -2013,7 +2021,7 @@ Quand elle est filtrée par utilisateur, seuls les fichiers dont la version la p
 # File description page
 'file-anchor-link' => 'Fichier',
 'filehist' => 'Historique du fichier',
-'filehist-help' => 'Cliquer sur une date et heure pour voir le fichier tel qu’il était à ce moment-là.',
+'filehist-help' => "Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.",
 'filehist-deleteall' => 'supprimer tout',
 'filehist-deleteone' => 'supprimer',
 'filehist-revert' => 'rétablir',
@@ -2029,24 +2037,24 @@ Quand elle est filtrée par utilisateur, seuls les fichiers dont la version la p
 'filehist-missing' => 'Fichier manquant',
 'imagelinks' => 'Utilisation du fichier',
 'linkstoimage' => '{{PLURAL:$1|La page suivante utilise|Les $1 pages suivantes utilisent}} ce fichier :',
-'linkstoimage-more' => 'Plus {{PLURAL:$1|d’une page utilise|de $1 pages utilisent}} ce fichier.
+'linkstoimage-more' => "Plus {{PLURAL:$1|d'une page utilise|de $1 pages utilisent}} ce fichier.
 La liste suivante affiche seulement {{PLURAL:$1|la première page qui utilise|les $1 premières pages qui utilisent}} ce fichier.
-Une [[Special:WhatLinksHere/$2|liste complète]] est disponible.',
-'nolinkstoimage' => 'Aucune page n’utilise ce fichier.',
+Une [[Special:WhatLinksHere/$2|liste complète]] est disponible.",
+'nolinkstoimage' => "Aucune page n'utilise ce fichier.",
 'morelinkstoimage' => 'Voir [[Special:WhatLinksHere/$1|plus de liens]] vers ce fichier.',
 'linkstoimage-redirect' => '$1 (redirection de fichier) $2',
 'duplicatesoffile' => '{{PLURAL:$1|Le fichier suivant est un duplicata|Les fichiers suivants sont des duplicatas}} de celui-ci ([[Special:FileDuplicateSearch/$2|plus de détails]]) :',
-'sharedupload' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.',
-'sharedupload-desc-there' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.
-Veuillez consulter [$2 sa page de description] pour plus d’informations.',
-'sharedupload-desc-here' => 'Ce fichier provient de $1. Il peut être utilisé par d’autres projets.
-Sa description sur sa [$2 page de description] est affichée ci-dessous.',
-'sharedupload-desc-edit' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.
-Vous voulez peut-être modifier la description sur sa [$2 page de description].',
-'sharedupload-desc-create' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.
-Vous voulez peut-être modifier la description sur sa [$2 page de description].',
+'sharedupload' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.",
+'sharedupload-desc-there' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.
+Veuillez consulter [$2 sa page de description] pour plus d'informations.",
+'sharedupload-desc-here' => "Ce fichier provient de $1. Il peut être utilisé par d'autres projets.
+Sa description sur sa [$2 page de description] est affichée ci-dessous.",
+'sharedupload-desc-edit' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.
+Vous voulez peut-être modifier la description sur sa [$2 page de description].",
+'sharedupload-desc-create' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.
+Vous voulez peut-être modifier la description sur sa [$2 page de description].",
 'filepage-nofile' => 'Aucun fichier de ce nom existe.',
-'filepage-nofile-link' => 'Aucun fichier de ce nom n’existe, mais vous pouvez [$1 en importer un].',
+'filepage-nofile-link' => "Aucun fichier de ce nom n'existe, mais vous pouvez [$1 en importer un].",
 'uploadnewversion-linktext' => 'Importer une nouvelle version de ce fichier',
 'shared-repo-from' => 'de : $1',
 'shared-repo' => 'un dépôt partagé',
@@ -2062,24 +2070,24 @@ Vous voulez peut-être modifier la description sur sa [$2 page de description].'
 'filerevert-defaultcomment' => 'Version du $1 à $2 rétablie',
 'filerevert-submit' => 'Rétablir',
 'filerevert-success' => "'''[[Media:$1|$1]]''' a été rétabli à [$4 la version du $2 à $3].",
-'filerevert-badversion' => 'Il n’y a pas localement de version antérieure du fichier qui porte la date indiquée.',
+'filerevert-badversion' => "Il n'y a pas localement de version antérieure du fichier qui porte la date indiquée.",
 
 # File deletion
 'filedelete' => 'Supprimer $1',
 'filedelete-legend' => 'Supprimer le fichier',
 'filedelete-intro' => "Vous êtes sur le point de supprimer '''[[Media:$1|$1]]''' ainsi que tout son historique.",
-'filedelete-intro-old' => "Vous êtes en train deffacer la version de '''[[Media:$1|$1]]''' du [$4 $2 à $3].",
+'filedelete-intro-old' => "Vous êtes en train d'effacer la version de '''[[Media:$1|$1]]''' du [$4 $2 à $3].",
 'filedelete-comment' => 'Motif :',
 'filedelete-submit' => 'Supprimer',
 'filedelete-success' => "'''$1''' a été supprimé.",
 'filedelete-success-old' => "La version de '''[[Media:$1|$1]]''' du $2 à $3 a été supprimée.",
-'filedelete-nofile' => "'''$1''' nexiste pas.",
-'filedelete-nofile-old' => "Il nexiste aucune version archivée de '''$1''' avec les attributs indiqués.",
+'filedelete-nofile' => "'''$1''' n'existe pas.",
+'filedelete-nofile-old' => "Il n'existe aucune version archivée de '''$1''' avec les attributs indiqués.",
 'filedelete-otherreason' => 'Motif autre / supplémentaire :',
 'filedelete-reason-otherlist' => 'Autre motif',
-'filedelete-reason-dropdown' => '* Motifs fréquents de suppression de fichiers
-** Violation du droit dauteur
-** Fichier dupliqué',
+'filedelete-reason-dropdown' => "* Motifs fréquents de suppression de fichiers
+** Violation du droit d'auteur
+** Fichier dupliqué",
 'filedelete-edit-reasonlist' => 'Modifier les motifs fréquents de suppression',
 'filedelete-maintenance' => 'La suppression et restauration de fichiers est temporairement désactivée durant la maintenance.',
 'filedelete-maintenance-title' => 'Impossible de supprimer le fichier',
@@ -2092,24 +2100,24 @@ Entrée : ''typedecontenu''/''sous-type'', par exemple <code>image/jpeg</code>."
 'download' => 'télécharger',
 
 # Unwatched pages
-'unwatchedpages' => 'Pages ne faisant partie d’aucune liste de suivi',
+'unwatchedpages' => "Pages ne faisant partie d'aucune liste de suivi",
 
 # List redirects
 'listredirects' => 'Liste des redirections',
 
 # Unused templates
 'unusedtemplates' => 'Modèles inutilisés',
-'unusedtemplatestext' => 'Cette page liste toutes les pages de l’espace de noms « {{ns:template}} » qui ne sont incluses dans aucune autre page.
-N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèles avant de les supprimer.',
+'unusedtemplatestext' => "Cette page liste toutes les pages de l'espace de noms « {{ns:template}} » qui ne sont incluses dans aucune autre page.
+N'oubliez pas de vérifier s'il n'y a pas d'autres liens vers les modèles avant de les supprimer.",
 'unusedtemplateswlh' => 'autres liens',
 
 # Random page
 'randompage' => 'Page au hasard',
-'randompage-nopages' => 'Il n’y a aucune page dans {{PLURAL:$2|l’espace de noms|les espaces de noms}} : $1.',
+'randompage-nopages' => "Il n'y a aucune page dans {{PLURAL:$2|l'espace de noms|les espaces de noms}} : $1.",
 
 # Random redirect
 'randomredirect' => 'Page de redirection au hasard',
-'randomredirect-nopages' => 'Il n’y a aucune page de redirection dans l’espace de noms « $1 ».',
+'randomredirect-nopages' => "Il n'y a aucune page de redirection dans l'espace de noms « $1 ».",
 
 # Statistics
 'statistics' => 'Statistiques',
@@ -2121,8 +2129,8 @@ N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèl
 '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-edits' => 'Modifications de pages depuis l’installation de {{SITENAME}}',
+'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',
 'statistics-views-total-desc' => 'Les vues des pages non existantes et des pages spéciales ne sont pas incluses',
@@ -2132,11 +2140,11 @@ N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèl
 'statistics-users-active-desc' => 'Utilisateurs ayant fait au moins une action durant {{PLURAL:$1|le dernier jours|les $1 derniers jours}}',
 'statistics-mostpopular' => 'Pages les plus consultées',
 
-'disambiguations' => 'Pages ayant des liens vers des pages d’homonymie',
+'disambiguations' => "Pages ayant des liens vers des pages d'homonymie",
 'disambiguationspage' => 'Template:Homonymie',
-'disambiguations-text' => "Les pages suivantes comportent au moins un lien vers une '''page dhomonymie'''.
+'disambiguations-text' => "Les pages suivantes comportent au moins un lien vers une '''page d'homonymie'''.
 Elles devraient plutôt pointer vers le bon article.<br />
-Une page est considérée comme une page dhomonymie si elle utilise un modèle lié à [[MediaWiki:Disambiguationspage]]",
+Une page est considérée comme une page d'homonymie si elle utilise un modèle lié à [[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'Doubles redirections',
 'doubleredirectstext' => 'Voici une liste des pages qui redirigent vers des pages qui sont elles-mêmes des pages de redirection.
@@ -2152,7 +2160,7 @@ Les entrées <del>barrées</del> ont été résolues.',
 'brokenredirects-delete' => 'supprimer',
 
 'withoutinterwiki' => 'Pages sans liens inter-langues',
-'withoutinterwiki-summary' => 'Les pages suivantes ne possèdent pas de liens vers d’autres langues :',
+'withoutinterwiki-summary' => "Les pages suivantes ne possèdent pas de liens vers d'autres langues :",
 'withoutinterwiki-legend' => 'Préfixe',
 'withoutinterwiki-submit' => 'Afficher',
 
@@ -2168,9 +2176,9 @@ Les entrées <del>barrées</del> ont été résolues.',
 'nviews' => '$1 consultation{{PLURAL:$1||s}}',
 'nimagelinks' => 'Utilisé sur $1 {{PLURAL:$1|page|pages}}',
 'ntransclusions' => 'Utilisé sur $1 {{PLURAL:$1|page|pages}}',
-'specialpage-empty' => 'Il n’y a aucun résultat à afficher.',
+'specialpage-empty' => "Il n'y a aucun résultat à afficher.",
 'lonelypages' => 'Pages orphelines',
-'lonelypagestext' => 'Les pages suivantes ne sont ni pointées, ni incluses par d’autres pages du wiki.',
+'lonelypagestext' => "Les pages suivantes ne sont ni pointées, ni incluses par d'autres pages du wiki.",
 'uncategorizedpages' => 'Pages sans catégories',
 'uncategorizedcategories' => 'Catégories sans catégories',
 'uncategorizedimages' => 'Fichiers sans catégories',
@@ -2182,8 +2190,8 @@ Les entrées <del>barrées</del> ont été résolues.',
 'wantedpages' => 'Pages les plus demandées',
 'wantedpages-badtitle' => 'Titre invalide dans les résultats : $1',
 'wantedfiles' => 'Fichiers les plus demandés',
-'wantedfiletext-cat' => "Les fichiers suivants sont utilisés, mais il n'existent pas. Les fichiers de dépôts à distance peuvent être listés malgré qu'ils existent. Tout ces faux positifs seront <del>barrés</del>. En outre, les pages qui intègrent des fichiers qui n'existent pas sont répertoriés dans [[:$1]].",
-'wantedfiletext-nocat' => "Les fichiers suivants sont utilisés, mais n'existent pas. Les fichiers de dépôts à distance peuvent être listés malgré qu'ils existent. Tout ces faux positifs seront <del>barrés</del>.",
+'wantedfiletext-cat' => "Les fichiers suivants sont utilisés, mais n'existent pas. Les fichiers d'autres dépôts peuvent être listés malgré qu'ils existent. Tous ces faux positifs seront <del>barrés</del>. En outre, les pages qui intègrent des fichiers qui n'existent pas sont répertoriées dans [[:$1]].",
+'wantedfiletext-nocat' => "Les fichiers suivants sont utilisés, mais n'existent pas. Les fichiers d'autres dépôts peuvent être listés malgré qu'ils existent. Tous ces faux positifs seront <del>barrés</del>.",
 'wantedtemplates' => 'Modèles demandés',
 'mostlinked' => 'Pages les plus liées',
 'mostlinkedcategories' => 'Catégories les plus utilisées',
@@ -2197,32 +2205,32 @@ Les entrées <del>barrées</del> ont été résolues.',
 'shortpages' => 'Pages courtes',
 'longpages' => 'Pages longues',
 'deadendpages' => 'Pages en impasse',
-'deadendpagestext' => 'Les pages suivantes ne contiennent aucun lien vers d’autres pages du wiki.',
+'deadendpagestext' => "Les pages suivantes ne contiennent aucun lien vers d'autres pages du wiki.",
 'protectedpages' => 'Pages protégées',
 'protectedpages-indef' => 'Uniquement les protections permanentes',
 'protectedpages-cascade' => 'Uniquement les protections en cascade',
 'protectedpagestext' => 'Les pages suivantes sont protégées contre les modifications ou le déplacement.',
-'protectedpagesempty' => 'Aucune page n’est protégée de cette façon.',
+'protectedpagesempty' => "Aucune page n'est protégée de cette façon.",
 'protectedtitles' => 'Titres protégés',
 'protectedtitlestext' => 'Les titres suivants sont protégés à la création',
-'protectedtitlesempty' => 'Aucun titre n’est actuellement protégé avec ces paramètres.',
+'protectedtitlesempty' => "Aucun titre n'est actuellement protégé avec ces paramètres.",
 'listusers' => 'Liste des utilisateurs',
 'listusers-editsonly' => 'Ne montrer que les utilisateurs ayant au moins une contribution',
 'listusers-creationsort' => 'Trier par date de création',
 'usereditcount' => '$1 modification{{PLURAL:$1||s}}',
 'usercreated' => '{{GENDER:$3|Créé}} le $1 à $2',
 'newpages' => 'Nouvelles pages',
-'newpages-username' => 'Nom d’utilisateur :',
+'newpages-username' => "Nom d'utilisateur :",
 'ancientpages' => 'Pages les plus anciennement modifiées',
 'move' => 'Renommer',
 'movethispage' => 'Renommer cette page',
-'unusedimagestext' => 'Les fichiers suivants existent, mais ne sont inclus dans aucune page.
-Veuillez noter que d’autres sites peuvent avoir un lien direct vers un fichier, et donc qu’un fichier peut être listé ici alors qu’il est en réalité utilisé sur ces sites.',
+'unusedimagestext' => "Les fichiers suivants existent, mais ne sont inclus dans aucune page.
+Veuillez noter que d'autres sites peuvent avoir un lien direct vers un fichier, et donc qu'un fichier peut être listé ici alors qu'il est en réalité utilisé sur ces sites.",
 'unusedcategoriestext' => 'Les catégories suivantes existent mais aucune page ou catégorie ne les utilise.',
 'notargettitle' => 'Pas de cible',
-'notargettext' => 'Vous n’avez pas indiqué une page ou un utilisateur sur lequel vous souhaitez effectuer cette action.',
+'notargettext' => "Vous n'avez pas indiqué une page ou un utilisateur sur lequel vous souhaitez effectuer cette action.",
 'nopagetitle' => 'Aucune telle page cible',
-'nopagetext' => 'La page cible que vous avez indiquée n’existe pas.',
+'nopagetext' => "La page cible que vous avez indiquée n'existe pas.",
 'pager-newer-n' => '{{PLURAL:$1|plus récente|$1 plus récentes}}',
 'pager-older-n' => '{{PLURAL:$1|plus ancienne|$1 plus anciennes}}',
 'suppress' => 'Superviser',
@@ -2233,16 +2241,16 @@ Veuillez noter que d’autres sites peuvent avoir un lien direct vers un fichier
 'booksources-search-legend' => 'Rechercher parmi des ouvrages de référence',
 'booksources-isbn' => 'ISBN :',
 'booksources-go' => 'Lister',
-'booksources-text' => 'Voici une liste indicative et non exclusive de liens vers d’autres sites vendant des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :',
-'booksources-invalid-isbn' => 'L’ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.',
+'booksources-text' => "Voici une liste indicative et non exclusive de liens vers d'autres sites vendant des livres neufs et d'occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :",
+'booksources-invalid-isbn' => "L'ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.",
 
 # Special:Log
 'specialloguserlabel' => 'Auteur :',
 'speciallogtitlelabel' => 'Cible (titre ou utilisateur):',
-'log' => 'Journaux d’opérations',
+'log' => "Journaux d'opérations",
 'all-logs-page' => 'Tous les journaux publics',
-'alllogstext' => 'Affichage combiné de tous les journaux disponibles sur {{SITENAME}}.<br />
-Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le nom d’utilisateur ou la page concernée (ces deux derniers étant sensibles à la casse).',
+'alllogstext' => "Affichage combiné de tous les journaux disponibles sur {{SITENAME}}.<br />
+Vous pouvez personnaliser l'affichage en sélectionnant le type de journal, le nom d'utilisateur ou la page concernée (ces deux derniers étant sensibles à la casse).",
 'logempty' => 'Aucune opération correspondante dans les journaux.',
 'log-title-wildcard' => 'Chercher parmi les titres commençant par ce texte',
 'showhideselectedlogentries' => 'Afficher/masquer les entrées de journal sélectionnées',
@@ -2253,16 +2261,16 @@ Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le
 'nextpage' => 'Page suivante ($1)',
 'prevpage' => 'Page précédente ($1)',
 'allpagesfrom' => 'Afficher les pages à partir de :',
-'allpagesto' => 'Afficher les pages jusqu’à :',
+'allpagesto' => "Afficher les pages jusqu'à :",
 'allarticles' => 'Toutes les pages',
-'allinnamespace' => 'Toutes les pages (dans l’espace de noms $1)',
-'allnotinnamespace' => 'Toutes les pages (hors de l’espace de noms $1)',
+'allinnamespace' => "Toutes les pages (dans l'espace de noms $1)",
+'allnotinnamespace' => "Toutes les pages (hors de l'espace de noms $1)",
 'allpagesprev' => 'Précédent',
 'allpagesnext' => 'Suivant',
 'allpagessubmit' => 'Lister',
 'allpagesprefix' => 'Afficher les pages commençant par :',
 'allpagesbadtitle' => 'Le titre de page indiqué est incorrect : il contient un préfixe inter-langue ou inter-wiki réservé, ou contient un ou plusieurs caractères inutilisables dans les titres.',
-'allpages-bad-ns' => '{{SITENAME}} n’a pas d’espace de noms « $1 ».',
+'allpages-bad-ns' => "{{SITENAME}} n'a pas d'espace de noms « $1 ».",
 'allpages-hide-redirects' => 'Masquer les redirections',
 
 # SpecialCachedPage
@@ -2276,7 +2284,7 @@ Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le
 [[Special:UnusedCategories|Les catégories inutilisées]] ne sont pas affichées ici.
 Voyez aussi [[Special:WantedCategories|les catégories demandées]].',
 'categoriesfrom' => 'Afficher les catégories à partir de :',
-'special-categories-sort-count' => 'tri par nombre d’éléments',
+'special-categories-sort-count' => "tri par nombre d'éléments",
 'special-categories-sort-abc' => 'tri alphabétique',
 
 # Special:DeletedContributions
@@ -2291,9 +2299,9 @@ 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.',
+'linksearch-error' => "Les caractères jokers ne peuvent être utilisés qu'au début du nom de domaine de l'hôte.",
 
 # Special:ListUsers
 'listusersfrom' => 'Afficher les utilisateurs à partir de :',
@@ -2304,20 +2312,16 @@ 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|modification|modifications}} dans {{PLURAL:$3|le dernier jour|les $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.
-Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuvent exister au sujet des droits individuels.',
+'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.
+Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuvent exister au sujet des droits individuels.",
 'listgrouprights-key' => '*<span class="listgrouprights-granted">Droit octroyé</span>
 *<span class="listgrouprights-revoked">Droit révoqué</span>',
 'listgrouprights-group' => 'Groupe',
@@ -2328,31 +2332,31 @@ Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuve
 'listgrouprights-removegroup' => 'Retirer des membres {{PLURAL:$2|du groupe|des groupes}} : $1',
 'listgrouprights-addgroup-all' => 'Ajouter des membres à tous les groupes',
 'listgrouprights-removegroup-all' => 'Retirer des membres de tous les groupes',
-'listgrouprights-addgroup-self' => 'Peut s’ajouter {{PLURAL:$2|le groupe|les groupes}} à son propre compte : $1',
+'listgrouprights-addgroup-self' => "Peut s'ajouter {{PLURAL:$2|le groupe|les groupes}} à son propre compte : $1",
 'listgrouprights-removegroup-self' => 'Peut se retirer {{PLURAL:$2|le groupe|les groupes}} de son propre compte : $1',
-'listgrouprights-addgroup-self-all' => 'Peut s’ajouter tous les groupes à son propre compte',
+'listgrouprights-addgroup-self-all' => "Peut s'ajouter tous les groupes à son propre compte",
 'listgrouprights-removegroup-self-all' => 'Peut se retirer tous les groupes de son propre compte',
 
 # E-mail user
-'mailnologin' => 'Pas d’adresse d’expéditeur',
-'mailnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]] pour pouvoir envoyer des courriels à d’autres utilisateurs.',
+'mailnologin' => "Pas d'adresse d'expéditeur",
+'mailnologintext' => "Vous devez être [[Special:UserLogin|identifié]] et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]] pour pouvoir envoyer des courriels à d'autres utilisateurs.",
 'emailuser' => 'Lui envoyer un courriel',
 'emailuser-title-target' => 'Envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}',
 'emailuser-title-notarget' => "Envoyer un courriel à l'utilisateur",
 'emailpage' => "Envoyer un courriel à l'utilisateur",
-'emailpagetext' => 'Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}.
-L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.',
-'usermailererror' => 'Erreur dans l’objet du courriel :',
+'emailpagetext' => "Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}.
+L'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.",
+'usermailererror' => "Erreur dans l'objet du courriel :",
 'defemailsubject' => "{{SITENAME}} Courriel de l'utilisateur « $1 »",
-'usermaildisabled' => 'L’envoi de courriels entre utilisateurs est désactivé',
-'usermaildisabledtext' => 'Vous ne pouvez pas envoyer de courriels à d’autres utilisateurs sur ce wiki',
+'usermaildisabled' => "L'envoi de courriels entre utilisateurs est désactivé",
+'usermaildisabledtext' => "Vous ne pouvez pas envoyer de courriels à d'autres utilisateurs sur ce wiki",
 'noemailtitle' => 'Aucune adresse de courriel',
-'noemailtext' => 'Cet utilisateur n’a pas spécifié une adresse de courriel valide.',
+'noemailtext' => "Cet utilisateur n'a pas spécifié une adresse de courriel valide.",
 'nowikiemailtitle' => 'Pas de courriel autorisé',
-'nowikiemailtext' => 'Cet utilisateur a choisi de ne pas recevoir de courriel de la part d’autres utilisateurs.',
+'nowikiemailtext' => "Cet utilisateur a choisi de ne pas recevoir de courriel de la part d'autres utilisateurs.",
 'emailnotarget' => "Nom d'utilisateur du destinataire inexistant ou invalide.",
 'emailtarget' => "Entrez le nom d'utilisateur du destinataire",
-'emailusername' => 'Nom d’utilisateur :',
+'emailusername' => "Nom d'utilisateur :",
 'emailusernamesubmit' => 'Soumettre',
 'email-legend' => 'Envoyer un courriel à un autre utilisateur de {{SITENAME}}',
 'emailfrom' => 'De :',
@@ -2360,7 +2364,7 @@ L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos
 'emailsubject' => 'Objet :',
 'emailmessage' => 'Message :',
 'emailsend' => 'Envoyer',
-'emailccme' => 'M’envoyer par courriel une copie de mon message.',
+'emailccme' => "M'envoyer par courriel une copie de mon message.",
 'emailccsubject' => 'Copie de votre message à $1 : $2',
 'emailsent' => 'Courriel envoyé',
 'emailsenttext' => 'Votre message a été envoyé par courriel.',
@@ -2379,23 +2383,24 @@ L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos
 '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',
 'watchthispage' => 'Suivre cette page',
 'unwatch' => 'Ne plus suivre',
 'unwatchthispage' => 'Ne plus suivre',
-'notanarticle' => 'Ce n’est pas une page de contenu',
+'notanarticle' => "Ce n'est pas une page de contenu",
 'notvisiblerev' => 'La version a été supprimée',
-'watchnochange' => 'Aucun des éléments que vous suivez n’a été modifié durant la période affichée.',
+'watchnochange' => "Aucun des éléments que vous suivez n'a été modifié durant la période affichée.",
 'watchlist-details' => 'Votre liste de suivi référence $1 page{{PLURAL:$1||s}}, sans compter les pages de discussion.',
 'wlheader-enotif' => '* La notification par courriel est activée.',
 'wlheader-showupdated' => "* Les pages qui ont été modifiées depuis votre dernière visite sont affichées en '''gras'''.",
 'watchmethod-recent' => 'vérification des modifications récentes pour y trouver des pages suivies',
 'watchmethod-list' => 'vérification des pages suivies pour y trouver des modifications récentes',
 'watchlistcontains' => 'Votre liste de suivi référence $1 page{{PLURAL:$1||s}}.',
-'iteminvalidname' => 'Problème avec l’élément « $1 » : le nom est invalide.',
+'iteminvalidname' => "Problème avec l'élément « $1 » : le nom est invalide.",
 'wlnote' => "Ci-dessous {{PLURAL:$1|figure la dernière modification effectuée|figurent les '''$1''' dernières modifications effectuées}} durant {{PLURAL:$2|la dernière heure|les '''$2''' dernières heures}}, depuis $3, $4.",
 'wlshowlast' => 'Montrer les dernières $1 heures, les derniers $2 jours ou bien $3',
 'watchlist-options' => 'Options de la liste de suivi',
@@ -2407,19 +2412,23 @@ L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos
 
 'enotif_mailer' => 'Système de notification par courriel de {{SITENAME}}',
 'enotif_reset' => 'Marquer toutes les pages comme visitées',
-'enotif_newpagetext' => 'Ceci est une nouvelle page.',
 'enotif_impersonal_salutation' => 'Utilisateur de {{SITENAME}}',
-'changed' => 'modifiée',
-'created' => 'créée',
-'enotif_subject' => 'La page $PAGETITLE de {{SITENAME}} a été $CHANGEDORCREATED par $PAGEEDITOR',
+'enotif_subject_deleted' => 'La page $1 sur {{SITENAME}} a été supprimée par {{GENDER:$2|$2}}',
+'enotif_subject_created' => 'La page $1 sur {{SITENAME}} a été créée par {{GENDER:$2|$2}}',
+'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_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.',
+'enotif_body_intro_changed' => 'La page $1 sur {{SITENAME}} a été modifiée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.',
 'enotif_lastvisited' => 'Voyez $1 pour tous les changements depuis votre dernière visite.',
 'enotif_lastdiff' => 'Voyez $1 pour visualiser ces changements.',
 'enotif_anon_editor' => 'utilisateur non-enregistré $1',
 'enotif_body' => 'Cher $WATCHINGUSERNAME,
 
-La page « $PAGETITLE » de {{SITENAME}} a été $CHANGEDORCREATED le $PAGEEDITDATE par « $PAGEEDITOR », visitez $PAGETITLE_URL pour visualiser la version actuelle.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Résumé du contributeur : $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2427,8 +2436,7 @@ Contactez ce contributeur :
 courriel : $PAGEEDITOR_EMAIL
 wiki : $PAGEEDITOR_WIKI
 
-Il n’y aura pas d’autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page.
-Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pages de votre liste de suivi.
+Il n\'y aura pas d\'autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page. Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pages de votre liste de suivi.
 
              Votre système de notification de {{SITENAME}}
 
@@ -2444,6 +2452,8 @@ $UNWATCHURL
 
 Retour et assistance :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'créée',
+'changed' => 'modifiée',
 
 # Delete
 'deletepage' => 'Supprimer la page',
@@ -2455,9 +2465,9 @@ Retour et assistance :
 'delete-confirm' => 'Supprimer « $1 »',
 'delete-legend' => 'Supprimer',
 'historywarning' => "'''Attention :''' la page que vous êtes sur le point de supprimer a un historique avec environ $1 {{PLURAL:$1|version|versions}} :",
-'confirmdeletetext' => 'Vous êtes sur le point de supprimer une page ou un fichier, ainsi que toutes ses versions antérieures historisées. Veuillez confirmer que c’est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites ceci en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].',
+'confirmdeletetext' => "Vous êtes sur le point de supprimer une page ou un fichier, ainsi que toutes ses versions antérieures historisées. Veuillez confirmer que c'est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites ceci en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].",
 'actioncomplete' => 'Action effectuée',
-'actionfailed' => 'L’action a échoué',
+'actionfailed' => "L'action a échoué",
 'deletedtext' => '« $1 » a été supprimée.
 Voir $2 pour une liste des suppressions récentes.',
 'dellogpage' => 'Journal des suppressions de page',
@@ -2467,16 +2477,16 @@ Voir $2 pour une liste des suppressions récentes.',
 'deletecomment' => 'Motif :',
 'deleteotherreason' => 'Motif autre ou supplémentaire :',
 'deletereasonotherlist' => 'Autre motif',
-'deletereason-dropdown' => '* Motifs de suppression les plus courants
-** Demande de lauteur
-** Violation des droits dauteur
-** Vandalisme',
+'deletereason-dropdown' => "* Motifs de suppression les plus courants
+** Demande de l'auteur
+** Violation des droits d'auteur
+** Vandalisme",
 'delete-edit-reasonlist' => 'Modifier les motifs de suppression de page',
 'delete-toobig' => 'Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.
 La suppression de telles pages a été restreinte pour prévenir des perturbations accidentelles de {{SITENAME}}.',
-'delete-warning-toobig' => 'Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.
+'delete-warning-toobig' => "Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.
 La supprimer peut perturber le fonctionnement de la base de données de {{SITENAME}} ;
-veuiller ne procéder qu’avec prudence.',
+veuiller ne procéder qu'avec prudence.",
 
 # Rollback
 'rollback' => 'Révoquer les modifications',
@@ -2487,21 +2497,21 @@ veuiller ne procéder qu’avec prudence.',
 'rollbackfailed' => 'La révocation a échoué',
 'cantrollback' => 'Impossible de révoquer la modification ;
 le dernier contributeur est le seul auteur de cette page.',
-'alreadyrolled' => 'Impossible de révoquer la dernière modification de la page « [[:$1]] » effectuée par [[User:$2|$2]] ([[User talk:$2|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
-quelqu’un d’autre a déjà modifié ou révoqué la page.
+'alreadyrolled' => "Impossible de révoquer la dernière modification de la page « [[:$1]] » effectuée par [[User:$2|$2]] ([[User talk:$2|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
+quelqu'un d'autre a déjà modifié ou révoqué la page.
 
-La dernière modification de la page a été effectuée par [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+La dernière modification de la page a été effectuée par [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
 'editcomment' => "Le résumé de la modification était : « ''$1'' ».",
 'revertpage' => 'Révocation des modifications de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]) vers la dernière version de [[User:$1|$1]]',
-'revertpage-nouser' => 'Révocation des modifications par (nom d’utilisateur supprimé) à la dernière version par [[User:$1|$1]]',
+'revertpage-nouser' => "Révocation des modifications par (nom d'utilisateur supprimé) à la dernière version par [[User:$1|$1]]",
 'rollback-success' => 'Révocation des modifications effectuées par $1 ;
 rétablissement de la dernière version par $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Erreur de session',
-'sessionfailure' => 'Votre session de connexion semble avoir des problèmes ;
-cette action a été annulée en prévention dun piratage de session.
-Veuillez cliquer sur « Précédent », rechargez la page d’où vous venez, puis réessayez.',
+'sessionfailure' => "Votre session de connexion semble avoir des problèmes ;
+cette action a été annulée en prévention d'un piratage de session.
+Veuillez cliquer sur « Précédent », rechargez la page d'où vous venez, puis réessayez.",
 
 # Protect
 'protectlogpage' => 'Journal des protections',
@@ -2516,33 +2526,35 @@ 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 :',
-'protect_expiry_invalid' => 'La date d’expiration est invalide.',
-'protect_expiry_old' => 'La date d’expiration est déjà passée.',
-'protect-unchain-permissions' => 'Déverrouiller davantage d’options de protection',
+'protectexpiry' => "Date d'expiration :",
+'protect_expiry_invalid' => "La date d'expiration est invalide.",
+'protect_expiry_old' => "La date d'expiration est déjà passée.",
+'protect-unchain-permissions' => "Déverrouiller davantage d'options de protection",
 'protect-text' => "Vous pouvez consulter et modifier le niveau de protection de la page '''$1'''.",
 'protect-locked-blocked' => "Vous ne pouvez pas modifier les niveaux de protection tant que vous êtes bloqué{{GENDER:||e|(e)}}.
 Voici les réglages actuels de la page '''$1''' :",
 'protect-locked-dblock' => "Le niveau de protection ne peut pas être modifié car la base de données est verrouillée.
 Voici les réglages actuels de la page '''$1''' :",
-'protect-locked-access' => "Vous navez pas les droits nécessaires pour modifier les niveaux de protection de pages.
+'protect-locked-access' => "Vous n'avez pas les droits nécessaires pour modifier les niveaux de protection de pages.
 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-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',
 'protect-expiry-indefinite' => 'infini',
 'protect-cascade' => 'Protéger les pages incluses dans celle-ci (protection en cascade)',
-'protect-cantedit' => 'Vous ne pouvez pas changer les niveaux de protection de cette page car vous n’avez pas la permission de la modifier.',
-'protect-othertime' => 'Autre date d’expiration :',
-'protect-othertime-op' => 'autre date d’expiration',
-'protect-existing-expiry' => 'Date d’expiration existante : $2 à $3',
+'protect-cantedit' => "Vous ne pouvez pas changer les niveaux de protection de cette page car vous n'avez pas la permission de la modifier.",
+'protect-othertime' => "Autre date d'expiration :",
+'protect-othertime-op' => "autre date d'expiration",
+'protect-existing-expiry' => "Date d'expiration existante : $2 à $3",
 'protect-otherreason' => 'Motif autre ou supplémentaire :',
 'protect-otherreason-op' => 'Autre motif',
 'protect-dropdown' => '* Motifs de protection courants
@@ -2574,22 +2586,22 @@ Voici les réglages actuels de la page '''$1''' :",
 'undeletepage' => 'Voir et restaurer des pages supprimées',
 'undeletepagetitle' => "'''La liste suivante contient des versions supprimées de [[:$1|$1]]'''.",
 'viewdeletedpage' => 'Voir les pages supprimées',
-'undeletepagetext' => '{{PLURAL:$1|La page suivante a été supprimée et se trouve|Les pages suivantes ont été supprimées et se trouvent}} dans la base de données archive, d’où {{PLURAL:$1|elle peut|elles peuvent}} encore être restaurée{{PLURAL:$1||s}}.
-L’archive peut être nettoyée périodiquement.',
+'undeletepagetext' => "{{PLURAL:$1|La page suivante a été supprimée et se trouve|Les pages suivantes ont été supprimées et se trouvent}} dans la base de données archive, d'où {{PLURAL:$1|elle peut|elles peuvent}} encore être restaurée{{PLURAL:$1||s}}.
+L'archive peut être nettoyée périodiquement.",
 'undelete-fieldset-title' => 'Restaurer les versions',
-'undeleteextrahelp' => "Pour restaurer lhistorique complet de cette page, laissez toutes les cases décochées et cliquez sur '''''Restaurer'''''.
+'undeleteextrahelp' => "Pour restaurer l'historique complet de cette page, laissez toutes les cases décochées et cliquez sur '''''Restaurer'''''.
 Pour effectuer une restauration partielle, cochez les cases correspondant aux versions à rétablir, puis cliquez sur '''''Restaurer'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|version archivée|versions archivées}}',
-'undeletehistory' => 'Si vous restaurez la page, toutes les versions seront replacées dans l’historique.
-Si une nouvelle page avec le même nom a été créée depuis la suppression, les versions restaurées apparaîtront dans l’historique antérieur et la version courante ne sera pas automatiquement remplacée.',
+'undeletehistory' => "Si vous restaurez la page, toutes les versions seront replacées dans l'historique.
+Si une nouvelle page avec le même nom a été créée depuis la suppression, les versions restaurées apparaîtront dans l'historique antérieur et la version courante ne sera pas automatiquement remplacée.",
 'undeleterevdel' => 'La restauration ne sera pas effectuée si, au final, la version la plus récente de la page ou du fichier reste partiellement supprimée.
 Dans de tels cas, vous devez décocher ou démasquer les versions effacées les plus récentes (en tête de liste).',
-'undeletehistorynoadmin' => 'Cette page a été supprimée.
-Le motif de la suppression est indiqué dans le résumé ci-dessous, avec les détails des utilisateurs qui lont modifié avant sa suppression.
-Le contenu effectif de ces versions supprimées n’est accessible qu’aux administrateurs.',
+'undeletehistorynoadmin' => "Cette page a été supprimée.
+Le motif de la suppression est indiqué dans le résumé ci-dessous, avec les détails des utilisateurs qui l'ont modifié avant sa suppression.
+Le contenu effectif de ces versions supprimées n'est accessible qu'aux administrateurs.",
 'undelete-revision' => 'Version supprimée de $1 (version du $4 à $5) par $3 :',
-'undeleterevision-missing' => 'Version incorrecte ou manquante.
-Vous avez peut-être un mauvais lien, ou la version a pu être restaurée ou supprimée de l’archive.',
+'undeleterevision-missing' => "Version incorrecte ou manquante.
+Vous avez peut-être un mauvais lien, ou la version a pu être restaurée ou supprimée de l'archive.",
 'undelete-nodiff' => 'Aucune version précédente trouvée.',
 'undeletebtn' => 'Restaurer',
 'undeletelink' => 'visualiser/rétablir',
@@ -2610,12 +2622,12 @@ Consultez le [[Special:Log/delete|journal des suppressions]] pour obtenir la lis
 'undelete-search-box' => 'Rechercher des pages supprimées',
 'undelete-search-prefix' => 'Montrer les pages commençant par :',
 'undelete-search-submit' => 'Rechercher',
-'undelete-no-results' => 'Aucune page correspondante n’a été trouvée dans les archives de suppression.',
+'undelete-no-results' => "Aucune page correspondante n'a été trouvée dans les archives de suppression.",
 'undelete-filename-mismatch' => 'Impossible de restaurer la version du fichier datée du $1 : le nom de fichier ne correspond pas.',
 'undelete-bad-store-key' => 'Impossible de restaurer la version du fichier datée du $1 : le fichier était absent avant la suppression.',
-'undelete-cleanup-error' => 'Erreur lors de la suppression du fichier d’archive inutilisé « $1 ».',
-'undelete-missing-filearchive' => 'Impossible de restaurer le fichier d’archive avec l’identifiant $1 parce qu’il n’est pas dans la base de données.
-Il a peut-être déjà été restauré.',
+'undelete-cleanup-error' => "Erreur lors de la suppression du fichier d'archive inutilisé « $1 ».",
+'undelete-missing-filearchive' => "Impossible de restaurer le fichier d'archive avec l'identifiant $1 parce qu'il n'est pas dans la base de données.
+Il a peut-être déjà été restauré.",
 'undelete-error' => "Page d'erreur d'annulation",
 'undelete-error-short' => 'Erreur lors de la restauration du fichier : $1',
 'undelete-error-long' => 'Des erreurs ont été rencontrées lors de la restauration du fichier :
@@ -2633,29 +2645,29 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => "Contributions de l'utilisateur",
-'contributions-title' => 'Liste des contributions de l’utilisateur $1',
+'contributions' => "Contributions de l'{{GENDER:$1|utilisateur|utilisatrice}}",
+'contributions-title' => "Liste des contributions de l'utilisateur $1",
 'mycontris' => 'Contributions',
 'contribsub2' => 'Pour $1 ($2)',
-'nocontribs' => 'Aucune modification correspondant à ces critères n’a été trouvée.',
+'nocontribs' => "Aucune modification correspondant à ces critères n'a été trouvée.",
 'uctop' => '(dernière)',
 'month' => 'À partir du mois (et précédents) :',
 'year' => "À partir de l'année (et précédentes) :",
 
 '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',
 
@@ -2665,7 +2677,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',
@@ -2680,38 +2692,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',
@@ -2719,14 +2731,14 @@ 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',
 'ipb-blocklist' => 'Voir les blocages existants',
 'ipb-blocklist-contribs' => 'Contributions pour $1',
 'unblockip' => 'Débloquer un utilisateur ou une adresse IP',
-'unblockiptext' => 'Utilisez le formulaire ci-dessous pour rétablir l’accès aux modifications depuis une adresse IP ou un nom d’utilisateur.',
+'unblockiptext' => "Utilisez le formulaire ci-dessous pour rétablir l'accès aux modifications depuis une adresse IP ou un nom d'utilisateur.",
 'ipusubmit' => 'Supprimer ce blocage',
 'unblocked' => '[[User:$1|$1]] a été débloqué',
 'unblocked-range' => '$1 a été débloqué',
@@ -2736,11 +2748,11 @@ Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.'
 'ipblocklist-legend' => 'Chercher un utilisateur bloqué',
 'blocklist-userblocks' => 'Masquer les blocages de comptes',
 'blocklist-tempblocks' => 'Masquer les blocages temporaires',
-'blocklist-addressblocks' => 'Masquer les blocages d’adresses IP uniques',
+'blocklist-addressblocks' => "Masquer les blocages d'adresses IP uniques",
 'blocklist-rangeblocks' => 'Masquer les blocs de portée',
 'blocklist-timestamp' => 'Date et heure',
 'blocklist-target' => 'Cible',
-'blocklist-expiry' => 'Date d’expiration',
+'blocklist-expiry' => "Date d'expiration",
 'blocklist-by' => 'Administrateur ayant effectué le blocage',
 'blocklist-params' => 'Paramètres de blocage',
 'blocklist-reason' => 'Motif',
@@ -2768,9 +2780,9 @@ Le motif fourni pour le blocage de $1 est : « $2 ».',
 'blocklog-showsuppresslog' => 'Cet utilisateur a été bloqué et caché précédemment. Le journal des suppressions est disponible ci-dessous :',
 'blocklogentry' => 'a bloqué [[$1]] ; expiration : $2 $3',
 'reblock-logentry' => 'a modifié les paramètres du blocage de [[$1]] avec une expiration au $2 $3',
-'blocklogtext' => 'Ceci est le journal des actions de blocages et déblocages d’utilisateurs.
+'blocklogtext' => "Ceci est le journal des actions de blocages et déblocages d'utilisateurs.
 Les adresses IP automatiquement bloquées ne sont pas listées.
-Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.',
+Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.",
 'unblocklogentry' => 'a débloqué $1',
 'block-log-flags-anononly' => 'utilisateurs anonymes seulement',
 'block-log-flags-nocreate' => 'création de compte interdite',
@@ -2778,75 +2790,75 @@ Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissement
 'block-log-flags-noemail' => 'envoi de courriel interdit',
 'block-log-flags-nousertalk' => 'ne peut modifier sa propre page de discussion',
 'block-log-flags-angry-autoblock' => 'autoblocage amélioré activé',
-'block-log-flags-hiddenname' => 'nom d’utilisateur caché',
+'block-log-flags-hiddenname' => "nom d'utilisateur caché",
 'range_block_disabled' => 'Le droit administrateur de créer des blocages de plages IP est désactivé.',
-'ipb_expiry_invalid' => 'Durée d’expiration incorrecte.',
-'ipb_expiry_temp' => 'Les blocages de noms d’utilisateurs cachés doivent être permanents.',
+'ipb_expiry_invalid' => "Durée d'expiration incorrecte.",
+'ipb_expiry_temp' => "Les blocages de noms d'utilisateurs cachés doivent être permanents.",
 'ipb_hide_invalid' => 'Impossible de supprimer ce compte ; il semble avoir trop de modifications.',
 'ipb_already_blocked' => '« $1 » est déjà bloqué',
 'ipb-needreblock' => '$1 est déjà bloqué. Voulez-vous modifier les paramètres ?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Autre blocage|Autres blocages}}',
 'unblock-hideuser' => "Vous ne pouvez pas débloquer cet utilisateur, car son nom d'utilisateur a été masqué.",
-'ipb_cant_unblock' => 'Erreur : identifiant de blocage $1 non trouvé.
-Il est possible qu’un déblocage ait déjà été effectué.',
-'ipb_blocked_as_range' => 'Erreur : l’adresse IP $1 n’est pas bloquée directement et ne peut donc pas être débloquée.
-Elle fait cependant partie de la plage $2 qui, elle, peut être débloquée.',
+'ipb_cant_unblock' => "Erreur : identifiant de blocage $1 non trouvé.
+Il est possible qu'un déblocage ait déjà été effectué.",
+'ipb_blocked_as_range' => "Erreur : l'adresse IP $1 n'est pas bloquée directement et ne peut donc pas être débloquée.
+Elle fait cependant partie de la plage $2 qui, elle, peut être débloquée.",
 'ip_range_invalid' => 'Plage IP incorrecte.',
 'ip_range_toolarge' => 'Les blocages de plages plus grandes que /$1 ne sont pas autorisées.',
 'blockme' => 'Bloquez-moi',
 'proxyblocker' => 'Bloqueur de mandataires',
 'proxyblocker-disabled' => 'Cette fonction est désactivée.',
-'proxyblockreason' => 'Votre adresse IP a été bloquée car il s’agit d’un mandataire ouvert.
-Veuillez contacter votre fournisseur d’accès Internet ou votre support technique et l’informer de ce sérieux problème de sécurité.',
+'proxyblockreason' => "Votre adresse IP a été bloquée car il s'agit d'un mandataire ouvert.
+Veuillez contacter votre fournisseur d'accès Internet ou votre support technique et l'informer de ce sérieux problème de sécurité.",
 'proxyblocksuccess' => 'Fait.',
 'sorbsreason' => 'Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.',
 'sorbs_create_account_reason' => 'Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.
 Vous ne pouvez pas créer un compte.',
-'cant-block-while-blocked' => 'Vous ne pouvez pas bloquer d’autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.',
-'cant-see-hidden-user' => "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
-'ipbblocked' => 'Vous ne pouvez pas bloquer ou débloquer d’autres utilisateurs, parce que vous êtes vous-même bloqué',
-'ipbnounblockself' => 'Vous n’êtes pas autorisé à vous débloquer vous-même',
+'cant-block-while-blocked' => "Vous ne pouvez pas bloquer d'autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.",
+'cant-see-hidden-user' => "L'utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N'ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
+'ipbblocked' => "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué",
+'ipbnounblockself' => "Vous n'êtes pas autorisé à vous débloquer vous-même",
 
 # Developer tools
 'lockdb' => 'Verrouiller la base de données',
 'unlockdb' => 'Déverrouiller la base de données',
-'lockdbtext' => 'Le verrouillage de la base de données empêchera tous les utilisateurs de modifier des pages, d’enregistrer leurs préférences, de modifier leur liste de suivi et d’effectuer toutes les autres opérations nécessitant des changements dans la base de données.
-Veuillez confirmer que c’est bien là ce que vous voulez faire et que vous déverrouillerez la base dès que votre opération de maintenance sera terminée.',
-'unlockdbtext' => 'Le déverrouillage de la base de données permettra à nouveau à tous les utilisateurs de modifier des pages, de changer leurs préférences, de modifier leur liste de suivi et d’effectuer les autres opérations nécessitant des changements dans la base de données.
-Veuillez confirmer que c’est bien là ce que vous voulez faire.',
+'lockdbtext' => "Le verrouillage de la base de données empêchera tous les utilisateurs de modifier des pages, d'enregistrer leurs préférences, de modifier leur liste de suivi et d'effectuer toutes les autres opérations nécessitant des changements dans la base de données.
+Veuillez confirmer que c'est bien là ce que vous voulez faire et que vous déverrouillerez la base dès que votre opération de maintenance sera terminée.",
+'unlockdbtext' => "Le déverrouillage de la base de données permettra à nouveau à tous les utilisateurs de modifier des pages, de changer leurs préférences, de modifier leur liste de suivi et d'effectuer les autres opérations nécessitant des changements dans la base de données.
+Veuillez confirmer que c'est bien là ce que vous voulez faire.",
 'lockconfirm' => 'Oui, je confirme que je souhaite verrouiller la base de données.',
 'unlockconfirm' => 'Oui, je confirme que je souhaite déverrouiller la base de données.',
 'lockbtn' => 'Verrouiller la base de données',
 'unlockbtn' => 'Déverrouiller la base de données',
-'locknoconfirm' => 'Vous n’avez pas coché la case de confirmation.',
+'locknoconfirm' => "Vous n'avez pas coché la case de confirmation.",
 'lockdbsuccesssub' => 'Verrouillage de la base de données réussi',
 'unlockdbsuccesssub' => 'Verrouillage de la base de données supprimé',
-'lockdbsuccesstext' => 'La base de données a été verrouillée.<br />
-N’oubliez pas de la [[Special:UnlockDB|déverrouiller]] lorsque vous aurez terminé votre opération de maintenance.',
+'lockdbsuccesstext' => "La base de données a été verrouillée.<br />
+N'oubliez pas de la [[Special:UnlockDB|déverrouiller]] lorsque vous aurez terminé votre opération de maintenance.",
 'unlockdbsuccesstext' => 'La base de données a été déverrouillée.',
-'lockfilenotwritable' => 'Le fichier de verrouillage de la base de données n’est pas inscriptible.
-Pour bloquer ou débloquer la base de données, il doit être accessible par le serveur web.',
-'databasenotlocked' => 'La base de données n’est pas verrouillée.',
+'lockfilenotwritable' => "Le fichier de verrouillage de la base de données n'est pas inscriptible.
+Pour bloquer ou débloquer la base de données, il doit être accessible par le serveur web.",
+'databasenotlocked' => "La base de données n'est pas verrouillée.",
 'lockedbyandtime' => '(par $1 le $2 à $3)',
 
 # Move page
 'move-page' => 'Renommer $1',
 '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. Lancien 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.
+'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 den avoir compris les conséquences avant de continuer.",
+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.",
 'movepagetext-noredirectfixer' => "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom.
-Lancien titre deviendra une page de redirection vers le nouveau titre.
+L'ancien titre deviendra une page de redirection vers le nouveau titre.
 Vérifiez bien les [[Special:DoubleRedirects|doubles redirections]] ou les [[Special:BrokenRedirects|redirections cassées]].
 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''' déplacé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é, et il est impossible d’écraser une page existante.
+Notez que la page ne sera '''pas''' déplacé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é, et il est impossible d'écraser une page existante.
 
 '''Attention !'''
-Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous den avoir compris les conséquences avant de continuer.",
+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.",
 'movepagetalktext' => "La page de discussion associée, si présente, sera automatiquement renommée '''sauf si :'''
 * vous déplacez la page vers un autre espace de noms, ou
 * une page de discussion non vide existe déjà sous le nouveau nom, ou
@@ -2854,37 +2866,37 @@ Ceci peut provoquer un changement radical et imprévu pour une page souvent cons
 
 Dans ces cas-là, vous devrez renommer ou fusionner cette page de discussion manuellement si vous le désirez.",
 'movearticle' => 'Renommer la page :',
-'moveuserpage-warning' => "'''Attention :''' Vous êtes sur le point de renommer une page d’utilisateur. Veuillez noter que seul la page sera renommée et que l’utilisateur '''ne''' sera '''pas''' renommé.",
-'movenologin' => 'Vous n’êtes pas identifié{{GENDER:||e|(e)}}.',
-'movenologintext' => 'Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d’ancienneté suffisante.',
-'movenotallowed' => 'Vous n’avez pas la permission de renommer les pages.',
-'movenotallowedfile' => 'Vous n’avez pas la permission de renommer les fichiers.',
-'cant-move-user-page' => 'Vous n’avez pas la permission de renommer les pages principales d’utilisateurs (en dehors de leurs sous-pages).',
-'cant-move-to-user-page' => 'Vous n’avez pas la permission de renommer une page vers une page utilisateur (à l’exception d’une sous-page).',
+'moveuserpage-warning' => "'''Attention :''' Vous êtes sur le point de renommer une page d'utilisateur. Veuillez noter que seul la page sera renommée et que l'utilisateur '''ne''' sera '''pas''' renommé.",
+'movenologin' => "Vous n'êtes pas identifié{{GENDER:||e|(e)}}.",
+'movenologintext' => "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
+'movenotallowed' => "Vous n'avez pas la permission de renommer les pages.",
+'movenotallowedfile' => "Vous n'avez pas la permission de renommer les fichiers.",
+'cant-move-user-page' => "Vous n'avez pas la permission de renommer les pages principales d'utilisateurs (en dehors de leurs sous-pages).",
+'cant-move-to-user-page' => "Vous n'avez pas la permission de renommer une page vers une page utilisateur (à l'exception d'une sous-page).",
 'newtitle' => 'Vers le nouveau titre :',
 '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-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.
-Veuillez en choisir un autre.',
+'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.
+Veuillez en choisir un autre.",
 'cantmove-titleprotected' => 'Vous ne pouvez pas déplacer une page vers cet emplacement car la création de page avec ce nouveau titre a été protégée.',
-'talkexists' => "'''La page elle-même a été déplacée avec succès, mais la page de discussion na pas pu être déplacée car il en existait déjà une sous le nouveau nom. Veuillez les fusionner manuellement.'''",
+'talkexists' => "'''La page elle-même a été déplacée avec succès, mais la page de discussion n'a pas pu être déplacée car il en existait déjà une sous le nouveau nom. Veuillez les fusionner manuellement.'''",
 'movedto' => 'renommé en',
 'movetalk' => 'Renommer aussi la page de discussion associée',
-'move-subpages' => 'Renommer les sous-pages (jusqu’à $1 {{PLURAL:$1|page|pages}})',
-'move-talk-subpages' => 'Renommer les sous-pages de la page de discussion (jusqu’à $1 pages)',
+'move-subpages' => "Renommer les sous-pages (jusqu'à $1 {{PLURAL:$1|page|pages}})",
+'move-talk-subpages' => "Renommer les sous-pages de la page de discussion (jusqu'à $1 pages)",
 'movepage-page-exists' => 'La page $1 existe déjà et ne peut pas être écrasée automatiquement.',
 'movepage-page-moved' => 'La page $1 a été renommée en $2.',
-'movepage-page-unmoved' => 'La page $1 n’a pas pu être renommée en $2.',
+'movepage-page-unmoved' => "La page $1 n'a pas pu être renommée en $2.",
 'movepage-max-pages' => 'Le maximum de $1 {{PLURAL:$1|page renommée|pages renommées}} a été atteint et aucune autre page ne sera renommée automatiquement.',
 'movelogpage' => 'Journal des renommages',
 'movelogpagetext' => 'Voici la liste de toutes les pages renommées ou déplacées.',
 'movesubpage' => 'Sous-page{{PLURAL:$1||s}}',
 'movesubpagetext' => 'Cette page a $1 {{PLURAL:$1|sous-page affichée|sous-pages affichées}} ci-dessous.',
-'movenosubpage' => 'Cette page n’a aucune sous-page.',
+'movenosubpage' => "Cette page n'a aucune sous-page.",
 'movereason' => 'Motif :',
 'revertmove' => 'rétablir',
 'delete_and_move' => 'Supprimer et renommer',
@@ -2892,22 +2904,22 @@ 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]]"',
-'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 »',
-'immobile-target-namespace' => 'Vous ne pouvez pas renommer des pages vers l’espace de noms « $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 »",
+'immobile-target-namespace' => "Vous ne pouvez pas renommer des pages vers l'espace de noms « $1 »",
 'immobile-target-namespace-iw' => 'Les destinations interwikis ne sont pas une cible valide pour les déplacements.',
-'immobile-source-page' => 'Cette page n’est pas renommable.',
-'immobile-target-page' => 'Il n’est pas possible de renommer la page vers ce titre.',
+'immobile-source-page' => "Cette page n'est pas renommable.",
+'immobile-target-page' => "Il n'est pas possible de renommer la page vers ce titre.",
 'bad-target-model' => 'La destination souhaitée utilise un autre modèle de contenu. Impossible de convertir de $1 vers $2.',
 'imagenocrossnamespace' => 'Impossible de renommer un fichier vers un espace de noms autre que fichier.',
-'nonfile-cannot-move-to-file' => "Impossible de renommer quelque chose d’autre qu'un fichier vers l’espace de noms fichier.",
+'nonfile-cannot-move-to-file' => "Impossible de renommer quelque chose d'autre qu'un fichier vers l'espace de noms fichier.",
 'imagetypemismatch' => 'La nouvelle extension de ce fichier ne correspond pas à son type.',
 'imageinvalidfilename' => 'Le nom du fichier cible est incorrect',
 'fix-double-redirects' => 'Mettre à jour les redirections pointant vers le titre original',
 'move-leave-redirect' => 'Laisser une redirection vers le nouveau titre',
-'protectedpagemovewarning' => "'''Attention :''' Cette page a été protégée afin que seuls les utilisateurs possédant les droits dadministrateur puissent la renommer. La dernière entrée du journal est affichée ci-dessous pour référence :",
+'protectedpagemovewarning' => "'''Attention :''' Cette page a été protégée afin que seuls les utilisateurs possédant les droits d'administrateur puissent la renommer. La dernière entrée du journal est affichée ci-dessous pour référence :",
 'semiprotectedpagemovewarning' => "'''Note :''' Cette page a été protégée afin que seuls les utilisateurs enregistrés puissent la renommer. La dernière entrée du journal est affichée ci-dessous pour référence :",
 'move-over-sharedrepo' => '== Le fichier existe ==
 [[:$1]] existe déjà sur un dépôt partagé. Renommer ce fichier rendra le fichier sur le dépôt partage inaccessible.',
@@ -2916,21 +2928,21 @@ Choisissez un autre nom.',
 
 # Export
 'export' => 'Exporter des pages',
-'exporttext' => 'Vous pouvez exporter en XML le texte et l’historique d’une page ou d’un ensemble de pages ;
-le résultat peut alors être importé dans un autre wiki utilisant le logiciel MediaWiki via la [[Special:Import|page dimportation]].
+'exporttext' => "Vous pouvez exporter en XML le texte et l'historique d'une page ou d'un ensemble de pages ;
+le résultat peut alors être importé dans un autre wiki utilisant le logiciel MediaWiki via la [[Special:Import|page d'importation]].
 
-Pour exporter des pages, entrez leurs titres dans la boîte de texte ci-dessous, à raison d’un titre par ligne. Sélectionnez si vous désirez ou non la version actuelle avec toutes les anciennes versions, avec les lignes de l’historique de la page, ou simplement la page actuelle avec des informations sur la dernière modification.
+Pour exporter des pages, entrez leurs titres dans la boîte de texte ci-dessous, à raison d'un titre par ligne. Sélectionnez si vous désirez ou non la version actuelle avec toutes les anciennes versions, avec les lignes de l'historique de la page, ou simplement la page actuelle avec des informations sur la dernière modification.
 
-Dans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pour la page [[{{MediaWiki:Mainpage}}]].',
+Dans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pour la page [[{{MediaWiki:Mainpage}}]].",
 'exportall' => 'Exporter toutes les pages',
-'exportcuronly' => 'Exporter uniquement la version courante, sans l’historique complet',
+'exportcuronly' => "Exporter uniquement la version courante, sans l'historique complet",
 'exportnohistory' => "----
-'''Note :''' l’exportation de l’historique complet des pages à l’aide de ce formulaire a été désactivée pour des raisons de performance.",
+'''Note :''' l'exportation de l'historique complet des pages à l'aide de ce formulaire a été désactivée pour des raisons de performance.",
 'exportlistauthors' => 'Inclure une liste complète des contributeurs pour chaque page',
 'export-submit' => 'Exporter',
 'export-addcattext' => 'Ajouter les pages de la catégorie :',
 'export-addcat' => 'Ajouter',
-'export-addnstext' => 'Ajouter des pages dans l’espace de noms :',
+'export-addnstext' => "Ajouter des pages dans l'espace de noms :",
 'export-addns' => 'Ajouter',
 'export-download' => 'Enregistrer dans un fichier',
 'export-templates' => 'Inclure les modèles',
@@ -2941,9 +2953,9 @@ Dans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Exp
 'allmessagesname' => 'Nom du message',
 'allmessagesdefault' => 'Message par défaut',
 'allmessagescurrent' => 'Message actuel',
-'allmessagestext' => 'Ceci est la liste des messages disponibles dans l’espace MediaWiki.
-Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.',
-'allmessagesnotsupportedDB' => "Cette page '''{{ns:special}}:Allmessages''' nest pas utilisable car '''\$wgUseDatabaseMessages''' a été désactivé.",
+'allmessagestext' => "Ceci est la liste des messages disponibles dans l'espace MediaWiki.
+Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.",
+'allmessagesnotsupportedDB' => "Cette page '''{{ns:special}}:Allmessages''' n'est pas utilisable car '''\$wgUseDatabaseMessages''' a été désactivé.",
 'allmessages-filter-legend' => 'Filtrer',
 'allmessages-filter' => 'Filtrer par état de modification :',
 'allmessages-filter-unmodified' => 'Non modifié',
@@ -2963,67 +2975,68 @@ Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de Media
 'thumbnail-dest-create' => "Impossible d'enregistrer la vignette sur la destination",
 'thumbnail_invalid_params' => 'Paramètres de la miniature incorrects',
 'thumbnail_dest_directory' => 'Impossible de créer le répertoire de destination',
-'thumbnail_image-type' => 'Type d’image non supporté',
+'thumbnail_image-type' => "Type d'image non supporté",
 'thumbnail_gd-library' => 'Configuration incomplète de la bibliothèque GD : fonction $1 introuvable',
 'thumbnail_image-missing' => 'Le fichier suivant est introuvable : $1',
 
 # Special:Import
 'import' => 'Importer des pages',
 'importinterwiki' => 'Importation inter-wiki',
-'import-interwiki-text' => 'Sélectionnez un wiki et un titre de page à importer.
+'import-interwiki-text' => "Sélectionnez un wiki et un titre de page à importer.
 Les dates des versions et les noms des contributeurs seront préservés.
-Toutes les actions d’importation inter-wiki sont consignées dans l’[[Special:Log/import|historique des importations]].',
+Toutes les actions d'importation inter-wiki sont consignées dans l'[[Special:Log/import|historique des importations]].",
 'import-interwiki-source' => 'Wiki et page sources :',
-'import-interwiki-history' => 'Copier toutes les versions de l’historique de cette page',
+'import-interwiki-history' => "Copier toutes les versions de l'historique de cette page",
 'import-interwiki-templates' => 'Inclure tous les modèles',
 'import-interwiki-submit' => 'Importer',
 'import-interwiki-namespace' => 'Espace de noms de destination :',
 'import-interwiki-rootpage' => 'Page racine de destination (optionnelle):',
 'import-upload-filename' => 'Nom du fichier :',
 'import-comment' => 'Commentaire :',
-'importtext' => 'Veuillez exporter le fichier depuis le wiki d’origine en utilisant son [[Special:Export|outil d’exportation]].
-Sauvegardez-le sur votre disque dur puis importez-le ici.',
+'importtext' => "Veuillez exporter le fichier depuis le wiki d'origine en utilisant son [[Special:Export|outil d'exportation]].
+Sauvegardez-le sur votre disque dur puis importez-le ici.",
 'importstart' => 'Importation des pages…',
 'import-revision-count' => '$1 version{{PLURAL:$1||s}}',
 'importnopages' => 'Aucune page à importer.',
 'imported-log-entries' => '$1 {{PLURAL:$1|entrée|entrées}} du journal {{PLURAL:$1|importée|importées}}.',
-'importfailed' => 'Échec de l’importation : <nowiki>$1</nowiki>',
+'importfailed' => "Échec de l'importation : <nowiki>$1</nowiki>",
 'importunknownsource' => 'Type inconnu de la source à importer',
-'importcantopen' => 'Impossible d’ouvrir le fichier à importer',
+'importcantopen' => "Impossible d'ouvrir le fichier à importer",
 'importbadinterwiki' => 'Mauvais lien inter-wiki',
 'importnotext' => 'Vide ou sans texte',
-'importsuccess' => 'L’importation a réussi !',
-'importhistoryconflict' => 'Un conflit a été détecté dans l’historique des versions (cette page a pu être importée auparavant).',
-'importnosources' => "Aucune source d’importation inter-wiki n’a été définie et l'import direct d’historiques est désactivé.",
-'importnofile' => 'Aucun fichier d’importation n’a été envoyé.',
+'importsuccess' => "L'importation a réussi !",
+'importhistoryconflict' => "Un conflit a été détecté dans l'historique des versions (cette page a pu être importée auparavant).",
+'importnosources' => "Aucune source d'importation inter-wiki n'a été définie et l'import direct d'historiques est désactivé.",
+'importnofile' => "Aucun fichier d'importation n'a été envoyé.",
 'importuploaderrorsize' => "L'import du fichier a échoué.
 Sa taille est supérieure au maximum autorisé pour l'import de fichier.",
 'importuploaderrorpartial' => "L'import du fichier échoué.
-Son contenu na été transféré que partiellement.",
+Son contenu n'a été transféré que partiellement.",
 'importuploaderrortemp' => "L'import du fichier a échoué.
 Un dossier temporaire est manquant.",
-'import-parse-failure' => 'Échec lors de l’analyse du XML à importer',
+'import-parse-failure' => "Échec lors de l'analyse du XML à importer",
 'import-noarticle' => 'Aucune page à importer !',
 'import-nonewrevisions' => 'Toutes les versions ont été importées auparavant.',
 'xml-error-string' => '$1 à la ligne $2, colonne $3 (octet $4) : $5',
 'import-upload' => 'Import de données XML',
 'import-token-mismatch' => 'Perte des données de session. Veuillez réessayez.',
-'import-invalid-interwiki' => 'Impossible d’importer depuis le wiki spécifié.',
-'import-error-edit' => 'La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisés à la modifier.',
-'import-error-create' => 'La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisés à la créer.',
+'import-invalid-interwiki' => "Impossible d'importer depuis le wiki spécifié.",
+'import-error-edit' => "La page « $1 » n'a pas été importée parce que vous n'êtes pas autorisés à la modifier.",
+'import-error-create' => "La page « $1 » n'a pas été importée parce que vous n'êtes pas autorisés à la créer.",
 '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-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.',
 
 # Import log
 'importlogpage' => 'Journal des importations',
-'importlogpagetext' => 'Importations administratives de pages d’autres wikis, avec leur historique de modification.',
+'importlogpagetext' => "Importations administratives de pages d'autres wikis, avec leur historique de modification.",
 'import-logentry-upload' => 'a importé [[$1]] par envoi de fichier',
 'import-logentry-upload-detail' => '$1 version{{PLURAL:$1||s}}',
-'import-logentry-interwiki' => 'a importé $1 d’un wiki à l’autre',
+'import-logentry-interwiki' => "a importé $1 d'un wiki à l'autre",
 'import-logentry-interwiki-detail' => '$1 version{{PLURAL:$1||s}} depuis $2',
 
 # JavaScriptTest
@@ -3038,18 +3051,18 @@ Un dossier temporaire est manquant.",
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Votre page utilisateur',
-'tooltip-pt-anonuserpage' => 'La page utilisateur de l’IP avec laquelle vous contribuez',
+'tooltip-pt-anonuserpage' => "La page utilisateur de l'IP avec laquelle vous contribuez",
 'tooltip-pt-mytalk' => 'Votre page de discussion',
 'tooltip-pt-anontalk' => 'La page de discussion pour les contributions depuis cette adresse IP',
 'tooltip-pt-preferences' => 'Vos préférences',
 'tooltip-pt-watchlist' => 'La liste des pages dont vous suivez les modifications',
 'tooltip-pt-mycontris' => 'La liste de vos contributions',
-'tooltip-pt-login' => 'Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n’est cependant pas obligatoire.',
-'tooltip-pt-anonlogin' => 'Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n’est cependant pas obligatoire.',
+'tooltip-pt-login' => "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n'est cependant pas obligatoire.",
+'tooltip-pt-anonlogin' => "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n'est cependant pas obligatoire.",
 'tooltip-pt-logout' => 'Se déconnecter',
 'tooltip-ca-talk' => 'Discussion au sujet de cette page de contenu',
-'tooltip-ca-edit' => 'Vous pouvez modifier cette page.
-Veuillez utiliser le bouton de prévisualisation avant d’enregistrer.',
+'tooltip-ca-edit' => "Vous pouvez modifier cette page.
+Veuillez utiliser le bouton de prévisualisation avant d'enregistrer.",
 'tooltip-ca-addsection' => 'Commencer une nouvelle section',
 'tooltip-ca-viewsource' => 'Cette page est protégée.
 Vous pouvez toutefois en visualiser la source.',
@@ -3065,10 +3078,10 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-search-go' => 'Aller vers une page portant exactement ce nom si elle existe.',
 'tooltip-search-fulltext' => 'Rechercher les pages comportant ce texte.',
 'tooltip-p-logo' => 'Page principale',
-'tooltip-n-mainpage' => 'Visiter la page d’accueil du site',
-'tooltip-n-mainpage-description' => 'Aller à l’accueil',
+'tooltip-n-mainpage' => "Visiter la page d'accueil du site",
+'tooltip-n-mainpage-description' => "Aller à l'accueil",
 'tooltip-n-portal' => 'À propos du projet',
-'tooltip-n-currentevents' => 'Trouver les informations de fond sur l’actualité du moment',
+'tooltip-n-currentevents' => "Trouver les informations de fond sur l'actualité du moment",
 'tooltip-n-recentchanges' => 'Liste des modifications récentes sur le wiki',
 'tooltip-n-randompage' => 'Afficher une page au hasard',
 'tooltip-n-help' => 'Aide',
@@ -3090,7 +3103,7 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-ca-nstab-image' => 'Voir la page du fichier',
 'tooltip-ca-nstab-mediawiki' => 'Voir le message système',
 'tooltip-ca-nstab-template' => 'Voir le modèle',
-'tooltip-ca-nstab-help' => 'Voir la page d’aide',
+'tooltip-ca-nstab-help' => "Voir la page d'aide",
 'tooltip-ca-nstab-category' => 'Voir la page de la catégorie',
 'tooltip-minoredit' => 'Marquer mes modifications comme mineures',
 'tooltip-save' => 'Publier vos modifications',
@@ -3103,8 +3116,8 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-recreate' => 'Recréer la page même si celle-ci a été effacée',
 'tooltip-upload' => "Démarrer l'import",
 'tooltip-rollback' => '« Révoquer » annule en un clic la ou les modification(s) de cette page par son dernier contributeur.',
-'tooltip-undo' => '« Défaire » révoque cette modification et ouvre la fenêtre de modification en mode prévisualisation.
-Permet de rétablir la version précédente et d’ajouter un motif dans la boîte de résumé.',
+'tooltip-undo' => "« Défaire » révoque cette modification et ouvre la fenêtre de modification en mode prévisualisation.
+Permet de rétablir la version précédente et d'ajouter un motif dans la boîte de résumé.",
 'tooltip-preferences-save' => 'Sauvegarder les préférences',
 'tooltip-summary' => 'Entrez un bref résumé',
 
@@ -3149,20 +3162,20 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 # Attribution
 'anonymous' => '{{PLURAL:$1|Utilisateur non enregistré|Utilisateurs non enregistrés}} sur {{SITENAME}}',
 'siteuser' => "{{GENDER:$2|l'utilisateur|l'utilisatrice|l'utilisateur}} $1 de {{SITENAME}}",
-'anonuser' => 'l’utilisateur anonyme $1 de {{SITENAME}}',
+'anonuser' => "l'utilisateur anonyme $1 de {{SITENAME}}",
 'lastmodifiedatby' => 'Cette page a été modifiée pour la dernière fois le $1 à $2 par $3.',
 'othercontribs' => 'Basé sur le travail de $1.',
 'others' => 'autres',
-'siteusers' => '{{PLURAL:$2|l’utilisateur|les utilisateurs}} $1 de {{SITENAME}}',
-'anonusers' => '{{PLURAL:$2|l’utilisateur anonyme|les utilisateurs anonymes}} $1 de {{SITENAME}}',
+'siteusers' => "{{PLURAL:$2|l'utilisateur|les utilisateurs}} $1 de {{SITENAME}}",
+'anonusers' => "{{PLURAL:$2|l'utilisateur anonyme|les utilisateurs anonymes}} $1 de {{SITENAME}}",
 'creditspage' => 'Crédits de la page',
-'nocredits' => 'Il n’y a pas d’informations d’attribution disponibles pour cette page.',
+'nocredits' => "Il n'y a pas d'informations d'attribution disponibles pour cette page.",
 
 # Spam protection
 'spamprotectiontitle' => 'Filtre de protection anti-pollution',
-'spamprotectiontext' => 'La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pollution. Ceci est probablement dû à l’introduction d’un lien vers un site externe apparaissant sur la liste noire. Cette dernière utilise les expressions rationnelles suivantes :',
-'spamprotectionmatch' => "La chaîne de caractères « '''$1''' » a déclenché le détecteur de pourriel.",
-'spambot_username' => 'Nettoyage de pourriels par MediaWiki',
+'spamprotectiontext' => "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pollution. Ceci est probablement dû à l'introduction d'un lien vers un site externe apparaissant sur la liste noire. Cette dernière utilise les expressions rationnelles suivantes :",
+'spamprotectionmatch' => "La chaîne de caractères « '''$1''' » a déclenché le détecteur de spam.",
+'spambot_username' => 'Nettoyage de spams par MediaWiki',
 'spam_reverting' => 'Rétablissement de la dernière version ne contenant pas de lien vers $1',
 'spam_blanking' => 'Toutes les versions contenant des liens vers $1 sont blanchies',
 'spam_deleting' => 'Toutes les versions contenaient des liens vers $1, suppression',
@@ -3198,6 +3211,7 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 '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',
@@ -3206,6 +3220,10 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 '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',
@@ -3223,16 +3241,18 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'markaspatrolledtext' => 'Marquer cette page comme relue',
 'markedaspatrolled' => 'Marquée comme relue',
 'markedaspatrolledtext' => 'La version sélectionnée de [[:$1]] a été marquée comme relue.',
-'rcpatroldisabled' => 'La fonction de relecture des modifications récentes n’est pas activée.',
+'rcpatroldisabled' => "La fonction de relecture des modifications récentes n'est pas activée.",
 'rcpatroldisabledtext' => 'La fonctionnalité de relecture des modifications récentes est actuellement désactivée.',
 'markedaspatrollederror' => 'Ne peut être marquée comme relue',
 'markedaspatrollederrortext' => 'Vous devez sélectionner une version pour pouvoir la marquer comme relue.',
-'markedaspatrollederror-noautopatrol' => 'Vous n’avez pas le droit de marquer vos propres modifications comme relues.',
+'markedaspatrollederror-noautopatrol' => "Vous n'avez pas le droit de marquer vos propres modifications comme relues.",
+'markedaspatrollednotify' => 'Cette modification de $1 a été marquée comme relue.',
+'markedaspatrollederrornotify' => 'Échec du marquage comme contrôlé.',
 
 # Patrol log
 'patrol-log-page' => 'Journal des relectures',
-'patrol-log-header' => 'Voici l’historique des versions relues.',
-'log-show-hide-patrol' => '$1 l’historique des relectures',
+'patrol-log-header' => "Voici l'historique des versions relues.",
+'log-show-hide-patrol' => "$1 l'historique des relectures",
 
 # Image deletion
 'deletedrevision' => 'Ancienne version $1 supprimée',
@@ -3240,10 +3260,10 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'filedeleteerror-long' => 'Des erreurs ont été rencontrées lors de la suppression du fichier :
 
 $1',
-'filedelete-missing' => 'Le fichier « $1 » ne peut pas être supprimé parce qu’il n’existe pas.',
-'filedelete-old-unregistered' => 'La version du fichier spécifiée « $1 » n’est pas dans la base de données.',
-'filedelete-current-unregistered' => 'Le fichier spécifié « $1 » n’est pas dans la base de données.',
-'filedelete-archive-read-only' => 'Le dossier d’archivage « $1 » n’est pas modifiable par le serveur.',
+'filedelete-missing' => "Le fichier « $1 » ne peut pas être supprimé parce qu'il n'existe pas.",
+'filedelete-old-unregistered' => "La version du fichier spécifiée « $1 » n'est pas dans la base de données.",
+'filedelete-current-unregistered' => "Le fichier spécifié « $1 » n'est pas dans la base de données.",
+'filedelete-archive-read-only' => "Le dossier d'archivage « $1 » n'est pas modifiable par le serveur.",
 
 # Browsing diffs
 'previousdiff' => '← Modification précédente',
@@ -3251,7 +3271,7 @@ $1',
 
 # Media information
 'mediawarning' => "'''Attention :''' ce type de fichier peut contenir du code malveillant.
-Si vous lexécutez, votre système peut être compromis.",
+Si vous l'exécutez, votre système peut être compromis.",
 'imagemaxsize' => "Taille maximale des images :<br />''(pour les pages de description de fichier)''",
 'thumbsize' => 'Taille de la miniature :',
 'widthheightpage' => '$1 × $2, $3 page{{PLURAL:$3||s}}',
@@ -3261,6 +3281,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.',
@@ -3286,24 +3307,28 @@ Si vous l’exécutez, votre système peut être compromis.",
 'sp-newimages-showfrom' => 'Afficher les nouveaux fichiers à partir du $1 à $2',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'days-abbrev' => '$1 j',
 'seconds' => '{{PLURAL:$1|$1 seconde|$1 secondes}}',
 '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",
 
 # Bad image list
-'bad_image_list' => 'Le format est le suivant :
+'bad_image_list' => "Le format est le suivant :
 
-Seules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.
-Les autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître.',
+Seules les listes d'énumération (commençant par *) sont prises en compte. Le premier lien d'une ligne doit être celui d'une mauvaise image.
+Les autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l'image peut apparaître.",
 
 # Metadata
 'metadata' => 'Métadonnées',
-'metadata-help' => 'Ce fichier contient des informations supplémentaires, probablement ajoutées par l’appareil photo numérique ou le numériseur utilisé pour le créer. Si le fichier a été modifié depuis son état original, certains détails peuvent ne pas refléter entièrement l’image modifiée.',
+'metadata-help' => "Ce fichier contient des informations supplémentaires, probablement ajoutées par l'appareil photo numérique ou le numériseur utilisé pour le créer. Si le fichier a été modifié depuis son état original, certains détails peuvent ne pas refléter entièrement l'image modifiée.",
 'metadata-expand' => 'Afficher les informations détaillées',
 'metadata-collapse' => 'Masquer les informations détaillées',
-'metadata-fields' => 'Les champs de métadonnées d’image listés dans ce message seront inclus dans la page de description de l’image quand la table de métadonnées sera réduite. Les autres champs seront cachés par défaut.
+'metadata-fields' => "Les champs de métadonnées d'image listés dans ce message seront inclus dans la page de description de l'image quand la table de métadonnées sera réduite. Les autres champs seront cachés par défaut.
 * make
 * model
 * datetimeoriginal
@@ -3316,7 +3341,8 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 * imagedescription
 * gpslatitude
 * gpslongitude
-* gpsaltitude',
+* gpsaltitude",
+'metadata-langitem' => "'''$2&nbsp;:''' $1",
 
 # EXIF tags
 'exif-imagewidth' => 'Largeur',
@@ -3331,7 +3357,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-ycbcrpositioning' => 'Positionnement YCbCr',
 'exif-xresolution' => 'Résolution horizontale',
 'exif-yresolution' => 'Résolution verticale',
-'exif-stripoffsets' => 'Emplacement des données de l’image',
+'exif-stripoffsets' => "Emplacement des données de l'image",
 'exif-rowsperstrip' => 'Nombre de lignes par bande',
 'exif-stripbytecounts' => 'Taille en octets par bande',
 'exif-jpeginterchangeformat' => 'Position du SOI JPEG',
@@ -3341,36 +3367,36 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-ycbcrcoefficients' => 'Coefficients YCbCr',
 'exif-referenceblackwhite' => 'Valeurs de référence noir et blanc',
 'exif-datetime' => 'Date de modification',
-'exif-imagedescription' => 'Description de l’image',
-'exif-make' => 'Fabricant de l’appareil',
-'exif-model' => 'Modèle de l’appareil',
+'exif-imagedescription' => "Description de l'image",
+'exif-make' => "Fabricant de l'appareil",
+'exif-model' => "Modèle de l'appareil",
 'exif-software' => 'Logiciel utilisé',
 'exif-artist' => 'Auteur',
-'exif-copyright' => 'Détenteur du droit d’auteur',
+'exif-copyright' => "Détenteur du droit d'auteur",
 'exif-exifversion' => 'Version EXIF',
 'exif-flashpixversion' => 'Version FlashPix',
 'exif-colorspace' => 'Espace colorimétrique',
 'exif-componentsconfiguration' => 'Signification de chaque composante',
-'exif-compressedbitsperpixel' => 'Mode de compression de l’image',
-'exif-pixelydimension' => 'Largeur de l’image',
-'exif-pixelxdimension' => 'Hauteur de l’image',
-'exif-usercomment' => 'Commentaires de l’utilisateur',
+'exif-compressedbitsperpixel' => "Mode de compression de l'image",
+'exif-pixelydimension' => "Largeur de l'image",
+'exif-pixelxdimension' => "Hauteur de l'image",
+'exif-usercomment' => "Commentaires de l'utilisateur",
 'exif-relatedsoundfile' => 'Fichier audio associé',
 'exif-datetimeoriginal' => 'Date de la prise originelle',
 'exif-datetimedigitized' => 'Date de la numérisation',
 'exif-subsectime' => 'Date de modification',
 'exif-subsectimeoriginal' => 'Date de la prise originelle',
 'exif-subsectimedigitized' => 'Date de la numérisation',
-'exif-exposuretime' => 'Temps d’exposition',
+'exif-exposuretime' => "Temps d'exposition",
 'exif-exposuretime-format' => '$1 s ($2 s)',
 'exif-fnumber' => 'Ouverture',
-'exif-exposureprogram' => 'Programme d’exposition',
+'exif-exposureprogram' => "Programme d'exposition",
 'exif-spectralsensitivity' => 'Sensibilité spectrale',
 'exif-isospeedratings' => 'Sensibilité ISO',
-'exif-shutterspeedvalue' => 'vitesse d’obturation de l’APEX',
-'exif-aperturevalue' => 'Ouverture de l’APEX',
+'exif-shutterspeedvalue' => "vitesse d'obturation de l'APEX",
+'exif-aperturevalue' => "Ouverture de l'APEX",
 'exif-brightnessvalue' => 'Luminance APEX',
-'exif-exposurebiasvalue' => 'Correction d’exposition',
+'exif-exposurebiasvalue' => "Correction d'exposition",
 'exif-maxaperturevalue' => 'Ouverture maximale',
 'exif-subjectdistance' => 'Distance du sujet',
 'exif-meteringmode' => 'Mode de mesure',
@@ -3383,12 +3409,12 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-focalplaneyresolution' => 'Résolution verticale du plan focal',
 'exif-focalplaneresolutionunit' => 'Unité de résolution du plan focal',
 'exif-subjectlocation' => 'Localisation du sujet',
-'exif-exposureindex' => 'Index d’exposition',
+'exif-exposureindex' => "Index d'exposition",
 'exif-sensingmethod' => 'Type de capteur',
 'exif-filesource' => 'Source du fichier',
 'exif-scenetype' => 'Type de scène',
 'exif-customrendered' => 'Rendu personnalisé',
-'exif-exposuremode' => 'Mode d’exposition',
+'exif-exposuremode' => "Mode d'exposition",
 'exif-whitebalance' => 'Balance des blancs',
 'exif-digitalzoomratio' => 'Taux de zoom numérique',
 'exif-focallengthin35mmfilm' => 'Longueur focale pour un film 35 mm',
@@ -3399,13 +3425,13 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-sharpness' => 'Netteté',
 'exif-devicesettingdescription' => 'Description de la configuration du dispositif',
 'exif-subjectdistancerange' => 'Distance du sujet',
-'exif-imageuniqueid' => 'Identifiant unique de l’image',
+'exif-imageuniqueid' => "Identifiant unique de l'image",
 'exif-gpsversionid' => 'Version de la balise GPS',
 'exif-gpslatituderef' => 'Référence pour la latitude',
 'exif-gpslatitude' => 'Latitude',
 'exif-gpslongituderef' => 'Référence pour la longitude',
 'exif-gpslongitude' => 'Longitude',
-'exif-gpsaltituderef' => 'Référence d’altitude (0=altitude, 1=profondeur)',
+'exif-gpsaltituderef' => "Référence d'altitude (0=altitude, 1=profondeur)",
 'exif-gpsaltitude' => 'Altitude',
 'exif-gpstimestamp' => 'Heure GPS (horloge atomique)',
 'exif-gpssatellites' => 'Satellites utilisés pour la mesure',
@@ -3416,8 +3442,8 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-gpsspeed' => 'Vitesse du récepteur GPS',
 'exif-gpstrackref' => 'Référence pour la direction du mouvement',
 'exif-gpstrack' => 'Direction du mouvement',
-'exif-gpsimgdirectionref' => 'Référence pour la direction de l’image',
-'exif-gpsimgdirection' => 'Direction de l’image',
+'exif-gpsimgdirectionref' => "Référence pour la direction de l'image",
+'exif-gpsimgdirection' => "Direction de l'image",
 'exif-gpsmapdatum' => 'Système géodésique utilisé',
 'exif-gpsdestlatituderef' => 'Référence pour la latitude de la destination',
 'exif-gpsdestlatitude' => 'Latitude de la destination',
@@ -3450,7 +3476,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-headline' => 'Titre',
 'exif-credit' => 'Crédit / fournisseur',
 'exif-source' => 'Source',
-'exif-editstatus' => 'Statut éditorial de l’image',
+'exif-editstatus' => "Statut éditorial de l'image",
 'exif-urgency' => 'Urgence',
 'exif-fixtureidentifier' => 'Nom élément récurrent',
 'exif-locationdest' => 'Lieu représenté',
@@ -3467,17 +3493,17 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-originaltransmissionref' => 'Code de localisation de la transmission originale',
 'exif-identifier' => 'Identifiant',
 'exif-lens' => 'Lentille utilisée',
-'exif-serialnumber' => 'Numéro de série de l’appareil photo',
+'exif-serialnumber' => "Numéro de série de l'appareil photo",
 'exif-cameraownername' => "Propriétaire de l'appareil photo",
 'exif-label' => 'Libellé',
 'exif-datetimemetadata' => 'Date de la dernière modification des métadonnées',
-'exif-nickname' => 'Nom informel de l’image',
+'exif-nickname' => "Nom informel de l'image",
 'exif-rating' => 'Note (sur 5)',
 'exif-rightscertificate' => 'Certificat de gestion des droits',
-'exif-copyrighted' => 'Statut du droit d’auteur',
-'exif-copyrightowner' => 'Détenteur du droit d’auteur',
-'exif-usageterms' => 'Conditions d’utilisation',
-'exif-webstatement' => 'Déclaration de droits d’auteur en ligne',
+'exif-copyrighted' => "Statut du droit d'auteur",
+'exif-copyrightowner' => "Détenteur du droit d'auteur",
+'exif-usageterms' => "Conditions d'utilisation",
+'exif-webstatement' => "Déclaration de droits d'auteur en ligne",
 'exif-originaldocumentid' => 'Identifiant unique du document original',
 'exif-licenseurl' => 'URL de la licence',
 'exif-morepermissionsurl' => 'Informations sur les licences alternatives',
@@ -3487,22 +3513,23 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-disclaimer' => 'Désistement',
 'exif-contentwarning' => 'Avertissement sur le contenu',
 'exif-giffilecomment' => 'Commentaire de fichier GIF',
-'exif-intellectualgenre' => 'Type d’élément',
+'exif-intellectualgenre' => "Type d'élément",
 'exif-subjectnewscode' => 'Code du sujet',
 'exif-scenecode' => 'Code de scène IPTC',
 'exif-event' => 'Événement représenté',
 'exif-organisationinimage' => 'Organisation représentée',
 'exif-personinimage' => 'Personne représentée',
-'exif-originalimageheight' => 'Hauteur de l’image avant qu’elle ait été recadrée',
-'exif-originalimagewidth' => 'Largeur de l’image avant qu’elle ait été recadrée',
+'exif-originalimageheight' => "Hauteur de l'image avant qu'elle ait été recadrée",
+'exif-originalimagewidth' => "Largeur de l'image avant qu'elle ait été recadrée",
 
 # EXIF attributes
 'exif-compression-1' => 'Non compressé',
 'exif-compression-2' => 'CCITT Groupe 3 Longueur du codage Huffman modifié de dimension 1',
 'exif-compression-3' => 'CCITT Groupe 3 codage du fax',
 'exif-compression-4' => 'CCITT Groupe 4 codage du fax',
+'exif-compression-6' => 'JPEG (ancien)',
 
-'exif-copyrighted-true' => 'Soumis au droit d’auteur',
+'exif-copyrighted-true' => "Soumis au droit d'auteur",
 'exif-copyrighted-false' => 'Domaine public',
 
 'exif-unknowndate' => 'Date inconnue',
@@ -3521,16 +3548,16 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 
 'exif-colorspace-65535' => 'Non calibré',
 
-'exif-componentsconfiguration-0' => 'N’existe pas',
+'exif-componentsconfiguration-0' => "N'existe pas",
 'exif-componentsconfiguration-5' => 'V',
 
 'exif-exposureprogram-0' => 'Indéfini',
 'exif-exposureprogram-1' => 'Manuel',
 'exif-exposureprogram-2' => 'Programme normal',
-'exif-exposureprogram-3' => 'Priorité à l’ouverture',
-'exif-exposureprogram-4' => 'Priorité à l’obturateur',
+'exif-exposureprogram-3' => "Priorité à l'ouverture",
+'exif-exposureprogram-4' => "Priorité à l'obturateur",
 'exif-exposureprogram-5' => 'Programme création (préférence à la profondeur de champ)',
-'exif-exposureprogram-6' => 'Programme action (préférence à la vitesse d’obturation)',
+'exif-exposureprogram-6' => "Programme action (préférence à la vitesse d'obturation)",
 'exif-exposureprogram-7' => 'Mode portrait (pour clichés de près avec arrière-plan flou)',
 'exif-exposureprogram-8' => 'Mode paysage (pour des clichés de paysages nets)',
 
@@ -3646,8 +3673,8 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-gpsmeasuremode-3' => 'Mesure à 3 dimensions',
 
 # Pseudotags used for GPSSpeedRef
-'exif-gpsspeed-k' => 'Kilomètres à l’heure',
-'exif-gpsspeed-m' => 'Milles à l’heure',
+'exif-gpsspeed-k' => "Kilomètres à l'heure",
+'exif-gpsspeed-m' => "Milles à l'heure",
 'exif-gpsspeed-n' => 'Nœud',
 
 # Pseudotags used for GPSDestDistanceRef
@@ -3706,11 +3733,11 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-urgency-normal' => 'Normale ($1)',
 'exif-urgency-low' => 'Faible ($1)',
 'exif-urgency-high' => 'Haute ($1)',
-'exif-urgency-other' => 'Urgence définie par l’utilisateur ($1)',
+'exif-urgency-other' => "Urgence définie par l'utilisateur ($1)",
 
 # External editor support
 'edit-externally' => 'Modifier ce fichier en utilisant une application externe',
-'edit-externally-help' => '(Consulter [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] pour plus d’informations)',
+'edit-externally-help' => "(Consulter [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d'installation] pour plus d'informations)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tout',
@@ -3719,8 +3746,8 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'limitall' => 'tous',
 
 # E-mail address confirmation
-'confirmemail' => 'Confirmer l’adresse de courriel',
-'confirmemail_noemail' => 'Vous n’avez pas défini une adresse de courriel valide dans vos [[Special:Preferences|préférences]].',
+'confirmemail' => "Confirmer l'adresse de courriel",
+'confirmemail_noemail' => "Vous n'avez pas défini une adresse de courriel valide dans vos [[Special:Preferences|préférences]].",
 'confirmemail_text' => 'Ce wiki nécessite la vérification de votre adresse de courriel avant de pouvoir utiliser toute fonction de messagerie.
 Utilisez le bouton ci-dessous pour envoyer un courriel de confirmation à votre adresse.
 Le courriel inclura un lien comportant un code à usage unique et limité dans le temps ;
@@ -3729,39 +3756,39 @@ chargez ce lien dans votre navigateur pour confirmer que votre adresse de courri
 si vous venez de créer votre compte, veuillez attendre quelques minutes que le courriel arrive avant de demander un nouveau code.',
 'confirmemail_send' => 'Envoyer un code de confirmation',
 'confirmemail_sent' => 'Courriel de confirmation envoyé',
-'confirmemail_oncreate' => 'Un code de confirmation a été envoyé à votre adresse de courriel.
-Ce code n’est pas requis pour vous identifier sur ce wiki, mais vous devrez le fournir pour activer toute fonction de messagerie.',
-'confirmemail_sendfailed' => '{{SITENAME}} n’a pas pu vous envoyer le courriel de confirmation.
+'confirmemail_oncreate' => "Un code de confirmation a été envoyé à votre adresse de courriel.
+Ce code n'est pas requis pour vous identifier sur ce wiki, mais vous devrez le fournir pour activer toute fonction de messagerie.",
+'confirmemail_sendfailed' => "{{SITENAME}} n'a pas pu vous envoyer le courriel de confirmation.
 Veuillez vérifiez que votre adresse de courriel ne comprend aucun caractère incorrect.
 
-Le programme d’envoi de courriel a retourné l’indication suivante : $1',
+Le programme d'envoi de courriel a retourné l'indication suivante : $1",
 'confirmemail_invalid' => 'Code de confirmation incorrect.
 Celui-ci a peut-être expiré.',
 'confirmemail_needlogin' => 'Vous devez vous $1 pour confirmer votre adresse de courriel.',
 'confirmemail_success' => 'Votre adresse de courriel a été confirmée.
 Vous pouvez maintenant vous [[Special:UserLogin|{{MediaWiki:Loginreqlink}}]] et profiter du wiki.',
 'confirmemail_loggedin' => 'Votre adresse de courriel est maintenant confirmée.',
-'confirmemail_error' => 'Un problème est survenu lors de l’enregistrement de votre confirmation.',
-'confirmemail_subject' => 'Confirmation d’adresse de courriel pour {{SITENAME}}',
-'confirmemail_body' => 'Quelqu’un, probablement vous, à partir de l’adresse IP $1,
+'confirmemail_error' => "Un problème est survenu lors de l'enregistrement de votre confirmation.",
+'confirmemail_subject' => "Confirmation d'adresse de courriel pour {{SITENAME}}",
+'confirmemail_body' => "Quelqu'un, probablement vous, à partir de l'adresse IP $1,
 a enregistré un compte « $2 » avec cette adresse de courriel
 sur le site {{SITENAME}}.
 
 Pour confirmer que ce compte vous appartient vraiment et afin
-dactiver les fonctions de messagerie sur {{SITENAME}},
+d'activer les fonctions de messagerie sur {{SITENAME}},
 veuillez suivre ce lien dans votre navigateur :
 
 $3
 
-Si vous n’avez *pas* enregistré ce compte, n’ouvrez pas ce lien ;
-vous pouvez suivre lautre lien ci-dessous pour annuler la
+Si vous n'avez *pas* enregistré ce compte, n'ouvrez pas ce lien ;
+vous pouvez suivre l'autre lien ci-dessous pour annuler la
 confirmation de votre adresse courriel :
 
 $5
 
-Ce code de confirmation expirera le $4.',
-'confirmemail_body_changed' => 'Quelqu’un, probablement vous, à partir de l’adresse IP $1,
-a modifié ladresse de courriel associée au compte « $2 » de {{SITENAME}}
+Ce code de confirmation expirera le $4.",
+'confirmemail_body_changed' => "Quelqu'un, probablement vous, à partir de l'adresse IP $1,
+a modifié l'adresse de courriel associée au compte « $2 » de {{SITENAME}}
 en cette adresse.
 
 Pour confirmer que ce compte vous appartient vraiment et afin
@@ -3770,14 +3797,14 @@ veuillez suivre ce lien dans votre navigateur :
 
 $3
 
-Si ce compte ne vous appartient *pas*, nouvrez pas ce lien ;
-vous pouvez suivre lautre lien ci-dessous pour annuler la
+Si ce compte ne vous appartient *pas*, n'ouvrez pas ce lien ;
+vous pouvez suivre l'autre lien ci-dessous pour annuler la
 confirmation de votre adresse courriel :
 
 $5
 
-Ce code de confirmation expirera le $4.',
-'confirmemail_body_set' => 'Quelqu’un, probablement vous, de l’adresse IP $1, a modifié l’adresse de courriel du compte « $2 » en celle-ci sur {{SITENAME}}.
+Ce code de confirmation expirera le $4.",
+'confirmemail_body_set' => "Quelqu'un, probablement vous, de l'adresse IP $1, a modifié l'adresse de courriel du compte « $2 » en celle-ci sur {{SITENAME}}.
 
 Pour confirmer que ce compte vous appartient et réactiver les fonctions de courriel sur {{SITENAME}}, ouvrez ce lien dans votre navigateur Web :
 
@@ -3785,30 +3812,30 @@ $3
 
 Ce code de confirmation expirera le $4.
 
-Si le compte ne vous appartient PAS, suivez plutôt ce lien pour annuler la confirmation de ladresse de courriel :
+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',
+$5",
+'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',
@@ -3851,18 +3878,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.',
@@ -3876,9 +3908,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.',
@@ -3948,61 +3980,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 pourriel',
+'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',
@@ -4016,7 +4048,7 @@ 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',
@@ -4028,14 +4060,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',
@@ -4065,7 +4097,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.',
@@ -4073,9 +4105,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',
@@ -4091,7 +4123,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',
@@ -4100,11 +4132,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',
@@ -4113,15 +4145,19 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-move-move_redir-noredirect' => '$1 a déplacé la page $3 vers $4 par-dessus une redirection sans laisser de redirection',
 'logentry-patrol-patrol' => '$1 a marqué la révision $4 de la page $3 comme relue',
 'logentry-patrol-patrol-auto' => '$1 a automatiquement marqué la révision $4 de la page $3 comme relue',
-'logentry-newusers-newusers' => '$1 a créé un compte utilisateur',
-'logentry-newusers-create' => '$1 a créé son compte utilisateur',
-'logentry-newusers-create2' => '$1 a créé un compte utilisateur $3',
+'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-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',
@@ -4132,7 +4168,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
@@ -4140,39 +4176,39 @@ 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' => 'Il y a un bogue dans ce logiciel ; il n’utilise pas la méthode HTTP adéquate.',
-'api-error-noimageinfo' => 'Le téléversement a réussi, mais le serveur n’a pas donné d’informations sur le fichier.',
+'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-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-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',
index b3e439b..461b83e 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 (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-showtoolbar' => 'Montrar 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-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-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 ou ben 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-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-forceeditsummary' => 'M’avèrtir 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 ou ben 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 ou ben 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}}',
@@ -497,7 +499,7 @@ $messages = array(
 '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}}',
+'viewdeleted_short' => 'Vêre {{PLURAL:$1|yon 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,11 +524,11 @@ $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',
+'protectedpage' => 'Pâge protègiêe',
 'jumpto' => 'Alar a :',
 'jumptonavigation' => 'navigacion',
 'jumptosearch' => 'rechèrche',
@@ -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.
@@ -579,20 +581,20 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 'youhavenewmessagesmulti' => 'Vos avé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 ?',
+'thisisdeleted' => 'Voléd-vos vêre ou ben refâre $1 ?',
+'viewdeleted' => 'Vêre $1 ?',
 'restorelink' => '{{PLURAL:$1|yon 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 ou ben 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.',
 '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.',
@@ -669,8 +671,10 @@ La volyéd signalar a un [[Special:ListUsers/sysop|administrator]] sen oubliar d
 '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-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.',
@@ -679,29 +683,35 @@ 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.',
+'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.
+'protectedinterface' => 'Cela pâge-que balye de tèxto d’entèrface por la programeria sur ceti vouiqui, et est vêr protègiêe 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.
+'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â :
+'sqlhidden' => '(Demanda SQL cachiêe)',
+'cascadeprotected' => 'Cela pâge-que est protègiêe perce qu’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.',
+'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ê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 en lèctura solèta.
+
+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 ou ben cel’accion at fôta d’étre branchiê sur ceti vouiqui.',
 
 # Virus scanner
 'virus-badscanner' => "Crouye configuracion : scanor de virus encognu : ''$1''",
@@ -709,13 +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.",
-'welcomecreation' => '== Benvegnua, $1 ! ==
-Voutron compto est étâ fêt.
-Oubliâd pas de pèrsonalisar voutres [[Special:Preferences|prèferences dessus {{SITENAME}}]].',
+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 :',
@@ -745,24 +755,24 @@ Oubliâd pas de pèrsonalisar voutres [[Special:Preferences|prèferences dessus
 Nen volyéd chouèsir 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.
+'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.
 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.
+'nocookieslogin' => "{{SITENAME}} emplèye 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.
 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.',
+'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.
+'wrongpassword' => 'Lo contresegno buchiê est fôx.
 Volyéd tornar èprovar.',
 'wrongpasswordempty' => 'Vos éd pas buchiê de contresegno.
 Volyéd tornar èprovar.',
@@ -780,75 +790,76 @@ Voutron contresegno temporèro èxpirerat dens {{PLURAL:$5|yon 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.',
 '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 mèssâjo de sovegnence 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' => 'Quârqu’un qu’emplèye 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.
 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.
+'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye perce que semble avêr un format pas justo.
 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.',
+'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' => 'Quârqu’un 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.
+'login-throttled' => 'Dês pou vos éd èprovâ un mouél de branchements.
 Volyéd atendre 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 perce que 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' => 'At tâchiê de mandar un mèssâjo sen adrèce èlèctronica.',
+'user-mail-no-body' => '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-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
@@ -874,8 +885,8 @@ vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contres
 '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',
@@ -883,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èladrèce èlèctronica :',
+'changeemail-newemail' => 'Novèladrèce èlèctronica :',
 'changeemail-none' => '(niona)',
+'changeemail-password' => 'Voutron contresegno dessus {{SITENAME}} :',
 'changeemail-submit' => 'Changiér l’adrèce èlèctronica',
 'changeemail-cancel' => 'Anular',
 
@@ -913,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â.",
+Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat encartâ sen rèsumâ.",
 'missingcommenttext' => 'Volyéd buchiér 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).'''
 
 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.
+Volyéd entrebetar 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 perce qu’el est étâye empleyêe per un ôtr’utilisator, lui-mémo blocâ per $1.
+La rêson balyêe est :
 
 :''$2''
 
@@ -953,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 avé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.
+Volyéd entrebetar 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.
+Volyéd buchiér et pués validar 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, volyéd [[Special:UserLogin/signup|fâre un compto]] ou ben [[Special:UserLogin|vos branchiér]] 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â.
+'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 avé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â.
 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â.
+'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.'''
+'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 a 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.'''
 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.'''
+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è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, la prèvisualisacion at étâ cachiê por prèvegnir les ataques per JavaScript.''
+''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, 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.'''",
+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 est pas étâ accèptâ perce que 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' => "Quârqu’un d’ô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' => "Volyéd notar 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 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’un’ôtra ressôrsa libra.
+'''Empleyé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ê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 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’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 somês fât {{PLURAL:$1|yon Kio|$1 Kio}}, cen que dèpâsse la limita fixâye a {{PLURAL:$2|yon 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 lo 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.'''
+La dèrriére entrâ du jornal est montrâye ce-desot por refèrence :",
+'semiprotectedpagewarning' => "'''Nota :''' ceta pâge est étâye protègiêe de façon que solament los utilisators encartâs la pouessont changiér.
+La dèrriére entrâ du jornal est montrâye ce-desot por refèrence :",
+'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.'''
+La dèrriére entrâ du jornal est montrâye ce-desot por refèrence :",
+'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]].',
+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 avé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 avéd pas la pèrmission de fâre l’accion demandâye por {{PLURAL:$1|ceta rêson|cetes rêsons}} :',
+'permissionserrorstext-withaction' => 'Vos avé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 montrâ 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 montrâ 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â perce que 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 u muens yon 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.
+Volyéd controlar la comparèson ce-desot por vos assurar qu’o est franc cen que vos voléd fâre et pués encartar 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 perce que 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 (ou ben 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' => 'Éte-vos 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' => '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 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 ».
+'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 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 ».
+'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 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.
+'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 quârqu’un d’ôtro justo que vos tâchiêvâd d’o changiér.
 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-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',
@@ -1257,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, volyéd tornar 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 »',
@@ -1298,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|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|yon utilisator|$2 utilisators}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|Yona 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|Yona 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â, volyéd èprovar 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' => 'Bârra rapida',
 'qbsettings-none' => 'Niona',
-'qbsettings-fixedleft' => 'Gôche',
-'qbsettings-fixedright' => 'Drêta',
+'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',
@@ -1382,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',
@@ -1440,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 ou ben 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 avé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',
@@ -1550,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
@@ -1656,34 +1692,34 @@ 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 (at fôta de JavaScript)',
 'rc-enhanced-hide' => 'Cachiér los dètalys',
 'rc-old-title' => 'fêt avouéc lo titro « $1 »',
 
@@ -1711,14 +1747,13 @@ Les pâges de voutra [[Special:Watchlist|lista de survelyence]] sont '''en grâs
 '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.",
+'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 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' => '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.',
@@ -1855,6 +1890,7 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 '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-copy-upload-invalid-domain' => 'La copia des tèlèchargements est pas disponibla dês ceti domêno.',
 
 # File backend
 'backend-fail-stream' => 'Empossiblo de liére lo fichiér $1.',
@@ -1864,6 +1900,7 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 '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-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 en $2.',
 'backend-fail-copy' => 'Empossiblo de copiyér lo fichiér $1 vers $2.',
@@ -1873,6 +1910,18 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 '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-maxsize' => 'Empossiblo d’ècrire lo fichiér « $1 » perce qu’il est ples grant que {{PLURAL:$2|yon octèt|$2 octèts}}.',
+'backend-fail-readonly' => "Ora lo sistèmo de stocâjo « $1 » est en lèctura solèta. La rêson balyêye 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 en « $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 ou ben 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ê.',
@@ -1883,7 +1932,8 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 '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-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.',
@@ -1965,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',
@@ -2023,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',
@@ -2045,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
@@ -2100,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}}',
@@ -2124,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',
@@ -2135,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)',
@@ -2156,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',
@@ -2169,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
@@ -2239,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â)',
 
@@ -2248,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.
@@ -2280,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â',
@@ -2293,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 :',
@@ -2317,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',
@@ -2340,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
@@ -2350,44 +2400,48 @@ 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_newpagetext' => 'O est una pâge novèla.',
 'enotif_impersonal_salutation' => 'Usanciér de {{SITENAME}}',
-'changed' => 'changiê',
-'created' => 'fêta',
-'enotif_subject' => 'La pâge « $PAGETITLE » de {{SITENAME}} at étâ $CHANGEDORCREATED per $PAGEEDITOR',
+'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.
-
-$NEWPAGE
+Rèsumâ du contributor : $PAGESUMMARY $PAGEMINOREDIT
 
-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',
@@ -2412,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',
@@ -2450,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]] »',
@@ -2491,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',
@@ -2516,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',
@@ -2546,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 :',
@@ -2579,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)',
@@ -2588,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',
@@ -2639,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',
@@ -2717,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',
@@ -2772,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.
@@ -2938,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]].
@@ -2971,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',
@@ -3001,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',
@@ -3020,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',
@@ -3045,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',
@@ -3120,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',
@@ -3140,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.',
 
@@ -3179,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.',
@@ -3196,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',
@@ -3208,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 :
@@ -3220,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
@@ -3982,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.',
 
@@ -4035,13 +4122,17 @@ 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].
@@ -4079,7 +4170,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 7d8baf0..48da258 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,16 +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.",
-'welcomecreation' => '== Wäljkiimen, $1! ==
-
-Din brükerkonto wörd inruchted.
-Ferjees ai, din [[Special:Preferences|{{SITENAME}}-önjstalinge]] önjtupååsen.',
+'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',
@@ -494,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.',
@@ -522,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',
@@ -578,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',
 
@@ -671,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.',
@@ -683,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.",
@@ -700,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''.
@@ -756,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.',
@@ -779,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.
@@ -798,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. 
@@ -930,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',
@@ -983,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',
@@ -1057,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.',
@@ -1118,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',
@@ -1131,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:',
@@ -1247,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',
@@ -1416,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)',
 
@@ -1427,14 +1453,10 @@ Det beskriiwang faan't [$2 beskriiwangssidj] woort oner uunwiset.",
 
 # Watchlist
 'watchlist' => 'Eefterkiikliste',
-'mywatchlist' => 'Eefterkiikliste',
+'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',
@@ -1541,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.",
@@ -1566,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:',
@@ -1599,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
@@ -1859,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 7890a9f..8cac7b2 100644 (file)
@@ -411,9 +411,6 @@ Al podarès vê dentri caratars che no podin jessi doprâts tai titui.',
 
 Tu puedis continuâ a doprâ {{SITENAME}} come anonim, o tu puedis <span class='plainlinks'>[$1 jentrâ di gnûf]</span> cul stes o cuntun altri non utent.
 Considere che cualchi pagjine e pues mostrâti ancjemò come jentrât tal sît fin cuant che no tu netis la memorie cache dal sgarfadôr.",
-'welcomecreation' => '== Mandi e benvignût $1! ==
-La tô identitât e je stade creade. 
-No stâ dismenteâti di gambiâ lis [[Special:Preferences|preferencis di {{SITENAME}}]].',
 'yourname' => 'Non utent',
 'yourpassword' => 'Peraule clâf',
 'yourpasswordagain' => 'Torne a scrivile',
@@ -577,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',
@@ -818,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',
 
@@ -1116,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',
@@ -1176,9 +1172,9 @@ e la pagjine e sarà '''gruessute''' te [[Special:RecentChanges|liste dai ultins
 'enotif_mailer' => 'Sisteme di notifiche par pueste eletroniche di {{SITENAME}}',
 'enotif_reset' => 'Segne dutis lis pagjinis come visitadis',
 'enotif_impersonal_salutation' => 'Utent di {{SITENAME}}',
-'changed' => 'cambiade',
-'created' => 'creade',
 'enotif_anon_editor' => 'utent anonim $1',
+'created' => 'creade',
+'changed' => 'cambiade',
 
 # Delete
 'deletepage' => 'Elimine pagjine',
index 142a056..994b15b 100644 (file)
@@ -505,8 +505,6 @@ De oanfierde reden is ''$2''.",
 
 Jo kinne de {{SITENAME}} fierders anonym brûke, of jo op 'e <span class='plainlinks'>[$1 nij oanmelde]</span> ûnder deselde of in oare namme.
 Mûglik wurdt noch in tal siden werjûn as wiene Jo oanmeld, oant Jo de cache fan Jo browser leegje.",
-'welcomecreation' => '<h2>Wolkom, $1!</h2><p>Jo ynstellings binne oanmakke.
-Ferjit net se oan jo foarkar oan te passen.',
 'yourname' => 'Jo meidochnamme:',
 'yourpassword' => 'Jo wachtwurd',
 'yourpasswordagain' => 'Jo wachtwurd (nochris)',
@@ -739,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',
@@ -1157,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',
@@ -1646,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.
@@ -1714,10 +1709,7 @@ At jo letter in side net mear folgje wolle, dan brûke jo op dy side de keppelin
 'watching' => "Dwaande mei op'e folchlist te setten ...",
 'unwatching' => "Dwaande mei fan'e folchlist ôf te heljen ...",
 
-'enotif_newpagetext' => 'Dit is in nije side.',
 'enotif_impersonal_salutation' => 'meidogger fan {{SITENAME}}',
-'changed' => 'feroare',
-'created' => 'oanmakke',
 'enotif_body' => 'Bêste $WATCHINGUSERNAME,
 
 De {{SITENAME}}side \'$PAGETITLE\' is op $PAGEEDITDATE $CHANGEDORCREATED troch meidogger $PAGEEDITOR;
@@ -1741,6 +1733,8 @@ om jo folchlistynstellings te feroarjen.
 
 Reaksjes en fierdere help:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oanmakke',
+'changed' => 'feroare',
 
 # Delete
 'deletepage' => 'Wisk side',
@@ -2362,5 +2356,6 @@ Wolle jo de side wier op 'e nij skriuwe?",
 '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 bd2c902..ba39b45 100644 (file)
@@ -227,7 +227,7 @@ $messages = array(
 'cancel' => 'Cealaigh',
 'moredotdotdot' => 'Tuilleadh...',
 'mypage' => 'Mo leathanach',
-'mytalk' => 'Mo chuid phlé',
+'mytalk' => 'Plé',
 'anontalk' => 'Plé don seoladh IP seo',
 'navigation' => 'Nascleanúint',
 'and' => '&#32;agus',
@@ -477,9 +477,6 @@ An fáth ná ''$2''.",
 
 Is féidir leat an {{SITENAME}} a úsáid fós gan ainm, nó is féidir leat <span class='plainlinks'>[$1 logáil isteach arís]</span> mar an úsáideoir céanna, nó mar úsáideoir eile.
 Tabhair faoi deara go taispeáinfear roinnt leathanaigh mar atá tú logáilte isteach fós, go dtí go ghlanfá amach do taisce líonleitheora.",
-'welcomecreation' => '== Tá fáilte romhat, $1! ==
-
-Cruthaíodh do chuntas. Ná déan dearmad athrú a dhéanamh ar do chuid [[Special:Preferences|sainroghanna {{GRAMMAR:genitive|{{SITENAME}}}}]].',
 'yourname' => "D'ainm úsáideora",
 'yourpassword' => "D'fhocal faire",
 'yourpasswordagain' => "Athiontráil d'fhocal faire",
@@ -659,7 +656,8 @@ níor sábháladh é go fóill!'''",
 Cuimhnigh go n-úsáideann leathanaigh shaincheaptha .css agus .js teideal i gcás íochtar, m.sh. {{ns:user}}:Foo/vector.css i leapa {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Leasaithe)',
 'note' => "'''Tabhair faoi deara:'''",
-'previewnote' => "'''Cuimhnigh nach bhfuil ach réamhamharc sa leathanach seo, agus nach sábháladh fós é!'''",
+'previewnote' => "'''Cuimhnigh nach bhfuil ach réamhamharc sa leathanach seo.'''
+Níl do chuid athruithe shábháilte fós!",
 'previewconflict' => 'San réamhamharc seo, feachann tú an téacs dé réir an eagarbhosca
 thuas mar a taispeáinfear é má sábháilfear é.',
 'editing' => 'Ag athrú $1',
@@ -770,7 +768,7 @@ Treoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roim
 'lineno' => 'Líne $1:',
 'compareselectedversions' => 'Cuir na leagain roghnaithe i gcomparáid',
 'editundo' => 'cealaigh',
-'diff-multi' => '({{PLURAL:$1|Leasú idirmheánach amháin|$1 leasú idirmheánach}} nach thaispeántar.)',
+'diff-multi' => '({{PLURAL:$1|Leasú idirmheánach amháin|$1 leasú idirmheánach}} le {{PLURAL:$2|úsáideoir amháin|$2 úsáideoirí}} nach thaispeántar.)',
 
 # Search results
 'searchresults' => 'Torthaí an chuardaigh',
@@ -788,7 +786,7 @@ Treoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roim
 'searchmenu-legend' => 'Sainroghanna cuardaithe',
 'searchmenu-new' => "'''Cruthaigh an leathanach \"[[:\$1]]\" ar an vicí seo!'''",
 'searchhelp-url' => 'Help:Clár_ábhair',
-'searchprofile-project' => 'Leathanaigh thionscadail',
+'searchprofile-project' => 'Leathanaigh thionscadail agus cabhair',
 'searchprofile-images' => 'Ilmheáin',
 'searchprofile-everything' => 'Gach rud',
 'searchprofile-articles-tooltip' => 'Cuardaigh i $1',
@@ -829,7 +827,7 @@ Bain triail as ''all:'' a chur roimh d'iarratas chun an t-inneachar ar fad (leat
 
 # Preferences page
 'preferences' => 'Sainroghanna',
-'mypreferences' => 'Mo shainroghanna',
+'mypreferences' => 'Sainroghanna',
 'prefsnologin' => 'Níl tú logáilte isteach',
 'prefsnologintext' => 'Ní mór duit <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logáil isteach]</span> chun do chuid sainroghanna phearsanta a shocrú.',
 'changepassword' => "Athraigh d'fhocal faire",
@@ -948,6 +946,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',
 
@@ -1078,7 +1079,7 @@ Má theastáilann uait do chomhad a uaslódáil fós, téigh ar ais agus úsáid
 'filehist-dimensions' => 'Toisí',
 'filehist-filesize' => 'Méid an comhad',
 'filehist-comment' => 'Nóta tráchta',
-'imagelinks' => 'Naisc comhaid',
+'imagelinks' => 'Úsáid comhaid',
 'linkstoimage' => 'Tá nasc chuig an gcomhad seo ar {{PLURAL:$1|na leathanaigh|$1 an leathanach}} seo a leanas:',
 'nolinkstoimage' => 'Níl nasc ó aon leathanach eile don íomhá seo.',
 'sharedupload' => 'Is uaslodáil roinnte atá ann sa comhad seo, as $1, agus is féidir le tionscadail eile é a úsáid.',
@@ -1241,9 +1242,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',
@@ -1273,7 +1271,8 @@ Beidh do seoladh ríomhphoist a d\'iontráil tú i [[Special:Preferences|do chui
 
 # Watchlist
 'watchlist' => 'Mo liosta faire',
-'mywatchlist' => 'Mo liosta faire',
+'mywatchlist' => 'Liosta faire',
+'watchlistfor2' => 'Do $1 ($2)',
 'nowatchlist' => 'Níl aon rud ar do liosta faire.',
 'watchlistanontext' => "$1, le d'thoil, chun míreanna ar do liosta faire a fheiceáil ná a athrú.",
 'watchnologin' => 'Níl tú logáilte isteach',
@@ -1307,11 +1306,7 @@ taobh istigh den tréimhse atá roghnaithe agat.',
 
 'enotif_mailer' => 'Fógrasheoltóir as {{SITENAME}}',
 'enotif_reset' => 'Marcáil gach leathanach bheith tadhlaithe',
-'enotif_newpagetext' => 'Is leathanach nua é seo.',
 'enotif_impersonal_salutation' => 'úsáideoir {{SITENAME}}',
-'changed' => "D'athraigh",
-'created' => 'Chruthaigh',
-'enotif_subject' => '  $CHANGEDORCREATED $PAGEEDITOR an leathanach $PAGETITLE ag {{SITENAME}}.',
 'enotif_lastvisited' => 'Féach ar $1 le haghaidh gach athrú a rinneadh ó thús na cuairte seo caite a rinne tú.',
 'enotif_anon_editor' => 'úsáideoir gan ainm $1',
 'enotif_body' => 'A $WATCHINGUSERNAME, a chara,
@@ -1341,6 +1336,8 @@ $UNWATCHURL
 
 Aiseolas agus a thuilleadh cabhrach:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Chruthaigh',
+'changed' => "D'athraigh",
 
 # Delete
 'deletepage' => 'Scrios an leathanach',
@@ -1458,7 +1455,7 @@ Is an téacs as na leagan scriosta seo ar fáil do riarthóirí amháin.',
 # Contributions
 'contributions' => 'Dréachtaí úsáideora',
 'contributions-title' => 'Dréachtaí úsáideora do $1',
-'mycontris' => 'Mo chuid dréachtaí',
+'mycontris' => 'Dréachtaí',
 'contribsub2' => 'Do $1 ($2)',
 'nocontribs' => 'Ní bhfuarthas aon athrú a bhí cosúil le na crítéir seo.',
 'uctop' => ' (barr)',
@@ -1485,14 +1482,14 @@ Is an téacs as na leagan scriosta seo ar fáil do riarthóirí amháin.',
 'nolinkshere-ns' => "Níl leathanach ar bith ann san ainmspás roghnaithe a bhfuil nasc chuig '''[[:$1]]''' air.",
 'isredirect' => 'Leathanach athsheolaidh',
 'istemplate' => 'iniamh',
-'isimage' => 'nasc íomhá',
+'isimage' => 'nasc comhad',
 'whatlinkshere-prev' => '{{PLURAL:$1|roimhe|$1 roimhe}}',
 'whatlinkshere-next' => '{{PLURAL:$1|ar aghaidh|$1 ar aghaidh}}',
 'whatlinkshere-links' => '← naisc',
 'whatlinkshere-hideredirs' => '$1 athsheolaidh',
 'whatlinkshere-hidetrans' => '$1 trasiamh',
 'whatlinkshere-hidelinks' => '$1 nasc',
-'whatlinkshere-hideimages' => '$1 nasc íomhá',
+'whatlinkshere-hideimages' => '$1 naisc comhad',
 'whatlinkshere-filters' => 'Scagairí',
 
 # Block/unblock
@@ -1532,7 +1529,7 @@ leathanaigh áirithe a rinne an duine damáiste ar).',
 IP nó ainm úsáideora a raibh faoi chosc roimhe seo.',
 'ipusubmit' => 'Bain an chosc seo',
 'unblocked' => 'Díchoisceadh [[User:$1|$1]]',
-'ipblocklist' => 'Liosta seoltaí IP agus ainmneacha úsáideoirí coiscthe',
+'ipblocklist' => 'Úsáideoirí atá coiscthe',
 'ipblocklist-legend' => 'Aimsigh úsáideoir coiscthe',
 'ipblocklist-submit' => 'Cuardaigh',
 'infiniteblock' => 'gan teorainn',
index 6b053c6..2a20940 100644 (file)
@@ -376,9 +376,6 @@ Yalvarêrız benneyiniz URL - i hem raport ediniz bunu bir [[Special:ListUsers/s
 # Login and logout pages
 'logouttext' => "Sessiyayı kapattınız.
 Şindi var nicä devam etmää kullanmaa {{SITENAME}} saytını kimlik göstermedän yaki <span class='plainlinks'>[$1 enidän sessiya açmaa]</span> (ister hep o kullanıcı adıylan, ister başka bir kullanıcı adıylan). O zamana kadar ani web brauzerinizin keşi temizlenecek bir takım sayfalar var nicä görünsün sansın sessiya hep açık.",
-'welcomecreation' => '== Hoş geldiniz $1! ==
-
-Esapınız açıldı. Unutmayın [[Special:Preferences|{{SITENAME}} preferences]] seçimnerin diiştirmää.',
 'yourname' => 'Kullanıcı adınız',
 'yourpassword' => 'Parol',
 'yourpasswordagain' => 'Parolu enidän yaz',
@@ -619,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ı',
 
@@ -794,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 a373aeb..1479ce5 100644 (file)
@@ -401,9 +401,6 @@ $2',
 'logouttext' => "'''汝退出正哩。'''
 
 接到汝得匿名使用{{SITENAME}},或<span class='plainlinks'>[$1 登入过]</span>。除非汝删吥浏览器缓存,只把子页面可能会接到话汝系登入状态。",
-'welcomecreation' => '== 欢迎, $1! ==
-
-建正哩汝𠮶帐户,莫𫍧记设置 [[Special:Preferences|{{SITENAME}}𠮶个人参数]]。',
 'yourname' => '用户名:',
 'yourpassword' => '密码:',
 'yourpasswordagain' => '输过道密码:',
@@ -607,7 +604,6 @@ $2',
 'template-semiprotected' => '(半保护)',
 'hiddencategories' => '个只版面系属于$1只隐藏类𠮶成员:',
 'edittools' => '<!--个首𠮶文本会到下底𠮶编辑同上传列表里坨显示。 -->',
-'nocreatetitle' => '新建页面拖限制',
 'nocreatetext' => '个只网站限制新建页面𠮶功能。倷可以回头去编辑有嘞𠮶页面,或者[[Special:UserLogin|登入或新开帐户]]。',
 'nocreate-loggedin' => '倷到 {{SITENAME}} 冇权新开页面。',
 'permissionserrors' => '权限错误',
@@ -871,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' => '编辑个页',
@@ -1233,9 +1230,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => '显示',
 'listusers-noresult' => '寻伓到用户。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新开户𠮶人名单',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员名单)',
 
@@ -1293,11 +1287,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{SITENAME}}邮件报告员',
 'enotif_reset' => '拿全部文章标成已读',
-'enotif_newpagetext' => '个系新开𠮶页面。',
 'enotif_impersonal_salutation' => '{{SITENAME}}用户',
-'changed' => '改卟嘞',
-'created' => '建正嘞',
-'enotif_subject' => '{{SITENAME}}有页面 $PAGETITLE拖$PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => '眵倷上回访问后𠮶全部改动请去$1。',
 'enotif_lastdiff' => '想眵改动请去$1。',
 'enotif_anon_editor' => '匿名用户$1',
@@ -1314,6 +1304,8 @@ $NEWPAGE
 {{SITENAME}}通知系统 – 会改卟倷𠮶监视列表设置,请去 {{canonicalurl:{{#special:EditWatchlist}}}}
 
 回馈同到别𠮶说明: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建正嘞',
+'changed' => '改卟嘞',
 
 # Delete
 'deletepage' => '删卟页面',
@@ -2268,6 +2260,9 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|标签]]过滤器:',
 
+# New logging system
+'rightsnone' => '(冇)',
+
 # Search suggestions
 'searchsuggest-search' => '寻吖',
 
index 060e337..7a50d26 100644 (file)
@@ -423,9 +423,6 @@ $2',
 'logouttext' => "'''汝退出正哩。'''
 
 接到汝得匿名使用{{SITENAME}},或<span class='plainlinks'>[$1 登入過]</span>。除非汝刪吥瀏覽器緩存,隻把子頁面可能會接到話汝係登入狀態。",
-'welcomecreation' => '== 歡迎, $1! ==
-
-建正哩汝嗰帳戶,莫誺記設置 [[Special:Preferences|{{SITENAME}}嗰個人參數]]。',
 'yourname' => '用戶名:',
 'yourpassword' => '密碼:',
 'yourpasswordagain' => '輸過道密碼:',
@@ -629,7 +626,6 @@ $2',
 'template-semiprotected' => '(半保護)',
 'hiddencategories' => '箇隻版面係屬於$1隻隱藏類嗰成員:',
 'edittools' => '<!--箇首嗰文本會到下底嗰編輯同上傳列表裡坨顯示。 -->',
-'nocreatetitle' => '新建頁面拕限制',
 'nocreatetext' => '箇隻網站限制新建頁面嗰功能。倷可以回頭去編輯有嘞嗰頁面,或者[[Special:UserLogin|登入或新開帳戶]]。',
 'nocreate-loggedin' => '倷到 {{SITENAME}} 冇權新開頁面。',
 'permissionserrors' => '許可權錯誤',
@@ -893,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' => '編輯箇頁',
@@ -1255,9 +1252,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => '顯示',
 'listusers-noresult' => '尋伓到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新開戶嗰人名單',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成員名單)',
 
@@ -1315,11 +1309,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{SITENAME}}郵件報告員',
 'enotif_reset' => '拿全部文章標成已讀',
-'enotif_newpagetext' => '箇係新開嗰頁面。',
 'enotif_impersonal_salutation' => '{{SITENAME}}用戶',
-'changed' => '改卟嘞',
-'created' => '建正嘞',
-'enotif_subject' => '{{SITENAME}}有頁面 $PAGETITLE拕$PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => '眵倷上回訪問後嗰全部改動請去$1。',
 'enotif_lastdiff' => '想眵改動請去$1。',
 'enotif_anon_editor' => '匿名用戶$1',
@@ -1336,6 +1326,8 @@ $NEWPAGE
 {{SITENAME}}通知系統 – 會改卟倷嗰監視列表設置,請去 {{canonicalurl:{{#special:EditWatchlist}}}}
 
 回饋同到別嗰説明: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建正嘞',
+'changed' => '改卟嘞',
 
 # Delete
 'deletepage' => '刪卟頁面',
@@ -2290,6 +2282,9 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|標籤]]過濾器:',
 
+# New logging system
+'rightsnone' => '(冇)',
+
 # Search suggestions
 'searchsuggest-search' => '尋吖',
 
index 62d11e8..7dc9d67 100644 (file)
@@ -83,7 +83,7 @@ $messages = array(
 
 'underline-always' => 'An-còmhnaidh',
 'underline-never' => 'Na dèan seo idir',
-'underline-default' => "Roghainn bhunaiteach a' bhrabhsair",
+'underline-default' => "Bun-roghainn a' bhrabhsair no a' chraicinn",
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stoidhle cruth-clò an raoin dheasachaidh:',
@@ -168,8 +168,8 @@ $messages = array(
 'newwindow' => "(a' fosgladh ann an uinneag ùr)",
 'cancel' => 'Sguir dheth',
 'moredotdotdot' => 'Barrachd...',
-'mypage' => 'Mo dhuilleag',
-'mytalk' => 'Mo chonaltradh',
+'mypage' => 'Duilleag',
+'mytalk' => 'Deasbaireachd',
 'anontalk' => 'Conaltradh airson an IP seo',
 'navigation' => 'Seòladh',
 'and' => '&#32;agus',
@@ -191,7 +191,7 @@ $messages = array(
 'vector-action-protect' => 'Dìon',
 'vector-action-undelete' => 'Neo-dhèan an sguabadh às',
 'vector-action-unprotect' => 'Atharraich an dìon',
-'vector-simplesearch-preference' => 'Cuir an comas molaidhean luirg adhartach (craiceann vector a-mhàin)',
+'vector-simplesearch-preference' => 'Cuir an comas am bàr-luirg simplidh (craiceann vector a-mhàin)',
 'vector-view-create' => 'Cruthaich',
 'vector-view-edit' => 'Deasaich',
 'vector-view-history' => 'Seall an eachdraidh',
@@ -298,6 +298,10 @@ Seall air [[Special:Version|duilleag an tionndaidh]].',
 'youhavenewmessages' => 'Tha $1 ($2) agad.',
 'newmessageslink' => 'teachdaireachdan ùra',
 'newmessagesdifflink' => 'mùthadh mu dheireadh',
+'youhavenewmessagesfromusers' => 'Tha $1 o {{PLURAL:$3|aon chleachdaiche|$3 chleachdaiche|$3 chleachdaiche|$3 chleachdaiche|$3 cleachdaichean|$3 cleachdaiche}} agad ($2).',
+'youhavenewmessagesmanyusers' => 'Tha $1 agad o iomadh cleachdaiche ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|aon teachdaireachd ùr|$1 theachdaireachd ùr|$1 teachdaireachd ùr|$1 theachdaireachd ùr|$1 teachdaireachdan ùra|$1 teachdaireachd ùr}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|am mùthadh|an $1 mhùthadh|an $1 mhùthadh|an $1 mhùthadh|na $1 mùthaidhean|na $1 mùthadh}} mu dheireadh',
 'youhavenewmessagesmulti' => 'Tha teachdaireachdan ùra agad ann an $1',
 'editsection' => 'deasaich',
 'editold' => 'deasaich',
@@ -391,6 +395,8 @@ An dèan thu aithris air seo do [[Special:ListUsers/sysop|rianadair]], ag innse
 'cannotdelete' => 'Cha do ghabh an duilleag no am faidhle "$1" a sguabadh às.
 Faodaidh gun deach a sguabadh às le cuideigin eile mu thràth.',
 'cannotdelete-title' => 'Cha ghabh an duilleag "$1" a sguabadh às',
+'delete-hook-aborted' => 'Sguireadh dhen sguabadh às ri linn dubhain.
+Cha deach adhbhar a thoirt seachad.',
 'badtitle' => 'Droch thiotal',
 'badtitletext' => "Bha an duilleag a dh'iarr thu mì-dhligheach, falamh no le tiotal eadar-chànanach no eadar-uici air a dhroch cheangal.
 Faodaidh gu bheil aon no barrachd charactairean ann nach urrainn dhut a chleachdadh ann an tiotalan.",
@@ -406,13 +412,13 @@ Iarrtas: $2',
 'actionthrottled' => 'Gnìomh air a mhùchadh',
 'actionthrottledtext' => "Gus casg a chur air spama, chan urrainn dhut an gnìomh seo a dhèanamh ro thric am broinn ùine ghoirid agus chaidh thu thairis air a' chrìoch seo.
 Feuch ris a-rithist às a dhèidh seo.",
-'protectedpagetext' => 'Chaidh an duilleag seo a ghlasadh gus casg a chur air deasachadh.',
+'protectedpagetext' => 'Chaidh an duilleag seo a dhìon gus casg a chur air deasachadh.',
 'viewsourcetext' => "'S urrainn dhut coimhead air tùs na duilleige seo 's lethbhreac a dhèanamh dheth:",
 'viewyourtext' => "'S urrainn dhut coimhead air '''na mhùthaich thu''' 's lethbhreac a dhèanamh dheth air an duilleag seo:",
-'protectedinterface' => "Tha an duilleag seo a' solar teacsa eadar-aghaidh airson a' bhathar-bhog is chaidh a ghlaadh gus casg a chur air mì-chleachdadh.",
+'protectedinterface' => "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicipeid seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicipeid, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
 'editinginterface' => "'''Rabhadh:''' Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.
-Ma dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch i.
-Ma tha thu airson Gàidhlig a chur air, saoil an cleachd thu [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], am pròiseact ionadailidh aig MediaWiki?",
+Ma dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicipeid seo.
+Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicipeid, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
 'sqlhidden' => "(Iarrtas SQL 'ga fhalach)",
 'cascadeprotected' => 'Chaidh an duilleag seo a dhìon o dheasachadh a chionn \'s gu bheil e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a chaidh an dìon \'s an roghainn "mar eas" air:
 $2',
@@ -422,6 +428,12 @@ $2',
 'ns-specialprotected' => 'Chan ghabh duilleagan sònraichte a dheasachadh.',
 'titleprotected' => 'Chaidh an duilleag seo a dhìon o chruthachadh le [[User:$1|$1]].
 Seo am mìneachadh: "\'\'$2\'\'".',
+'filereadonlyerror' => 'Cha ghabh am faidhle "$1" atharrachadh a chionn \'s gu bheil ionad-tasgaidh fhaidhlichean "$2" ri leughadh a-mhàin.
+Thug an rianaire a ghlais e seachad an t-adhbhar a leanas: "$3".',
+'invalidtitle-knownnamespace' => 'Tiotal mì-dhligheach leis an namespace "$2" agus an teacsa "$3"',
+'invalidtitle-unknownnamespace' => 'Tiotal mì-dhligheach leis an àireamh namespace $1 agus an teacsa "$2"',
+'exception-nologin' => 'Chan eil thu air clàradh a-steach',
+'exception-nologin-text' => 'Feumaidh tu clàradh a-steach air an uicipeid seo mus urrainn dhut seo a dhèanamh.',
 
 # Virus scanner
 'virus-badscanner' => "Droch cho-dhealbhachd: sganair bhìorasan neo-aithnichte: ''$1''",
@@ -432,15 +444,13 @@ Seo am mìneachadh: "\'\'$2\'\'".',
 '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.",
-'welcomecreation' => '== Fàilte ort, $1! ==
-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',
 'remembermypassword' => "Cuimhnich gu bheil mi air logadh a-steach air a' choimpiutair seo (suas gu $1 {{PLURAL:$1|latha|làithean}})",
 'securelogin-stick-https' => 'Glèidh an ceangal ri HTTPS as dèidh logadh a-steach',
 'yourdomainname' => 'An àrainn-lìn agad:',
+'password-change-forbidden' => 'Chan urrainn dhut faclan-faire atharrachadh air an uicipeid seo.',
 'externaldberror' => 'Thachair mearachd le dearbhadh an stòir-dhàta air neo chan eil cead agad an cunntas agad air an taobh a-muigh ùrachadh.',
 'login' => 'Log a-steach',
 'nav-login-createaccount' => 'Log a-steach / cruthaich cunntas',
@@ -518,6 +528,7 @@ Cha dèid post-d a chur airson gin dhe na feartan a leanas.',
 'invalidemailaddress' => "Chan urrainn dhuinn gabhail ris an t-seòladh seo a chionn 's gu bheil coltas cearr air.
 Cuir a-steach seòladh san fhòrmat cheart no falamhaich an raon sin.",
 'cannotchangeemail' => 'Cha ghabh na puist-d a tha co-cheangailte ri cunntas atharrachadh air an uicipeid seo.',
+'emaildisabled' => 'Chan urrainn dhut puist-d a chur air an làrach seo.',
 'accountcreated' => 'Cunntas cruthaichte',
 'accountcreatedtext' => 'Chaidh an cunntas cleachdaiche airson $1 a chruthachadh.',
 'createaccount-title' => 'Cruthachadh cunntais airson {{SITENAME}}',
@@ -691,9 +702,12 @@ Mas e cleachdaiche gun urra a tha annad 's ma tha thu dhen bheachd nach eil na b
 \'S urrainn dhut [[Special:Search/{{PAGENAME}}|an tiotal seo a lorg]] ann an duilleagan eile,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh],
 no [{{fullurl:{{FULLPAGENAME}}|action=edit}} an duilleag seo a dheasachadh]</span>.',
-'noarticletext-nopermission' => 'Chan eil teacsa sam bith anns an duilleag seo an-dràsta.
-\'S urrainn dhut [[Special:Search/{{PAGENAME}}|an tiotal seo a lorg]] ann an duilleagan eile,
-no <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh]</span>.',
+'noarticletext-nopermission' => 'Chan eil teacsa sam bith san duilleag seo an-dràsta.
+\'S urrainn dhut [[Special:Search/{{PAGENAME}}|tiotal na duilleige seo a lorg]] ann an duilleagan eile, no <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh]</span> ach chan eil cead agad an duilleag seo a chruthachadh.',
+'missing-revision' => 'Chan eil mùthadh #$1 na duilleige "{{PAGENAME}}" ann.
+
+Mar is trice, tachraidh seo ma leanas tu ceangal san eachdraidh a tha fìor aosta \'s a tha a\' dol gu duilleag a chaidh a sguabadh às.
+Gheibh thu mion-fhiosrachadh ann an [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} loga nan duilleagan a chaidh a sguabadh às].',
 'userpage-userdoesnotexist' => 'Chan e cunntas clàraichte a tha ann an "$1".
 Dèan cinnteach gu bheil thu airson an duilleag seo a chruthachadh/dheasachadh.',
 'userpage-userdoesnotexist-view' => 'Cha deach an cunntas cleachdaiche "$1" a chlàradh.',
@@ -720,6 +734,7 @@ Cleachdaidh duilleagan gnàthaichte .css agus .js tiotal ann an litrichean beaga
 'note' => "'''An aire:'''",
 'previewnote' => "'''Cuimhnich nach eil ann ach ro-shealladh.'''
 Cha deach na mùthaidhean agad a shàbhaladh fhathast!",
+'continue-editing' => 'Rach gun raon deasachaidh',
 'previewconflict' => "Tha an ro-shealladh seo a' sealltainn dhut an teacsa san raon teacsa gu h-àrd mar a nochdas e ma shàbhaileas tu an-dràsta.",
 'session_fail_preview' => "'''Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.'''
 Nach fheuch thu ris a-rithist?
@@ -735,6 +750,7 @@ Dhiùlt sinn na dheasaich thu air eagal 's gun coirbeadh e teacsa na duilleige.
 Tachraidh seo uaireannan ma chleachdar seirbheis-lìn progsaidh gun urra a tha làn de mhearachdan.",
 'edit_form_incomplete' => "'''Cha do ràinig cuid dhen fhoirm deasachaidh am frithealaichte; dèan cinnteach gu bheil gach deasachadh agad slàn is feuch ris a-rithist.'''",
 'editing' => "A' deasachadh $1",
+'creating' => "A' cruthachadh $1",
 'editingsection' => "A' deasachadh $1 (earrann)",
 'editingcomment' => "A' deasachadh $1 (earrann ùr)",
 'editconflict' => 'Còmhstri deasachaidh: $1',
@@ -777,7 +793,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.',
@@ -801,6 +816,7 @@ Tha coltas gun deach a sguabadh às.",
 'edit-no-change' => "Chaidh an obair-dheasachaidh agad a leigeil seachad a chionn 's nach do dh'atharraich thu dad.",
 'edit-already-exists' => "Cha b' urrainn dhuinn an duilleag ùr a chruthachadh.
 Tha e ann mu thràth.",
+'defaultmessagetext' => 'Teacsa bunaiteach na teachdaireachd',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Rabhadh:''' Tha cus expensive parser function calls san duilleag seo.
@@ -814,6 +830,7 @@ Cha dèid cuid dhith a ghabhail a-steach.",
 Chaidh na h-argamaidean sinn a leigeil seachad.",
 'post-expand-template-argument-category' => 'Duilleagan air an deach argamaidean teamplaidean fhàgail às',
 'parser-template-loop-warning' => 'Mhothaicheadh do lùb teamplaid: [[$1]]',
+'parser-unstrip-loop-warning' => 'Mhothaich sinn do lùb unstrip',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Cha ghabh an cunntas a chruthachadh',
@@ -831,12 +848,15 @@ Chaidh na h-argamaidean sinn a leigeil seachad.",
 'cur' => 'làith',
 'next' => 'ath',
 'last' => 'roimhe',
+'page_first' => 'Toiseach',
+'page_last' => 'Deireadh',
 'histlegend' => "Taghadh nan diofar: comharraich bogsaichean rèidio nam mùthaidhean gus coimeas a dhèanamh agus put Enter no am putan gu h-ìosal.<br />
 Mìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, '''({{int:last}})''' = an diofar eadar e 's am mùthadh roimhe, '''{{int:minoreditletter}}''' = deasachadh beag.",
 'history-fieldset-title' => 'An eachdraidh brabhsaidh',
 '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}})',
 'historyempty' => '(falamh)',
 
 # Revision feed
@@ -857,6 +877,10 @@ Feuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
 'revdel-restore' => 'mùth follaiseachd',
 'revdel-restore-deleted' => 'mùthaidhean a chaidh a sguabadh às',
 'revdel-restore-visible' => 'mùthaidhean faicsinneach',
+'revdelete-otherreason' => 'Adhbhar eile/a bharrachd:',
+'revdelete-reasonotherlist' => 'Adhbhar eile',
+'revdelete-edit-reasonlist' => 'Deasaich adhbharan an sguabaidh às',
+'revdelete-offender' => "Ùghdar a' mhùthaidh:",
 
 # History merging
 'mergehistory-from' => 'An duilleag thùsail:',
@@ -927,7 +951,7 @@ Feuch ri ''all:'' a chuir air beulaibh an iarrtais agad gus rannsachadh a dhèan
 
 # Preferences page
 'preferences' => 'Roghainnean',
-'mypreferences' => 'Mo roghainnean',
+'mypreferences' => 'Na roghainnean agam',
 'changepassword' => 'Atharraich facal-faire',
 'prefs-skin' => 'Bian',
 'skin-preview' => 'Ro-shealladh',
@@ -1000,9 +1024,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',
@@ -1155,9 +1181,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)',
 
@@ -1171,7 +1194,7 @@ Thoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan i
 
 # Watchlist
 'watchlist' => 'Mo chlàr-faire',
-'mywatchlist' => 'Mo chlàr-faire',
+'mywatchlist' => 'An clàr-faire',
 'watchlistfor2' => 'Do $1 $2',
 'nowatchlist' => "Chan eil rud sam bith air a' chlàr-fhaire agad.",
 'addedwatchtext' => "Chaidh an duilleag \"[[:\$1]]\" a chur ri [[Special:Watchlist|do chlàr-faire]].
@@ -1263,9 +1286,9 @@ Seo roghainnean làithreach na duilleige '''$1''':",
 'blanknamespace' => '(Prìomh)',
 
 # Contributions
-'contributions' => 'Mùthaidhean an neach-chleachdaidh',
+'contributions' => "Mùthaidhean a' {{GENDER:$1|chleachdaiche}}",
 'contributions-title' => 'Mùthaidhean a rinn $1',
-'mycontris' => 'Mo mhùthaidhean',
+'mycontris' => 'Mùthaidhean',
 'contribsub2' => 'Do $1 ($2)',
 'uctop' => ' (barr)',
 'month' => 'On mhìos (agus na bu tràithe):',
@@ -1296,7 +1319,7 @@ Seo roghainnean làithreach na duilleige '''$1''':",
 'whatlinkshere-hideredirs' => '$1 ath-sheòlaidhean',
 'whatlinkshere-hidetrans' => '$1 transclusions',
 'whatlinkshere-hidelinks' => '$1 ceanglaichean',
-'whatlinkshere-hideimages' => '$1 ceanglaichean nan dealbhan',
+'whatlinkshere-hideimages' => '$1 ceanglaichean nam faidhlichean',
 'whatlinkshere-filters' => 'Criathairean',
 
 # Block/unblock
@@ -1531,6 +1554,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 60cf4e3..a7adc64 100644 (file)
@@ -61,7 +61,7 @@ $defaultDateFormat = 'dmy';
 $dateFormats = array(
        'dmy time' => 'H:i',
        'dmy date' => 'j \d\e F \d\e Y',
-       'dmy both' => 'j \d\e F \d\e Y "ás" H:i',
+       'dmy both' => 'j \d\e F \d\e Y "ás" H:i',
 );
 
 $specialPageAliases = array(
@@ -352,12 +352,13 @@ $messages = array(
 'broken-file-category' => 'Páxinas con ligazóns rotas cara a ficheiros',
 
 'about' => 'Acerca de',
-'article' => 'Artigo',
+'article' => 'Páxina de contido',
 'newwindow' => '(abre unha ventá nova)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Máis...',
-'mypage' => 'A miña páxina',
-'mytalk' => 'A miña conversa',
+'morenotlisted' => 'Máis que non están na lista...',
+'mypage' => 'Páxina',
+'mytalk' => 'Conversa',
 'anontalk' => 'Conversa con este enderezo IP',
 'navigation' => 'Navegación',
 'and' => '&#32;e',
@@ -389,6 +390,7 @@ $messages = array(
 'namespaces' => 'Espazos de nomes',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menú de navegación',
 'errorpagetitle' => 'Erro',
 'returnto' => 'Volver a "$1".',
 'tagline' => 'De {{SITENAME}}',
@@ -524,7 +526,7 @@ $1',
 'nstab-image' => 'Ficheiro',
 'nstab-mediawiki' => 'Mensaxe',
 'nstab-template' => 'Modelo',
-'nstab-help' => 'Axuda',
+'nstab-help' => 'Páxina de axuda',
 'nstab-category' => 'Categoría',
 
 # Main script and global functions
@@ -598,7 +600,7 @@ Pescuda: $2',
 'actionthrottled' => 'Acción limitada',
 'actionthrottledtext' => "Como unha medida de loita contra o ''spam'', limítase a realización desta acción a un número determinado de veces nun curto espazo de tempo, e vostede superou este límite.
 Inténteo de novo nuns minutos.",
-'protectedpagetext' => 'Esta páxina foi protexida para evitar a edición.',
+'protectedpagetext' => 'Esta páxina foi protexida para evitar a edición e outras accións.',
 'viewsourcetext' => 'Pode ver e copiar o código fonte desta páxina:',
 'viewyourtext' => "Pode ver e copiar o código fonte '''das súas edicións''' nesta páxina:",
 'protectedinterface' => 'Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.
@@ -612,7 +614,7 @@ $2',
 'namespaceprotected' => "Non dispón de permisos para modificar páxinas no espazo de nomes '''$1'''.",
 'customcssprotected' => 'Non dispón de permisos para modificar esta páxina de CSS, dado que contén a configuración persoal doutro usuario.',
 'customjsprotected' => 'Non dispón de permisos para modificar esta páxina de JavaScript, dado que contén a configuración persoal doutro usuario.',
-'ns-specialprotected' => 'Non se poden editar as páxinas no espazo de nomes {{ns:special}}.',
+'ns-specialprotected' => 'Non se poden editar as páxinas no espazo de nomes "{{ns:special}}".',
 'titleprotected' => "Este título foi protexido da creación por [[User:$1|$1]].
 O motivo achegado é ''$2''.",
 'filereadonlyerror' => 'Non se puido modificar o ficheiro "$1" porque o repositorio "$2" está en modo de só lectura.
@@ -633,8 +635,8 @@ O administrador que bloqueou o repositorio achegou este motivo: "$3".',
 
 Pode continuar usando {{SITENAME}} de xeito anónimo, ou pode <span class='plainlinks'>[$1 acceder de novo]</span> co mesmo nome de usuario ou con outro.
 Teña en conta que mentres non se limpa a memoria caché do seu navegador algunhas páxinas poden continuar aparecendo como se aínda estivese dentro do sistema.",
-'welcomecreation' => '== Reciba a nosa benvida, $1! ==
-A súa conta foi creada correctamente.
+'welcomeuser' => 'Reciba a nosa benvida, $1!',
+'welcomecreation-msg' => 'A súa conta foi creada correctamente.
 Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENAME}}]].',
 'yourname' => 'Nome de usuario:',
 'yourpassword' => 'Contrasinal:',
@@ -737,8 +739,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',
@@ -804,6 +807,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',
 
@@ -986,7 +990,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.',
@@ -1311,7 +1314,7 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados
 
 # Preferences page
 'preferences' => 'Preferencias',
-'mypreferences' => 'As miñas preferencias',
+'mypreferences' => 'Preferencias',
 'prefs-edits' => 'Número de edicións:',
 'prefsnologin' => 'Non accedeu ao sistema',
 'prefsnologintext' => 'Debe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} acceder ao sistema]</span> para modificar as preferencias de usuario.',
@@ -1323,7 +1326,7 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados
 'prefs-datetime' => 'Data e hora',
 'prefs-labs' => 'Características experimentais',
 'prefs-user-pages' => 'Páxinas de usuario',
-'prefs-personal' => 'Información do usuario',
+'prefs-personal' => 'Información de usuario',
 'prefs-rc' => 'Cambios recentes',
 'prefs-watchlist' => 'Lista de vixilancia',
 'prefs-watchlist-days' => 'Número de días que mostrar na lista de vixilancia:',
@@ -1387,9 +1390,9 @@ Este cambio non se poderá desfacer.',
 'prefs-emailconfirm-label' => 'Confirmación do correo:',
 'prefs-textboxsize' => 'Tamaño da caixa de edición',
 'youremail' => 'Correo electrónico:',
-'username' => 'Nome de usuario:',
-'uid' => 'ID de usuario:',
-'prefs-memberingroups' => 'Membro {{PLURAL:$1|do grupo|dos grupos}}:',
+'username' => 'Nome de {{GENDER:$1|usuario|usuaria}}:',
+'uid' => 'ID de {{GENDER:$1|usuario|usuaria}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:',
 'prefs-registration' => 'Data e hora de rexistro:',
 'yourrealname' => 'Nome real:',
 'yourlanguage' => 'Lingua:',
@@ -1537,15 +1540,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',
@@ -1792,6 +1793,7 @@ Se o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|admin
 'backend-fail-notsame' => 'Xa existe un ficheiro chamado "$1", con contidos diferentes.',
 'backend-fail-invalidpath' => '"$1" non é unha ruta de almacenamento válida.',
 'backend-fail-delete' => 'Non se deu borrado o ficheiro "$1".',
+'backend-fail-describe' => 'Non se puideron cambiar os metadatos do ficheiro "$1".',
 'backend-fail-alreadyexists' => 'O ficheiro "$1" xa existe.',
 'backend-fail-store' => 'Non se deu almacenado o ficheiro "$1" en "$2".',
 'backend-fail-copy' => 'Non se deu copiado o ficheiro "$1" en "$2".',
@@ -2083,7 +2085,7 @@ As entradas <del>riscadas</del> xa foron resoltas.',
 'mostimages' => 'Ficheiros máis usados',
 'mostinterwikis' => 'Páxinas con máis interwikis',
 'mostrevisions' => 'Páxinas con máis revisións',
-'prefixindex' => 'Todas as páxinas coas iniciais',
+'prefixindex' => 'Todas as páxinas con prefixo',
 'prefixindex-namespace' => 'Todas as páxinas con prefixo (espazo de nomes $1)',
 'shortpages' => 'Páxinas curtas',
 'longpages' => 'Páxinas longas',
@@ -2181,8 +2183,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.',
 
@@ -2201,10 +2203,6 @@ Protocolos soportados: <code>$1</code> (úsase http:// como predeterminado se no
 '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.
@@ -2263,15 +2261,15 @@ O enderezo de correo electrónico que inseriu [[Special:Preferences|nas súas pr
 
 # Watchlist
 'watchlist' => 'A miña lista de vixilancia',
-'mywatchlist' => 'A miña lista de vixilancia',
+'mywatchlist' => 'Lista de vixilancia',
 'watchlistfor2' => 'De $1 $2',
 'nowatchlist' => 'Non ten elementos na súa lista de vixilancia.',
 'watchlistanontext' => 'Faga o favor de $1 ao sistema para ver ou editar os elementos da súa lista de vixilancia.',
 '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',
@@ -2297,22 +2295,25 @@ Os cambios futuros nesta páxina e na súa páxina de conversa asociada serán l
 'unwatching' => 'Deixando de vixiar...',
 'watcherrortext' => 'Houbo un erro ao cambiar as súas opcións de vixilancia para a páxina "$1".',
 
-'enotif_mailer' => 'Correo de aviso de {{SITENAME}}',
+'enotif_mailer' => 'Sistema de notificacións por correo de {{SITENAME}}',
 'enotif_reset' => 'Marcar todas as páxinas como visitadas',
-'enotif_newpagetext' => 'Esta é unha páxina nova.',
 'enotif_impersonal_salutation' => 'usuario de {{SITENAME}}',
-'changed' => 'modificada',
-'created' => 'creada',
-'enotif_subject' => 'A páxina de {{SITENAME}} chamada "$PAGETITLE" foi $CHANGEDORCREATED por $PAGEEDITOR',
-'enotif_lastvisited' => 'Vexa $1 para comprobar todos os cambios desde a súa última visita.',
-'enotif_lastdiff' => 'Vexa $1 para visualizar esta modificación.',
+'enotif_subject_deleted' => '{{GENDER:$2|$2}} borrou a páxina chamada "$1" en {{SITENAME}}',
+'enotif_subject_created' => '{{GENDER:$2|$2}} creou a páxina chamada "$1" en {{SITENAME}}',
+'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.',
+'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.',
+'enotif_body_intro_changed' => '{{GENDER:$2|$2}} modificou a páxina chamada "$1" en {{SITENAME}} o $PAGEEDITDATE. Consulte $3 para ver a revisión actual.',
+'enotif_lastvisited' => 'Consulte $1 para comprobar todos os cambios feitos desde a súa última visita.',
+'enotif_lastdiff' => 'Consulte $1 para ver esta modificación.',
 'enotif_anon_editor' => 'usuario anónimo $1',
-'enotif_body' => 'Estimado $WATCHINGUSERNAME:
+'enotif_body' => 'Boas, $WATCHINGUSERNAME:
 
-
-A páxina de {{SITENAME}} "$PAGETITLE" foi $CHANGEDORCREATED o $PAGEEDITDATE por $PAGEEDITOR, olle $PAGETITLE_URL para comprobar a versión actual.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resumo de edición: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2320,10 +2321,9 @@ Pode contactar co editor:
 por correo electrónico: $PAGEEDITOR_EMAIL
 no wiki: $PAGEEDITOR_WIKI
 
-Non se producirán novas notificacións cando haxa novos cambios ata que vostede visite a páxina.
-Pode borrar os indicadores de aviso de notificación para o conxunto das páxinas marcadas na súa lista de vixilancia.
+Non se producirán novas notificacións cando haxa novos cambios ata que vostede visite a páxina. Pode borrar os indicadores de aviso de notificación para o conxunto das páxinas marcadas na súa lista de vixilancia.
 
-             O sistema de aviso de {{SITENAME}}
+       O sistema de avisos de {{SITENAME}}
 
 --
 Para cambiar as notificacións por correo electrónico, visite
@@ -2338,6 +2338,8 @@ $UNWATCHURL
 
 Axuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Borrar a páxina',
@@ -2409,6 +2411,8 @@ 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:',
@@ -2424,9 +2428,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',
@@ -2525,9 +2529,9 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contribucións {{GENDER:{{BASEPAGENAME}}|do usuario|da usuaria}}',
+'contributions' => 'Contribucións {{GENDER:$1|do usuario|da usuaria}}',
 'contributions-title' => 'Contribucións de $1',
-'mycontris' => 'As miñas contribucións',
+'mycontris' => 'Contribucións',
 'contribsub2' => 'De $1 ($2)',
 'nocontribs' => 'Non se deron atopado cambios con eses criterios.',
 'uctop' => '(última revisión)',
@@ -2567,7 +2571,7 @@ Velaquí está a última entrada do rexistro de bloqueos, por se quere consultal
 'whatlinkshere-hideredirs' => '$1 as redireccións',
 'whatlinkshere-hidetrans' => '$1 as inclusións',
 'whatlinkshere-hidelinks' => '$1 as ligazóns',
-'whatlinkshere-hideimages' => '$1 as ligazóns á imaxe',
+'whatlinkshere-hideimages' => '$1 as ligazóns ao ficheiro',
 'whatlinkshere-filters' => 'Filtros',
 
 # Block/unblock
@@ -2727,10 +2731,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.
@@ -2738,10 +2742,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''':
@@ -2908,6 +2912,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.',
@@ -2971,7 +2976,7 @@ Pode ver o código fonte.',
 'tooltip-feed-atom' => 'Fonte de novas Atom desta páxina',
 'tooltip-t-contributions' => 'Ver a lista de contribucións {{GENDER:{{BASEPAGENAME}}|deste usuario|desta usuaria}}',
 'tooltip-t-emailuser' => 'Enviarlle unha mensaxe a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}} por correo electrónico',
-'tooltip-t-upload' => 'Cargar os ficheiros',
+'tooltip-t-upload' => 'Cargar ficheiros',
 'tooltip-t-specialpages' => 'Lista de todas as páxinas especiais',
 'tooltip-t-print' => 'Versión para imprimir da páxina',
 'tooltip-t-permalink' => 'Ligazón permanente a esta versión da páxina',
@@ -3025,7 +3030,7 @@ Pode ver o código fonte.',
 'nostalgia.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Morriña */',
 'cologneblue.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Azul colonial */',
 'monobook.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia MonoBook */',
-'myskin.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia A miña aparencia */',
+'myskin.js' => '/* O JavaScript que se coloque aquí afectará a quen use a aparencia A miña aparencia */',
 'chick.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Parrulo */',
 'simple.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Sinxela */',
 'modern.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Moderna */',
@@ -3091,14 +3096,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',
@@ -3120,6 +3130,8 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'markedaspatrollederror' => 'Non se pode marcar como revisada',
 'markedaspatrollederrortext' => 'É preciso especificar unha revisión para marcala como revisada.',
 'markedaspatrollederror-noautopatrol' => 'Non está permitido que un mesmo marque as propias edicións como revisadas.',
+'markedaspatrollednotify' => 'A modificación feita en "$1" marcouse como revisada.',
+'markedaspatrollederrornotify' => 'Erro ao marcar como revisada.',
 
 # Patrol log
 'patrol-log-page' => 'Rexistro de revisións',
@@ -3153,6 +3165,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.',
@@ -3183,7 +3196,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'O formato é o seguinte:
@@ -3941,11 +3957,15 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'logentry-move-move_redir-noredirect' => '$1 moveu a páxina "$3" a "$4" sobre unha redirección sen deixar unha redirección',
 'logentry-patrol-patrol' => '$1 marcou a revisión $4 da páxina "$3" como patrullada',
 'logentry-patrol-patrol-auto' => '$1 marcou automaticamente a revisión $4 da páxina "$3" como patrullada',
-'logentry-newusers-newusers' => '$1 creou unha conta de usuario',
-'logentry-newusers-create' => '$1 creou unha conta de usuario',
-'logentry-newusers-create2' => '$1 creou unha conta de usuario $3',
-'logentry-newusers-autocreate' => 'A conta $1 creouse automaticamente',
+'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-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].
@@ -4000,7 +4020,7 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 '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-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',
index 511a535..2a37792 100644 (file)
@@ -14,6 +14,8 @@
 
 $fallback = 'fa';
 
+$rtl = true;
+
 $messages = array(
 'moredotdotdot' => 'ویشتر...',
 'mypage' => 'می هنه‌شر',
index d287798..20117a8 100644 (file)
@@ -414,9 +414,6 @@ $2',
 
 Ἔξεστί σοι χρῆσθαι τῷ {{SITENAME}} ἀνωνύμως, ἢ ἔξεστί σοι <span class='plainlinks'>[$1 συνδεῖσθαι πάλιν]</span> ὡς ὁ αὐτὸς ἢ ὡς ἄλλος χρώμενος.
 Δέλτοι τινὲς δέ, ἐνδεχομένως, δειχθήσονται ὡς ἂν ἀκμὴν συνδεδεμένος ᾖς, μέχρι ὅτε καθαίρῃς τὴν λανθάνουσαν μνήμην τοῦ προγράμματος πλοηγήσεώς σου.",
-'welcomecreation' => '== Ὡς εὖ παρέστης, $1! ==
-
-Λογισμός σὸς πεποίηται. Μέμνησο μεταβάλλειν τὰς τοῦ [[Special:Preferences|{{SITENAME}} προαιρέσεις σου]].',
 'yourname' => 'Ὄνομα χρωμένου:',
 'yourpassword' => 'Σῆμα:',
 'yourpasswordagain' => 'Ἀνατυπῶσαι σύνθημα:',
@@ -623,7 +620,6 @@ $2',
 'template-protected' => '(φυλλάττεται)',
 'template-semiprotected' => '(ἡμιπεφυλαγμένη)',
 'hiddencategories' => 'Ἥδε ἡ δέλτος μέλος ἐστὶ {{PLURAL:$1|1 τῆς κεκρυμμένης κατηγορίας|$1 τῶν κεκρυμμένων κατηγοριῶν}}:',
-'nocreatetitle' => 'Ποίησις δέλτων περιωρισμένη',
 'nocreatetext' => "{{SITENAME}} οὐ σ'ἐᾷ νέας δέλτους ποιεῖν.
 Ἐᾷ σε δέλτον ἢδη οὖσαν μεταβάλλειν ἢ [[Special:UserLogin|συνδεῖσθαι ἢ λογισμὸν ποιεῖν]].",
 'nocreate-loggedin' => 'Οὐκ ἔξεστι σοι νέας δέλτους ποιεῖν.',
@@ -1049,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' => 'ἀναγιγνώσκειν τήνδε τὴν δέλτον',
@@ -1487,10 +1485,6 @@ $1",
 'activeusers-hidesysops' => 'Κρύπτειν ἐπιτρόπους',
 'activeusers-noresult' => 'Οὐδεὶς χρώμενος εὑρέθη.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Κατάλογος ποιήσεων λογισμῶν.',
-'newuserlogpagetext' => 'Ὅδε ἐστὶν κατάλογος τις τῶν ποιήσεων λογισμῶν.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Δικαιώματα ὁμάδος χρωμένου',
 'listgrouprights-group' => 'Ὁμάς',
@@ -1565,11 +1559,7 @@ $1",
 
 'enotif_mailer' => 'Σύστημα εἰδήσεως τοῦ {{SITENAME}} μέσῳ ἐπιστολῶν',
 'enotif_reset' => 'Σημαίνειν ἁπάσας τὰς ἐπεσκοπημένας δέλτους',
-'enotif_newpagetext' => 'Ἥδε νέα δέλτος ἐστίν.',
 'enotif_impersonal_salutation' => 'Χρώμενος τῷ {{SITENAME}}',
-'changed' => 'ἠλλαγμένη',
-'created' => 'ποιηθέν',
-'enotif_subject' => 'Ἡ τοῦ {{SITENAME}} δέλτος $PAGETITLE ἐποιἠθη $CHANGEDORCREATED ὑπὸ τὸν $PAGEEDITOR',
 'enotif_lastvisited' => 'Ἴδε $1 διὰ ἁπάσας τὰς ἀλλαγὰς ἐκ τῆς ὑστάτης ἐπισκέψεώς σου.',
 'enotif_lastdiff' => 'Ἴδε $1 διὰ τὸ ὁρᾶν τήνδε τὴν ἀλλαγήν.',
 'enotif_anon_editor' => 'ἀνώνυμος χρώμενος $1',
@@ -1596,6 +1586,8 @@ $NEWPAGE
 
 Ἀνάδρασις καὶ περαιτέρω βοήθεια:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ποιηθέν',
+'changed' => 'ἠλλαγμένη',
 
 # Delete
 'deletepage' => 'Διαγράφειν τὴν δέλτον',
@@ -2710,6 +2702,7 @@ $5
 'revdelete-restricted' => 'ἐφηρμοσμένοι περιορισμοὶ διὰ τοὺς ἐπιτρόπους',
 'revdelete-unrestricted' => 'αἱρεθέντες περιορισμοὶ διὰ τοὺς ἐπιτρόπους',
 'newuserlog-byemail' => 'σύνθημα ἀπεσταλμένον μέσῳ ἠλ-ταχυδρομείου',
+'rightsnone' => '(Οὐδέν)',
 
 # Feedback
 'feedback-cancel' => 'Ἀκυροῦν',
index 41fddb3..b456087 100644 (file)
@@ -181,7 +181,7 @@ $messages = array(
 
 'underline-always' => 'immer',
 'underline-never' => 'nie',
-'underline-default' => 'Browser-Vorystellig',
+'underline-default' => 'Voryystellig vu dr Benutzeroberfleichi oder em Brwoser',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Schriftfamilie fir dr Text im Bearbeitigsfänschter:',
@@ -266,8 +266,8 @@ $messages = array(
 'newwindow' => '(imene nöie Fänschter)',
 'cancel' => 'Abbräche',
 'moredotdotdot' => 'Meh …',
-'mypage' => 'Myyni Syte',
-'mytalk' => 'Myyni Diskussionsyte',
+'mypage' => 'Syte',
+'mytalk' => 'Diskussionsyte',
 'anontalk' => 'Diskussionssyste vo sellere IP',
 'navigation' => 'Navigation',
 'and' => '&#32;un',
@@ -537,9 +537,6 @@ Dr Administrator, wu dr Schrybzuegriff gsperrt het, het dää Grund aagee: „$3
 Du chasch {{SITENAME}} wyter anonym bruche, oder Du chasch di <span class='plainlinks'>[$1 wider aamälde]</span> mit em glyche oder eme andere Benutzername.
 
 Ochat: s cha syy, ass bstimmti Syte eso aazeigt wäre, wie wänn Du allno aagmäldet wärsch, bis Du dr Zwischespycher vu Dyym Browser glescht hesch.",
-'welcomecreation' => '==Willcho, $1!==
-Dyy Benutzerkonto isch aaglait wore.
-Vergiss nid, dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] aazpasse.',
 'yourname' => 'Dyy Benutzername',
 'yourpassword' => 'Passwort:',
 'yourpasswordagain' => 'Passwort no mol yygee:',
@@ -815,7 +812,7 @@ As Information chunnt do ne aktuälle Uuszug us em Benutzersperr-Logbuech:',
 'note' => "'''Obacht: '''",
 'previewnote' => "'''Das isch numen e Vorschau und nonig gspycheret!'''
 Die Syte isch nonig gspycheret wore!",
-'continue-editing' => 'Wyter bearbeite',
+'continue-editing' => 'Zum Bearbeitigsfäld',
 'previewconflict' => 'Die Vorschau zeigt dr Inhalt vum obere Täxtfäld. Eso siht dr Artikel us, wän Du jetz uf Spychere drucksch.',
 'session_fail_preview' => "'''Dyyni Bearbeitig het nid chenne gspycheret wäre, wel Sitzigsdate verlore gange sin.
 Bitte versuech s nomol. Derzue drucksch unter däre Täxtvorschau nomol uf „Syte spychere“.
@@ -871,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.',
@@ -1185,7 +1181,7 @@ Einzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 
 # Preferences page
 'preferences' => 'Yystellige',
-'mypreferences' => 'Ystellige',
+'mypreferences' => 'Yystellige',
 'prefs-edits' => 'Aazahl vu dr Bearbeitige:',
 'prefsnologin' => 'Nid aagmäldet',
 'prefsnologintext' => 'Du muesch <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aagmäldet]</span> sy, für Benutzerystellige chönne z ändere',
@@ -1409,12 +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',
-'rightsnone' => '(keini)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'die Syte z läse',
@@ -2022,7 +2019,7 @@ Lueg au d Lischt vu dr [[Special:WantedCategories|gwinschte Kategorie]].',
 'linksearch-pat' => 'Suechmuschter:',
 'linksearch-ns' => 'Namensruum:',
 'linksearch-ok' => 'Sueche',
-'linksearch-text' => 'Die Spezialsyte macht d Suechi no Syte megli, wu s bstimmti Weblink din het. Doderby chenne Platzhalter wie zem Byschpel <code>*.byschpel.de</code> brucht wäre. S mueß zmindecht ei Top-Level-Domain, z. B. „*.org“. aagee wäre. <br />Unterstitzti Protokoll: <code>$1</code> (Die bitte nit bi dr Suechaafrog aagee.)',
+'linksearch-text' => 'Die Spezialsyte macht d Suechi no Syte megli, wu s bstimmti Weblink din het. Doderby chenne Platzhalter wie zem Byschpel <code>*.byschpel.de</code> brucht wäre. S mueß zmindecht ei Top-Level-Domain, z. B. „*.org“. aagee wäre. <br />Unterstitzti Protokoll: <code>$1</code> (Standard isch http, wänn kei Protokoll aagee isch).',
 'linksearch-line' => '$1 isch vo $2 verknüpft',
 'linksearch-error' => 'Platzhalter chönne numme am Aafang verwändet werre.',
 
@@ -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.
@@ -2071,8 +2064,8 @@ Zuesätzligi Informatione iber einzelni Rächt git s [[{{MediaWiki:Listgrouprigh
 'emailuser-title-target' => 'E-Mail an {{GENDER:$1|dää Benutzer|die Benutzeri}} schicke',
 'emailuser-title-notarget' => 'E-Mail an Benutzer',
 'emailpage' => 'E-Mail an Benutzer',
-'emailpagetext' => 'Du chasch im Benutzer mit däm Formular e E-Mail schicke.
-As Absender wird d E-Mail-Adräss us Dyyne [[Special:Preferences|Yystellige]] yytrait, ass dr Benutzer Dir cha Antwort gee.',
+'emailpagetext' => 'Du chasch {{GENDER:$1|em Benutzer|dr Benutzeri}} mit däm Formular e E-Mail schicke.
+As Absender wird d E-Mail-Adräss us Dyyne [[Special:Preferences|Yystellige]] yytrait, ass {{GENDER:$1|dr Benutzer|d Benutzeri}} Dir cha Antwort gee.',
 'usermailererror' => 'S Mail-Objekt het e Fähler zruckgee:',
 'defemailsubject' => '{{SITENAME}}-E-Mail vum Benutzer „$1“',
 'usermaildisabled' => 'Benutzer-E-Mail abgstellt',
@@ -2141,11 +2134,7 @@ Wänn Du d Syte speter wider vu dr Lischt witt stryyche, deno druck eifach uf 
 
 'enotif_mailer' => '{{SITENAME}} E-Mail-Benochrichtigungsdienscht',
 'enotif_reset' => 'Alli Syte as aagluegt markiere',
-'enotif_newpagetext' => 'Des isch e neiji Syte.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-Benutzer',
-'changed' => 'gänderet',
-'created' => 'aagleit',
-'enotif_subject' => 'D {{SITENAME}} Syte $PAGETITLE isch vum $PAGEEDITOR $CHANGEDORCREATED wore.',
 'enotif_lastvisited' => '$1 zeigt alli Änderige uf s Mol.',
 'enotif_lastdiff' => 'Lueg $1 no däre Änderig.',
 'enotif_anon_editor' => 'Anonyme Benutzer $1',
@@ -2175,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',
@@ -2354,7 +2345,7 @@ $1',
 'blanknamespace' => '(Haupt-)',
 
 # Contributions
-'contributions' => 'Benutzer-Byträg',
+'contributions' => '{{GENDER:$1|Benutzer-Byträg}}',
 'contributions-title' => 'Benutzerbyytreg vu „$1“',
 'mycontris' => 'Myyni Byyträg',
 'contribsub2' => 'Für $1 ($2)',
@@ -2396,7 +2387,7 @@ Do chunnt dr aktuäll Yytrag us em Benutzersperr-Logbuech:',
 'whatlinkshere-hideredirs' => 'Wyterleitige $1',
 'whatlinkshere-hidetrans' => 'Vorlageyybindige $1',
 'whatlinkshere-hidelinks' => 'Links $1',
-'whatlinkshere-hideimages' => 'Dateigleicher $1',
+'whatlinkshere-hideimages' => 'Dateilink $1',
 'whatlinkshere-filters' => 'Filter',
 
 # Block/unblock
@@ -2832,7 +2823,7 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 
 # Info page
 'pageinfo-title' => 'Informatione zue „$1“',
-'pageinfo-not-current' => 'Die Informatione chenne nume fir di nejscht Versions aazeigt wäre.',
+'pageinfo-not-current' => 'Die Informatione chenne leider nit fir alti Versionen aazeigt wäre.',
 'pageinfo-header-basic' => 'Basisinformatione',
 'pageinfo-header-edits' => 'Bearbeitige',
 'pageinfo-header-restrictions' => 'Syteschutz',
@@ -2841,6 +2832,7 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 'pageinfo-default-sort' => 'Standardsortierkriterium',
 'pageinfo-length' => 'Sytelengi (in Byte)',
 'pageinfo-article-id' => 'Syten-ID',
+'pageinfo-language' => 'Syteninhaltssproch',
 'pageinfo-robot-policy' => 'Suechmaschinestatus',
 'pageinfo-robot-index' => 'Indizierbar',
 'pageinfo-robot-noindex' => 'Nit indizierbar',
@@ -2861,6 +2853,13 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 'pageinfo-hidden-categories' => 'Versteckti {{PLURAL:$1|Kategori|Kategorie}} ($1)',
 'pageinfo-templates' => 'Yybundeni {{PLURAL:$1|Vorlag|Vorlage}} ($1)',
 'pageinfo-toolboxlink' => 'Informatione zue dr Syte',
+'pageinfo-redirectsto' => 'Weiterleitung nach',
+'pageinfo-redirectsto-info' => 'Information',
+'pageinfo-contentpage' => 'Zellt as Inhaltssyte',
+'pageinfo-contentpage-yes' => 'Jo',
+'pageinfo-protect-cascading' => 'Syte mit Kaskadeschutz vu do',
+'pageinfo-protect-cascading-yes' => 'Jo',
+'pageinfo-protect-cascading-from' => 'Syte mit Kaskadeschutz vu',
 
 # Patrolling
 'markaspatrolleddiff' => 'Als patrulyrt markyre',
@@ -2872,6 +2871,7 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 'markedaspatrollederror' => 'Markierig as „kontrolliert“ nit megli.',
 'markedaspatrollederrortext' => 'Du muesch e Syteänderig uswehle.',
 'markedaspatrollederror-noautopatrol' => 'S isch nit erlaubt, eigeni Bearbeitige as kontrolliert z markiere.',
+'markedaspatrollednotify' => 'Die Änderig an $1 isch as kontrolliert markiert wore.',
 
 # Patrol log
 'patrol-log-page' => 'Kontroll-Logbuech',
@@ -3538,6 +3538,7 @@ Du chasch au d [[Special:EditWatchlist|Standard-Bearbeitigssyte]] bruuche.',
 'version-license' => 'Lizänz',
 'version-poweredby-credits' => "Die Websyte nutzt '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'anderi',
+'version-credits-summary' => 'Mir danke däne Lyt fir ihri Bytreg zue [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre.
 
 Des Programm wird in dr Hoffnig verteilt, ass es nitzli isch, aber OHNI JEDI GARANTI un sogar ohni di impliziert Garanti vun ere MÄRTGÄNGIGKEIT oder EIGNIG FIR E BSTIMMTE ZWÄCK. Doderzue git meh Hiiwys in dr GNU General Public-Lizänz.
@@ -3676,11 +3677,15 @@ Di aagfrogt Datei wird diräkt dargstellt bzw. mit dr verchnipfte Aawändig gsta
 'logentry-move-move_redir-noredirect' => '$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege',
 'logentry-patrol-patrol' => '$1 het Version $4 vo Syte $3 als kontrolliert markiert',
 'logentry-patrol-patrol-auto' => '$1 het Version $4 vo Syte $3 automatisch als kontrolliert markiert',
-'logentry-newusers-newusers' => '$1 het en Benutzerchonto erstellt',
-'logentry-newusers-create' => '$1 het en Benutzerchonto erstellt',
-'logentry-newusers-create2' => '$1 het en Benutzerchonto $3 erstellt',
+'logentry-newusers-newusers' => 'Benutzerkonto $1 isch aagleit wore.',
+'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 baff36b..afe55ba 100644 (file)
@@ -18,6 +18,7 @@
  * @author Jay
  * @author Kaganer
  * @author KartikMistry
+ * @author Kondi
  * @author Metrix1312
  * @author Mohit.dalal
  * @author Nehal
@@ -197,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
@@ -284,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;અને',
@@ -308,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' => 'ઇતિહાસ જુઓ',
@@ -318,6 +319,7 @@ $messages = array(
 'namespaces' => 'નામાવકાશો',
 'variants' => 'ભિન્ન રૂપો',
 
+'navigation-heading' => 'દિશાશોધન મેનુ',
 'errorpagetitle' => 'ત્રુટિ',
 'returnto' => '$1 પર પાછા જાઓ.',
 'tagline' => '{{SITENAME}}થી',
@@ -418,9 +420,9 @@ $1',
 'youhavenewmessages' => 'તમારા માટે $1 ($2).',
 'newmessageslink' => 'નવીન સંદેશ',
 'newmessagesdifflink' => 'છેલ્લો ફેરફાર',
-'youhavenewmessagesfromusers' => 'આપને માટે {{PLURAL:$3|અન્ય સભ્યના|$3 અન્ય સભ્યોના}} $1 છે. ($2).',
+'youhavenewmessagesfromusers' => 'આપને માટે {{PLURAL:$3|અન્ય સભ્ય|$3 અન્ય સભ્યો}} તરફથી $1 છે. ($2).',
 'youhavenewmessagesmanyusers' => 'આપને માટે $1 છે. ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|નવો સંદેશ|નવાં સંદેશાઓ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|નવો સંદેશો|નવા સંદેશા}}',
 'newmessagesdifflinkplural' => 'છેલ્લા {{PLURAL:$1|ફેરફાર|ફેરફારો}}',
 'youhavenewmessagesmulti' => '$1 ઉપર તમારા માટે નવો સંદેશ છે.',
 'editsection' => 'ફેરફાર કરો',
@@ -504,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" ન મળી.',
@@ -530,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' => 'આ પાનું સોફ્ટવેર માટે ઇન્ટરફેઇસ ટેક્સટ આપે છે, અને તેને દુરુપયોગ રોકવા માટે સ્થગિત કર્યું છે.
@@ -562,8 +564,8 @@ $2',
 
 તમે અનામી તરીકે {{SITENAME}} વાપરવાનું ચાલુ રાખી શકો છો, કે પછી તેના તે જ કે અલગ સભ્ય તરીકે <span class='plainlinks'>[$1 ફરી પ્રવેશ]</span> કરી શકો છો.
 ધ્યાન રાખો કે જ્યાં સુધી તમે તમારા બ્રાઉઝરનો  કૅશ સાફ નહીં કરો ત્યાં સુધી કેટલાક પાનાં તમે પ્રવેશી ચુક્યા છો તેમ બતાવશે.",
-'welcomecreation' => '== તમારૂં સ્વાગત છે $1! ==
-તમારૂં ખાતું બની ગયું છે.
+'welcomeuser' => 'સુસ્વાગતમ્, $1!',
+'welcomecreation-msg' => 'તમારૂં ખાતું ખુલી ગયું છે.
 તમારી [[Special:Preferences|{{SITENAME}} પસંદ]] બદલવાનું ભૂલશો નહીં.',
 'yourname' => 'સભ્ય નામ:',
 'yourpassword' => 'ગુપ્ત સંજ્ઞા:',
@@ -630,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 એડ્રેસ  સ્થગિત કરી દેવાયું છે તેથી દૂરુપયોગ ટાળવા માટે તમને ગુપ્તસંજ્ઞા રીકવરી કરવાની છૂટ નથી.',
@@ -728,6 +728,7 @@ $2
 'changeemail-oldemail' => 'હાલ નું ઈ મેલ ખાતુ:',
 'changeemail-newemail' => 'નવું ઈ-મેલ સરનામું',
 'changeemail-none' => '(કંઈ નહી)',
+'changeemail-password' => 'તમારો {{SITENAME}} પાસવર્ડ:',
 'changeemail-submit' => 'ઈ મેલ બદલો',
 'changeemail-cancel' => 'રદ કરો',
 
@@ -850,7 +851,7 @@ $2
 'note' => "'''નોંધ:'''",
 'previewnote' => "'''આ ફક્ત પૂર્વાવલોકન છે;'''
 તમારા ફેરફારો હજુ સાચવવામાં નથી આવ્યા!",
-'continue-editing' => 'વાàª\82àª\9aવાનું ચાલુ રાખો',
+'continue-editing' => 'ફà«\87રફાર àª\95રવાનું ચાલુ રાખો',
 'previewconflict' => 'જો તમે આ પાનું સાચવશો તો આ પ્રિવ્યુમાં દેખાય છે તેવું સચવાશે.',
 'session_fail_preview' => "'''અફસોસ છે! સત્ર માહિતી ખોઇ દેવાને કારણે અમે તમારું કાર્ય સાચવી ન શક્યાં.'''
 કૃપયા ફરી પ્રયત્ન કરો.
@@ -865,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 (પરિચ્છેદ)નો ફેરફાર કરી રહ્યા છો',
@@ -879,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 />
@@ -909,7 +910,6 @@ $2
 'template-protected' => '(સુરક્ષિત)',
 'template-semiprotected' => '(અર્ધ સુરક્ષિત)',
 'hiddencategories' => 'આ પાનું {{PLURAL:$1|૧ છુપી શ્રેણી|$1 છુપી શ્રેણીઓ}}નું સભ્ય છે:',
-'nocreatetitle' => 'પાનું બનાવવૌં મર્યાદિત છે',
 'nocreatetext' => '{{SITENAME}}માં નવું પાનુ બનાવવા ઉપર નિયંત્રણ આવી ગયું છે.
 <br />આપ પાછા જઇને હયાત પાનામાં ફેરફાર કરી શકો છો, નહિતર [[Special:UserLogin|પ્રવેશ કરો કે નવું ખાતું ખોલો]].',
 'nocreate-loggedin' => 'તમને નવાં પાનાં બનાવવાની પરવાનગી નથી.',
@@ -934,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' => "'''ચેતવણી:''' આ પાનું ખૂબ ખર્ચાળ પદચ્છેદ સૂત્ર ધરાવે છે.
@@ -959,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
@@ -1063,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' => 'પુનરવર્તન દ્રશ્યતાસફળતા પૂર્વક અદ્યતન બનાવાઈ',
@@ -1203,7 +1205,7 @@ $1",
 'powersearch-ns' => 'નામસ્થળોમાં શોધો:',
 'powersearch-redir' => 'અન્યત્ર વાળેલાં પાનાંની યાદી',
 'powersearch-field' => 'નાં માટે શોધો',
-'powersearch-togglelabel' => ' ચકાસો:',
+'powersearch-togglelabel' => 'ચકાસો:',
 'powersearch-toggleall' => 'બધા',
 'powersearch-togglenone' => 'એકે નહિ',
 'search-external' => 'બાહ્ય શોધ',
@@ -1222,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> પ્રવેશ કરેલો હોવો જોઈએ',
@@ -1237,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' => 'સાચવો',
@@ -1298,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' => 'ભાષા',
@@ -1334,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
@@ -1450,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 વાપરો',
@@ -1511,7 +1514,7 @@ HTML નાકું ચકાસો',
 'rcshowhidebots' => 'બૉટો $1',
 'rcshowhideliu' => 'લૉગ ઇન થયેલાં સભ્યો $1',
 'rcshowhideanons' => 'અનામી સભ્યો $1',
-'rcshowhidepatr' => ' $1 ચોકીયાત ફેરફારો',
+'rcshowhidepatr' => '$1 ચોકીયાત ફેરફારો',
 'rcshowhidemine' => 'મારા ફેરફારો $1',
 'rclinks' => 'છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો<br />$3',
 'diff' => 'ભેદ',
@@ -2064,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' => 'યજમાન નામની શરૂઆતમાં જ વાઈલ્ડકાર્ડ પ્રકટ થશે',
 
@@ -2085,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' => 'નીચે આ વિકિ પર વ્યાખ્યાયિત સભ્ય જૂથોની યાદી, તેમની સાથે સંકળાયેલા હક્કો સાથે આપી છે.
@@ -2112,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' => 'સભ્યનો ઈ-મેલ નિષ્ક્રિય કરાયો',
@@ -2146,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 કરો',
@@ -2154,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' => 'ધ્યાનમાં રાખો',
@@ -2180,28 +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_newpagetext' => 'આ નવું પાનું છે.',
 'enotif_impersonal_salutation' => '{{SITENAME}} સભ્ય',
-'changed' => 'બદલ્યું',
-'created' => 'બનાવ્યું',
-'enotif_subject' => '{{SITENAME}} નું પાનું $PAGETITLE $PAGEEDITOR દ્વારા $CHANGEDORCREATED',
+'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
 
 જ્યાં સુધી તમે આ પાનાની મુલાકાત નહી લો ત્યાં સુધી તેમાં ભવિષ્યમાં થનાર કોઇ પણ ફેરફારની સૂચના તમને મળશે નહિ.
 તમે તમારી ધ્યાન સૂચિમાં તમે જોયેલા પાના સંબંધી સૂચનાને લાગતા વિલપોમાં ફેરફાર કરી શકો છો.
@@ -2220,6 +2222,8 @@ $UNWATCHURL
 
 મંતવ્યો અને વધુ મદદ માટે 
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'બનાવ્યું',
+'changed' => 'બદલ્યું',
 
 # Delete
 'deletepage' => 'પાનું હટાવો',
@@ -2413,9 +2417,9 @@ $1',
 'blanknamespace' => '(મુખ્ય)',
 
 # Contributions
-'contributions' => 'સભ્યનું યોગદાન',
+'contributions' => '{{GENDER:$1|સભ્ય}}નું યોગદાન',
 'contributions-title' => 'સભ્ય $1નું યોગદાન',
-'mycontris' => 'મારà«\82àª\82 àª¯à«\8bàª\97દાન',
+'mycontris' => 'યોગદાન',
 'contribsub2' => '$1 માટે ($2)',
 'nocontribs' => 'આ પરિમાણને મળતી પરિણામ નથી મળ્યાં',
 'uctop' => '(છેક ઉપર)',
@@ -2441,7 +2445,7 @@ $1',
 'sp-contributions-submit' => 'શોધો',
 
 # What links here
-'whatlinkshere' => 'àª\85હિàª\82 શું જોડાય છે',
+'whatlinkshere' => 'àª\85હà«\80 શું જોડાય છે',
 'whatlinkshere-title' => '"$1" સાથે જોડાયેલાં પાનાં',
 'whatlinkshere-page' => 'પાનું:',
 'linkshere' => "નીચેના પાનાઓ '''[[:$1]]''' સાથે જોડાય છે:",
@@ -2456,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
@@ -2487,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' => 'અન્ય/વધારાનું કારણ:',
@@ -2924,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' => 'હા',
@@ -2975,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.',
@@ -3003,6 +3017,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 કલાક|$1 કલાકો}}',
 'days' => '{{PLURAL:$1|$1 દિવસ|$1 દિવસો}}',
 'ago' => '$1 પહેલાં',
+'just-now' => 'હમણાં',
 
 # Bad image list
 'bad_image_list' => 'ફોર્મેટ નીચે મુજબ છે:
@@ -3600,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' => 'દ્વ્રારા લાભાન્વીત',
@@ -3671,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|ફેરફાર|ફેરફારો}}',
 
@@ -3746,11 +3761,12 @@ $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 ab4d580..6f0b4c5 100644 (file)
@@ -342,9 +342,6 @@ Cur coontey jeh da [[Special:ListUsers/sysop|reireyder]], as goaill stiagh yn UR
 'virus-unknownscanner' => 'ronseyder noi-veerys gyn enney',
 
 # Login and logout pages
-'welcomecreation' => '== Failt ort, $1! ==
-Ta dty choontys crooit nish.<br />
-Ny jean jarrood dty [[Special:Preferences|hosheeaghtyn {{SITENAME}}]] y chaghlaa.',
 'yourname' => "Dt'ennym ymmydeyr:",
 'yourpassword' => 'Fockle yn arrey:',
 'yourpasswordagain' => "Aascreeu d'ockle arrey:",
@@ -495,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}}.',
@@ -711,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',
@@ -957,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',
@@ -999,10 +994,7 @@ Bee caghlaaghyn jeant er y duillag shoh as e ghuillag resoonaght ry-akin ayns y
 'watching' => 'Jannoo arrey...',
 'unwatching' => 'Stap y chur er arrey...',
 
-'enotif_newpagetext' => 'She duillag noa eh shoh.',
 'enotif_impersonal_salutation' => '{{SITENAME}} ymmydeyr',
-'changed' => 'ceaghlit',
-'created' => 'crooit',
 'enotif_anon_editor' => 'ymmydeyr $1 neuenmyssit',
 'enotif_body' => '$WATCHINGUSERNAME veen,
 
@@ -1035,6 +1027,8 @@ $UNWATCHURL
 
 Aaveaghey as cooney s\'odjey:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'crooit',
+'changed' => 'ceaghlit',
 
 # Delete
 'deletepage' => 'Scryss y duillag',
@@ -1474,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 459e976..d66885c 100644 (file)
@@ -328,7 +328,6 @@ For translations, please consider using [//translatewiki.net/wiki/Main_Page?setl
 'logouttext' => "'''Ngì hien-chhai yí-kîn thui-chhut.'''
 
 Ngì khó-yî ki-siu̍k yî ngia̍k-miàng fông-sṳt sṳ́-yung {{SITENAME}}, fe̍t-chá chai-chhṳ yî siông-thùng fe̍t-he mò-thùng yung-fu sṳ̂n-fun tên-ngi̍p.",
-'welcomecreation' => '<h2>Fôn-ngiàng, $1!</h2><p>Ngì-ke chong-ho yí-kîn kien-li̍p, put-yeu mong-ki sat-chṳ {{SITENAME}} ke-ngìn chhâm-sṳ.</p>',
 'yourname' => 'Yung-fu-miàng',
 'yourpassword' => 'Me̍t-ma:',
 'yourpasswordagain' => 'Chai-chhṳ sû-ngi̍p me̍t-ma:',
@@ -502,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',
@@ -717,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',
@@ -1005,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)',
 
@@ -1064,15 +1060,13 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{SITENAME}} email thûng-tî-hi',
 'enotif_reset' => 'Chiông só-yû hong-mien phêu-vi yí-kîn thu̍k-ko.',
-'enotif_newpagetext' => 'Liá-he sîn-kien vùn-chông.',
 'enotif_impersonal_salutation' => '{{SITENAME}} yung-fu',
-'changed' => 'siû-kói liáu',
-'created' => 'Yí-kîn kien-li̍p',
-'enotif_subject' => '{{SITENAME}} yû vùn-chông $PAGETITLE pûn $PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Kiám-sṳ ngì song-chhṳ fóng-mun heu ke só-yû kiên-kói chhián chhâm-siòng $1.',
 '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',
@@ -1674,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 c86e2ba..a6e9b8e 100644 (file)
@@ -323,9 +323,6 @@ $2',
 'ns-specialprotected' => '‘A‘ole hiki ke ho‘opololei i nā ‘ao‘ao kūikawā',
 
 # Login and logout pages
-'welcomecreation' => '== E komo mai, $1! ==
-Ua hoʻokumu ʻia kāu moʻokāki.
-Mai poina e hoʻololi i [[Special:Preferences|kāu makemake ma {{SITENAME}}]].',
 'yourname' => "Inoa mea ho'ohana",
 'yourpassword' => 'ʻŌlelo hūnā:',
 'yourpasswordagain' => "Hua'ōlelo huna hou",
index c74f3d6..c0d230b 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,8 +485,9 @@ $messages = array(
 'newwindow' => '(נפתח בחלון חדש)',
 'cancel' => 'ביטול / יציאה',
 'moredotdotdot' => 'עוד…',
-'mypage' => 'הדף שלי',
-'mytalk' => 'דף השיחה שלי',
+'morenotlisted' => 'עוד פריטים שאינם ברשימה…',
+'mypage' => 'דף משתמש',
+'mytalk' => 'שיחה',
 'anontalk' => 'השיחה עבור IP זה',
 'navigation' => 'ניווט',
 'and' => '&#32;וגם',
@@ -517,6 +519,7 @@ $messages = array(
 'namespaces' => 'מרחבי שם',
 'variants' => 'גרסאות שפה',
 
+'navigation-heading' => 'תפריט הניווט',
 'errorpagetitle' => 'שגיאה',
 'returnto' => 'חזרה לדף $1.',
 'tagline' => 'מתוך {{SITENAME}}',
@@ -727,7 +730,7 @@ $1',
 'viewsource-title' => 'הצגת המקור של $1',
 'actionthrottled' => 'הפעולה הוגבלה',
 'actionthrottledtext' => 'כאמצעי נגד ספאם, אינכם מורשים לבצע פעולה זו פעמים רבות מדי בזמן קצר. אנא נסו שוב בעוד מספר דקות.',
-'protectedpagetext' => '×\93×£ ×\96×\94 ×\9e×\95×\92×\9f ×\95×\9c×\90 × ×\99ת×\9f ×\9cער×\95×\9a ×\90×\95ת×\95.',
+'protectedpagetext' => '×\93×£ ×\96×\94 ×\9e×\95×\92×\9f ×\9b×\93×\99 ×\9c×\9e× ×\95×¢ ×¢×¨×\99×\9b×\94 ×\95פע×\95×\9c×\95ת ×\90×\97ר×\95ת.',
 'viewsourcetext' => 'באפשרותכם לצפות בטקסט המקור של הדף ולהעתיקו:',
 'viewyourtext' => "באפשרותכם לצפות בטקסט המקור של '''העריכות שלכם''' של הדף ולהעתיקו:",
 'protectedinterface' => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.
@@ -762,9 +765,9 @@ $2',
 
 באפשרותכם להמשיך ולעשות שימוש ב{{grammar:תחילית|{{SITENAME}}}} באופן אנונימי, או <span class='plainlinks'>[$1 לשוב ולהיכנס לאתר]</span> עם שם משתמש זהה או אחר.
 שימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.",
-'welcomecreation' => '== ברוך בואך, $1! ==
-חשבונך נוצר.
-נא לא לשכוח להתאים את [[Special:Preferences|העדפות המשתמש]] שלך באתר {{SITENAME}}.',
+'welcomeuser' => 'ברוך בואך, $1!',
+'welcomecreation-msg' => 'חשבונך נוצר.
+נא לא לשכוח להתאים את [[Special:Preferences|העדפות המשתמש]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
 'yourname' => 'שם משתמש:',
 'yourpassword' => 'סיסמה:',
 'yourpasswordagain' => 'הקש סיסמה שנית:',
@@ -864,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' => 'שינוי סיסמה',
@@ -931,6 +935,7 @@ $2
 'changeemail-oldemail' => 'כתובת דוא"ל נוכחית:',
 'changeemail-newemail' => 'כתובת דוא"ל חדשה:',
 'changeemail-none' => '(אין)',
+'changeemail-password' => 'סיסמה ב{{grammar:תחילית|{{SITENAME}}}}:',
 'changeemail-submit' => 'שינוי כתובת הדוא"ל',
 'changeemail-cancel' => 'ביטול',
 
@@ -1107,8 +1112,7 @@ $2
 'template-protected' => '(מוגנת)',
 'template-semiprotected' => '(מוגנת חלקית)',
 'hiddencategories' => 'דף זה כלול ב{{PLURAL:$1|קטגוריה מוסתרת אחת|־$1 קטגוריות מוסתרות}}:',
-'edittools' => '<!-- הטקסט הנכתב כאן יוצג מתחת לטפסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->',
-'nocreatetitle' => 'יצירת הדפים הוגבלה',
+'edittools' => '<!-- הטקסט הנכתב כאן יוצג מתחת לטופסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->',
 'nocreatetext' => 'אתר זה מגביל את האפשרות ליצור דפים חדשים. באפשרותכם לחזור אחורה ולערוך דף קיים, או [[Special:UserLogin|להיכנס לחשבון]].',
 'nocreate-loggedin' => 'אינכם מורשים ליצור דפים חדשים.',
 'sectioneditnotsupported-title' => 'עריכת פסקאות אינה נתמכת',
@@ -1430,7 +1434,7 @@ $1",
 
 # Preferences page
 'preferences' => 'העדפות',
-'mypreferences' => '×\94×\94×¢×\93פ×\95ת ×©×\9c×\99',
+'mypreferences' => '×\94×¢×\93פ×\95ת',
 'prefs-edits' => 'מספר עריכות:',
 'prefsnologin' => 'לא נכנסת לחשבון',
 'prefsnologintext' => 'עליכם <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} להיכנס לחשבון]</span> כדי לשנות העדפות משתמש.',
@@ -1506,9 +1510,9 @@ $1",
 'prefs-emailconfirm-label' => 'אימות כתובת דוא"ל:',
 'prefs-textboxsize' => 'גודל חלון העריכה',
 'youremail' => 'דואר אלקטרוני:',
-'username' => 'שם משתמש:',
-'uid' => '×\9eספר ×¡×\99×\93×\95ר×\99:',
-'prefs-memberingroups' => 'חבר {{PLURAL:$1|בקבוצה|בקבוצות}}:',
+'username' => 'שם {{GENDER:$1|המשתמש|המשתמשת}}:',
+'uid' => '×\94×\9eספר ×\94ס×\99×\93×\95ר×\99 ×©×\9c {{GENDER:$1|×\94×\9eשת×\9eש|×\94×\9eשת×\9eשת}}:',
+'prefs-memberingroups' => '{{GENDER:$2|חבר|חברה}} {{PLURAL:$1|בקבוצה|בקבוצות}}:',
 'prefs-registration' => 'זמן ההרשמה:',
 'yourrealname' => 'שם אמיתי:',
 'yourlanguage' => 'שפת הממשק:',
@@ -1659,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' => 'לקרוא דף זה',
@@ -1904,23 +1906,24 @@ $1',
 'upload-copy-upload-invalid-domain' => 'העלאת קבצים משרת זה אינה אפשרית.',
 
 # File backend
-'backend-fail-stream' => 'לא הייתה אפשרות להזרים את הקובץ $1.',
-'backend-fail-backup' => 'לא הייתה אפשרות לגבות את הקובץ $1.',
-'backend-fail-notexists' => 'הקובץ $1 אינו קיים.',
+'backend-fail-stream' => 'לא הייתה אפשרות להזרים את הקובץ "$1".',
+'backend-fail-backup' => 'לא הייתה אפשרות לגבות את הקובץ "$1".',
+'backend-fail-notexists' => 'הקובץ "$1" אינו קיים.',
 'backend-fail-hashes' => 'לא הייתה אפשרות לקבל גיבובי קבצים עבור ההשוואה.',
-'backend-fail-notsame' => 'כבר קיים קובץ לא זהה ב־$1.',
-'backend-fail-invalidpath' => '$1 אינו נתיב אחסון תקין.',
-'backend-fail-delete' => 'לא הצליחה מחיקת הקובץ $1.',
-'backend-fail-alreadyexists' => 'הקובץ $1 כבר קיים.',
-'backend-fail-store' => 'לא הייתה אפשרות לאחסן את הקובץ $1 ב־$2',
-'backend-fail-copy' => 'לא הייתה אפשרות להעתיק את הקובץ $1 אל $2',
-'backend-fail-move' => 'לא הייתה אפשרות להעביר את הקובץ $1 אל $2',
+'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' => 'קר×\99×\90ת ×\94ק×\95×\91×¥ $1 ×\9c×\90 ×\94צ×\9c×\99×\97×\94',
-'backend-fail-create' => '×\9bת×\99×\91ת ×\94ק×\95×\91×¥ $1 ×\9c×\90 ×\94צ×\9c×\99×\97×\94',
-'backend-fail-maxsize' => '×\9bת×\99×\91ת ×\94ק×\95×\91×¥ $1 ×\9c×\90 ×\94צ×\9c×\99×\97×\94 כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.',
+'backend-fail-read' => '×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9cקר×\95×\90 ×\90ת ×\94ק×\95×\91×¥ "$1".',
+'backend-fail-create' => '×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9c×\9bת×\95×\91 ×\90ת ×\94ק×\95×\91×¥ "$1".',
+'backend-fail-maxsize' => '×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9c×\9bת×\95×\91 ×\90ת ×\94ק×\95×\91×¥ "$1" כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.',
 'backend-fail-readonly' => 'מאגר האחסון לקבצים "$1" הוא כרגע במצב קריאה בלבד. הסיבה שניתנה לכך היא: "\'\'\'$2\'\'\'"',
 'backend-fail-synced' => 'הקובץ "$1" נמצא במצב לא עקבי בתוך מאגרי אחסון הקבצים הפנימיים',
 'backend-fail-connect' => 'לא ניתן היה להתחבר למאגר אחסון הקבצים הפנימי "$1".',
@@ -2300,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' => 'תווים כלליים יכולים להופיע רק בתחילת שם השרת.',
 
@@ -2319,10 +2322,6 @@ $1',
 'activeusers-hidesysops' => 'הסתרת מפעילי מערכת',
 'activeusers-noresult' => 'לא נמצאו משתמשים.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'יומן רישום משתמשים',
-'newuserlogpagetext' => 'זהו יומן המכיל הרשמות של משתמשים.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'רשימת הרשאות לקבוצה',
 'listgrouprights-summary' => 'זוהי רשימה של קבוצות המשתמש המוגדרות באתר זה, עם ההרשאות של כל אחת.
@@ -2381,16 +2380,15 @@ $1',
 
 # Watchlist
 'watchlist' => 'רשימת המעקב שלי',
-'mywatchlist' => 'רש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\99',
+'mywatchlist' => 'רש×\99×\9eת ×\9eעק×\91',
 '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' => 'מעקב',
@@ -2418,19 +2416,23 @@ $1',
 
 'enotif_mailer' => 'הודעות {{SITENAME}}',
 'enotif_reset' => 'סימון כל הדפים כאילו נצפו',
-'enotif_newpagetext' => 'זהו דף חדש.',
 'enotif_impersonal_salutation' => 'משתמש של {{SITENAME}}',
-'changed' => 'שונה',
-'created' => 'נוצר',
-'enotif_subject' => 'הדף $PAGETITLE ב{{grammar:תחילית|{{SITENAME}}}} $CHANGEDORCREATED על ידי $PAGEEDITOR',
+'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_lastvisited' => 'ראו $1 לכל השינויים מאז ביקורכם האחרון.',
 'enotif_lastdiff' => 'ראו $1 לשינוי זה.',
 'enotif_anon_editor' => 'משתמש אנונימי $1',
 'enotif_body' => 'לכבוד $WATCHINGUSERNAME,
 
-הדף $PAGETITLE ב{{grammar:תחילית|{{SITENAME}}}} $CHANGEDORCREATED ב־$PAGEEDITDATE על ידי $PAGEEDITOR, ראו $PAGETITLE_URL לגרסה הנוכחית.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 תקציר העריכה: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2438,7 +2440,7 @@ $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}}
 
@@ -2454,6 +2456,8 @@ $UNWATCHURL
 
 למשוב ולעזרה נוספת:
 {{canonicalurl::{{MediaWiki:Helppage}}}}',
+'created' => 'נוצר',
+'changed' => 'שונה',
 
 # Delete
 'deletepage' => 'מחיקה',
@@ -2523,6 +2527,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] הועבר לשם [[$2]]',
 'protect-badnamespace-title' => 'מרחב שם שבו לא ניתן להגן על דפים',
 'protect-badnamespace-text' => 'לא ניתן להגן על דפים במרחב שם זה.',
+'protect-norestrictiontypes-text' => 'לא ניתן להגן על דף זה כי אין סוגי הגנה זמינים.',
+'protect-norestrictiontypes-title' => 'דף שלא ניתן להגן עליו',
 'protect-legend' => 'אישור הפעלת ההגנה',
 'protectcomment' => 'סיבה:',
 'protectexpiry' => 'פקיעת ההגנה:',
@@ -2538,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',
@@ -2635,9 +2641,9 @@ $1',
 'blanknamespace' => '(ראשי)',
 
 # Contributions
-'contributions' => 'תרומות המשתמש',
+'contributions' => 'תרומות {{GENDER:$1|המשתמש|המשתמשת}}',
 'contributions-title' => 'תרומות של המשתמש $1',
-'mycontris' => '×\94תר×\95×\9e×\95ת ×©×\9c×\99',
+'mycontris' => 'תר×\95×\9e×\95ת',
 'contribsub2' => 'עבור $1 ($2)',
 'nocontribs' => 'לא נמצאו שינויים המתאימים לקריטריונים אלו.',
 'uctop' => '(אחרון)',
@@ -2840,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 ואין לו היסטוריית עריכות קודמות.
 פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים.
 
 '''אזהרה!'''
@@ -2851,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 ואין לו היסטוריית עריכות קודמות.
 פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים.
 
 '''אזהרה!'''
@@ -3022,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" של דף הבסיס אינו מאפשר דפי־משנה.',
@@ -3205,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' => 'מידע',
@@ -3213,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' => 'קלאסי',
@@ -3235,6 +3247,8 @@ $1',
 'markedaspatrollederror' => 'לא ניתן לסמן כבדוק',
 'markedaspatrollederrortext' => 'עליכם לציין גרסה שתציינו כבדוקה.',
 'markedaspatrollederror-noautopatrol' => 'אינכם מורשים לסמן את השינויים של עצמכם כבדוקים.',
+'markedaspatrollednotify' => 'שינוי זה ל"$1" סומן כבדוק.',
+'markedaspatrollederrornotify' => 'סימון השינוי כבדוק נכשל.',
 
 # Patrol log
 'patrol-log-page' => 'יומן שינויים בדוקים',
@@ -3264,10 +3278,11 @@ $1',
 'widthheightpage' => '<span dir="ltr">$1 × $2</span>, {{PLURAL:$3|דף אחד|$3 דפים}}',
 'file-info' => 'גודל הקובץ: $1, סוג MIME‏: $2',
 'file-info-size' => '<span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3, סוג MIME‏: $4',
-'file-info-size-pages' => '<span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3, סוג MIME‏: $4, {{PLURAL:$5|דף אחד|$5 דפים}}',
+'file-info-size-pages' => '<span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3, סוג MIME‏: $4, {{PLURAL:$5|דף אחד|$5 דפים}}',
 '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.',
@@ -3293,11 +3308,18 @@ $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' => 'לפני זמן קצר',
 
 # Bad image list
 'bad_image_list' => 'דרך הכתיבה בהודעה היא כמתואר להלן:
@@ -4108,11 +4130,15 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$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-autocreate' => '×\94×\97ש×\91×\95×\9f $1 נוצר אוטומטית',
+'logentry-newusers-newusers' => 'חשבון המשתמש $1 נוצר',
+'logentry-newusers-create' => 'חשבון המשתמש $1 נוצר',
+'logentry-newusers-create2' => 'חשבון המשתמש $3 נוצר על ידי $1',
+'logentry-newusers-autocreate' => '×\97ש×\91×\95×\9f ×\94×\9eשת×\9eש $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 e78fc8d..b607859 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Aapkamanoj
  * @author Abhishrut
  * @author Akansha
  * @author Aksi great
@@ -31,6 +32,7 @@
  * @author Omprakash
  * @author Pulkitsingh01
  * @author Purodha
+ * @author Raj Singh
  * @author Rajesh
  * @author Rajivkurjee
  * @author Reedy
@@ -226,7 +228,7 @@ $messages = array(
 
 'underline-always' => 'सदैव',
 'underline-never' => 'कभी नहीं',
-'underline-default' => 'ब्राउज़र डिफ़ॉल्ट',
+'underline-default' => 'तà¥\8dवà¤\9aा à¤¯à¤¾ à¤¬à¥\8dराà¤\89à¤\9c़र à¤¡à¤¿à¤«à¤¼à¥\89लà¥\8dà¤\9f',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'सम्पादन क्षेत्र की मुद्रलिपि शैली:',
@@ -311,8 +313,8 @@ $messages = array(
 'newwindow' => '(नई विंडो में खुलता है)',
 'cancel' => 'रद्द करें',
 'moredotdotdot' => 'और...',
-'mypage' => 'मà¥\87रा à¤ªà¥\83षà¥\8dठ',
-'mytalk' => 'मà¥\87रà¥\80 à¤¸à¤¦à¤¸à¥\8dय à¤µà¤¾à¤°à¥\8dता',
+'mypage' => 'पृष्ठ',
+'mytalk' => 'वार्ता',
 'anontalk' => 'इस आइ॰पी के लिये वार्ता',
 'navigation' => 'भ्रमण',
 'and' => '&#32;और',
@@ -333,21 +335,22 @@ $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' => 'सम्पादन',
 'vector-view-history' => 'इतिहास देखें',
 'vector-view-view' => 'पढ़ें',
 'vector-view-viewsource' => 'स्रोत देखें',
-'actions' => 'à¤\95à¥\8dरियाà¤\8fà¤\82',
+'actions' => 'à¤\95à¥\8dरियाà¤\8fà¤\81',
 'namespaces' => 'नामस्थान',
 'variants' => 'संस्करण',
 
+'navigation-heading' => 'दिक्चालन सूची',
 'errorpagetitle' => 'त्रुटि',
 'returnto' => '$1 को लौटें।',
 'tagline' => '{{SITENAME}} से',
-'help' => 'सहायता',
+'help' => 'मदद',
 'search' => 'खोज',
 'searchbutton' => 'खोजें',
 'go' => 'जाएँ',
@@ -374,7 +377,7 @@ $messages = array(
 'unprotectthispage' => 'इस पृष्ठ को सुरक्षित करै',
 'newpage' => 'नया पृष्ठ',
 'talkpage' => 'इस पृष्ठ के बारे में चर्चा करें',
-'talkpagelinktext' => 'वारà¥\8dता',
+'talkpagelinktext' => 'à¤\9aरà¥\8dà¤\9aा',
 'specialpage' => 'विशेष पृष्ठ',
 'personaltools' => 'वैयक्तिक औज़ार',
 'postcomment' => 'नया अनुभाग',
@@ -498,11 +501,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"
@@ -539,6 +542,8 @@ $1',
 'cannotdelete' => '"$1" पृष्ठ या फ़ाइल को हटाया नहीं जा सकता।
 शायद किसी और ने इसे पहले ही हटा दिया हो।',
 'cannotdelete-title' => '"$1" पृष्ठ को हटाया नहीं जा सकता',
+'delete-hook-aborted' => 'हुक द्वारा हटाना बीच में ही छोड़ा गया।
+इसने कोई कारण नहीं बताया।',
 'badtitle' => 'खराब शीर्षक',
 'badtitletext' => 'आपके द्वारा अनुरोधित शीर्षक अयोग्य, ख़ाली या गलत जुड़ा हुआ अंतर-भाषीय या अंतर-विकि शीर्षक है।
 इसमें एक या एक से अधिक ऐसे कॅरेक्टर हो सकते हैं जो शीर्षक में प्रयोग नहीं किये जा सकते।',
@@ -553,10 +558,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 पृच्छा)',
@@ -582,8 +588,9 @@ $2',
 
 आप बेनामी हो के {{SITENAME}} का प्रयोग जारी रख सकते हैं, या उसी या किसी और सदस्य के तौर पर <span class='plainlinks'>[$1 फिर से सत्रारंभ]</span> कर सकते हैं।
 ध्यान दें कि जब तक आप अपनी ब्राउज़र कैशे खाली नहीं करते हैं, कुछ पृष्ठ अब भी ऐसे दिख सकते हैं जैसे कि आपका सत्र अभी भी चल रहा हो।",
-'welcomecreation' => '== आपका स्वागत है, $1 ! ==
-आपका खाता बनाया जा चुका है। अपनी [[Special:Preferences|{{SITENAME}} वरीयताएँ]] परिवर्तित करना न भूलिएगा।',
+'welcomeuser' => 'आपका स्वागत है, $1!',
+'welcomecreation-msg' => 'आपका खाता बना दिया गया है।
+अपनी [[Special:Preferences|{{SITENAME}} वरीयताएँ]] बदलना ना भूलियेगा।',
 'yourname' => 'सदस्यनाम:',
 'yourpassword' => 'कूटशब्द:',
 'yourpasswordagain' => 'कूटशब्द दुबारा लिखें:',
@@ -739,6 +746,7 @@ $2
 'changeemail-oldemail' => 'वर्तमान ई-मेल पता:',
 'changeemail-newemail' => 'नया ई-मेल पता:',
 'changeemail-none' => '(कोई नहीं)',
+'changeemail-password' => 'आपका {{SITENAME}} पासवर्ड:',
 'changeemail-submit' => 'ई-मेल बदलें',
 'changeemail-cancel' => 'रद्द करें',
 
@@ -838,7 +846,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" पंजीकृत नहीं है।',
@@ -848,7 +856,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}}\" बटन का प्रयोग करें।",
@@ -866,7 +873,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' => "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''
 कृपया पुन: यत्न करें।
@@ -926,7 +933,6 @@ $2
 'template-semiprotected' => '(अर्ध-सुरक्षित)',
 'hiddencategories' => 'यह पृष्ठ निम्नलिखित $1 छुपाई हुई {{PLURAL:$1|श्रेणी|श्रेणियों}} में श्रेणीबद्ध है:',
 'edittools' => '<!-- यहाँ दिया हुआ पाठ संपादन और अपलोड फ़ॉर्म के नीचे दर्शाया जायेगा। -->',
-'nocreatetitle' => 'लेख निर्माण में प्रतिबंध',
 'nocreatetext' => '{{SITENAME}} पर नये पृष्ठ बनाने के लिये मनाई की गई है।
 आप पीछे जाकर किसी वर्तमान पृष्ठ को संपादित कर सकते हैं, अथवा [[Special:UserLogin|नया ख़ाता खोलें / प्रवेश करें]] ।',
 'nocreate-loggedin' => 'नये पृष्ठ बनाने का आपको अधिकार नहीं है।',
@@ -952,6 +958,10 @@ $2
 यह पहले से मौजूद है।',
 'defaultmessagetext' => 'संदेश का डिफ़ॉल्ट पाठ',
 
+# Content models
+'content-model-wikitext' => 'विकिटेक्स्ट',
+'content-model-javascript' => 'जावास्क्रिप्ट',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''चेतावनी:''' इस पृष्ठ पर बहुत अधिक संख्या में कीमती पार्सर फ़ंक्शनों का प्रयोग किया गया है।
 
@@ -1099,9 +1109,10 @@ $1",
 'revdelete-concurrent-change' => '$2, $1 वाले मद को बदलते समय त्रुटि आई: प्रतीत होता है कि आपके द्वारा बदलने के दौरान किसी और ने इसमें बदलाव कर दिए हैं।
 कृपया लॉग देख लें।',
 'revdelete-only-restricted' => '$2, $1 की तिथि के आइटम को छुपाने में त्रुटि: आप अन्य दृश्यता विकल्पों को चुने बिना प्रबंधकों की दृष्टि से आइटमों को छुपा नहीं सकते।',
-'revdelete-reason-dropdown' => '*मिटाने के आम कारण
+'revdelete-reason-dropdown' => '*हटाने के आम कारण
 ** सर्वाधिकार (कॉपीराइट) उल्लंघन
-** अनुपयुक्त निजी जानकारी
+** अनुपयुक्त टिप्पणी या निजी जानकारी
+** अनुपयुक्त सदस्यनाम
 ** मानहानिकारक जानकारी',
 'revdelete-otherreason' => 'अन्य/अतिरिक्त कारण:',
 'revdelete-reasonotherlist' => 'अन्य कारण',
@@ -1190,7 +1201,7 @@ $1",
 'search-result-size' => '$1 ({{PLURAL:$2|$2 शब्द}})',
 'search-result-category-size' => '{{PLURAL:$1|$1 सदस्य}} ({{PLURAL:$2|$2 उपश्रेणी|$2 उपश्रेणियाँ}}, {{PLURAL:$3|$3 सञ्चिका|$3 सञ्चिकाएँ}})',
 'search-result-score' => 'संबद्ध: $1%',
-'search-redirect' => '(पुनर्निर्देश $1)',
+'search-redirect' => '($1 से पुनर्निर्देशित)',
 'search-section' => '(अनुभाग $1)',
 'search-suggest' => 'कहीं आपका मतलब $1 तो नहीं था?',
 'search-interwiki-caption' => 'अन्य प्रकल्प',
@@ -1230,7 +1241,7 @@ $1",
 
 # Preferences page
 'preferences' => 'मेरी वरीयताएँ',
-'mypreferences' => 'मà¥\87रà¥\80 à¤µà¤°à¥\80यताà¤\8fà¤\81',
+'mypreferences' => 'पसà¤\82द',
 'prefs-edits' => 'संपादन संख्या:',
 'prefsnologin' => 'लॉग इन नहीं किया है',
 'prefsnologintext' => 'वरीयताएँ बदलने के लिए आपको <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} सत्रारंभ]</span> करना होगा।',
@@ -1458,12 +1469,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' => 'इस पृष्ठ को पढ़ने',
@@ -1907,7 +1919,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'unusedtemplateswlh' => 'अन्य कड़ियाँ',
 
 # Random page
-'randompage' => 'à¤\95िसà¥\80 à¤\8fà¤\95 à¤²à¥\87à¤\96 à¤ªà¤° à¤\9cाà¤\8fà¤\81',
+'randompage' => 'यादà¥\83à¤\9aà¥\8dà¤\9bिà¤\95 à¤ªà¥\83षà¥\8dठ',
 'randompage-nopages' => 'कोई भी पृष्ठ {{PLURAL:$2|इस नामस्थान|इन नामस्थानों}} में नहीं हैं: $1।',
 
 # Random redirect
@@ -1937,8 +1949,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' => 'दुगुने पुनर्निर्देश',
@@ -1965,6 +1977,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|बाइट|बाइट}}',
 'ncategories' => '{{PLURAL:$1|एक श्रेणी|$1 श्रेणियाँ}}',
+'ninterwikis' => '$1 अंतरविकी {{PLURAL:$1|कड़ी|कड़ियाँ}}',
 'nlinks' => '$1 {{PLURAL:$1|कड़ी|कड़ियाँ}}',
 'nmembers' => '$1 {{PLURAL:$1|सदस्य}}',
 'nrevisions' => '$1 {{PLURAL:$1|अवतरण}}',
@@ -1993,6 +2006,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'mostlinkedtemplates' => 'सर्वाधिक से जुड़े हुए साँचे',
 'mostcategories' => 'सर्वाधिक श्रेणियों वाले पृष्ठ',
 'mostimages' => 'सर्वाधिक से जुड़ी हुई फ़ाइलें',
+'mostinterwikis' => 'सर्वाधिक अंतरविकी कड़ियों वाले पृष्ठ',
 'mostrevisions' => 'सर्वाधिक अवतरणित पृष्ठ',
 'prefixindex' => 'उपसर्ग अनुसार पृष्ठ',
 'prefixindex-namespace' => 'उपसर्ग वाले सभी पृष्ठ ($1 नामस्थान)',
@@ -2047,6 +2061,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 आप और बारीकी के लिए लॉग का प्रकार, सदस्य नाम (लघु-दीर्घ-अक्षर संवेदी), या प्रभावित पृष्ठ (लघु-दीर्घ-अक्षर संवेदी) चुन सकते हैं।',
 'logempty' => 'लॉग में ऐसी प्रविष्टि नहीं है।',
 'log-title-wildcard' => 'इस पाठ से शुरू होने वाले शीर्षक खोजें',
+'showhideselectedlogentries' => 'चयनित लॉग प्रविष्टियाँ दिखाएँ/छुपाएँ',
 
 # Special:AllPages
 'allpages' => 'सभी पृष्ठ',
@@ -2067,6 +2082,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|श्रेणी|श्रेणियों}} में पृष्ठ या मीडिया है।
@@ -2088,7 +2108,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' => 'वाईल्डकार्ड्स होस्टनाम के सिर्फ शुरू में आ सकते हैं।',
 
@@ -2107,10 +2127,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'activeusers-hidesysops' => 'प्रबंधक छुपाएँ',
 'activeusers-noresult' => 'कोई सदस्य नहीं मिले।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'सदस्य खाता निर्माण लॉग',
-'newuserlogpagetext' => 'यह सदस्य खातों के निर्माण का लॉग है।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'सदस्य समूह अधिकार',
 'listgrouprights-summary' => 'नीचे इसे विकि के लिए परिभाषित सदस्य समूहों की सूची है, साथ में हर समूह से जुड़े अधिकार भी वर्णित हैं।
@@ -2134,9 +2150,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'mailnologin' => 'पाने वाले का एड्रेस दिया नहीं',
 'mailnologintext' => 'अन्य सदस्यों को इ-मेल भेजने के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है और आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना आवश्यक है।',
 'emailuser' => 'इस सदस्य को ई-मेल भेजें',
+'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' => 'सदस्य ई-मेल अक्षम किया गया',
@@ -2167,17 +2185,15 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 
 # Watchlist
 'watchlist' => 'मेरी ध्यानसूची',
-'mywatchlist' => 'मà¥\87रà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80',
+'mywatchlist' => 'ध्यानसूची',
 'watchlistfor2' => '$1 $2 के लिए',
 'nowatchlist' => 'आपकी ध्यानसूची में कोई भी पृष्ठ नहीं हैं।',
 'watchlistanontext' => 'अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया $1 करें।',
 'watchnologin' => 'लॉग इन नहीं किया है',
 'watchnologintext' => 'ध्यानसूची में बदलाव के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है।',
 'addwatch' => 'ध्यानसूची में जोड़ें',
-'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "[[:$1]]" पृष्ठ का समावेश कर दिया गया है।
-भविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे तथा [[Special:RecentChanges|हाल में हुए बदलावों की सूची]] में यह पृष्ठ बोल्ड दिखेगा ताकि आप आसानी से इसका ध्यान रख सकें।
-
-अगर आपको इस पृष्ठ को अपनी ध्यानसूची से निकालना हो तो "ध्यान हटायें" पर क्लिक करें।',
+'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "[[:$1]]" पृष्ठ जोड़ दिया गया है।
+भविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे।',
 'removewatch' => 'ध्यानसूची से हटाएँ',
 'removedwatchtext' => '"[[:$1]]" नामक पृष्ठ को आपकी [[Special:Watchlist|ध्यानसूची]] से हटा दिया गया है।',
 'watch' => 'ध्यान रखें',
@@ -2205,20 +2221,23 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 
 'enotif_mailer' => '{{SITENAME}} सूचना इ-मेल कर्ता',
 'enotif_reset' => 'सभी पृष्ठ देखे हुए दर्शाएँ',
-'enotif_newpagetext' => 'यह नया पृष्ठ है।',
 'enotif_impersonal_salutation' => '{{SITENAME}} सदस्य',
-'changed' => 'परिवर्तित किया',
-'created' => 'बनाया',
-'enotif_subject' => '{{SITENAME}} पृष्ठ $PAGETITLE $PAGEEDITOR ने $CHANGEDORCREATED',
+'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
 
@@ -2243,6 +2262,8 @@ $UNWATCHURL
 
 राय देने या अधिक सहायता पाने के लिए:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाया',
+'changed' => 'परिवर्तित किया',
 
 # Delete
 'deletepage' => 'पृष्ठ हटाएँ',
@@ -2282,6 +2303,8 @@ $UNWATCHURL
 'rollback' => 'संपादन वापिस लें',
 'rollback_short' => 'वापिस लें',
 'rollbacklink' => 'वापिस लें',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|सम्पादन}} वापिस लें',
+'rollbacklinkcount-morethan' => '$1 से अधिक {{PLURAL:$1|सम्पादन}} वापिस लें',
 'rollbackfailed' => 'वापिस लेना असफल रहा',
 'cantrollback' => 'पुराने अवतरण को पूर्ववत नहीं कर सकते हैं;
 इस पृष्ठ का अन्तिम योगदानकर्ता इस लेख का एकमात्र लेखक है।',
@@ -2376,8 +2399,7 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 लेखागार समय-समय पर साफ किये जाते हैं।',
 'undelete-fieldset-title' => 'अवतरण पुरानी स्थिति पर लाएँ',
 'undeleteextrahelp' => "पृष्ठ का संपूर्ण इतिहास वापस लाने के लिए सभी बक्सों से सही का निशान हटा दें और '''''{{int:undeletebtn}}''''' पर क्लिक करें।
-चुनिंदा इतिहास को वापस लाने के लिए, उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ, और '''''{{int:undeletebtn}}''''' पर क्लिक करें।
-'''''पूर्ववत करें''''' पर चटका लगाने से टिप्पणी कोष्ठक और सभी बक्से खाली कर दिए जाएँगे।",
+चुनिंदा इतिहास को वापस लाने के लिए उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ और '''''{{int:undeletebtn}}''''' पर क्लिक करें।",
 'undeleterevisions' => '$1 {{PLURAL:$1|अवतरण}} लेखागार में हैं',
 'undeletehistory' => 'यदि आप पृष्ठ को पुनर्स्थापित करते हैं तो सभी अवतरण इतिहास में पुनर्स्थापित हो जायेंगे।
 हटाने के बाद यदि एक नया पृष्ठ उसी नाम से बनाया गया है तो पुनर्स्थापित अवतरण पिछले इतिहास में दर्शित होंगे।',
@@ -2399,8 +2421,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|हटाने की लॉग]] देखें।",
@@ -2432,16 +2454,16 @@ $1',
 'blanknamespace' => '(मुख्य)',
 
 # Contributions
-'contributions' => 'सदस्य योगदान',
+'contributions' => '{{GENDER:$1|सदस्य}} योगदान',
 'contributions-title' => '$1 के योगदान',
-'mycontris' => 'मà¥\87रा à¤¯à¥\8bà¤\97दान',
+'mycontris' => 'योगदान',
 'contribsub2' => '$1 के लिये ($2)',
 'nocontribs' => 'इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।',
 'uctop' => '(उपर)',
 'month' => 'इस महिनेसे (और पुरानें):',
 'year' => 'इस सालसे (और पुराने):',
 
-'sp-contributions-newbies' => 'सिर्फ नये सदस्योंका योगदान दर्शायें',
+'sp-contributions-newbies' => 'सिर्फ़ नये सदस्यों के योगदान दर्शायें',
 'sp-contributions-newbies-sub' => 'नये सदस्योंके लिये',
 'sp-contributions-newbies-title' => 'नए सदस्यों द्वारा योगदान',
 'sp-contributions-blocklog' => 'ब्लॉक सूची',
@@ -2474,7 +2496,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 पुनर्निर्देश',
 'whatlinkshere-hidetrans' => '$1 ट्रान्स्क्ल्युजन्स',
 'whatlinkshere-hidelinks' => '$1 कड़ियाँ',
-'whatlinkshere-hideimages' => '$1 à¤\9aितà¥\8dर à¤\95ड़ियाà¤\81',
+'whatlinkshere-hideimages' => '$1 à¤«à¤¼à¤¾à¤\87ल à¤²à¤¿à¤\82à¤\95',
 'whatlinkshere-filters' => 'छन्ने',
 
 # Block/unblock
@@ -2515,8 +2537,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 को अनब्लॉक करें',
@@ -2568,9 +2590,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' => 'खाता निर्माण पर रोक',
@@ -2724,7 +2746,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 'move-leave-redirect' => 'एक पुनर्निर्देशन पीछे छोड़ते जाएँ',
 'protectedpagemovewarning' => "'''चेतावनी:''' यह पृष्ठ तालाबंद है अतः केवल वही सदस्य इनका स्थानांतरण कर सकते हैं जो प्रबंधक हों।
 निम्न् तलिका मे ताजा सदस्यो कि जानकारी दि गयि है:",
-'semiprotectedpagemovewarning' => "'''ध्यान दें:''' इस पृष्ठ को सुरक्षित कर दिया गया है ताकि केवल पंजीकृत सदस्य ही इसे स्थानांतरित कर पाएँ।",
+'semiprotectedpagemovewarning' => "'''सूचना:''' यह पृष्ठ सुरक्षित कर दिया गया है और इसे केवल पंजीकृत सदस्य ही स्थानांतरित कर सकते हैं।
+नवीनतम लॉग प्रविष्टि संदर्भ के लिये नीचे दी है:",
 'move-over-sharedrepo' => '== फ़ाइल मौजूद है ==
 [[:$1]] एक साझे भंडार पर मौजूद है। इस नाम पर स्थानांतरण से नई फ़ाइल साझा फ़ाइल को ओवरराइड करेगी।',
 'file-exists-sharedrepo' => 'फ़ाइल रेपो साझा मौजूद',
@@ -2821,6 +2844,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' => 'आयात सूची',
@@ -2866,13 +2892,13 @@ $1 को बाध्य करने का कारण है: "$2"',
 'tooltip-n-randompage' => 'किसी एक लेख पर जाएँ',
 'tooltip-n-help' => 'पता लगाने का स्थान',
 'tooltip-t-whatlinkshere' => 'यहाँ का हवाला देने वाले सभी विकि पन्नों की सूची',
-'tooltip-t-recentchangeslinked' => 'यहाà¤\82 à¤\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नà¥\8bà¤\82की सूची',
+'tooltip-t-specialpages' => 'सभà¥\80 à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 की सूची',
 'tooltip-t-print' => 'इस पृष्ठका छपानेलायक अवतरण',
 'tooltip-t-permalink' => 'पृष्ठ के इस संस्करण की स्थायी कड़ी',
 'tooltip-ca-nstab-main' => 'सामग्री वाला पृष्ठ देखें',
@@ -2935,11 +2961,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' => 'देख लिया ऐसा मार्क करें',
@@ -2951,6 +3006,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 'markedaspatrollederror' => 'देख लिया ऐसा मार्क नहीं कर पायें',
 'markedaspatrollederrortext' => 'नजर रखने के लिये आपको एक अवतरणको चुनना होगा।',
 'markedaspatrollederror-noautopatrol' => 'आप खुद अपने बदलावोंपर नजर नहीं रख सकतें हैं।',
+'markedaspatrollednotify' => '$1 पृष्ठ में किया गया ये बदलाव जाँचा हुआ चिन्हित कर दिया गया है।',
+'markedaspatrollederrornotify' => 'जाँचा हुआ चिन्हित करना असफल रहा।',
 
 # Patrol log
 'patrol-log-page' => 'नजर रखनेकी सूची',
@@ -3009,7 +3066,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' => 'प्रारूप इस प्रकार है:
@@ -3020,7 +3079,7 @@ $1',
 
 # Metadata
 'metadata' => 'मेटाडाटा',
-'metadata-help' => 'à¤\87स à¤«à¤¼à¤¾à¤\88लमà¥\87à¤\82 à¤¬à¤¢à¤¼à¤¾à¤\88 à¤¹à¥\81à¤\88 à¤\9cानà¤\95ारà¥\80 à¤¹à¥\88à¤\82, à¤¹à¥\8b à¤¸à¤\95ता à¤¹à¥\88 à¤\95ि à¤¯à¤¹ à¤«à¤¼à¤¾à¤\88ल à¤¬à¤¨à¤¾à¤¨à¥\87मà¥\87à¤\82 à¤\87सà¥\8dतà¥\87माल à¤\95ियà¥\87 à¤\97à¤\8f à¤¸à¥\8dà¤\95à¥\88नर à¤\85थवा à¤\95à¥\88मà¥\87रा à¤¸à¥\87 à¤¯à¤¹ à¤ªà¥\8dरापà¥\8dत à¤¹à¥\81à¤\88 à¤¹à¥\88à¤\82 à¥¤ à¤\85à¤\97र à¤¯à¤¹ à¤«à¤¼à¤¾à¤\88ल à¤¬à¤¦à¤²à¤¦à¥\80 à¤\97à¤\88 à¤¹à¥\88à¤\82 à¤¤à¥\8b à¤¯à¤¹ à¤\9cानà¤\95ारà¥\80 à¤¨à¤\88 à¤«à¤¼à¤¾à¤\88लसà¥\87 à¤®à¥\87ल à¤¨à¤¹à¥\80à¤\82 à¤\96ानà¥\87 à¤\95à¥\80 à¤\86शà¤\82à¤\95ा à¤¹à¥\88à¤\82 ।',
+'metadata-help' => 'à¤\87स à¤«à¤¼à¤¾à¤\87ल à¤®à¥\87à¤\82 à¤¬à¤¢à¤¼à¤¾à¤\88 à¤¹à¥\81à¤\88 à¤\9cानà¤\95ारà¥\80 à¤¹à¥\88à¤\82, à¤¹à¥\8b à¤¸à¤\95ता à¤¹à¥\88 à¤\95ि à¤¯à¤¹ à¤«à¤¼à¤¾à¤\87ल à¤¬à¤¨à¤¾à¤¨à¥\87 à¤®à¥\87à¤\82 à¤\87सà¥\8dतà¥\87माल à¤\95ियà¥\87 à¤\97à¤\8f à¤¸à¥\8dà¤\95à¥\88नर à¤\85थवा à¤\95à¥\88मà¥\87रा à¤¸à¥\87 à¤¯à¤¹ à¤ªà¥\8dरापà¥\8dत à¤¹à¥\81à¤\88 à¤¹à¥\88à¤\82। à¤\85à¤\97र à¤¯à¤¹ à¤«à¤¼à¤¾à¤\87ल à¤¬à¤¦à¤²à¤¦à¥\80 à¤\97à¤\88 à¤¹à¥\88 à¤¤à¥\8b à¤¯à¤¹ à¤\9cानà¤\95ारà¥\80 à¤¨à¤\88 à¤«à¤¼à¤¾à¤\87ल à¤¸à¥\87 à¤®à¥\87ल à¤¨à¤¹à¥\80à¤\82 à¤\96ानà¥\87 à¤\95à¥\80 à¤\86शà¤\82à¤\95ा à¤¹à¥\88।',
 'metadata-expand' => 'विस्तृत जानकारियां दिखाएं',
 'metadata-collapse' => 'विस्तृत जानकारियां छिपाएं',
 'metadata-fields' => 'जब मेटाडाटा तालिका को लघुरूप किया जाएगा तो इस सन्देश में सूचीबद्ध इएक्सआयएफ मेटाडाटा जानकारियां छवि प्रदर्शित होते समय सम्मिलित की जाएंगी।
@@ -3683,7 +3742,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' => 'सदस्य एवं अधिकार',
@@ -3699,14 +3758,14 @@ $5
 'intentionallyblankpage' => 'यह पृष्ठ जानबूझ कर खाली छोड़ा गया है।',
 
 # External image whitelist
-'external_image_whitelist' => ' #à¦\8fà¦\87 à¦²à¦¾à¦\87নà¦\9fি à¦ à¦¿à¦\95 à¦¯à§\87মন à¦\86à¦\9bà§\87 à¦¤à§\87মনি  à¦°à¦¾à¦\96à§\81ন à¦\95ারন à¦\8fà¦\9fি <pre>
-#রেগুলার এক্সপ্রেশনর টুকরো নীচে (শুধুমাত্র  // মধ্যে যে অংশ যায়) বসান
-# এই এক্সটার্নাল (hotlinked) ইমেজ URL-এর সাথে হবে মিলেছে
-# যে মেলার চিত্র হিসাবে প্রদর্শিত হবে, অন্যথায় শুধুমাত্র ইমেজ লিঙ্ক প্রদর্শিত হবে
-# প্রারম্ভে লাইনস মন্তব্যসমূহ হিসাবে ব্যবহার করা হয়
-# এই কেস অসংবেদী
+'external_image_whitelist' => ' #यह à¤²à¤¾à¤\87न à¤\9cà¥\88सà¥\80 à¤¹à¥\88 à¤µà¥\88सà¥\80 à¤¹à¥\80 à¤\9bà¥\8bड़ à¤¦à¥\87à¤\82<pre>
+ #नीचे रेगुलर एक्सप्रेशन के टुकड़े लिखें(बस वही हिस्सा जो // के बीच में आता है)
+ #इन एक्सप्रेशन का बाहरी (hotlinked) छवियों के यू॰आर॰एल के साथ मिलान किया जाएगा
+ #जो छवियाँ मिलान करेंगी, उन्हें प्रदर्शित किया जाएगा, अन्यथा केवल छवि की कड़ी दिखायी जाएगी
+ # # से शुरू होने वाली लाइनें टिप्पणी मानी जाती हैं
+ # इस केस-असंवेदी है
 
-# এই রেখার উপরের regex টুকরা বসান. এই লাইন ছেড়ে ঠিক হয় </pre>',
+ #सब रेगुलर एक्सप्रेशन टुकड़े इस लाइन से ऊपर रखें। यह लाइन जैसी है वैसी ही छोड़ दें</pre>',
 
 # Special:Tags
 'tags' => 'वैध बदलाव चिप्पियाँ',
@@ -3784,11 +3843,15 @@ $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 बग फ़ाइल करें]।
@@ -3808,6 +3871,7 @@ $5
 
 # Search suggestions
 'searchsuggest-search' => 'खोज',
+'searchsuggest-containing' => '...से युक्त',
 
 # API errors
 'api-error-badaccess-groups' => 'आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.',
@@ -3825,7 +3889,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 e71cc73..1f38e0a 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,8 +443,8 @@ 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.",
-'welcomecreation' => '== Swagat, $1! ==
-Aap ke account banae dewa gais hai.
+'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:',
@@ -600,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',
 
@@ -727,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.
@@ -786,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.',
@@ -815,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.
 
@@ -1025,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',
@@ -1102,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.',
@@ -1178,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:',
@@ -1328,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',
@@ -1564,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',
@@ -1590,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',
@@ -1601,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',
@@ -1684,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',
@@ -1724,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',
@@ -1784,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',
@@ -1801,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}}',
@@ -1821,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',
@@ -1861,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',
@@ -1879,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',
@@ -1899,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.
@@ -1918,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.',
 
@@ -1938,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
@@ -1965,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',
@@ -1976,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',
@@ -1997,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',
@@ -2022,37 +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_newpagetext' => 'Ii ek nawaa panna hai.',
 'enotif_impersonal_salutation' => '{{SITENAME}} sadasya',
-'changed' => 'badal dewa gais hai',
-'created' => 'banae dewa gais hai',
-'enotif_subject' => '$PAGEEDITOR {{SITENAME}} panna $PAGETITLE ke badal $CHANGEDORCREATED diis hai',
+'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.
 
@@ -2072,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',
@@ -2110,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.',
@@ -2138,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:',
@@ -2227,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.",
@@ -2243,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:
 
@@ -2253,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)',
@@ -2299,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',
@@ -2323,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.',
@@ -2333,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',
@@ -2347,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',
@@ -2382,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',
@@ -2399,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.
@@ -2440,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',
@@ -2510,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',
@@ -2518,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.',
@@ -2541,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',
@@ -2576,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',
@@ -2593,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.
@@ -2624,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',
@@ -2633,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',
@@ -2693,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',
@@ -2724,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',
@@ -2738,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',
@@ -2767,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',
@@ -2788,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:
 
@@ -2877,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',
@@ -3036,6 +3240,10 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak
 '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 7c57a24..63c8abb 100644 (file)
@@ -428,9 +428,6 @@ Ang administrador nga nag-kandado sini naghatag sang paathag nga: "$3".',
 
 Makapadayon ka sa gihapon sa paggamit sang {{SITENAME}} nga indi makilal-an, ukon mahimo ka man <span class='plainlinks'>[$1 magsulod liwat]</span> bilang amo sa gihapon ukon lain nga nga manug-gamit.
 Tandaan nga may mga panid nga mahimo ma-display sa gihapon nga daw nakasulod ka sa gihapon, hasta mapanas mo na ang tinago sang imo brawser.",
-'welcomecreation' => '== Pagtamyaw, $1! ==
-Ang imo account nahimo na.
-Indi pagkalimti ang pag-ilis sang imo mga [[Special:Preferences|{{SITENAME}} pagpasulabi]].',
 'yourname' => 'Ngalan sang Manog-gamit:',
 'yourpassword' => 'Kontra-senyas:',
 'yourpasswordagain' => 'Suliton ang kontra-senyas:',
@@ -788,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.',
@@ -1222,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',
@@ -1341,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)',
@@ -1648,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 8b114e4..dfa3649 100644 (file)
@@ -446,7 +446,7 @@ $messages = array(
 'newwindow' => '(otvara se u novom prozoru)',
 'cancel' => 'Odustani',
 'moredotdotdot' => 'Više...',
-'mypage' => 'Moja stranica',
+'mypage' => 'Stranica',
 'mytalk' => 'Moj razgovor',
 'anontalk' => 'Razgovor za ovu IP adresu',
 'navigation' => 'Orijentacija',
@@ -469,7 +469,7 @@ $messages = array(
 'vector-action-protect' => 'Zaštiti',
 'vector-action-undelete' => 'Vrati',
 'vector-action-unprotect' => 'Promijeni zaštitu',
-'vector-simplesearch-preference' => 'Omogući poboljšane prijedloge za pretraživanje (samo izgled Vector)',
+'vector-simplesearch-preference' => 'Omogući traku za pretraživanje (samo izgled Vector)',
 'vector-view-create' => 'Započni',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Vidi stare izmjene',
@@ -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',
@@ -578,7 +579,7 @@ $1',
 'youhavenewmessagesfromusers' => 'Imate $1 {{PLURAL:$3||od $3 suradnika|od $3 suradnika}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od više suradnika ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|posljednje uređivanje|$ posljednja uređivanja|$ posljednjih uređivanja}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|zadnje uređivanje|zadnja $1 uređivanja|zadnjih $1 uređivanja}} na stranici za razgovor',
 'youhavenewmessagesmulti' => 'Imate nove poruke na $1',
 'editsection' => 'uredi',
 'editold' => 'uredi',
@@ -675,8 +676,8 @@ Moguće je da ju je netko drugi već obrisao.',
 Nema obrazloženja ili poruke o pogrješci.',
 'badtitle' => 'Loš naslov',
 'badtitletext' => 'Navedeni naslov stranice nepravilan ili loše formirana interwiki poveznica.',
-'perfcached' => 'Sljedeći podaci su iz međuspremnika i možda nisu najsvježiji. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Sljedeći podaci su iz međuspremnika i zadnji puta su ažurirani u $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Sljedeći podaci su iz međuspremnika i možda nisu najsvježiji. Međuspremnik sadrži $1 {{PLURAL:$1|rezultat|rezultata}} pretraživanja.',
+'perfcachedts' => 'Sljedeći podaci su iz međuspremnika i zadnji puta su ažurirani u $1. Međuspremnik sadrži $4 {{PLURAL:$4|rezultat|rezultata}} pretraživanja.',
 'querypage-no-updates' => 'Osvježavanje ove stranice je trenutačno onemogućeno. Nove promjene neće biti vidljive.',
 'wrong_wfQuery_params' => 'Neispravni parametri poslani u wfQuery()<br />
 Funkcija: $1<br />
@@ -688,8 +689,9 @@ Upit: $2',
 'protectedpagetext' => 'Ova stranica je zaključana da bi se onemogućile izmjene.',
 'viewsourcetext' => 'Možete pogledati i kopirati izvorni sadržaj ove stranice:',
 'viewyourtext' => "Možete vidjeti i kopirati tekst '''vaših uređivanja''' na ovoj stranici:",
-'protectedinterface' => 'Ova stranica je zaštićena od izmjena jer sadrži tekst MediaWiki softvera.',
-'editinginterface' => "'''Upozorenje:''' Uređujete stranicu koja se rabi za prikaz teksta u sučelju softvera. Promjene učinjene na ovoj stranici će se odraziti na izgled korisničkog sučelja kod drugih suradnika. Za prijevod, razmotrite korištenje [//translatewiki.net/wiki/Main_Page?setlang=hr translatewiki.net], projekta lokalizacije MedijeWiki.",
+'protectedinterface' => 'Ova stranica je zaštićena od izmjena jer sadrži tekst MediaWiki softvera.
+AKo želite prevesti neprevedenu poruku ili popraviti prijevod neke druge poruke za sve MediaWiki wikije, posjetite [//translatewiki.net/  translatewiki.net], projekt za lokalizaciju MediaWiki softvera.',
+'editinginterface' => "'''Upozorenje:''' Uređujete stranicu koja se rabi za prikaz teksta u sučelju softvera. Promjene učinjene na ovoj stranici će se odraziti na izgled korisničkog sučelja kod drugih suradnika. Za prijevod, razmotrite uporabu [//translatewiki.net/wiki/Main_Page?setlang=hr translatewiki.net], projekta lokalizacije MedijeWiki.",
 'sqlhidden' => '(SQL upit sakriven)',
 'cascadeprotected' => 'Ova je stranica zaključana za uređivanja jer je uključena u {{PLURAL:$1|slijedeću stranicu|slijedeće stranice}}, koje su zaštićene "prenosivom zaštitom":
 $2',
@@ -698,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.',
 
@@ -711,16 +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.",
-'welcomecreation' => '== Dobrodošli, $1! ==
-Vaš je suradnički račun otvoren.
-
-Ne zaboravite prilagoditi [[Special:Preferences|{{SITENAME}} postavke]].',
+'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',
@@ -870,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',
 
@@ -961,7 +969,12 @@ Ako ste ovamo dospjeli slučajno, kliknite gumb '''natrag''' (back) u svom pregl
 Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije]
 ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu]</span>.',
-'noarticletext-nopermission' => '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>.',
+'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.
@@ -971,8 +984,8 @@ Posljednja stavka evidencije blokiranja navedena je niže kao napomena:',
 * '''Google Chrome:''' pritisnite ''Ctrl-Shift-R'' (''Command-Shift-R'' na Macu)
 * '''Internet Explorer:''' držite ''Ctrl'' i kliknite ''Refresh'', ili pritisnite ''Ctrl-F5''
 * '''Opera:''' očistite međuspremnik u ''Tools → Preferences''",
-'usercssyoucanpreview' => "'''Savjet:''' Rabite dugme \"{{int:showpreview}}\" za testiranje svog CSS prije snimanja.",
-'userjsyoucanpreview' => "'''Savjet:''' Rabite dugme \"{{int:showpreview}}\" za testiranje svog novog JavaScripta prije snimanja.",
+'usercssyoucanpreview' => "'''Savjet:''' Rabite puce \"{{int:showpreview}}\" za testiranje svog CSS-a prije snimanja.",
+'userjsyoucanpreview' => "'''Savjet:''' Rabite puce \"{{int:showpreview}}\" za testiranje svog novog JavaScripta prije snimanja.",
 'usercsspreview' => "'''Ne zaboravite: samo isprobavate/pregledavate svoj suradnički CSS. Još nije snimljen!'''",
 'userjspreview' => "'''Ne zaboravite: samo isprobavate/pregledavate svoj suradnički JavaScript, i da još nije snimljen!'''",
 'sitecsspreview' => "'''Ne zaboravite ovo je samo pregled ovog CSS-a.'''
@@ -1036,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.',
@@ -1061,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
@@ -1214,7 +1235,8 @@ Provjerite evidencije.',
 'revdelete-only-restricted' => 'Pogrješka pri skrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih mogućnosti vidljivosti.',
 'revdelete-reason-dropdown' => '*Uobičajeni razlozi brisanja
 ** Kršenje autorskih prava
-** Neprimjereni osobni podaci',
+** Neprimjereni osobni podaci
+** Neprikladno suradničko ime',
 'revdelete-otherreason' => 'Drugi/dodatni razlog:',
 'revdelete-reasonotherlist' => 'Drugi razlog',
 'revdelete-edit-reasonlist' => 'Uredi razloge za brisanje',
@@ -1259,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',
@@ -1266,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',
@@ -1351,11 +1378,12 @@ 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',
 'prefs-watchlist-days' => 'Broj dana koji će se prikazati na popisu praćenja:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'Najviše $1 {{PLURAL:$1|dan|dana}}',
 'prefs-watchlist-edits' => 'Broj uređivanja koji će se prikazati na proširenom popisu praćenja:',
 'prefs-watchlist-edits-max' => 'Maksimalni broj: 1000',
 'prefs-watchlist-token' => 'Token popisa praćenja:',
@@ -1412,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:',
@@ -1525,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',
@@ -1561,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',
@@ -1635,9 +1665,11 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|suradnik|suradnika|suradnika}} prati ovu stranicu]',
 'rc_categories' => 'Ograniči na kategorije (odvojene znakom  "|")',
 'rc_categories_any' => 'Sve',
+'rc-change-size-new' => '$1 {{PLURAL:$1|bajt|bajta|bajtova}} poslije uređivanja',
 'newsectionsummary' => '/* $1 */ Novi odlomak',
 'rc-enhanced-expand' => 'Pokaži detalje (potreban JavaScript)',
 'rc-enhanced-hide' => 'Sakrij detalje',
+'rc-old-title' => 'izvorno ime bilo je "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Povezane stranice',
@@ -1786,9 +1818,40 @@ 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".',
+'backend-fail-move' => 'Nije uspjelo premještanje datoteke $1 u $2.',
 'backend-fail-opentemp' => 'Ne mogu otvoriti privremenu datoteku.',
 'backend-fail-writetemp' => 'Ne mogu pisati u privremenu datoteku.',
 '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.',
@@ -1893,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',
@@ -2027,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',
@@ -2036,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',
@@ -2132,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.',
 
@@ -2151,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.
@@ -2180,9 +2247,10 @@ Dodatne informacije o pojedinim pravim se mogu pronaći [[{{MediaWiki:Listgroupr
 i imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]]
 da bi mogli slati poštu drugim suradnicima.',
 'emailuser' => 'Pošalji e-poštu ovom suradniku',
+'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"',
@@ -2222,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',
@@ -2251,32 +2319,38 @@ Promjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popi
 
 'enotif_mailer' => '{{SITENAME}} - izvješća o promjenama',
 'enotif_reset' => 'Označi sve stranice kao već posjećene',
-'enotif_newpagetext' => 'Ovo je nova stranica.',
 'enotif_impersonal_salutation' => '{{SITENAME}} suradnik',
-'changed' => 'promijenio',
-'created' => 'stvorio',
-'enotif_subject' => '{{SITENAME}}: Stranicu $PAGETITLE je $CHANGEDORCREATED suradnik $PAGEEDITOR',
+'enotif_subject_deleted' => '{{gender:$2|Suradnik|Suradnica}} $2 {{gender:$2|je obrisao|je obrisala}} stranicu $1 projekta {{SITENAME}}',
+'enotif_subject_created' => '{{gender:$2|Suradnik|Suradnica}} $2 {{gender:$2|je stvorio|je stvorila}} stranicu $1 projekta {{SITENAME}}',
+'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',
 'enotif_body' => 'Poštovani $WATCHINGUSERNAME,
 
-stranica na projektu {{SITENAME}} s naslovom $PAGETITLE je dana $PAGEEDITDATE $CHANGEDORCREATED suradnik $PAGEEDITOR, pogledajte $PAGETITLE_URL za trenutačnu inačicu.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Sažetak urednika: $PAGESUMMARY $PAGEMINOREDIT
 
-Možete se javiti uredniku:
+Možete kontaktirati suradnika koji je zadnji uređivao stranicu:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Do Vašeg ponovnog posjeta stranici nećete dobivati nove obavijesti.
-Postavke za izvješćivanje možete resetirati za sve praćene stranice svog popisa praćenja.
+Do Vašeg ponovnog posjeta stranici nećete dobivati nove obavijesti. Postavke za izvješćivanje možete resetirati za sve praćene stranice svog popisa praćenja.
 
-            Vaš sustav izvješćivanja {{SITENAME}}.
+Vaš sustav izvješćivanja {{SITENAME}}.
 
 --
+Za promjene postavki izvješćivanja putem e-pošte, posjetite
+{{canonicalurl:{{#special:Preferences}}}}
+
 Za promjene svog popisa praćenja, posjetite
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
@@ -2285,6 +2359,8 @@ $UNWATCHURL
 
 Za povratne informacije i pomoć posjetite:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'stvorio',
+'changed' => 'promijenio',
 
 # Delete
 'deletepage' => 'Izbriši stranicu',
@@ -2365,9 +2441,9 @@ Slijede postavke stranice '''$1''':",
 'protect-locked-access' => "Nemate ovlasti za mijenjanje razine zaštite.
 Slijede trenutačne postavke stranice '''$1''':",
 'protect-cascadeon' => 'Ova stranica je zaštićena jer je uključena u {{PLURAL:$1|stranicu, koja ima|stranice, koje imaju|stranice, koje imaju}} uključenu prenosivu zaštitu. Možete promijeniti stupanj zaštite ove stranice, no to neće utjecati na prenosivu zaštitu.',
-'protect-default' => 'Omogući svim suradnicima',
+'protect-default' => 'Omogućeno svim suradnicima',
 'protect-fallback' => 'Potrebno je imati "$1" ovlasti',
-'protect-level-autoconfirmed' => 'Blokiraj nove i neprijavljene suradnike',
+'protect-level-autoconfirmed' => 'Onemogućeno novim i neprijavljenim suradnicima',
 'protect-level-sysop' => 'Samo administratori',
 'protect-summary-cascade' => 'prenosiva zaštita',
 'protect-expiring' => 'istječe $1 (UTC)',
@@ -2434,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.",
@@ -2465,7 +2542,7 @@ $1',
 'blanknamespace' => '(Glavni)',
 
 # Contributions
-'contributions' => 'Doprinosi suradnika',
+'contributions' => 'Doprinosi {{GENDER:$1|suradnika|suradnice}}',
 'contributions-title' => 'Suradnički doprinosi za $1',
 'mycontris' => 'Moji doprinosi',
 'contribsub2' => 'Za $1 ($2)',
@@ -2737,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.',
@@ -2844,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',
@@ -2855,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',
@@ -2959,25 +3051,44 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'spam_deleting' => 'Sve inačice sadržale su poveznice na $1, brišem cjelokupni sadržaj',
 
 # Info page
-'pageinfo-title' => 'Podatci o "$1"',
-'pageinfo-header-basic' => 'Osnovni podaci',
+'pageinfo-title' => 'Podatci o stranici "$1"',
+'pageinfo-not-current' => 'Nema podataka o uređivanju za najstarija uređivanja stranice.',
+'pageinfo-header-basic' => 'Osnovni podatci',
 'pageinfo-header-edits' => 'Uređivanja',
-'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-header-restrictions' => 'Status zaštite stranice',
 'pageinfo-header-properties' => 'Svojstva stranice',
-'pageinfo-display-title' => 'Prikaži naslov',
+'pageinfo-display-title' => 'Naslov stranice',
 'pageinfo-default-sort' => 'Podrazumijevano sortiranje',
 'pageinfo-length' => 'Dužina stranice (u bajtovima)',
 'pageinfo-article-id' => 'ID stranice',
+'pageinfo-language' => 'Jezik stranice',
 'pageinfo-robot-policy' => 'Status tražilice',
 'pageinfo-robot-index' => 'Stranicu je moguće indeksirati',
+'pageinfo-robot-noindex' => 'Indeksiranje stranice onemogućeno',
 'pageinfo-views' => 'Broj pregleda',
 'pageinfo-watchers' => 'Broj pratitelja stranice',
+'pageinfo-redirects-name' => 'Broj preusmjeravanja na ovu stranicu',
+'pageinfo-subpages-name' => 'Podstranice',
+'pageinfo-subpages-value' => 'Ukupno $1 ($2 {{PLURAL:$2|preusmjeravanje|preusmjeravanja}}; $3 {{PLURAL:$3|obična podstranica|obične podstranice|običnih podstranica}})',
 'pageinfo-firstuser' => 'Suradnik koji je stvorio stranicu',
 'pageinfo-firsttime' => 'Datum stvaranja stranice',
 'pageinfo-lastuser' => 'Posljednji urednik stranice',
 'pageinfo-lasttime' => 'Datum zadnjeg uređivanja',
-'pageinfo-edits' => 'Broj uređivanja',
+'pageinfo-edits' => 'Ukupan broj uređivanja',
 'pageinfo-authors' => 'Broj različitih autora',
+'pageinfo-recent-edits' => 'Broj uređivanja (u zadnjih $1)',
+'pageinfo-recent-authors' => 'Broj različitih autora u gornjem razdoblju',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magična riječ - varijabla|Magične riječi - varijable}} ($1)',
+'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',
@@ -2997,6 +3108,8 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'markedaspatrollederror' => 'Ne mogu označiti za pregledano',
 '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',
@@ -3029,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.',
@@ -3038,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',
@@ -3057,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:
@@ -3268,7 +3386,7 @@ Svaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se s
 
 # EXIF attributes
 'exif-compression-1' => 'Nesažeto',
-'exif-compression-2' => 'CCITT Grupa 3 1 — Dimenzionalno izmijenjeo Huffmanovo šifriranje po dužini',
+'exif-compression-2' => 'CCITT Grupa 3 1 — Dimenzionalno izmijenjeno Huffmanovo šifriranje po dužini',
 'exif-compression-3' => 'CCITT Grupa 3 faks kodiranje',
 'exif-compression-4' => 'CCITT Grupa 4 faks kodiranje',
 
@@ -3555,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
@@ -3721,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.
@@ -3859,11 +3979,15 @@ 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"].
@@ -3890,29 +4014,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.',
@@ -3920,5 +4052,13 @@ Inače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minute|minuta}}',
+'duration-hours' => '$1 {{PLURAL:$1|sat|sata|sati}}',
+'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 027c6fa..e01379c 100644 (file)
@@ -286,8 +286,9 @@ $messages = array(
 'newwindow' => '(wočinja so w nowym woknje)',
 'cancel' => 'Přetorhnyć',
 'moredotdotdot' => 'Wjace…',
-'mypage' => 'Moja strona',
-'mytalk' => 'moja diskusija',
+'morenotlisted' => 'Dalše njepodate...',
+'mypage' => 'Strona',
+'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusijna strona tuteje IP.adresy',
 'navigation' => 'Nawigacija',
 'and' => '&#32;a',
@@ -319,6 +320,7 @@ $messages = array(
 'namespaces' => 'Mjenowe rumy',
 'variants' => 'Warianty',
 
+'navigation-heading' => 'Nawigaciski meni',
 'errorpagetitle' => 'Zmylk',
 'returnto' => 'Wróćo k stronje $1.',
 'tagline' => 'z {{GRAMMAR:genitiw|{{SITENAME}}}}',
@@ -525,7 +527,7 @@ Wotprašenje: $2',
 'viewsource-title' => 'Žórłowy tekst za $1 sej wobhladać',
 'actionthrottled' => 'Akcije wobmjezowane',
 'actionthrottledtext' => 'Jako připrawa přećiwo spamej, je častosć wuwjedźenja tuteje akcije w krótkej dobje wobmjezowana a ty sy tutón limit překročił. Prošu spytaj za něšto mjeńšiny hišće raz.',
-'protectedpagetext' => 'Strona je přećiwo wobdźěłowanju škitana.',
+'protectedpagetext' => 'Tuta strona je přećiwo wobdźěłowanju abo druhim akcijam škitana.',
 'viewsourcetext' => 'Móžeš sej žórłowy tekst tuteje strony wobhladać a jón kopěrować:',
 'viewyourtext' => "Móžeš sej žórłowy tekst '''swojich změnow''' wobhladać a do slědowaceje strony kopěrować:",
 'protectedinterface' => 'Tuta strona wobsahuje tekst za wužiwarski powjerch softwary na tutym wikiju a je škitana, zo by so znjewužiwanje zadźěwało.
@@ -558,9 +560,9 @@ Administrator, kiž je jón zawrěł, je tule přičinu podał: "$3".',
 
 Móžeš {{GRAMMAR:akuzatiw|{{SITENAME}}}} nětko anonymnje dale wužiwać abo so ze samsnym abo druhim wužiwarskim mjenom <span class='plainlinks'>[$1 zaso přizjewić]</span>.
 Wobkedźbuj, zo so někotre strony dale jewja, kaž by hišće přizjewjeny był, doniž pufrowak swojeho wobhladowaka njewuprózdnješ.",
-'welcomecreation' => '== Witaj, $1! ==
-
-Twoje konto bu wutworjene. Njezabudź swoje nastajenja za [[Special:Preferences|{{GRAMMAR:akuzatiw|{{SITENAME}}}}]] změnić.',
+'welcomeuser' => 'Witaj $1',
+'welcomecreation-msg' => 'Twoje konto bu wutworjene.
+Njezabudź swoje [[Special:Preferences|nastajenja za {{GRAMMAR:akuzatiw|{{SITENAME}}}}]] změnić.',
 'yourname' => 'Wužiwarske mjeno:',
 'yourpassword' => 'Hesło:',
 'yourpasswordagain' => 'Hesło znowa zapodać:',
@@ -647,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ć',
@@ -704,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ć',
 
@@ -873,7 +877,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',
@@ -1189,7 +1192,7 @@ Spytaj swoje naprašowanje z prefiksom ''all:'' wužiwać, zo by wšón wobsah (
 
 # Preferences page
 'preferences' => 'Nastajenja',
-'mypreferences' => 'nastajenja',
+'mypreferences' => 'Nastajenja',
 'prefs-edits' => 'Ličba změnow:',
 'prefsnologin' => 'Njepřizjewjeny',
 'prefsnologintext' => 'Dyrbiš <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} přizjewjeny]</span>  być, zo by móhł nastajenja postajić.',
@@ -1265,9 +1268,9 @@ Móžeš tutu stronu wužiwać, zo by swoje nastajenja na standardne hódnoty sy
 'prefs-emailconfirm-label' => 'E-mejlowe wobkrućenje:',
 'prefs-textboxsize' => 'Wulkosć wobdźěłowanskeho wokna',
 'youremail' => 'E-mejl:',
-'username' => 'Wužiwarske mjeno:',
-'uid' => 'ID wužiwarja:',
-'prefs-memberingroups' => 'Čłon {{PLURAL:$1|wužiwarskeje skupiny|wužiwarskeju skupinow|wužiwarskich skupinow|wužiwarskich skupinow}}:',
+'username' => 'Mjeno {{GENDER:$1|wužiwarja|wužiwarki}}:',
+'uid' => 'ID {{GENDER:$1|wužiwarja|wužiwarki}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Čłon|Čłonka}} {{PLURAL:$1|wužiwarskeje skupiny|wužiwarskeju skupinow|wužiwarskich skupinow}}:',
 'prefs-registration' => 'Čas registracije:',
 'yourrealname' => 'Woprawdźite mjeno:',
 'yourlanguage' => 'Rěč:',
@@ -1415,15 +1418,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ć',
@@ -1662,6 +1663,7 @@ $1',
 'backend-fail-notsame' => 'Dataja, kotraž identiska njeje, hižo pola $1 eksistuje.',
 'backend-fail-invalidpath' => '$1 płaćiwy pućik za składowanje njeje.',
 'backend-fail-delete' => 'Dataja $1 njeda so zhašeć.',
+'backend-fail-describe' => 'Metadaty za dataju "$1" njedadźa so změnić.',
 'backend-fail-alreadyexists' => 'Dataja $1 hižo eksistuje.',
 'backend-fail-store' => 'Dataja $1 njeda so pod $2 składować',
 'backend-fail-copy' => 'Dataja $1 njeda so do $2 kopěrować',
@@ -2040,7 +2042,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> (prošu njepodaj je w swojim pytanje).',
+{{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ć.',
 
@@ -2059,10 +2061,6 @@ Podpěrowane protokole: <code>$1</code> (prošu njepodaj je w swojim pytanje).',
 '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ć.',
@@ -2120,17 +2118,15 @@ E-mejlowa adresa, kotruž sy w [[Special:Preferences|swojich wužiwarskich nasta
 
 # Watchlist
 'watchlist' => 'wobkedźbowanki',
-'mywatchlist' => 'wobkedźbowanki',
+'mywatchlist' => 'Wobkedźbowanki',
 'watchlistfor2' => 'Za wužiwarja $1 $2',
 'nowatchlist' => 'Nimaš žane strony w swojich wobkedźbowankach.',
 'watchlistanontext' => 'Dyrbiš so $1, zo by swoje wobkedźbowanki wobhladać abo wobdźěłać móhł.',
 '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ć',
@@ -2158,20 +2154,24 @@ Jeli chceš stronu pozdźišo ze swojich wobkedźbowankow wotstronić, klikń na
 
 'enotif_mailer' => '{{SITENAME}} E-mejlowe zdźělenje',
 'enotif_reset' => 'Wšě strony jako wopytane woznamjenić',
-'enotif_newpagetext' => 'To je nowa strona.',
 'enotif_impersonal_salutation' => 'wužiwar {{GRAMMAR:genitiw|{{SITENAME}}}}',
-'changed' => 'změnjena',
-'created' => 'wutworjena',
-'enotif_subject' => '[{{SITENAME}}] Strona „$PAGETITLE” bu přez wužiwarja $PAGEEDITOR $CHANGEDORCREATED.',
+'enotif_subject_deleted' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so wot {{GENDER:$2|$2}} zhašała',
+'enotif_subject_created' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so wot {{GENDER:$2|$2}} wutworiła',
+'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.',
+'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',
+'enotif_body_intro_changed' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so na $PAGEEDITDATE wot {{GENDER:$2|$2}} změniła, hlej $3 za aktualnu wersiju',
 'enotif_lastvisited' => 'Hlej $1 za wšě změny po twojim poslednim wopyće.',
 'enotif_lastdiff' => 'Hlej $1 za tutu změnu.',
 'enotif_anon_editor' => 'anonymny wužiwar $1',
 'enotif_body' => 'Luby $WATCHINGUSERNAME,
 
+$PAGEINTRO $NEWPAGE
 
-Strona we {{GRAMMAR:lokatiw|{{SITENAME}}}} z mjenom $PAGETITLE bu dnja $PAGEEDITDATE wot $PAGEEDITOR $CHANGEDORCREATED, hlej $PAGETITLE_URL za aktualnu wersiju.
-
-$NEWPAGE
 
 Zjeće wobdźěłarja: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2182,7 +2182,7 @@ wiki: $PAGEEDITOR_WIKI
 Njebudu žane druhe zdźělenki w padźe dalšich změnow, chibazo wopytaš tutu stronu.
 Móžeš tež zdźělenske marki za wšě swoje wobkedźbowane strony we swojich wobkedźbowankach wróćo stajić.
 
-               Twój přećelny zdźělenski system {{GRAMMAR:genitiw|{{SITENAME}}}}
+Twój přećelny zdźělenski system {{GRAMMAR:genitiw|{{SITENAME}}}}
 
 --
 Zo by swoje nastajenja za e-mejlowe zdźělenja změnił, wopytaj
@@ -2197,6 +2197,8 @@ $UNWATCHURL
 
 Wotmołwy a dalša pomoc:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'wutworjena',
+'changed' => 'změnjena',
 
 # Delete
 'deletepage' => 'Stronu zhašeć',
@@ -2261,6 +2263,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:',
@@ -2273,9 +2277,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',
@@ -2370,9 +2374,9 @@ $1',
 'blanknamespace' => '(Nastawki)',
 
 # Contributions
-'contributions' => 'Přinoški wužiwarja',
+'contributions' => 'Přinoški {{GENDER:$1|wužiwarja|wužiwarki}}',
 'contributions-title' => 'Wužiwarske přinoški wot „$1“',
-'mycontris' => 'moje přinoški',
+'mycontris' => 'Přinoški',
 'contribsub2' => 'za wužiwarja $1 ($2)',
 'nocontribs' => 'Žane změny, kotrež podatym kriterijam wotpowěduja.',
 'uctop' => '(aktualnje)',
@@ -2412,7 +2416,7 @@ Najnowši zapisk w protokolu blokowanjow so deleka jako referenca podawa:',
 'whatlinkshere-hideredirs' => 'Daleposrědkowanja $1',
 'whatlinkshere-hidetrans' => 'Zapřijeća $1',
 'whatlinkshere-hidelinks' => 'Wotkazy $1',
-'whatlinkshere-hideimages' => 'wobrazowe wotkazy $1',
+'whatlinkshere-hideimages' => 'Datajowe wotkazy $1',
 'whatlinkshere-filters' => 'Filtry',
 
 # Block/unblock
@@ -2733,6 +2737,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.',
@@ -2888,6 +2893,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',
@@ -2896,6 +2902,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',
@@ -2917,6 +2927,8 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'markedaspatrollederror' => 'Njemóžno jako přepruwowanu woznamjenić.',
 'markedaspatrollederrortext' => 'Dyrbiš wersiju podać, kotraž so ma jako přepruwowana woznamjenić.',
 'markedaspatrollederror-noautopatrol' => 'Njesměš swoje změny jako přepruwowane woznamjenjeć.',
+'markedaspatrollednotify' => 'Tuta změna do $1 je so jako dohladowana markěrowała.',
+'markedaspatrollederrornotify' => 'Markěrowanje jako dohladowane je so njeporadźiło.',
 
 # Patrol log
 'patrol-log-page' => 'Protokol přepruwowanjow',
@@ -2950,6 +2962,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.',
@@ -2979,7 +2992,10 @@ $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',
 
 # Bad image list
 'bad_image_list' => 'Format:
@@ -3720,11 +3736,15 @@ Wobrazy so połnym rozeznaću pokazuja, druhe datajowe typy so ze zwjazanym prog
 'logentry-move-move_redir-noredirect' => '$1 přesuny stronu $3 do $4 přepisujo dalesposrědkowanje, bjeztoho zo by dalesposrědkowanje wutworił',
 'logentry-patrol-patrol' => '$1 markěrowaše wersiju $4 strony $3 jako skontrolowanu',
 'logentry-patrol-patrol-auto' => '$1 awtomatisce markěrowaše wersiju $4 strony $3 jako skontrolowanu',
-'logentry-newusers-newusers' => '$1 je wužiwarske konto załožił',
-'logentry-newusers-create' => '$1 je wužiwarske konto załožił',
+'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-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].
index 43becc4..8c180d1 100644 (file)
@@ -525,9 +525,6 @@ Rezon li bay yo se « ''$2'' ».",
 
 Ou mèt kontinye itilize {{SITENAME}} san ou pa idantifye, oubyen ou ka <span class='plainlinks'>[$1 rekonekte]</span> w ankò ak menm non an oubyen yon lòt.
 Note ke kèk paj gendwa afiche tankou ou te toujou konekte tank ou pa efase kach nan navigatè ou.",
-'welcomecreation' => '== Byenvini, $1 ! ==
-
-Kont ou an kreye. Pa bliye pèsonalize l nan  [[Special:Preferences|preferans ou an sou paj sa {{SITENAME}}]].',
 'yourname' => 'Non itilizatè ou an :',
 'yourpassword' => 'Mopas ou an :',
 'yourpasswordagain' => 'Mete mopas ou an ankò :',
@@ -774,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',
@@ -936,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',
 
@@ -1097,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)',
 
index 739ca1a..ecbcb8a 100644 (file)
@@ -30,6 +30,7 @@
  * @author Samat
  * @author Sucy
  * @author TK-999
+ * @author Tacsipacsi
  * @author Terik
  * @author Tgr
  * @author Xbspiro
@@ -445,7 +446,7 @@ $messages = array(
 'cancel' => 'Mégse',
 'moredotdotdot' => 'Tovább…',
 'mypage' => 'Lapom',
-'mytalk' => 'Vitalapom',
+'mytalk' => 'Vitalap',
 'anontalk' => 'Az IP-címhez tartozó vitalap',
 'navigation' => 'Navigáció',
 'and' => '&#32;és',
@@ -477,6 +478,7 @@ $messages = array(
 'namespaces' => 'Névterek',
 'variants' => 'Változók',
 
+'navigation-heading' => 'Navigációs menü',
 'errorpagetitle' => 'Hiba',
 'returnto' => 'Vissza a(z) $1 laphoz.',
 'tagline' => 'A {{SITENAME}} wikiből',
@@ -684,7 +686,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.',
@@ -716,9 +718,9 @@ 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.",
-'welcomecreation' => '== Köszöntünk, $1! ==
-A felhasználói fiókodat létrehoztuk.
-Ne felejtsd el átnézni a [[Special:Preferences|személyes beállításaidat]].',
+'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:',
@@ -869,6 +871,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',
 
@@ -1048,7 +1051,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.',
@@ -1072,6 +1074,15 @@ 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',
+'content-model-text' => 'egyszerű szöveg',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Figyelem: ezen a lapon túl sok erőforrásigényes elemzőfüggvény-hívás található.
@@ -1086,7 +1097,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.',
@@ -1270,6 +1287,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',
@@ -1344,7 +1364,7 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.',
 
 # Preferences page
 'preferences' => 'Beállítások',
-'mypreferences' => 'Beállításaim',
+'mypreferences' => 'Beállítások',
 'prefs-edits' => 'Szerkesztéseid száma:',
 'prefsnologin' => 'Nem jelentkeztél be',
 'prefsnologintext' => 'Saját beállításaid elmentéséhez <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} be kell jelentkezned.] </span>',
@@ -1420,9 +1440,9 @@ A műveletet nem lehet visszavonni.',
 'prefs-emailconfirm-label' => 'E-mail cím megerősítése:',
 'prefs-textboxsize' => 'A szerkesztőablak mérete',
 'youremail' => 'Az e-mail címed:',
-'username' => 'Szerkesztőnév:',
-'uid' => 'Azonosító:',
-'prefs-memberingroups' => '{{PLURAL:$1|Csoporttagság|Csoporttagságok}}:',
+'username' => '{{GENDER:$1|Szerkesztőnév}}:',
+'uid' => '{{GENDER:$1|Azonosító}}:',
+'prefs-memberingroups' => '{{GENDER:$2|{{PLURAL:$1|Csoporttagság|Csoporttagságok}}}}:',
 'prefs-registration' => 'Regisztráció ideje:',
 'yourrealname' => 'Valódi neved:',
 'yourlanguage' => 'A felület nyelve:',
@@ -1569,12 +1589,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',
@@ -1803,6 +1824,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.',
@@ -1812,6 +1834,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.',
@@ -1828,6 +1851,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.',
@@ -1838,6 +1865,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
@@ -2186,8 +2214,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> (ezeket ne írd be a keresésbe).',
+'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.',
 
@@ -2206,10 +2235,6 @@ Támogatott protokollok: <code>$1</code> (ezeket ne írd be a keresésbe).',
 '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.
@@ -2236,7 +2261,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”',
@@ -2268,7 +2293,7 @@ Feladóként a [[Special:Preferences|beállításaid]]nál megadott e-mail-címe
 
 # Watchlist
 'watchlist' => 'Figyelőlistám',
-'mywatchlist' => 'Figyelőlistám',
+'mywatchlist' => 'Figyelőlista',
 'watchlistfor2' => '$1 részére $2',
 'nowatchlist' => 'Nincs lap a figyelőlistádon.',
 'watchlistanontext' => 'A figyelőlistád megtekintéséhez és szerkesztéséhez $1.',
@@ -2304,20 +2329,22 @@ 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_newpagetext' => 'Ez egy új lap.',
 'enotif_impersonal_salutation' => '{{SITENAME}} felhasználó',
-'changed' => 'megváltoztatta',
-'created' => 'létrehozta',
-'enotif_subject' => 'A(z) {{SITENAME}} $PAGETITLE című oldalát $CHANGEDORCREATED $PAGEEDITOR',
+'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
 
@@ -2341,6 +2368,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',
@@ -2427,8 +2456,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',
@@ -2527,9 +2556,9 @@ $1',
 'blanknamespace' => '(Fő)',
 
 # Contributions
-'contributions' => 'Szerkesztő közreműködései',
+'contributions' => '{{GENDER:$1|Szerkesztő}} közreműködései',
 'contributions-title' => '$1 közreműködései',
-'mycontris' => 'Közreműködéseim',
+'mycontris' => 'Közreműködések',
 'contribsub2' => '$1 ($2)',
 'nocontribs' => 'Nem található a feltételeknek megfelelő változtatás.',
 'uctop' => ' (utolsó)',
@@ -2569,7 +2598,7 @@ A blokknapló legutóbbi ide vonatkozó bejegyzése a következő:',
 'whatlinkshere-hideredirs' => 'átirányítások $1',
 'whatlinkshere-hidetrans' => 'beillesztések $1',
 'whatlinkshere-hidelinks' => 'linkek $1',
-'whatlinkshere-hideimages' => 'képhivatkozás $1',
+'whatlinkshere-hideimages' => 'fájlhivatkozások $1',
 'whatlinkshere-filters' => 'Elemek szűrése',
 
 # Block/unblock
@@ -2796,6 +2825,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',
@@ -3064,6 +3094,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',
@@ -3072,6 +3103,7 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-default-sort' => 'Alapértelmezett rendezési kulcs',
 'pageinfo-length' => 'Lap hossza (bájtokban)',
 'pageinfo-article-id' => 'Lapazonosító',
+'pageinfo-language' => 'Laptartalom nyelve',
 'pageinfo-robot-policy' => 'Kereső motor státusz',
 'pageinfo-robot-index' => 'Indexelhető',
 'pageinfo-robot-noindex' => 'Nem indexelhető',
@@ -3080,8 +3112,8 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-redirects-name' => 'Átirányítások erre a lapra',
 'pageinfo-subpages-name' => 'Az lap allapjai',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|átirányítás}}; $3 {{PLURAL:$3|nem átirányítás}})',
-'pageinfo-firstuser' => 'Lap létrehozója',
-'pageinfo-firsttime' => 'A lap létrehozás ideje',
+'pageinfo-firstuser' => 'A lap létrehozója',
+'pageinfo-firsttime' => 'A lap létrehozásának ideje',
 'pageinfo-lastuser' => 'Utolsó szerkesztő',
 'pageinfo-lasttime' => 'Az utolsó szerkesztés ideje',
 'pageinfo-edits' => 'Szerkesztések teljes száma',
@@ -3091,6 +3123,15 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-magic-words' => 'Varázs{{PLURAL:$1|szó|szavak}} ($1)',
 'pageinfo-hidden-categories' => 'Rejtett {{PLURAL:$1|kategória|kategóriák}} ($1)',
 'pageinfo-templates' => 'Felhasznált {{PLURAL:$1|sablon|sablonok}} ($1)',
+'pageinfo-toolboxlink' => 'Lapinformációk',
+'pageinfo-redirectsto' => 'Átirányítás ide',
+'pageinfo-redirectsto-info' => 'infó',
+'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',
@@ -3112,6 +3153,8 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'markedaspatrollederror' => 'Nem lehet ellenőrzöttnek jelölni',
 'markedaspatrollederrortext' => 'Meg kell adnod egy ellenőrzöttként megjelölt változatot.',
 'markedaspatrollederror-noautopatrol' => 'A saját változtatásaid megjelölése ellenőrzöttként nem engedélyezett.',
+'markedaspatrollednotify' => '$1 változtatása ellenőrzöttnek lett jelölve.',
+'markedaspatrollederrornotify' => 'Nem sikerült ellenőrzöttnek jelölni.',
 
 # Patrol log
 'patrol-log-page' => 'Ellenőrzési napló (patrol)',
@@ -3145,6 +3188,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.',
@@ -3174,7 +3218,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'A formátum a következő:
@@ -3781,6 +3828,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. 
@@ -3919,11 +3967,15 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'logentry-move-move_redir-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva, átirányítás nélkül',
 'logentry-patrol-patrol' => '$1 a(z) $3 lap $4 változatát ellenőrzöttnek jelölte',
 'logentry-patrol-patrol-auto' => '$1 a(z) $3 lap $4 változatát automatikusan ellenőrzöttnek jelölte',
-'logentry-newusers-newusers' => '$1 létrehozott egy felhasználói fiókot',
-'logentry-newusers-create' => '$1 létrehozott egy felhasználói fiókot',
-'logentry-newusers-create2' => '$1 létrehozott egy felhasználói fiókot $3',
+'logentry-newusers-newusers' => '$1 felhasználói fiók létrehozva',
+'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 993e0ea..adfda36 100644 (file)
@@ -14,6 +14,7 @@
  * @author Teak
  * @author Togaed
  * @author Vacio
+ * @author Vadgt
  * @author Xelgen
  * @author Համլետ
  * @author לערי ריינהארט
@@ -279,7 +280,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Թաքցնել պարեկված խմբագրումները վերջին փոփոխությունների ցանկից',
 'tog-newpageshidepatrolled' => 'Թաքցնել պարեկված էջերը նոր էջերի ցանկից',
 'tog-extendwatchlist' => 'Ընդարձակել հսկացանկը՝ ցույց տալով բոլոր փոփոխությունները, այլ ոչ միայն վերջինները',
-'tog-usenewrc' => 'Օգտագործել վերջին փոփոխությունների լավացված ցանկ (պահանջում է JavaScript)',
+'tog-usenewrc' => 'Խմբավորել փոփոխությունները Վերջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)',
 'tog-numberheadings' => 'Ինքնաթվագրել վերնագրերը',
 'tog-showtoolbar' => 'Ցույց տալ խմբագրումների գործիքների վահանակը (JavaScript)',
 'tog-editondblclick' => 'Խմբագրել էջերը կրկնակի մատնահարմամբ (JavaScript)',
@@ -287,9 +288,9 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ (JavaScript)',
 'tog-showtoc' => 'Ցույց տալ բովանդակությունը (3  կամ ավել վերնագրեր ունեցող էջերի համար)',
 'tog-rememberpassword' => 'Հիշել իմ մուտքագրված տվյալներն այս համակարգչում ($1 {{PLURAL:$1|օրից}} ոչ ավել ժամկետով)',
-'tog-watchcreations' => 'Ավելացնել իմ ստեղծած էջերը հսկացանկին',
-'tog-watchdefault' => 'Ավելացնել իմ խմբագրած էջերը հսկացանկին',
-'tog-watchmoves' => 'Ավելացնել իմ վերնավանած էջերը հսկացանկին',
+'tog-watchcreations' => 'Ավելացնել իմ ստեղծած էջերը և բեռնած նիշքերը հսկացանկին',
+'tog-watchdefault' => 'Ավելացնել իմ խմբագրած էջերը և նիշքերը հսկացանկին',
+'tog-watchmoves' => 'Ավելացնել իմ վերնավանած էջերը և նիշքերը հսկացանկին',
 'tog-watchdeletion' => 'Ավելացնել իմ ջնջած էջերը հսկացանկին',
 'tog-minordefault' => 'Նշել խմբագրումները որպես չնչին ըստ լռության',
 'tog-previewontop' => 'Ցույց տալ նախադիտումը խմբագրման դաշտից առաջ',
@@ -325,7 +326,7 @@ $messages = array(
 # Font style option in Special:Preferences
 'editfont-style' => 'Խմբագրման շրջանի տառատեսակի ձևը.',
 'editfont-default' => 'Զննարկիչի լռելյայն տառատեսակը',
-'editfont-monospace' => 'Միալայն տառատեսակ',
+'editfont-monospace' => 'Միալայնք տառատեսակ',
 'editfont-sansserif' => 'Սանս-սերիֆ տառատեսակ',
 'editfont-serif' => 'Սերիֆ տառատեսակ',
 
@@ -406,7 +407,7 @@ $messages = array(
 'cancel' => 'Բեկանել',
 'moredotdotdot' => 'Ավելին...',
 'mypage' => 'Իմ էջը',
-'mytalk' => 'Իմ քննարկումները',
+'mytalk' => 'Քննարկում',
 'anontalk' => 'Քննարկում այս IP-հասցեի համար',
 'navigation' => 'Շրջել կայքում',
 'and' => '&#32;և',
@@ -437,9 +438,10 @@ $messages = array(
 'namespaces' => 'Անվանատարածքներ',
 'variants' => 'Տարբերակներ',
 
+'navigation-heading' => 'Նավիգացիոն ցանկ',
 'errorpagetitle' => 'Սխալ',
 'returnto' => 'Վերադառնալ $1։',
-'tagline' => '{{SITENAME}}յից՝ ազատ հանրագիտարանից',
+'tagline' => '{{SITENAME}}յից',
 'help' => 'Օգնություն',
 'search' => 'Որոնում',
 'searchbutton' => 'Որոնել',
@@ -500,7 +502,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' => '{{grammar:genitive|{{SITENAME}}}} մասին',
+'aboutsite' => '{{grammar:genitive|{{SITENAME}}}}ի մասին',
 'aboutpage' => 'Project:Էությունը',
 'copyright' => 'Կայքի բովանդակությունը գտնվում է «$1» արտոնագրի տակ։',
 'copyrightpage' => '{{ns:project}}:Հեղինակային իրավունքներ',
@@ -526,11 +528,11 @@ $1',
 'versionrequired' => 'Պահանջվում է ՄեդիաՎիքի ծրագրի $1 տարբերակը',
 'versionrequiredtext' => 'Այս էջի օգտագործման համար պահանջվում է ՄեդիաՎիքի ծրագրի $1 տարբերակը։ Տես [[Special:Version|տարբերակի էջը]]։',
 
-'ok' => 'OK',
+'ok' => 'Լավ',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Ստացված է «$1» էջից',
 'youhavenewmessages' => 'Դուք ունեք $1 ($2)։',
-'newmessageslink' => 'Õ¶Õ¸Ö\80 Õ¸Ö\82Õ²Õ¥Ö\80Õ±Õ¶Õ¥Ö\80',
+'newmessageslink' => 'Õ\86Õ¸Ö\80 Õ°Õ¡Õ²Õ¸Ö\80Õ¤Õ¡Õ£Ö\80Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶',
 'newmessagesdifflink' => 'վերջին փոփոխությունը',
 'newmessageslinkplural' => '{{PLURAL:$1|նոր հաղորդագրություն|նոր հաղորդագրություններ}}',
 'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|փոփոխում|փոփոխումներ}}',
@@ -567,7 +569,7 @@ $1',
 'nstab-special' => 'Սպասարկող էջ',
 'nstab-project' => 'Նախագծի էջ',
 'nstab-image' => 'Նիշք',
-'nstab-mediawiki' => 'Õ\88Ö\82Õ²Õ¥Ö\80Õ±',
+'nstab-mediawiki' => 'Õ\80Õ¡Õ²Õ¸Ö\80Õ¤Õ¡Õ£Ö\80Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶',
 'nstab-template' => 'Կաղապար',
 'nstab-help' => 'Օգնության էջ',
 'nstab-category' => 'Կատեգորիա',
@@ -629,7 +631,7 @@ $1',
 'cannotdelete-title' => 'Հնարավոր չէ ջնջել $1 էջը',
 'badtitle' => 'Անընդունելի անվանում',
 'badtitletext' => 'Հարցված էջի անվանումը անընդունելի է, դատարկ է կամ սխալ միջ-լեզվական կամ ինտերվիքի անվանում է։ Հնարավոր է, որ այն պարունակում է անթույլատրելի սիմվոլներ։',
-'perfcached' => 'Հետևյալ տվյալները վերցված են քեշից և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'perfcached' => 'Հետևյալ տվյալները վերցված են քեշից և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ Առավելագույն {{PLURAL:$1|արդյունք|$1 արդյունք}} է հասանելի քեշում։',
 'perfcachedts' => 'Հետևյալ տվյալները վերցված են քեշից և վերջին անգամ թարմացվել են $1։ A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
 'querypage-no-updates' => 'Այս էջի փոփոխությունները ներկայումս արգելված են։ Այստեղի տվյալները այժմ չեն թարմացվի։',
 'wrong_wfQuery_params' => 'Անթույլատրելի պարամետրեր wfQuery() ֆունկցիայի համար<br />
@@ -649,9 +651,13 @@ $1',
 'cascadeprotected' => 'Այս էջը պաշտպանված է խմբագրումից, քանի որ ընդգրկված է հետևյալ {{PLURAL:$1|էջի|էջերի}} տեքստում, {{PLURAL:$1|որը|որոնք}} պաշտպանվել {{PLURAL:$1|է|են}} կասկադային հնարավորությամբ.
 $2',
 'namespaceprotected' => 'Դուք չունեք «$1» անվանատարածքի էջերի խմբագրման իրավունք։',
+'customcssprotected' => 'Դուք չեք կարող խմբագրել այս CSS էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։',
+'customjsprotected' => 'Դուք չեք կարող խմբագրել այս ՋավաՍկրիպտ էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։',
 'ns-specialprotected' => '«{{ns:special}}» անվանատարածքի էջերը չեն կարող խմբագրվել։',
 'titleprotected' => "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։
 Տրված պատճառն է՝ ''$2''։",
+'exception-nologin' => 'Չեք մտել համակարգ',
+'exception-nologin-text' => 'Այս էջը դիտելու կամ գործողություն կատարելու համար դուք պետք է մուտք գործեք այս վիքի։',
 
 # Virus scanner
 'virus-badscanner' => "Սխալ կարգավորւմ։ Անծանոթ վիրուսների զննիչ. ''$1''",
@@ -662,26 +668,27 @@ $2',
 'logouttext' => "'''Դուք դուրս եկաք համակարգից։'''
 
 Դուք կարող եք շարունակել օգտագործել {{SITENAME}} կայքը անանուն, կամ <span class='plainlinks'>[$1 կրկին մուտք գործել համակարգ]</span> նույն կամ մեկ այլ մասնակցի անվամբ։ Ի նկատի ունեցեք, որ որոշ էջեր կարող են ցուցադրվել այնպես՝ ինչպես եթե դեռ համակարգում լինեիք մինչև որ չջնջեք ձեր զննարկիչի հիշապահեստը։",
-'welcomecreation' => '== Բարի՛ գալուստ, $1 ==
-Ձեր հաշիվը ստեղծված է։
-Չմոռանաք անձնավորել ձեր [[Special:Preferences|նախընտրությունները]]։',
+'welcomeuser' => 'Բարի գալո՜ւստ, $1',
+'welcomecreation-msg' => 'Ձեր հաշիվն ստեղծված է։
+Չմոռանաք փոփոխել ձեր [[Special:Preferences|նախընտրությունները]]։',
 'yourname' => 'Մասնակցի անուն.',
 'yourpassword' => 'Գաղտնաբառ.',
 'yourpasswordagain' => 'Կրկնեք գաղտնաբառը.',
 'remembermypassword' => 'Հիշել իմ մուտքագրված տվյալները այս համակարգչում ($1 {{PLURAL:$1|օրից|օրից}} ոչ ավել ժամկետով)',
 'yourdomainname' => 'Ձեր դոմենը.',
+'password-change-forbidden' => 'Այս վիքիում չեք կարող փոխել գաղտնաբառ։',
 'externaldberror' => 'Տեղի է ունեցել վավերացման արտաքին տվյալների բազայի սխալ, կամ դուք չունեք բավարար իրավունքներ ձեր արտաքին հաշվի փոփոխման համար։',
-'login' => 'Մտնել',
+'login' => 'Մտնել համակարգ',
 'nav-login-createaccount' => 'Մտնել / Գրանցվել',
 'loginprompt' => '{{SITENAME}} մուտք գործելու համար հարկավոր է քուքիները թույլատրել։',
 'userlogin' => 'Մտնել / Գրանցվել',
 'userloginnocreate' => 'Մտնել',
-'logout' => 'ÔµÕ¬Õ¶Õ¥Õ¬',
-'userlogout' => 'Ելնել',
+'logout' => 'Ô´Õ¸Ö\82Ö\80Õ½ Õ£Õ¡Õ¬ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö\80Õ£Õ«Ö\81',
+'userlogout' => 'Ելնել համակարգից',
 'notloggedin' => 'Դուք չեք մտել համակարգ',
 'nologin' => "Դեռևս չե՞ք գրանցվել։ '''$1'''։",
 'nologinlink' => 'Ստեղծեք մասնակցային հաշիվ',
-'createaccount' => 'Õ\8dÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ¶Õ¸Ö\80 Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ·Õ«Õ¾',
+'createaccount' => 'Ստեղծել նոր հաշիվ',
 'gotaccount' => "Դուք արդեն գրանցվա՞ծ եք։ '''$1'''։",
 'gotaccountlink' => 'Մուտք գործեք համակարգ',
 'userlogin-resetlink' => 'Մոռացե՞լ եք Ձեր լոգին տվյալները։',
@@ -689,10 +696,12 @@ $2',
 'createaccountreason' => 'Պատճառ.',
 'badretype' => 'Ձեր մուտքագրած գաղտնաբառերը չեն համընկնում։',
 'userexists' => 'Այս մասնակցի անունը արդեն զբաղված է։ Խնդրում ենք ընտրել մեկ այլ անուն։',
-'loginerror' => 'Õ\84Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ´Õ¸Ö\82Õ¿Ö\84Õ« Õ½Õ­Õ¡Õ¬',
+'loginerror' => 'Մուտքի սխալ',
 'createaccounterror' => 'Չհաջողվեց ստեղծել մասնակցային հաշիվ. $1',
 'nocookiesnew' => 'Մասնակցային հաշիվը ստեղծված է, սակայն մուտքը համակարգ չհաջողվեց։ {{SITENAME}} կայքը օգտագործում է «քուքիներ» մասնակիցների վավերացման համար։ Ձեր մոտ «քուքիները» արգելված են։ Խնդրում ենք թույլատրել սրանք, ապա մտնել համակարգ ձեր նոր մասնակցի անունով և գաղտնաբառով։',
 'nocookieslogin' => '{{SITENAME}} կայքը օգտագործում է «քուքիներ» մասնակիցների վավերացման համար։ Ձեր մոտ «քուքիները» արգելված են։ Խնդրում ենք թույլատրել սրանք և փորձել կրկին։',
+'nocookiesfornew' => 'Մասնակցային հաշիվը չհաջողվեց ստեղծվել, քանի որ հնարավոր չեր վավերացնել աղբյուրը։
+Ստուգեք, որ ձեզ մոտ թույլատրված են քուկիները, վերբեռնեք էջը և փորձեք կրկին։',
 'noname' => 'Դուք չեք նշել թույլատրելի մասնակցային անուն։',
 'loginsuccesstitle' => 'Բարեհաջող մուտք',
 'loginsuccess' => "'''Դուք մուտք գործեցիք {{SITENAME}}, որպես \"\$1\"։'''",
@@ -729,6 +738,7 @@ $2',
 'noemailprefs' => 'Այս հնարավորության գործածման համար անհրաժեշտ է նշել էլ-փոստի հասցե։',
 'emailconfirmlink' => 'Վավերացնել ձեր էլ-փոստի հասցեն',
 'invalidemailaddress' => 'Նշված էլ-փոստի հասցեն անընդունելի է, քանի որ այն ունի անթույլատրելի ֆորմատ։ Խնդրում ենք նշել ճշմարիտ հասցե կամ այս դաշտը թողնել դատարկ։',
+'emaildisabled' => 'Այս կայքը չի կարող ուղարկել էլ․ նամակներ։',
 'accountcreated' => 'Հաշիվը ստեղծված է',
 'accountcreatedtext' => '$1 մասնակցի հաշիվը ստեղծված է։',
 'createaccount-title' => '{{SITENAME}}. մասնակցային հաշվի ստեղծում',
@@ -738,10 +748,11 @@ $2',
 'usernamehasherror' => 'Մասնակցի անունը չի կարող պարունակել «#» նիշը։',
 'login-throttled' => 'Դուք կատարել եք չափից շատ մուտքի փորձ։
 Խնդրում ենք սպասել որոշ ժամանակ կրկին փորձելուց առաջ։',
-'loginlanguagelabel' => 'Լեզու. $1',
+'loginlanguagelabel' => 'Լեզու $1',
 
 # E-mail sending
 'php-mail-error-unknown' => 'Անհայտ սխալ PHP-ի mail() ֆունկցիայում',
+'user-mail-no-addy' => 'Փորձվեց ուղարկել էլ․ նամակ առանց էլ․ հասցեի։',
 
 # Change password dialog
 'resetpass' => 'Փոխել գաղտնաբառը',
@@ -762,14 +773,25 @@ $2',
 'resetpass-temp-password' => 'Ժամանակավոր գաղտնաբառ.',
 
 # Special:PasswordReset
+'passwordreset' => 'Վերականգնել գաղտնաբառը',
+'passwordreset-text' => 'Լրացրեք ձևը՝ էլ-փոստով ձեր տվյալների մասին հիշեցում ստանալու համար։',
 'passwordreset-legend' => 'Վերականգնել գաղտնաբառը',
+'passwordreset-disabled' => 'Գաղտնաբառի վերականգնումը այս վիքիում թույլատրված չէ։',
 'passwordreset-username' => 'Մասնակցի անուն.',
+'passwordreset-email' => 'Էլ-փոստի հասցեն՝',
 'passwordreset-emailelement' => 'Մասնակցային անուն. $1
 Ժամանակավոր գաղտնաբառ. $2',
+'passwordreset-emailsent' => 'Ուղարկվեց հիշեցնող էլ․ նամակ։',
+'passwordreset-emailsent-capture' => 'Ուղարկվեց հիշեցնող էլ․ նամակ։ Այն ներկայացված է ստորև։',
+'passwordreset-emailerror-capture' => 'Ուղարկվեց հիշեցնող էլ․ նամակ։ Այն ներկայացված է ստորև։ Սակայն մասնակցին ուղարկելը չհաջողվեց․',
 
 # Special:ChangeEmail
 'changeemail' => 'Փոխել էլ. հասցեն',
-'changeemail-submit' => 'Խմբագրել էլ․ հասցեն',
+'changeemail-header' => 'Փոխել հաշվի էլ․ հասցեն',
+'changeemail-oldemail' => 'Ներկա էլ․ հասցե․',
+'changeemail-newemail' => 'Նոր էլ․ հասցե․',
+'changeemail-none' => '(ոչ մի)',
+'changeemail-submit' => 'Փոխել էլ․ հասցեն',
 'changeemail-cancel' => 'Չեղարկել',
 
 # Edit page toolbar
@@ -819,7 +841,7 @@ $2',
 * Արգելափակման մարում՝ $6
 * Արգելափակվել է՝ $7
 
-Ô´Õ¸Ö\82Ö\84 Õ¯Õ¡Ö\80Õ¸Õ² Õ¥Ö\84 Õ¯Õ¡ÕºÕ¶Õ¾Õ¥Õ¬ $1 Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¯Õ¡Õ´ Õ´Õ¥Õ¯ Õ¡ÕµÕ¬ [[{{MediaWiki:Grouppage-sysop}}|Õ¡Õ¤Õ´Õ«Õ¶Õ«Õ½Õ¿Ö\80Õ¡Õ¿Õ¸Ö\80Õ«]] Õ°Õ¥Õ¿Õ\9d Õ±Õ¥Ö\80 Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¸Ö\82Õ´Õ¨ Ö\84Õ¶Õ¶Õ¡Ö\80Õ¯Õ¥Õ¬Õ¸Ö\82 Õ¶ÕºÕ¡Õ¿Õ¡Õ¯Õ¸Õ¾։
+Ô´Õ¸Ö\82Ö\84 Õ¯Õ¡Ö\80Õ¸Õ² Õ¥Ö\84 Õ¯Õ¡ÕºÕ¾Õ¥Õ¬ $1 Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¯Õ¡Õ´ Õ´Õ¥Õ¯ Õ¡ÕµÕ¬ [[{{MediaWiki:Grouppage-sysop}}|Õ¡Õ¤Õ´Õ«Õ¶Õ«Õ½Õ¿Ö\80Õ¡Õ¿Õ¸Ö\80Õ«]] Õ°Õ¥Õ¿Õ\9d Õ±Õ¥Ö\80 Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¸Ö\82Õ´Õ¨ Ö\84Õ¶Õ¶Õ¡Ö\80Õ¯Õ¥Õ¬Õ¸Ö\82 Õ¶ÕºÕ¡Õ¿Õ¡Õ¯Õ¸Õ¾Ö\89 Ô´Õ¡ Õ¶Õ¡Ö\87 Õ°Õ¶Õ¡Ö\80Õ¡Õ¾Õ¸Ö\80 Õ§ Õ¡Õ¶Õ¥Õ¬ Õ±Õ¥Ö\80 Ö\84Õ¶Õ¶Õ¡Ö\80Õ¯Õ´Õ¡Õ¶ Õ§Õ»Õ¸Ö\82Õ´։
 Դուք չեք կարող օգտվել` «էլ-նամակ ուղարկել այս մասնակցին» հնարավորությունից, քանի դեռ ինքներդ գործող էլ-փոստի հասցե չէք  նշել ձեր [[Special:Preferences|մասնակցի նախընտրություններում]] և չեք արգելափակվել այս հնարավորւությունը օգտագործելուց։
 
 Ձեր ընթացիկ IP-հասցեն է` $3, արգելափակման իդենտիֆիկատորը՝ #$5։
@@ -833,7 +855,7 @@ $2',
 * Արգելափակման մարում՝ $6
 * Արգելափակվել է՝ $7
 
-Ô´Õ¸Ö\82Ö\84 Õ¯Õ¡Ö\80Õ¸Õ² Õ¥Ö\84 Õ¯Õ¡ÕºÕ¶Õ¾Õ¥Õ¬ $1 Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¯Õ¡Õ´ Õ´Õ¥Õ¯ Õ¡ÕµÕ¬ [[{{MediaWiki:Grouppage-sysop}}|Õ¡Õ¤Õ´Õ«Õ¶Õ«Õ½Õ¿Ö\80Õ¡Õ¿Õ¸Ö\80Õ«]] Õ°Õ¥Õ¿Õ\9d Õ±Õ¥Ö\80 Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¸Ö\82Õ´Õ¨ Ö\84Õ¶Õ¶Õ¡Ö\80Õ¯Õ¥Õ¬Õ¸Ö\82 Õ¶ÕºÕ¡Õ¿Õ¡Õ¯Õ¸Õ¾Ö\89
+Դուք կարող եք կապվել $1 մասնակցի կամ մեկ այլ [[{{MediaWiki:Grouppage-sysop}}|ադմինիստրատորի]] հետ՝ ձեր արգելափակումը քննարկելու նպատակով։
 
 Դուք չեք կարող օգտվել «էլ-նամակ ուղարկել այս մասնակցին» հնարավորությունից քանի դեռ ինքներդ գործող էլ-փոստի հասցե չէք  նշել ձեր [[Special:Preferences|մասնակցի նախընտրություններում]] և չեք արգելափակվել այս հնարավորությից օգտվելուց։
 
@@ -897,10 +919,10 @@ $2',
 
 '''Եթե սա բարեխիղճ խմբագրման փորձ է, խնդրում ենք փորձել կրկին։ Սխալի կրկնման դեպքում՝ փորձեք [[Special:UserLogout|դուրս գալ]], ապա կրկին մտնել համակարգ։'''",
 'token_suffix_mismatch' => "'''Ձեր խմբագրումը մերժվել է, քանի որ ձեր օգտագործած ծրագիրը աղավաղել է կետադրության նշանները խմբագրման դաշտում։ Խմբագրումը մերժվել է էջի տեքստի խաթարումը կանխելու նպատակով։ Սա երբեմն պայմանավորված է սխալներ պարունակող անանվանեցնող վեբ-փոխարինորդ (proxy) ծառայության օգտագործմամբ։'''",
-'editing' => 'Խմբագրում. $1',
+'editing' => 'Խմբագրում $1',
 'creating' => 'Ստեղծում $1',
-'editingsection' => 'Խմբագրում. $1 (բաժին)',
-'editingcomment' => 'Խմբագրում $1 (նոր բաժին)',
+'editingsection' => 'Խմբագրում՝ $1 (բաժին)',
+'editingcomment' => 'Խմբագրում՝ $1 (նոր բաժին)',
 'editconflict' => 'Խմբագրման ընդհարում. $1',
 'explainconflict' => "Մեկ այլ մասնակից փոփոխել է այս տեքստը ձեր խմբագրման ընթացքում։
 Վերին խմբագրման դաշտում ընդգրկված է ընթացիկ տեքստը, որն ենթակա է հիշման։
@@ -933,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' => 'Դուք չունեք նոր էջեր ստեղծելու թույլտվություն։',
@@ -1029,6 +1082,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'revdelete-hide-comment' => 'Թաքցնել մեկնաբանությունը',
 'revdelete-hide-user' => 'Թաքցնել հեղինակի մասնակցի անունը/IP',
 'revdelete-hide-restricted' => 'Թաքցնել տվյալները և՛ ադմինիստրատորներից, և՛ այլ մասնակիցներից',
+'revdelete-radio-same' => '(չի կարելի խմբագրել)',
 'revdelete-radio-set' => 'Այո',
 'revdelete-radio-unset' => 'Ոչ',
 'revdelete-suppress' => 'Թաքցնել տվյալները ադմինիստրատորներից և մյուսներից նոյնպես',
@@ -1048,7 +1102,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'revdelete-offender' => 'Էջի տարբերակի հեղինակ՝',
 
 # History merging
-'mergehistory-reason' => 'Պատճառ.',
+'mergehistory-reason' => 'Պատճառ՝',
 
 # Merge log
 'revertmerge' => 'Անջատել',
@@ -1093,11 +1147,11 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 '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-category-size' => '{{PLURAL:$1|անդամ}} ({{PLURAL:$2|ենթակատեգորիա}}, {{PLURAL:$3|նիշք}})',
 'search-result-score' => 'Համընկնում $1%',
 'search-redirect' => '(վերահղում $1)',
 'search-section' => '(բաժին $1)',
-'search-suggest' => 'Ô´Õ¸Ö\82Ö\84 Õ« նկատի ունե՞ք՝ $1',
+'search-suggest' => 'Ô³Õ¸Ö\82Ö\81Õ¥ նկատի ունե՞ք՝ $1',
 'search-interwiki-caption' => 'Կից նախագծեր',
 'search-interwiki-default' => '$1 արդյունք.',
 'search-interwiki-more' => '(էլի)',
@@ -1132,7 +1186,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 
 # Preferences page
 'preferences' => 'Նախընտրություններ',
-'mypreferences' => 'Իմ նախընտրությունները',
+'mypreferences' => 'Նախընտրություններ',
 'prefs-edits' => 'Խմբագրումների քանակը.',
 'prefsnologin' => 'Դուք չեք մտել համակարգ',
 'prefsnologintext' => 'Մասնակցային նախընտրությունները փոփոխելու համար անհրաժեշտ է <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} մտնել համակարգ]</span>։',
@@ -1223,7 +1277,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 Այս տեղեկությունը բոլորին տեսանլի է լինելու։',
 'email' => 'Էլ-փոստ',
 'prefs-help-realname' => 'Իրական անունը պարտադիր չէ, սակայն եթե դուք նշեք դա, ապա այն կօգտագործվի ձեր փոփոխությունների իրական անվանը վերագրման համար։',
-'prefs-help-email' => 'Էլեկտրոնային փոստի մուտքագրումը պարտադիր չէ, սակայն սա թույլ կտա մյուս մասնակիցներին կապնվել ձեզ հետ ձեր մասնակցի կամ մասնակցի քննարկման էջի միջոցով՝ առանց ձեր անձի կամ ձեր էլեկտրոնային հասցեի բացահայտման։',
+'prefs-help-email' => 'Էլ-փոստի հասցեն նշելը պարտադիր չէ, սակայն այն անհրաժեշտ կլինի, եթե դուք երբևէ մոռանաք ձեր գաղտնաբառը։',
 'prefs-help-email-required' => 'Էլ-փոստի հասցեն նշելը պարտադիր է։',
 'prefs-info' => 'Հիմնական տեղեկություններ',
 'prefs-i18n' => 'Միջազգայնացում',
@@ -1281,20 +1335,30 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'grouppage-suppress' => '{{ns:project}}:Հսկիչ',
 
 # Rights
-'right-edit' => 'էջերի խմբագրում',
-'right-move' => 'Տեղափոխել էջերը',
-'right-move-subpages' => 'Տեղափոխել էջերն իրենց ենթաէջերով',
+'right-read' => 'Դիտել էջեր',
+'right-edit' => 'Խմբագրել էջեր',
+'right-createtalk' => 'Ստեղծել քննարկման էջեր',
+'right-createaccount' => 'Ստեղծել նոր մասնակցային հաշիվներ',
+'right-minoredit' => 'Նշել խմբագրումը որպես ստուգված',
+'right-move' => 'Վերանվանել էջը',
+'right-move-subpages' => 'Վերանվանել էջն իր ենթաէջերով',
+'right-movefile' => 'Վերանվանել նիշքեր',
+'right-suppressredirect' => 'Էջը վերանավանելիս վերահղում չթողնել',
 'right-upload' => 'Նիշքերի բեռնում',
+'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' => 'խմբագրել այս էջը',
+'action-createpage' => 'Ստեղծել էջ',
 'action-upload' => 'Բեռնել այս ֆայլը',
 'action-upload_by_url' => 'Բեռնել այս ֆայլը URL-ից',
 'action-delete' => 'Ջնջել այս էջը',
@@ -1347,7 +1411,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'recentchangeslinked-to' => 'Հակառա՛կը. ցույց տալ այս էջին հղող էջերի փոփոխությունները։',
 
 # Upload
-'upload' => 'Բեռնել նիշք',
+'upload' => 'Բեռնել նիշք (ֆայլ)',
 'uploadbtn' => 'Բեռնել նիշք',
 'reuploaddesc' => 'Վերադառնալ բեռնման ձևին։',
 'uploadnologin' => 'Դուք չեք մտել համակարգ',
@@ -1368,6 +1432,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'filename' => 'Նիշքի անվանում',
 'filedesc' => 'Ամփոփում',
 'fileuploadsummary' => 'Նկարագրություն՝',
+'filereuploadsummary' => 'Ֆայլի փոփոխություները:',
 'filestatus' => 'Հեղինակային իրավունքի կարգավիճակ.',
 'filesource' => 'Աղբյուր՝',
 'uploadedfiles' => 'Բեռնված նիշքեր',
@@ -1396,15 +1461,18 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'fileexists-forbidden' => 'Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի։ Խնդրում ենք հետ վերադառնալ և բեռնել նիշքը նոր անվանմամբ։ [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի նիշքերի ընդհանուր զետեղարանում։ Խնդրում ենք հետ վերադառնալ և բեռնել նիշքը նոր անվանմամբ։ [[File:$1|thumb|center|$1]]',
 'uploadwarning' => 'Զգուշացում',
-'savefile' => 'Հիշել նիշքը',
+'savefile' => 'Հիշել ֆայլը',
 'uploadedimage' => 'բեռնվեց «[[$1]]»',
 'overwroteimage' => 'բեռնվեց «[[$1]]» նիշքի նոր տարբերակ',
 'uploaddisabled' => 'Բեռնումները արգելված են',
 'uploaddisabledtext' => 'Նիշքերի բեռնումը արգելափակված է։',
 'uploadscripted' => 'Այս նիշքը պարունակում է HTML-կոդ կամ գրվածք (սկրիպտ), որը կարող է սխալ մեկնաբանվել զննարկիչի կողմից։',
 'uploadvirus' => 'Նիշքը պարունակում է վիրո՜ւս։ Տես $1',
+'upload-source' => 'Աղբյուրը ֆայլի',
 'sourcefilename' => 'Սկզբնական նիշք՝',
 'destfilename' => 'Նիշքի նոր անվանում՝',
+'upload-description' => 'Ֆայլի մեկնաբանություն',
+'upload-options' => 'Բեռնման ընտրանքներ',
 'watchthisupload' => 'Հսկել այս նիշքը',
 'filewasdeleted' => 'Այս անվանմամբ նիշք նախկինում բեռնվել է և հետագայում ջնջվել։ Այն կրկին բեռնելուց առաջ խնդրում ենք ստուգել $1։',
 'filename-bad-prefix' => "Բեռնվող նիշքի անվանումը սկսվում է '''<tt>«$1»</tt>''' արտահայտությամբ, որը ոչ-նկարագրական է և սովորաբար տրվում է թվային լուսանկարչական ապարատների կողմից։ Խնդրում ենք ընտրել ավելի նկարագրական անվանում ձեր նիշքի համար։",
@@ -1413,7 +1481,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'upload-proto-error' => 'Սխալ պրոտոկոլ',
 'upload-proto-error-text' => 'Հեռավոր բեռնումը պահանջում է URL-հասցե, որը սկսվում է <code>http://</code> կամ <code>ftp://</code> նախածանցով։',
 'upload-file-error' => 'Ներքին սխալ',
-'upload-file-error-text' => 'Õ\8fÕ¥Õ²Õ« Õ¸Ö\82Õ¶Õ¥Ö\81Õ¡Õ¾ Õ¶Õ¥Ö\80Ö\84Õ«Õ¶ Õ½Õ­Õ¡Õ¬Õ\9d Õ½Õ¥Ö\80Õ¾Õ¥Ö\80Õ« Õ¾Ö\80Õ¡ ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ¡Õ¾Õ¸Ö\80 Õ¶Õ«Õ·Ö\84 Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬Õ«Õ½Ö\89 Ô½Õ¶Õ¤Ö\80Õ¸Ö\82Õ´ Õ¥Õ¶Ö\84 Õ¯Õ¡ÕºÕ¶Õ¾Õ¥Õ¬ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö\80Õ£Õ¡ÕµÕ«Õ¶ [[Special:ListUsers/sysop|Õ¡Õ¤Õ´Õ«Õ¶Õ«Õ½Õ¿Ö\80Õ¡Õ¿Õ¸Ö\80Õ«]] Õ°Õ¥Õ¿Ö\89',
+'upload-file-error-text' => 'Տեղի ունեցավ ներքին սխալ՝ սերվերի վրա ժամանակավոր նիշք ստեղծելիս։ Խնդրում ենք կապվել համակարգային [[Special:ListUsers/sysop|ադմինիստրատորի]] հետ։',
 'upload-misc-error' => 'Բեռնման անհայտ սխալ',
 'upload-misc-error-text' => 'Տեղի ունեցավ անհայտ սխալ բեռնման ընթացքում։ Խնդրում ենք ստուգել URL-հասցեի ճշտությունն ու հասանելիությունը և փորձել կրկին։ Սխալի կրկնման դեպքում կապնվեք համակարգային ադմինիստրատորի հետ։',
 
@@ -1462,6 +1530,8 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'nolinkstoimage' => 'Այս նիշքին հղվող էջեր չկան։',
 'sharedupload' => 'Այս նիշքը $1 զետեղարանից է և կարող է օգտագործվել այլ նախագծերում։',
 'sharedupload-desc-here' => 'Այս նիշքը $1-ից է և թուլատրելի է այլ նախագծերի կողմից օգտագործվել։ [$2 Նիշքի նկարագրման էջի] նկարագրությունը ներկայացված է ներքո։',
+'filepage-nofile' => 'Այս անունով նիշք գոյություն չունի։',
+'filepage-nofile-link' => 'Այս անունով նիշք գոյություն չունի, դուք կարող եք [$1 բեռնել այն]:',
 'uploadnewversion-linktext' => 'Բեռնել այս նիշքի նոր տարբերակ',
 
 # File reversion
@@ -1488,6 +1558,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'filedelete-otherreason' => 'Այլ/հավելյալ պատճառ․',
 'filedelete-reason-otherlist' => 'Ուրիշ պատճառ',
 'filedelete-edit-reasonlist' => 'Խմբագրել ջնջման պատճառների ցանկը',
+'filedelete-maintenance-title' => 'Հնարավոր չէ ջնջել նիշքը։',
 
 # MIME search
 'mimesearch' => 'Որոնել MIME-տեսակով',
@@ -1531,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' => 'Երկիմաստության փարատման էջեր',
@@ -1560,10 +1631,13 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 # 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|տարբերակ|տարբերակներ}}',
 'nviews' => '$1 {{PLURAL:$1|դիտում|դիտումներ}}',
+'nimagelinks' => 'օգտագործվում է $1 {{PLURAL:$1|էջ|էջեր}}',
+'ntransclusions' => 'օգտագործվում է $1 {{PLURAL:$1|էջ|էջեր}}',
 'specialpage-empty' => 'Հայցումը արդյունքներ չվերադարձրեց։',
 'lonelypages' => 'Որբ էջեր',
 'lonelypagestext' => 'Հետևյալ էջերին չկան հղումներ այս վիքիի այլ էջերից։',
@@ -1583,6 +1657,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'mostlinkedtemplates' => 'Կաղապարներ, որոնց շատ են հղվում',
 'mostcategories' => 'Ամենաշատ կատեգորիաներով էջեր',
 'mostimages' => 'Ամենաշատ օգտագործվող նկարներ',
+'mostinterwikis' => 'Ամենաշատ միջլեզվային հղումներով էջեր',
 'mostrevisions' => 'Ամենաշատ վերափոխումներով հոդվածներ',
 'prefixindex' => 'Բոլոր էջերը ըստ սկզբնատառի',
 'shortpages' => 'Կարճ էջեր',
@@ -1664,10 +1739,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ActiveUsers
 'activeusers' => 'Ակտիվ մասնակիցների ցանկ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Մասնակիցների գրանցման տեղեկամատյան',
-'newuserlogpagetext' => 'Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(անդամների ցանկ)',
 
@@ -1675,13 +1746,20 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'mailnologin' => 'Ուղարկման հասցե չկա',
 'mailnologintext' => 'Անհրաժեշտ է [[Special:UserLogin|մտնել համակարգ]] և ունենալ գործող էլ-փոստի հասցե ձեր [[Special:Preferences|նախընտրություններում]]՝ ուրիշ մասնակիցներին էլեկտրոնային նամակներ ուղարկելու համար։',
 'emailuser' => 'էլ-նամակ ուղարկել այս մասնակցին',
+'emailuser-title-target' => 'Ուղարկել էլ․ նամակ {{GENDER:$1|մասնակցին}}',
+'emailuser-title-notarget' => 'Ուղարկել էլ․ նամակ',
 'emailpage' => 'Էլ-նամակ ուղարկել մասնակցին',
-'emailpagetext' => 'Եթե այս մասնակիցը նշել է գործող էլ-փոստի հասցե իր նախընտրություններում, ապա ստորև բերված ձևով հնարավոր է ուղարկել նրան էլ-նամակ։
-Այն էլ-հասցեն, որը դուք նշել եք ձեր նախընտրություններում, կերևա «Ումից» դաշտում, ուստի ստացողը հնարավորություն կունենա պատասխանել։',
+'emailpagetext' => 'Դուք կարող եք օգտագործել ներքևի ձևը այս {{GENDER:$1|մասնակցին}} էլ-նամաակ ուղարկելու համար։
+
+Ձեր նախընտրանքներում նշված էլ-հասցեն կերևա «Ումից» դաշտում և ստացողը կարող է անմիջապես պատասխանել ձեզ։',
 'usermailererror' => 'Նամակն ուղարկելիս սխալ է վերադարձվել.',
-'defemailsubject' => '{{SITENAME}} e-mail',
+'defemailsubject' => '{{SITENAME}} էլ-նամակ',
+'usermaildisabled' => 'Էլ․ նամակ ուղարկելը թույլատրված չէ։',
+'usermaildisabledtext' => 'Այս վիքիում չեք կարղ էլ․ նամակ ուղարկել այլ մասնակիցների',
 'noemailtitle' => 'Չկա էլ-փոստի հասցե',
 'noemailtext' => 'Այս մասնակիցը չի նշել էլ-փոստի հասցե կամ նախընտրել է չստանալ էլ-նամակներ այլ մասնակիցներից։',
+'emailusername' => 'Մասնակցի անուն՝',
+'email-legend' => 'Ուղարկել էլ․ նամակ {{SITENAME}}յի այլ մասնակցի',
 'emailfrom' => 'Ումից.',
 'emailto' => 'Ում.',
 'emailsubject' => 'Թեմա.',
@@ -1694,7 +1772,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 # Watchlist
 'watchlist' => 'Իմ հսկողության ցանկը',
-'mywatchlist' => 'Իմ հսկացանկը',
+'mywatchlist' => 'Հսկացանկ',
 'nowatchlist' => 'Ձեր հսկողության ցանկը դատարկ է։',
 'watchlistanontext' => 'Անհրաժեշտ է $1՝ հսկացանկը դիտելու կամ խմբագրելու համար։',
 'watchnologin' => 'Չեք մտել համակարգ',
@@ -1728,11 +1806,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{grammar:genitive|{{SITENAME}}}} Տեղեկացման ծառայություն',
 'enotif_reset' => 'Նշել բոլոր էջերը այցելված',
-'enotif_newpagetext' => 'Սա նոր էջ է։',
 'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} մասնակից',
-'changed' => 'փոփոխված է',
-'created' => 'ստեղծված է',
-'enotif_subject' => '{{grammar:genitive|{{SITENAME}}}} «$PAGETITLE» էջը $CHANGEDORCREATED $PAGEEDITOR մասնակցի կողմից',
 'enotif_lastvisited' => 'Տես $1՝ ձեր վերջին այցից ի վեր կատարված փոփոխությունների համար։',
 'enotif_lastdiff' => 'Տես $1՝ այս փոփոխությունը դիտելու համար։',
 'enotif_anon_editor' => 'անանուն մասնակից $1',
@@ -1758,6 +1832,8 @@ $NEWPAGE
 
 Հետադարձ կապ և օգնություն՝
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ստեղծված է',
+'changed' => 'փոփոխված է',
 
 # Delete
 'deletepage' => 'Ջնջել էջը',
@@ -1842,6 +1918,7 @@ $NEWPAGE
 'protect-cantedit' => 'Դուք չեք կարող փոխել այս էջի պաշտպանության մակարդակը, քանի որ ձեզ չի թույլատրվում խմբագրել այն։',
 'protect-othertime' => 'Այլ ժամկետ',
 'protect-othertime-op' => 'այլ ժամկետ',
+'protect-otherreason-op' => 'Այլ պատճառ',
 'protect-dropdown' => '* Ամենահաճախ նշվող պատճառներ
 ** Հաճախակի վանդալություններ
 ** Հաճախակի սփամ
@@ -1904,10 +1981,12 @@ $NEWPAGE
 'undelete-bad-store-key' => 'Չհաջողվեց վերականգնել նիշքի $1 ժամդրոշմով տարբերակը. նիշքը բացակայում էր ջնջումից առաջ։',
 'undelete-cleanup-error' => 'Տեղի ունեցավ սխալ չօգտագործվող արխիվացված «$1» նիշքը ջնջելիս։',
 'undelete-missing-filearchive' => 'Չհաջողվեց վերականգնել $1 արխիվային իդենտիֆիկատորով նիշքը, քանի որ այն բացակայում է տվյալների բազայից։ Հնարավոր է այն արդեն վերականգնվել է։',
+'undelete-error' => 'Սխալ էջը վերականգնելիս։',
 'undelete-error-short' => 'Նայլի վերականգնման սխալ. $1',
 'undelete-error-long' => 'Տեղի են ունեցել սխալներ նիշքը վերականգնելու ընթացքում.
 
 $1',
+'undelete-show-file-submit' => 'Այո',
 
 # Namespace form on various pages
 'namespace' => 'Անվանատարածք.',
@@ -1918,7 +1997,7 @@ $1',
 # Contributions
 'contributions' => 'Մասնակցի ներդրում',
 'contributions-title' => '$1 մասնակցի ներդրումը',
-'mycontris' => 'Իմ ներդրումը',
+'mycontris' => 'Ներդրում',
 'contribsub2' => '$1-ի ներդրումները ($2)',
 'nocontribs' => 'Այս չափանիշներին համապատասխանող փոփոխություններ չեն գտնվել։',
 'uctop' => ' (վերջինը)',
@@ -1929,11 +2008,15 @@ $1',
 'sp-contributions-newbies-sub' => 'Նոր մասնակցային հաշիվներից',
 'sp-contributions-newbies-title' => 'Նոր մասնակիցների ներդրումներ',
 'sp-contributions-blocklog' => 'Արգելափակման տեղեկամատյան',
-'sp-contributions-deleted' => 'Õ\84ասնակցի ջնջված ներդրում',
+'sp-contributions-deleted' => 'Õ´ասնակցի ջնջված ներդրում',
 'sp-contributions-uploads' => 'Բեռնումներ',
 'sp-contributions-logs' => 'տեղեկամատյաններ',
 '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' => 'Ցույց տալ միայն այն խմբագրումները, որոնք վերջին փոփոխություն են',
@@ -1955,10 +2038,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' => 'Օգտագործեք ստորև բերված ձևը որոշակի IP-հասցեից կամ մասնակցի անունից գրելու հնարավորությունը արգելափակելու համար։
 Նման բան հարկավոր է անել միայն վանդալության կանխարգելման նպատակով և համաձայն [[{{MediaWiki:Policy-url}}|կանոնակարգի]]։
@@ -1998,6 +2086,7 @@ $1',
 'ipusubmit' => 'Հանել արգելափակումը',
 'unblocked' => '[[User:$1|$1]] մասնակիցը անարգելված է։',
 'unblocked-id' => '$1 արգելափակումը հանված է',
+'blocklist' => 'Արգելափակված մասնակիցներ։',
 'ipblocklist' => 'Արգելափակված IP-հասցեները և մասնակիցները',
 'ipblocklist-legend' => 'Արգելափակված մասնակցի որոնում',
 'ipblocklist-submit' => 'Որոնել',
@@ -2035,7 +2124,7 @@ $1',
 'ipb_cant_unblock' => 'Սխալ. համար «$1» արգելափակումը չի գտնվել։ Հնարավոր է, որ արգելափակումն արդեն հանված է։',
 'ip_range_invalid' => 'IP-հասցեների անթույլատրելի լայնույթ։',
 'proxyblocker' => 'Փոխանորդի արգելափակում',
-'proxyblockreason' => 'Õ\81Õ¥Ö\80 IP-Õ°Õ¡Õ½Ö\81Õ¥Õ¶ Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¾Õ¥Õ¬ Õ§, Ö\84Õ¡Õ¶Õ« Õ¸Ö\80 Õ¡ÕµÕ¶ Õ¡Õ¦Õ¡Õ¿ Ö\85Õ£Õ¿Õ¡Õ£Õ¸Ö\80Õ®Õ´Õ¡Õ¶ Ö\83Õ¸Õ­Õ¡Õ¶Õ¸Ö\80Õ¤ Õ§Ö\89 Ô½Õ¶Õ¤Ö\80Õ¸Ö\82Õ´ Õ¥Õ¶Ö\84 Õ¯Õ¡ÕºÕ¶վել ձեր ցանցային կամ տեխնիկական ծառայության տրամադրողի հետ և տեղեկացնել այս լուրջ անվտանգության խնդրի մասին։',
+'proxyblockreason' => 'Õ\81Õ¥Ö\80 IP-Õ°Õ¡Õ½Ö\81Õ¥Õ¶ Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¾Õ¥Õ¬ Õ§, Ö\84Õ¡Õ¶Õ« Õ¸Ö\80 Õ¡ÕµÕ¶ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö\82Õ´ Õ§ Õ°Õ¡Õ¶Ö\80Õ¡ÕµÕ«Õ¶ Õ´Õ«Õ»Õ¶Õ¸Ö\80Õ¤ (ÕºÖ\80Õ¸Ö\84Õ½Õ«) Õ½Õ¥Õ¼Õ¾Õ¥Ö\80Õ«Õ¶Ö\89 Ô½Õ¶Õ¤Ö\80Õ¸Ö\82Õ´ Õ¥Õ¶Ö\84 Õ¯Õ¡Õºվել ձեր ցանցային կամ տեխնիկական ծառայության տրամադրողի հետ և տեղեկացնել այս լուրջ անվտանգության խնդրի մասին։',
 'proxyblocksuccess' => 'Արված է։',
 'sorbsreason' => 'Ձեր IP-հասցեն հաշվված է որպես ազատ օգտագործման փոխանորդ DNSBL ցանկում։',
 'sorbs_create_account_reason' => 'Ձեր IP-հասցեն հաշվված է որպես ազատ օգտագործման փոխանորդ DNSBL ցանկում։ Դուք չեք կարող ստեղծել մասնակցային հաշիվ։',
@@ -2074,6 +2163,13 @@ $1',
 '''ԶԳՈՒՇԱՑՈ՜ՒՄ'''
 Այս գործողությունը կարող է ունենալ արմատական ազդեցություն ''ժողովրդական'' էջի համար։
 Շարունակելուց առաջ խնդրում ենք համոզվել նրանում, որ դուք հասկանում եք հնարավոր հետևանքները։",
+'movepagetext-noredirectfixer' => "Օգտագործելով ներքևի ձևը, դուք կարող եք վերանավանել էջը։ Այդ դեպքում էջի ողջ կտեղափոխվի նոր վերնագրի ներքո։ Հին վերնագիրը կդառնա ավտոմատ վերահղում նոր վերնագրին։ Ստուգե՛ք, արդյոք վերանվանման պատճառով չե՞ն առաջացել [[Special:DoubleRedirects|կրկնակի]] կամ [[Special:BrokenRedirects|կոտրված վերահղումներ]]։ Դուք պատասխանատու եք, որ այլ էջերի հղումները այս անվանափոխությունից հետո շարունակեն ճիշտ գործել։
+
+Էջը հնարավոր '''չի''' լինի վերանվանել, եթե նոր վերնագրով արդեն էջ գոյութուն ունի, բացի այն դեպքից, երբ այն դատարկ է կամ վերահղում է առանց պատմության։ Այսինքն սխալ անուն ընտրելու դեպքում դուք կարող եք վերադարձնել էջի նախկին անվանումը, սակայն դուք չեք կարող օգտագործել գոյություն ունեցող էջի վերնագիր։
+
+'''Ուշադրությո՛ւն'''
+Անվանափոխությունը կարող է լուրջ խնդիրներ առաջացնել հաճախակի խմբագրվող էջի դեպքում։
+Խնդրում ենք շարունակել միայն, եթե գիտակցում եք կատարվող փոփոխության հետևանքները։",
 'movepagetalktext' => "Կցված քննարկման էջը ավտոմատ կտեղափոխվի էջի հետ՝ '''բացառությամբ այն դեպքերի, երբ'''.
 *Գոյություն ունի ոչ-դատարկ քննարկման էջ նոր անվանման տակ
 *Դուք հանել եք նշումը ստորև արկղից
@@ -2089,6 +2185,7 @@ $1',
 'pagemovedsub' => 'Էջը վերանվանվեց',
 'movepage-moved' => "'''«$1» էջը վերանվանվել է «$2»'''",
 'movepage-moved-redirect' => 'Ստեղծվել է վերահղում։',
+'movepage-moved-noredirect' => 'Վերահղման ստեղծում թույլ չի տրվել',
 'articleexists' => 'Այդ անվանմամբ էջ արդեն գոյություն ունի կամ ձեր ընտրած անվանումը անթույլատրելի է։
 Խնդրում ենք ընտրել այլ անվանում։',
 'talkexists' => "'''Էջը հաջողությամբ տեղափոխվեց, սակայն կցված քննարկման էջը հնարավոր չէր տեղափոխել, քանի որ նոր անվանմամբ էջ արդեն գոյություն ուներ։ Խնդրում ենք միաձուլել դրանք ձեռքով։'''",
@@ -2125,16 +2222,20 @@ $1',
 'export-submit' => 'Արտածել',
 'export-addcattext' => 'Ավելացնել էջեր կատեգորիայից.',
 'export-addcat' => 'Ավելացնել',
+'export-addns' => 'Ավելացնել',
 'export-download' => 'Առաջարկել հիշել որպես նիշք',
 
 # Namespace 8 related
 'allmessages' => 'Համակարգային ուղերձներ',
-'allmessagesname' => 'Ուղերձ',
-'allmessagesdefault' => 'Լռությամբ տեքստ',
+'allmessagesname' => 'Անուն',
+'allmessagesdefault' => 'Ուղերձի լռելյայն տեքստ',
 'allmessagescurrent' => 'Ընթացիկ տեքստ',
 'allmessagestext' => 'Ստորև բերված է «MediaWiki» անվանատարածքի բոլոր համակարգային ուղերձների ցանկը։
 Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => "Այս էջը չի գործում, քանի որ '''\$wgUseDatabaseMessages''' հատկանիշը անջատված է։",
+'allmessages-filter-all' => 'Բոլորը',
+'allmessages-language' => 'Լեզու',
+'allmessages-filter-submit' => 'Անցնել',
 
 # Thumbnails
 'thumbnail-more' => 'Ընդարձակել',
@@ -2154,6 +2255,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'import-interwiki-history' => 'Պատճենել այս էջի փոփոխումների լրիվ պատմությունը',
 'import-interwiki-submit' => 'Ներմուծել',
 'import-interwiki-namespace' => 'Տեղադրել էջերը անվանատարածքում.',
+'import-upload-filename' => 'Նիշքի անուն․',
 'import-comment' => 'Մեկնաբանություն.',
 'importtext' => 'Խնդրում ենք արտածեք էջը ելակետային վիքիից օգտագործելով [[Special:Export|արտածման գործիք]], հիշեք այն նիշքի տեսքով ձեր համակարգչի վրա և այնուհետև, բեռնեք այն այստեղ։',
 'importstart' => 'Էջերի ներմուծում...',
@@ -2271,13 +2373,42 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'spam_blanking' => 'Բոլոր տարբերակները պարունակում են հղումներ դեպի $1, մաքրում',
 
 # Info page
-'pageinfo-title' => 'Տեղեկություններ $1-ի վերաբերյալ',
+'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' => 'Էջի N',
+'pageinfo-language' => 'Բովանդակության լեզու',
+'pageinfo-robot-policy' => 'Կարգավիճակը որոնողական համակարգերում',
+'pageinfo-robot-index' => 'ինդեքսավորվող',
+'pageinfo-robot-noindex' => 'ինդեքսավորվող չէ',
 '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-lasttime' => 'Վերջին խմբագրման ամսաթիվ',
 'pageinfo-edits' => 'Խմբագրումների քանակ',
-'pageinfo-authors' => 'Տարբեր հեղինակների քանակ',
-'pageinfo-toolboxlink' => 'Էջի մասին տեղեկություն',
+'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-yes' => 'Այո',
 
 # Skin names
 'skinname-standard' => 'Դասական',
@@ -2298,6 +2429,8 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'markedaspatrollederror' => 'Չհաջողվեց նշել որպես ստուգված',
 'markedaspatrollederrortext' => 'Անհրաժեշտ է ընտրել տարբերակ՝ որպես ստուգված նշելու համար։',
 'markedaspatrollederror-noautopatrol' => 'Ձեզ չի թույլատրվում ձեր կատարած փոփոխությունները նշել որպես ստուգված։',
+'markedaspatrollednotify' => 'Այս փոփոխությունը $1 էջում նշվել է ստուգված',
+'markedaspatrollederrornotify' => 'Ստուգված նշել չհաջողվեց։',
 
 # Patrol log
 'patrol-log-page' => 'Պարեկման տեղեկամատյան',
@@ -2331,6 +2464,7 @@ $1',
 # Special:NewFiles
 'newimages' => 'Նոր նիշքերի սրահ',
 'imagelisttext' => "Ստորև բերված է '''$1''' {{PLURAL:$1|նիշքի}} ցանկ՝ դասավորված ըստ $2։",
+'newimages-legend' => 'Ֆիլտր',
 'showhidebots' => '($1 բոտերին)',
 'noimages' => 'Տեսնելու բան չկա։',
 'ilsubmit' => 'Որոնել',
@@ -2380,6 +2514,9 @@ $1',
 'exif-imagewidth' => 'Լայնք',
 'exif-imagelength' => 'Բարձրություն',
 'exif-artist' => 'Հեղինակ',
+'exif-flash' => 'Ֆլեշ տարբ.',
+'exif-languagecode' => 'Լեզու',
+'exif-label' => 'Պիտակ',
 
 'exif-componentsconfiguration-0' => 'գոյություն չունի',
 
@@ -2434,11 +2571,13 @@ $3
 'unit-pixel' => ' փիքսել',
 
 # action=purge
-'confirm_purge_button' => 'OK',
+'confirm_purge_button' => 'ԼԱՎ',
 'confirm-purge-top' => 'Մաքրե՞լ այս էջի քեշը։',
 
 # action=watch/unwatch
+'confirm-watch-button' => 'ԼԱՎ',
 'confirm-watch-top' => 'Ավելացնե՞լ ձեր հսկացանկին',
+'confirm-unwatch-button' => 'ԼԱՎ',
 'confirm-unwatch-top' => 'Հեռացնե՞լ ձեր հսկացանկից։',
 
 # Multipage image navigation
@@ -2462,7 +2601,7 @@ $3
 'autosumm-blank' => 'Ջնջվում է էջի ամբողջ պարունակությունը',
 'autosumm-replace' => "Փոխվում է էջը '$1'-ով",
 'autoredircomment' => 'Վերահղվում է դեպի [[$1]]',
-'autosumm-new' => 'Նոր էջ. $1',
+'autosumm-new' => 'Նոր էջ «$1»:',
 
 # Size units
 'size-bytes' => '$1 բայթ',
@@ -2511,11 +2650,19 @@ $3
 'version' => 'ՄեդիաՎիքի տարբերակը',
 
 # Special:FilePath
-'filepath-page' => 'Õ\96Õ¡ÕµÕ¬:',
+'filepath-page' => 'Õ\86Õ«Õ·Ö\84Õ\9d',
 'filepath-submit' => 'Անցնել',
 
 # Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Փնտրել կրկնօրինակ պատկերներ',
+'fileduplicatesearch-summary' => 'Փնտրել կրկնօրինակ պատկերներ՝ հեշ արժեքների հիման վրա',
+'fileduplicatesearch-legend' => 'Փնտրել կրկնօրինակներ',
+'fileduplicatesearch-filename' => 'Նիշքի անուն․',
 'fileduplicatesearch-submit' => 'Որոնել',
+'fileduplicatesearch-info' => '$1 × $2 փիքսել<br />Նիշքի չափը՝ $3<br />MIME-տիպը՝ $4',
+'fileduplicatesearch-result-1' => '$1 նիշքը կրկնօրինակներ չունի',
+'fileduplicatesearch-result-n' => '$1 նիշքն ունի {{PLURAL:$2|1 նույնական կրկնօրինակ|$2 նույնական կրկնօրինակ}}.',
+'fileduplicatesearch-noresults' => '$1 անունով նիշք չի գտնվել',
 
 # Special:SpecialPages
 'specialpages' => 'Սպասարկող էջեր',
@@ -2544,8 +2691,14 @@ $3
 'tags-edit' => 'խմբագրել',
 
 # Special:ComparePages
+'comparepages' => 'Համեմատել էջեր',
+'compare-selector' => 'Համեմատել էջի տարբերակներ',
 'compare-page1' => 'Էջ 1',
 'compare-page2' => 'Էջ 2',
+'compare-submit' => 'Համեմատել',
+'compare-invalid-title' => 'Ձեր նշած վերնագիրը անվավեր է։',
+'compare-title-not-exists' => 'Ձեր նշած վերնագիրը գոյություն չունի:',
+'compare-revision-not-exists' => 'Ձեր նշած փոփոխությունը գոյություն չունի։',
 
 # Database error messages
 'dberr-header' => 'Այս վիքիում խնդիրներ են առաջացել',
@@ -2574,8 +2727,27 @@ $3
 'logentry-newusers-newusers' => '$1 մասնակիցը ստեղծեց նոր հաշիվ',
 'logentry-newusers-create' => '$1 մասնակիցը ստեղծեց նոր հաշիվ',
 'logentry-newusers-create2' => '$1 Ստեղծեց նոր հաշիվ $3',
+'newuserlog-byemail' => 'Գաղտնաբառն ուղարկված է էլ․ փոստով',
+'rightsnone' => '(ոչ մի)',
+
+# Feedback
+'feedback-subject' => 'Թեմա.',
+'feedback-message' => 'Հաղորդագրություն․',
+'feedback-cancel' => 'Բեկանել',
+'feedback-close' => 'Արված է',
 
 # Search suggestions
 'searchsuggest-search' => 'Որոնել',
 
+# 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 b9f907a..cb21211 100644 (file)
@@ -12,6 +12,7 @@
  * @author Malafaya
  * @author McDutchie
  * @author Reedy
+ * @author Yfdyh000
  * @author לערי ריינהארט
  */
 
@@ -275,8 +276,8 @@ $messages = array(
 'newwindow' => '(se aperi in un nove fenestra)',
 'cancel' => 'Cancellar',
 'moredotdotdot' => 'Plus...',
-'mypage' => 'Mi pagina',
-'mytalk' => 'Mi discussion',
+'mypage' => 'Pagina',
+'mytalk' => 'Discussion',
 'anontalk' => 'Discussion pro iste adresse IP',
 'navigation' => 'Navigation',
 'and' => '&#32;e',
@@ -308,6 +309,7 @@ $messages = array(
 'namespaces' => 'Spatios de nomines',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menu de navigation',
 'errorpagetitle' => 'Error',
 'returnto' => 'Retornar a $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -552,8 +554,8 @@ Le administrator qui lo blocava offereva iste explication: "$3".',
 
 Tu pote continuar a usar {{SITENAME}} anonymemente, o tu pote <span class='plainlinks'>[$1 aperir un nove session]</span> con le mesme nomine de usator o con un altere.
 Nota que alcun paginas pote continuar a apparer como si tu esserea ancora authenticate. Pro remediar isto, tu pote vacuar le cache de tu navigator.",
-'welcomecreation' => '== Benvenite, $1! ==
-Tu conto ha essite create.
+'welcomeuser' => 'Benvenite, $1!',
+'welcomecreation-msg' => 'Tu conto ha essite create.
 Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].',
 'yourname' => 'Nomine de usator:',
 'yourpassword' => 'Contrasigno:',
@@ -914,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.',
@@ -1243,7 +1244,7 @@ Nota que lor indices del contento de {{SITENAME}} pote esser obsolete.',
 
 # Preferences page
 'preferences' => 'Preferentias',
-'mypreferences' => 'Mi preferentias',
+'mypreferences' => 'Preferentias',
 'prefs-edits' => 'Numero de modificationes:',
 'prefsnologin' => 'Tu non ha aperite un session',
 'prefsnologintext' => 'Tu debe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aperir session]</span> pro configurar preferentias de usator.',
@@ -1470,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',
@@ -1725,6 +1724,7 @@ Si le problema persiste, contacta un [[Special:ListUsers/sysop|administrator]].'
 'backend-fail-notsame' => 'Un file non identic jam existe a $1.',
 'backend-fail-invalidpath' => '$1 non es un cammino valide de immagazinage.',
 'backend-fail-delete' => 'Impossibile deler file $1.',
+'backend-fail-describe' => 'Impossibile cambiar le metadatos pro le file "$1".',
 'backend-fail-alreadyexists' => 'Le file $1 jam existe.',
 'backend-fail-store' => 'Non poteva immagazinar le file $1 a $2',
 'backend-fail-copy' => 'Impossibile copiar file $1 a $2',
@@ -1957,7 +1957,8 @@ Memora verificar que non existe altere ligamines al patronos ante que tu los del
 'statistics-mostpopular' => 'Le paginas plus visitate',
 
 'disambiguations' => 'Paginas con ligamines a paginas de disambiguation',
-'disambiguationspage' => 'Template:Disambiguation',
+'disambiguationspage' => 'Template:Disambig
+Template:Disambiguation',
 'disambiguations-text' => "Le sequente paginas contine al minus un ligamine a un '''pagina de disambiguation'''.
 Istes debe forsan ligar directemente al articulo sur le thema in question.<br />
 Un pagina se tracta como pagina de disambiguation si illo usa un patrono que es ligate ab [[MediaWiki:Disambiguationspage]].",
@@ -2115,8 +2116,8 @@ Vide etiam le [[Special:WantedCategories|categorias desirate]].',
 'linksearch-ns' => 'Spatio de nomines:',
 'linksearch-ok' => 'Cercar',
 'linksearch-text' => 'Es possibile usar metacharacteres como in "*.wikipedia.org".
-Necessita al minus un dominio de nivello superior, per exemplo "*.org".<br />
-Protocollos supportate: <code>$1</code> (non include alcun de istes in tu recerca).',
+Isto necessita specificar al minus le dominio de nivello superior, per exemplo "*.org".<br />
+Protocollos supportate: <code>$1</code> (http:// es assumite si nulle protocollo es specificate).',
 'linksearch-line' => '$1 ligate ab $2',
 'linksearch-error' => 'Le metacharacteres pote apparer solmente al initio del nomine de host.',
 
@@ -2135,10 +2136,6 @@ Protocollos supportate: <code>$1</code> (non include alcun de istes in tu recerc
 '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.
@@ -2200,7 +2197,7 @@ como le adresse del expeditor, de sorta que le destinatario potera responder te
 
 # Watchlist
 'watchlist' => 'Mi observatorio',
-'mywatchlist' => 'Mi observatorio',
+'mywatchlist' => 'Observatorio',
 'watchlistfor2' => 'De $1 $2',
 'nowatchlist' => 'Tu non ha paginas sub observation.',
 'watchlistanontext' => 'Tu debe $1 pro poter vider o modificar entratas in tu observatorio.',
@@ -2238,11 +2235,7 @@ render lo plus facile de deteger.",
 
 'enotif_mailer' => 'Systema de notification via e-mail de {{SITENAME}}',
 'enotif_reset' => 'Marcar tote le paginas como visitate',
-'enotif_newpagetext' => 'Isto es un nove pagina.',
 'enotif_impersonal_salutation' => 'Usator de {{SITENAME}}',
-'changed' => 'modificate',
-'created' => 'create',
-'enotif_subject' => 'Le pagina $PAGETITLE de {{SITENAME}} ha essite $CHANGEDORCREATED per $PAGEEDITOR',
 'enotif_lastvisited' => 'Vide $1 pro tote le modificationes depost tu ultime visita.',
 'enotif_lastdiff' => 'Vide $1 pro revider iste modification.',
 'enotif_anon_editor' => 'usator anonyme $1',
@@ -2276,6 +2269,8 @@ $UNWATCHURL
 
 Feedback e ulterior assistentia:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'create',
+'changed' => 'modificate',
 
 # Delete
 'deletepage' => 'Deler pagina',
@@ -2471,7 +2466,7 @@ $1',
 # Contributions
 'contributions' => 'Contributiones del usator',
 'contributions-title' => 'Contributiones del usator $1',
-'mycontris' => 'Mi contributiones',
+'mycontris' => 'Contributiones',
 'contribsub2' => 'Pro $1 ($2)',
 'nocontribs' => 'Necun modification ha essite trovate secundo iste criterios.',
 'uctop' => '(ultime)',
@@ -2511,7 +2506,7 @@ Le ultime entrata del registro de blocadas es reproducite hic infra pro informat
 'whatlinkshere-hideredirs' => '$1 redirectiones',
 'whatlinkshere-hidetrans' => '$1 transclusiones',
 'whatlinkshere-hidelinks' => '$1 ligamines',
-'whatlinkshere-hideimages' => '$1 ligamines verso imagines',
+'whatlinkshere-hideimages' => '$1 le ligamines a files',
 'whatlinkshere-filters' => 'Filtros',
 
 # Block/unblock
@@ -3067,6 +3062,8 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'markedaspatrollederror' => 'Impossibile marcar como patruliate',
 'markedaspatrollederrortext' => 'Tu debe specificar un version a marcar como patruliate.',
 'markedaspatrollederror-noautopatrol' => 'Tu non es permittite a marcar tu proprie modificationes como patruliate.',
+'markedaspatrollednotify' => 'Iste modification de $1 ha essite marcate como patruliate.',
+'markedaspatrollederrornotify' => 'Le marcar como patruliate ha fallite.',
 
 # Patrol log
 'patrol-log-page' => 'Registro de patrulia',
@@ -3130,6 +3127,7 @@ Le execution de illo pote compromitter le securitate de tu systema.",
 'hours' => '{{PLURAL:$1|$1 hora|$1 horas}}',
 'days' => '{{PLURAL:$1|$1 die|$1 dies}}',
 'ago' => '$1 retro',
+'just-now' => 'Justo nunc',
 
 # Bad image list
 'bad_image_list' => 'Le formato es como seque:
@@ -3884,11 +3882,15 @@ Le imagines se monstra in plen resolution, le altere typos de file se executa di
 'logentry-move-move_redir-noredirect' => '$1 renominava le pagina $3 a $4, superscribente un redirection sin lassar un nove redirection',
 'logentry-patrol-patrol' => '$1 marcava le version $4 del pagina $3 como patruliate',
 'logentry-patrol-patrol-auto' => '$1 automaticamente marcava le version $4 del pagina $3 como patruliate',
-'logentry-newusers-newusers' => '$1 creava un conto de usator',
-'logentry-newusers-create' => '$1 creava un conto de usator',
-'logentry-newusers-create2' => '$1 creava un conto de usator $3',
+'logentry-newusers-newusers' => 'Le conto de usator $1 ha essite create',
+'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 3c46067..c3df096 100644 (file)
  * @author J Subhi
  * @author Kaganer
  * @author Kenrick95
+ * @author Mahali syarifuddin
  * @author McDutchie
  * @author Meursault2004
+ * @author Naval Scene
  * @author Remember the dot
  * @author Rex
  * @author Urhixidur
@@ -383,7 +385,7 @@ $messages = array(
 
 'underline-always' => 'Selalu',
 'underline-never' => 'Tidak pernah',
-'underline-default' => 'Bawaan penjelajah web',
+'underline-default' => 'Kulit atau penjelajah bawaan',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Gaya tulisan komputer pada kotak penyuntingan:',
@@ -438,7 +440,7 @@ $messages = array(
 'may' => 'Mei',
 'jun' => 'Jun',
 'jul' => 'Jul',
-'aug' => 'Agu',
+'aug' => 'Ags',
 'sep' => 'Sep',
 'oct' => 'Okt',
 'nov' => 'Nov',
@@ -468,8 +470,8 @@ $messages = array(
 'newwindow' => '(buka di jendela baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lainnya...',
-'mypage' => 'Halaman saya',
-'mytalk' => 'Pembicaraan saya',
+'mypage' => 'Halaman',
+'mytalk' => 'Pembicaraan',
 'anontalk' => 'Pembicaraan IP ini',
 'navigation' => 'Navigasi',
 'and' => '&#32;dan',
@@ -491,7 +493,7 @@ $messages = array(
 'vector-action-protect' => 'Lindungi',
 'vector-action-undelete' => 'Pembatalan penghapusan',
 'vector-action-unprotect' => 'Ubah perlindungan',
-'vector-simplesearch-preference' => 'Aktifkan pencarian saran yang disempurnakan (hanya kulit Vector)',
+'vector-simplesearch-preference' => 'Aktifkan bilah pencarian sederhana (hanya kulit Vector)',
 'vector-view-create' => 'Buat',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Versi terdahulu',
@@ -501,6 +503,7 @@ $messages = array(
 'namespaces' => 'Ruang nama',
 'variants' => 'Varian',
 
+'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Kesalahan',
 'returnto' => 'Kembali ke $1.',
 'tagline' => 'Dari {{SITENAME}}',
@@ -509,7 +512,7 @@ $messages = array(
 'searchbutton' => 'Cari',
 'go' => 'Tuju ke',
 'searcharticle' => 'Tuju ke',
-'history' => 'Versi terdahulu halaman',
+'history' => 'Halaman riwayat',
 'history_short' => 'Versi terdahulu',
 'updatedmarker' => 'diubah sejak kunjungan terakhir saya',
 'printableversion' => 'Versi cetak',
@@ -533,11 +536,11 @@ $messages = array(
 'talkpage' => 'Bicarakan halaman ini',
 'talkpagelinktext' => 'Bicara',
 'specialpage' => 'Halaman istimewa',
-'personaltools' => 'Akun',
+'personaltools' => 'Peralatan pribadi',
 'postcomment' => 'Bagian baru',
 'articlepage' => 'Lihat halaman isi',
 'talk' => 'Pembicaraan',
-'views' => 'Halaman',
+'views' => 'Tampilan',
 'toolbox' => 'Peralatan',
 'userpage' => 'Lihat halaman pengguna',
 'projectpage' => 'Lihat halaman proyek',
@@ -654,9 +657,9 @@ Daftar halaman istimewa yang sah dapat dilihat di [[Special:SpecialPages|{{int:s
 'dberrortext' => 'Ada kesalahan sintaks pada permintaan basis data.
 Kesalahan ini mungkin menandakan adanya sebuah \'\'bug\'\' dalam perangkat lunak.
 Permintaan basis data yang terakhir adalah:
-<blockquote><tt>$1</tt></blockquote>
-dari dalam fungsi "<tt>$2</tt>".
-Basis data menghasilkan kesalahan "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+dari dalam fungsi "<code>$2</code>".
+Basis data menghasilkan kesalahan "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Ada kesalahan sintaks pada permintaan basis data.
 Permintaan basis data yang terakhir adalah:
 "$1"
@@ -691,6 +694,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.',
@@ -701,12 +706,12 @@ 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 berisi teks antarmuka untuk digunakan oleh perangkat lunak dan telah dikunci untuk menghindari kesalahan.',
-'editinginterface' => "'''Peringatan:''' Anda menyunting suatu halaman yang digunakan untuk menyediakan teks antarmuka untuk perangkat lunak situs ini. Perubahan teks ini akan mempengaruhi tampilan pada antarmuka pengguna untuk pengguna lain.
-Untuk terjemahan, harap gunakan [//translatewiki.net/wiki/Main_Page?setlang=id translatewiki.net], proyek pelokalan MediaWiki.",
+'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.',
+'editinginterface' => "'''Peringatan:''' Anda menyunting suatu halaman yang digunakan untuk menyediakan teks antarmuka untuk perangkat lunak situs ini. Perubahan teks ini akan memengaruhi tampilan pada antarmuka pengguna untuk pengguna lain di wiki ini.
+Untuk menambah atau mengubahterjemahan untuk semua wiki, harap gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
 'sqlhidden' => '(Permintaan SQL disembunyikan)',
 'cascadeprotected' => 'Halaman ini telah dilindungi dari penyuntingan karena disertakan di {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan opsi "runtun":
 $2',
@@ -734,9 +739,8 @@ Administrator yang terkunci menawarkan penjelasan ini: " $3 ".',
 
 Anda dapat terus menggunakan {{SITENAME}} secara anonim, atau Anda dapat <span class='plainlinks'>[$1 masuk log lagi]</span> sebagai pengguna yang sama atau pengguna yang lain.
 Perhatikan bahwa beberapa halaman mungkin masih terus menunjukkan bahwa Anda masih masuk log sampai Anda membersihkan singgahan penjelajah web Anda",
-'welcomecreation' => '== Selamat datang, $1! ==
-
-Akun Anda telah dibuat. Jangan lupa mengatur konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] Anda.',
+'welcomeuser' => 'Selamat datang,  $1 !',
+'welcomecreation-msg' => 'Akun Anda telah dibuat. Jangan lupa mengatur konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] Anda.',
 'yourname' => 'Nama pengguna:',
 'yourpassword' => 'Kata sandi:',
 'yourpasswordagain' => 'Ulangi kata sandi:',
@@ -890,6 +894,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',
 
@@ -923,7 +928,8 @@ Sandi sementara: $2',
 'showpreview' => 'Lihat pratayang',
 'showlivepreview' => 'Pratayang langsung',
 'showdiff' => 'Lihat perubahan',
-'anoneditwarning' => 'Anda tidak terdaftar masuk. Alamat IP Anda akan tercatat dalam sejarah (versi terdahulu) halaman ini.',
+'anoneditwarning' => "'''Peringatan:''' Anda tidak terdaftar masuk.
+Alamat IP Anda akan tercatat dalam sejarah (versi terdahulu) halaman ini.",
 'anonpreviewwarning' => "''Anda belum masuk log. Menyimpan halaman akan menyebabkan alamat IP Anda tercatat pada riwayat suntingan laman ini.''",
 'missingsummary' => "'''Peringatan:''' Anda tidak memasukkan ringkasan penyuntingan. Jika Anda kembali menekan tombol Simpan, suntingan Anda akan disimpan tanpa ringkasan penyuntingan.",
 'missingcommenttext' => 'Harap masukkan komentar di bawah ini.',
@@ -983,7 +989,7 @@ Jika Anda adalah seorang pengguna anonim dan merasa mendapatkan komentar-komenta
 'noarticletext' => 'Saat ini tidak ada teks di halaman ini.
 Anda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} menyunting halaman ini]</span>.',
 'noarticletext-nopermission' => '!Saat ini tidak ada teks di halaman ini.
-Anda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, atau <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait]</span>, tapi anda tidak memiliki izin untuk membuat halaman ini',
+Anda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, atau <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait]</span>, tapi Anda tidak memiliki izin untuk membuat halaman ini',
 'missing-revision' => 'Revisi #$1 halaman berjudul "{{PAGENAME}}" tidak eksks.
 
 Hal ini biasanya disebabkan oleh tautan versi terdahulu menuju halaman yang sudah dihapus.
@@ -992,11 +998,10 @@ Rinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGE
 'userpage-userdoesnotexist-view' => 'Pengguna "$1" tidak terdaftar.',
 'blocked-notice-logextract' => 'Pengguna ini sedang diblokir.
 Entri log pemblokiran terakhir tersedia di bawah ini sebagai rujukan.',
-'clearyourcache' => "'''Catatan:''' Setelah menyimpan, Anda mungkin harus memotong tembolok peramban Anda untuk melihat perubahan.
+'clearyourcache' => "'''Catatan:''' Setelah menyimpan, Anda mungkin harus memintas singgahan peramban Anda untuk melihat perubahan.
 * '''Firefox / Safari:''' Tahan ''Shift'' sambil mengeklik ''Reload'', atau tekan ''Ctrl-F5'' atau ''Ctrl-R'' (''⌘-R'' di Mac)
 * '''Google Chrome:''' Tekan ''Ctrl-Shift-R'' (''⌘-Shift-R'' di Mac)
 * '''Internet Explorer:''' Tahan ''Ctrl'' sambl mengeklik ''Refresh'', atau tekan ''Ctrl-F5''
-* '''Konqueror:''' Klik ''Reload'' atau tekan ''F5''
 * '''Opera:''' Bersihkan tembolok di ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Tips:''' Gunakan tombol \"{{int:showpreview}}\" untuk menguji CSS baru Anda sebelum menyimpannya.",
 'userjsyoucanpreview' => "'''Tips:''' Gunakan tombol \"{{int:showpreview}}\" untuk menguji JS baru Anda sebelum menyimpannya.",
@@ -1066,7 +1071,6 @@ 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',
 '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 +1095,15 @@ 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]]',
+
+# 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' => 'Peringatan: Halaman ini mengandung terlalu banyak panggilan fungsi parser.
@@ -1105,18 +1118,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 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]] ([[Pembicaraan pengguna:$2|bicara]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Akun tak dapat dibuat',
@@ -1241,9 +1255,10 @@ Anda tidak memiliki akses ke revisi ini.',
 'revdelete-concurrent-change' => 'Gagal mengubah revisi per $2, $1: statusnya kemungkinan telah diubah oleh pengguna lain bersamaan dengan Anda.
 Silakan periksa catatan log.',
 'revdelete-only-restricted' => 'Kesalahan sewaktu menyembunyikan butir bertanggal $2, $1: Anda tidak dapat menyembunyikan butir dari pengurus tanpa memilih juga salah satu opsi penyembunyian lainnya.',
-'revdelete-reason-dropdown' => '*Alasan penghapusan
+'revdelete-reason-dropdown' => '*Alasan penghapusan yang umum
 ** Pelanggaran hak cipta
-** Informasi pribadi yang tidak pantas
+** Komentar atau informasi pribadi yang tidak pantas
+** Nama pengguna yang tidak pantas
 ** Berpotensi mencemarkan nama baik',
 'revdelete-otherreason' => 'Alasan lain/tambahan:',
 'revdelete-reasonotherlist' => 'Alasan lain',
@@ -1295,6 +1310,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',
@@ -1371,7 +1390,7 @@ Perlu diingat bahwa indeks Google untuk konten {{SITENAME}} mungkin belum mencak
 
 # Preferences page
 'preferences' => 'Preferensi',
-'mypreferences' => 'Preferensi saya',
+'mypreferences' => 'Preferensi',
 'prefs-edits' => 'Jumlah suntingan:',
 'prefsnologin' => 'Belum masuk log',
 'prefsnologintext' => 'Anda harus <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} masuk log]</span> untuk mengeset preferensi Anda.',
@@ -1433,7 +1452,7 @@ Berikut ini adalah nilai acak yang dapat Anda gunakan: $1',
 'timezoneregion-indian' => 'Samudera Hindia',
 'timezoneregion-pacific' => 'Samudera Pasifik',
 'allowemail' => 'Izinkan pengguna lain mengirim surel',
-'prefs-searchoptions' => 'Pencarian',
+'prefs-searchoptions' => 'Cari',
 'prefs-namespaces' => 'Ruang nama',
 'defaultns' => 'Atau cari dalam ruang-ruang nama berikut:',
 'default' => 'baku',
@@ -1446,9 +1465,9 @@ 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-registration' => 'Waktu pendaftaran:',
 'yourrealname' => 'Nama asli:',
 'yourlanguage' => 'Bahasa:',
@@ -1560,6 +1579,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',
@@ -1596,12 +1616,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',
@@ -1823,6 +1844,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.',
@@ -1839,7 +1861,7 @@ Silakan hubungi salah seorang [[Special:ListUsers/sysop|pengurus]].',
 'backend-fail-internal' => 'Kesalahan yang tidak dikenal terjadi di backend penyimpanan "$1".',
 'backend-fail-contenttype' => 'Tidak dapat menentukan tipe konten dari berkas yang disimpan di "$1".',
 'backend-fail-batchsize' => 'Penyimpanan backend diberikan batch $1 berkas {{PLURAL:$1||}}operasi; batasnya adalah $2 {{PLURAL:$2||}}operasi.',
-'backend-fail-usable' => 'Tidak dapat membuat berkas $1 karena izin tidak memadai atau direktori/kontainer yang hilang.',
+'backend-fail-usable' => 'Tidak dapat membaca atau menulis berkas "$1" karena izin tidak memadai atau direktori/kontainer hilang.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Tidak dapat menyambung ke database jurnal untuk penyimpanan backend "$1".',
@@ -1854,6 +1876,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
@@ -1971,6 +1994,7 @@ Mungkin Anda ingin menyunting keterangan pada [$2 halaman deskripsi berkas] di s
 '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 */',
+'upload-disallowed-here' => 'Anda tidak bisa menimpa berkas ini.',
 
 # File reversion
 'filerevert' => 'Kembalikan $1',
@@ -2078,6 +2102,7 @@ Nama yang telah <del>dicoret</del> berarti telah dibetulkan.',
 # 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|isi|isi}}',
 'nrevisions' => '$1 {{PLURAL:$1|revisi|revisi}}',
@@ -2106,6 +2131,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)',
@@ -2173,7 +2199,7 @@ Anda dapat melakukan pembatasan tampilan dengan memilih jenis log, nama pengguna
 'allnotinnamespace' => 'Daftar halaman (bukan ruang nama $1)',
 'allpagesprev' => 'Sebelumnya',
 'allpagesnext' => 'Selanjutnya',
-'allpagessubmit' => 'Cari',
+'allpagessubmit' => 'Pergi',
 'allpagesprefix' => 'Tampilkan halaman dengan awalan:',
 'allpagesbadtitle' => 'Judul halaman yang diberikan tidak sah atau memiliki awalan antar-bahasa atau antar-wiki. Judul tersebut mungkin juga mengandung satu atau lebih aksara yang tidak dapat digunakan dalam judul.',
 'allpages-bad-ns' => '{{SITENAME}} tidak memiliki ruang nama "$1".',
@@ -2203,9 +2229,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.
-Membutuhkan sedikitnya satu ranah tingkat atas, misalnya "*.org".<br />
-Protokol yang didukung: <code>$1</code> (jangan tambahkan dalam pencarian Anda)',
+'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 memiliki pranala dari $2',
 'linksearch-error' => "''Wildcards'' hanya dapat digunakan di bagian awal dari nama host.",
 
@@ -2224,10 +2250,6 @@ Protokol yang didukung: <code>$1</code> (jangan tambahkan dalam pencarian Anda)'
 '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]].',
@@ -2250,8 +2272,10 @@ Protokol yang didukung: <code>$1</code> (jangan tambahkan dalam pencarian Anda)'
 'mailnologin' => 'Tidak ada alamat surel',
 'mailnologintext' => 'Anda harus [[Special:UserLogin|masuk log]] dan mempunyai alamat surel yang sah di dalam [[Special:Preferences|preferensi]] untuk mengirimkan surel kepada pengguna lain.',
 'emailuser' => 'Surel pengguna',
+'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"',
@@ -2283,15 +2307,15 @@ Alamat surel yang Anda masukkan di [[Special:Preferences|preferensi akun Anda]]
 
 # Watchlist
 'watchlist' => 'Daftar pantauan',
-'mywatchlist' => 'Pantauan saya',
+'mywatchlist' => 'Daftar pantauan',
 'watchlistfor2' => 'Untuk $1 $2',
 'nowatchlist' => 'Daftar pantauan Anda kosong.',
 'watchlistanontext' => 'Silakan $1 untuk melihat atau menyunting daftar pantauan 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',
@@ -2319,11 +2343,17 @@ Perubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan ter
 
 'enotif_mailer' => 'Pengirim Notifikasi {{SITENAME}}',
 'enotif_reset' => 'Tandai semua halaman sebagai telah dikunjungi',
-'enotif_newpagetext' => 'Ini adalah halaman baru.',
 'enotif_impersonal_salutation' => 'Pengguna {{SITENAME}}',
-'changed' => 'diubah',
-'created' => 'dibuat',
-'enotif_subject' => 'Halaman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED oleh $PAGEEDITOR',
+'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',
@@ -2357,6 +2387,8 @@ $UNWATCHURL
 
 Umpan balik dan bantuan lebih lanjut:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dibuat',
+'changed' => 'diubah',
 
 # Delete
 'deletepage' => 'Hapus halaman',
@@ -2501,7 +2533,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.",
@@ -2527,14 +2560,14 @@ $1',
 '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 saya',
+'mycontris' => 'Kontribusi',
 'contribsub2' => 'Untuk $1 ($2)',
 'nocontribs' => 'Tidak ada perubahan yang sesuai dengan kriteria tersebut.',
 'uctop' => ' (atas)',
@@ -2871,6 +2904,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]].
@@ -2903,6 +2937,9 @@ 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-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',
@@ -2934,10 +2971,10 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'tooltip-pt-anonlogin' => 'Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.',
 'tooltip-pt-logout' => 'Keluar log',
 'tooltip-ca-talk' => 'Pembicaraan halaman isi',
-'tooltip-ca-edit' => 'Sunting halaman ini. Gunakan tombol pratayang sebelum menyimpan.',
+'tooltip-ca-edit' => 'Anda dapat menyunting halaman ini. Gunakan tombol pratayang sebelum menyimpan',
 'tooltip-ca-addsection' => 'Mulai bagian baru',
 'tooltip-ca-viewsource' => 'Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.',
-'tooltip-ca-history' => 'Versi-versi sebelumnya dari halaman ini.',
+'tooltip-ca-history' => 'Revisi-revisi sebelumnya dari halaman ini.',
 'tooltip-ca-protect' => 'Lindungi halaman ini',
 'tooltip-ca-unprotect' => 'Ubah perlindungan halaman ini',
 'tooltip-ca-delete' => 'Hapus halaman ini',
@@ -2951,7 +2988,7 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'tooltip-p-logo' => 'Kunjungi Halaman Utama',
 'tooltip-n-mainpage' => 'Kunjungi Halaman Utama',
 'tooltip-n-mainpage-description' => 'Kunjungi Halaman Utama',
-'tooltip-n-portal' => 'Tentang proyek, apa yang dapat anda lakukan, di mana mencari sesuatu',
+'tooltip-n-portal' => 'Tentang proyek, apa yang dapat Anda lakukan, di mana untuk mencari sesuatu',
 'tooltip-n-currentevents' => 'Temukan informasi tentang peristiwa terkini',
 'tooltip-n-recentchanges' => 'Daftar perubahan terbaru dalam wiki.',
 'tooltip-n-randompage' => 'Tampilkan sembarang halaman',
@@ -3044,11 +3081,41 @@ Ini mungkin disebabkan oleh pranala ke situs luar yang termasuk dalam daftar hit
 
 # Info page
 'pageinfo-title' => 'Informasi untuk "$1"',
-'pageinfo-header-edits' => 'Suntingan',
+'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',
+'pageinfo-header-properties' => 'Properti halaman',
+'pageinfo-display-title' => 'Judul tampilan',
+'pageinfo-default-sort' => 'Kunci urut baku',
+'pageinfo-length' => 'Panjang halaman (dalam bita)',
+'pageinfo-article-id' => 'ID Halaman',
+'pageinfo-language' => 'Bahasa isi halaman',
+'pageinfo-robot-policy' => 'Status mesin pencari',
+'pageinfo-robot-index' => 'Dapat diindeks',
+'pageinfo-robot-noindex' => 'Tidak dapat diindeks',
 'pageinfo-views' => 'Jumlah penampilan',
-'pageinfo-watchers' => 'Jumlah pemantau',
-'pageinfo-edits' => 'Jumlah suntingan',
-'pageinfo-authors' => 'Jumlah penulis yang berbeda',
+'pageinfo-watchers' => 'Jumlah pemantau halaman',
+'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 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-toolboxlink' => 'Informasi halaman',
+'pageinfo-redirectsto' => 'Beralih ke',
+'pageinfo-redirectsto-info' => 'Info',
+'pageinfo-contentpage' => 'Dihitung sebagai halaman konten',
+'pageinfo-contentpage-yes' => 'Ya',
+'pageinfo-protect-cascading-yes' => 'Ya',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3096,6 +3163,8 @@ Jika dijalankan, sistem Anda akan berisiko terserang.",
 '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.',
@@ -3105,6 +3174,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',
@@ -3127,6 +3198,7 @@ Jika dijalankan, sistem Anda akan berisiko terserang.",
 'hours' => '{{PLURAL:$1|$1 jam|$1 jam}}',
 'days' => '{{PLURAL:$1|$1 hari|$1 hari}}',
 'ago' => '$1 yang lalu',
+'just-now' => 'baru saja',
 
 # Bad image list
 'bad_image_list' => 'Formatnya sebagai berikut:
@@ -3622,6 +3694,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
@@ -3773,6 +3846,7 @@ Anda juga dapat [[Special:EditWatchlist|menggunakan penyunting standar Anda]].',
 '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.
@@ -3911,11 +3985,15 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'logentry-move-move_redir-noredirect' => '$1 memindahkan halaman $3 ke $4 melalui pengalihan 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' => '$1 membuat akun pengguna',
+'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-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].
@@ -3948,10 +4026,12 @@ 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.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|adalah ekstensi berkas yang tidak diizinkan|adalah ekstensi berkas yang tidak diizinkan}}. {{PLURAL:$3|Jenis berkas yang diperolehkan adalah|Jenis berkas yang diperolehkan adalah}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|bukan ekstensi berkas yang diizinkan|bukan ekstensi berkas yang diizinkan}}. {{PLURAL:$3|Jenis berkas yang diizinkan adalah|Jenis berkas yang diizinkan adalah}} $2.',
 'api-error-filetype-missing' => 'Berkas tidak memiliki ekstensi.',
 'api-error-hookaborted' => 'Modifikasi yang Anda coba lakukan dibatalkan oleh suatu kaitan ekstensi.',
 'api-error-http' => 'Kesalahan internal: tidak dapat menghubungkan ke peladen.',
index c6b00c1..12b6a35 100644 (file)
@@ -422,9 +422,6 @@ Li motive dat es "\'\'$2\'\'".',
 'logouttext' => "'''Vu ha terminat vor session.'''
 Vu posse continuar usar {{SITENAME}} anonimimen, o vu posse <span class='plainlinks'>[$1 aperter un session denov]</span> quam li sam usator o quam un diferent usator.
 Nota que alcun págines posse continuar esser monstrat quam si vu esset registrat, til que vu vacua li cache de tui navigator.",
-'welcomecreation' => '== Benevenit, $1! == 
-Tui conto hat esset creat. 
-Ne oblivia de mutar tui [[Special:Preferences|preferenties de {{SITENAME}}]].',
 'yourname' => 'Nómine de usator:',
 'yourpassword' => 'Parol-clave:',
 'yourpasswordagain' => 'Parol-clave denov:',
@@ -718,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',
@@ -970,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)',
 
@@ -1417,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 e223ec9..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',
@@ -440,9 +440,6 @@ Maka ikuwaria na asụsụ nke ozor, biko chetu I ji [//translatewiki.net/wiki/M
 
 I nwèríkí jíwá {{SITENAME}} na nke ẹnwéghi áhà, mànà Í nwèríkí <span class='plainlinks'>[$1 bátá òzọr]</span> na áhà Í shị fwüo ma áhà ozọr.
 Màkwá na o dị ihü gi zi kà Í nor kwa ímé, o gi kwüshí mgbe Í sáfùrù cache ihe ishi a gá intanet gi.",
-'welcomecreation' => '== Nnöö, $1! ==
-Okíkè buwa gi a guchala.
-E chefụkwạlạ I gbanwere [[Special:Preferences|{{SITENAME}} iheichọrọ]].',
 'yourname' => "Áhà ọ'bànifé:",
 'yourpassword' => 'Okwúngáfè:',
 'yourpasswordagain' => 'Detuari mkpurụ okwu ejị a gafẹ:',
@@ -508,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',
@@ -600,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:',
@@ -610,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]]',
 
@@ -665,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',
@@ -692,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',
@@ -727,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í)',
@@ -763,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',
@@ -802,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',
@@ -816,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à:',
@@ -852,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üá',
@@ -868,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í',
@@ -916,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ù',
@@ -939,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ụ',
@@ -948,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ò',
@@ -1074,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
@@ -1084,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',
@@ -1099,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é',
@@ -1140,14 +1146,13 @@ Ihe gi gbanwe na ógè gi bya nà ihüá na ihü okwu ya gi di ndétu ngáhù, n
 'unwatching' => 'O mele ka o na á hü kwagi...',
 
 'enotif_impersonal_salutation' => "ọ'bànifé {{SITENAME}}",
-'changed' => 'gbanwere',
-'created' => 'kèrè',
-'enotif_subject' => 'Ihü {{SITENAME}} $PAGETITLE à gálá $CHANGEDORCREATED nà áká $PAGEEDITOR',
 '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"',
@@ -1155,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ị',
@@ -1172,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.",
@@ -1186,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',
@@ -1208,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',
@@ -1219,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ü",
@@ -1260,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à:',
@@ -1271,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é',
@@ -1359,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
@@ -1371,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:',
@@ -1399,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é',
@@ -1450,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',
 
@@ -1471,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á:
 
@@ -1505,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ị',
@@ -1538,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',
@@ -1561,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)',
@@ -1577,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 →',
@@ -1616,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ò',
@@ -1681,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 67e3451..0fdee86 100644 (file)
@@ -83,7 +83,7 @@ $messages = array(
 
 'underline-always' => 'Kanayon',
 'underline-never' => 'Saan uray kaanoman',
-'underline-default' => 'Kasisigud a pagbasabasa',
+'underline-default' => 'Kasisigud a kudil wenno pagbasabasa',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Urnosen ti kita ti letra iti lugar:',
@@ -168,8 +168,8 @@ $messages = array(
 'newwindow' => '(aglukat iti sabali a tawa)',
 'cancel' => 'Ukasen',
 'moredotdotdot' => 'Adu pay...',
-'mypage' => 'Panidko',
-'mytalk' => 'Pakitungtungak',
+'mypage' => 'Panid',
+'mytalk' => 'Tungtungan',
 'anontalk' => 'Tungtungan para iti daytoy a pagtaengan ti IP',
 'navigation' => 'Pagdaliasatan',
 'and' => '&#32;ken',
@@ -201,6 +201,7 @@ $messages = array(
 'namespaces' => 'Nagan ti lug-lugar',
 'variants' => 'Sab-sabali a pagsasao',
 
+'navigation-heading' => 'Pagpilian ti pagdaliasatan',
 'errorpagetitle' => 'Biddut',
 'returnto' => 'Agsubli idiay $1.',
 'tagline' => 'Naggapo idiay {{SITENAME}}',
@@ -412,7 +413,7 @@ Panagsapul: $2',
 'actionthrottled' => 'Napabuntog ti aramid',
 'actionthrottledtext' => 'Para ti pagkontra ti spam, naipatinggaka ti panagtungpal ti adu unay iti daytoy nga aramid iti nasiket nga oras, ken nalippasamon ti patingga.
 Pangngaasi nga ipadasmo manen no madamdama.',
-'protectedpagetext' => 'Nasalakniban daytoy a panid tapno mapawilan ti panag-urnos.',
+'protectedpagetext' => 'Nasalakniban daytoy a panid tapno mapawilan ti panag-urnos wenno dagiti dadduma pay nga aksion.',
 'viewsourcetext' => 'Mabalinmo a kitaen ken tuladen ti taudan daytoy a panid:',
 'viewyourtext' => "Mabalinmo a makita ken tuladen ti taudan dagiti '''inurnosmo''' ditoy a panid:",
 'protectedinterface' => 'Daytoy a panid ket mangited ti testo nga interface para iti software iti daytoy a wiki, ken nasalakniban tapno mapawilan ti panag-abuso.
@@ -447,9 +448,9 @@ Ti administrador a nagserra ket nagited iti daytoy a panagilawlawag "\'\'$3\'\'"
 
 Mabalinmo nga ituloy ti agusar iti {{SITENAME}} a di am-ammo, wenno <span class='plainlinks'>[\$1 sumrek ka manen]</span> iti sigud wenno sabali nga agar-aramat.
 Laglagipem a sumagmamano a pampanid ti mabalin a nakaparang latta a kasla nakaserrekka pay laeng, aginggana no dalusam ti \"cache\" ti panagbasabasam.",
-'welcomecreation' => '== Kablaaw, $1! ==
-Naaramiden ti pakabilangam.
-Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENAME}} kaykayat]].',
+'welcomeuser' => 'Naragsak nga isasangbay, $1!',
+'welcomecreation-msg' => 'Naaramiden ti pakabilangam.
+Dimo liplipatan a sukatan dagiti kakaykayatam idiay [[Special:Preferences|{{SITENAME}} kakaykayatan]].',
 'yourname' => 'Nagan ti agar-aramat:',
 'yourpassword' => 'Kontrasenias:',
 'yourpasswordagain' => 'Uliten ti kontrasenias:',
@@ -750,7 +751,7 @@ Annawid a .css ken .js dagiti titulo ket agususar ti babassit a letra, a kas dag
 'note' => "'''Paammo:'''",
 'previewnote' => "'''Laglagipem a daytoy ket panagipadas laeng.'''
 Dagiti sinukatam ket saan pay a naidulin!",
-'continue-editing' => 'Agtultuloy nga agurnos',
+'continue-editing' => 'Mapan idiay pagurnosan a lugar',
 'previewconflict' => 'Daytoy a panagpadas ket agiparang ti testo dita ngato a panagurnos a lugar a kasla agparang no kayatmo nga idulin.',
 'session_fail_preview' => "'''Pasensia! Saanmi a maaramid ti panag-urnos gapu ngamin ta naawanan ti gimong ti data.'''
 Pangngaasi a padasem manen.
@@ -810,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.',
@@ -835,6 +835,7 @@ Kasla met naikkaten.',
 'edit-already-exists' => 'Saan a makaaramid ti baro a panid.
 Adda met daytoyen.',
 'defaultmessagetext' => 'Kasisigud a testo ti mensahe',
+'content-failed-to-parse' => 'Napaay a nausig ti $2 a linaon para iti $1 a modelo: $3',
 'invalid-content-data' => 'Imbalido a datos ti linaon',
 'content-not-allowed-here' => 'Ti "$1" a linaon ket saan a maipalubos idiay [[$2]] a panid',
 
@@ -1135,15 +1136,15 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'qbsettings-directionality' => 'Nasimpa, gapu laeng ti papanan ti panagsurat ti pagsasaom',
 
 # Preferences page
-'preferences' => 'Kaykayatan',
-'mypreferences' => 'Kaykayatko',
+'preferences' => 'Kakaykayatan',
+'mypreferences' => 'Kakaykayatan',
 'prefs-edits' => 'Bilang dagiti inurnos:',
 'prefsnologin' => 'Saan a nakastrek',
-'prefsnologintext' => 'Masapul a <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakastrekka]</span> tapno makapili kadagiti kaykayatmo.',
+'prefsnologintext' => 'Masapul a <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakastrekka]</span> tapno makapili kadagiti kakaykayatam.',
 'changepassword' => 'Baliwan ti kontrasenias',
 'prefs-skin' => 'Kudil',
 'skin-preview' => 'Padasem',
-'datedefault' => 'Awan ti kaykayatan',
+'datedefault' => 'Awan ti kakaykayatan',
 'prefs-beta' => 'Dagiti beta a langa',
 'prefs-datetime' => 'Petsa ken oras',
 'prefs-labs' => 'Dagiti subokan a langa',
@@ -1152,7 +1153,7 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'prefs-rc' => 'Kinaudi a binalbaliwan',
 'prefs-watchlist' => 'Listaan ti bambantayan',
 'prefs-watchlist-days' => 'Alaldaw nga iparang idiay listaan ti bambantayan:',
-'prefs-watchlist-days-max' => 'Kabayag nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}',
+'prefs-watchlist-days-max' => 'Kapaut nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}',
 'prefs-watchlist-edits' => 'Kaadu a bilang ti ipakita kadagiti sinukatan iti napadakkel a bambantayan:',
 'prefs-watchlist-edits-max' => 'Kaadu a bilang: 1000',
 'prefs-watchlist-token' => 'Tandaan ti bambantayan:',
@@ -1181,7 +1182,7 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 No adda makaammo daytoy a tulbek ditoy a pagikabilan ket mabalin da a basaen ti binambantayam, masapul nga agpilika ti pateg a seguridad.
 
 Adda ditoy ti pugto a pateg a mausarmo: $1',
-'savedprefs' => 'Naidulin dagitoy kaykayatmon.',
+'savedprefs' => 'Naidulinen dagiti kakaykayatam.',
 'timezonelegend' => 'Sona ti oras:',
 'localtime' => 'Lokal nga oras:',
 'timezoneuseserverdefault' => 'Usaren ti wiki a kasisigud ($1)',
@@ -1208,19 +1209,19 @@ Adda ditoy ti pugto a pateg a mausarmo: $1',
 'prefs-custom-css' => 'Naiduma a CSS',
 'prefs-custom-js' => 'Naiduma a JavaScript',
 'prefs-common-css-js' => 'Bingay a CSS/JavaScript dagiti amin a kudil:',
-'prefs-reset-intro' => 'Mabalinmo nga usaren daytoy a panid tapno maisublim dagita kaykayatmo iti kinasigud daytoy a wiki.
+'prefs-reset-intro' => 'Mabalinmo nga usaren daytoy a panid tapno maisublim dagita kakaykayatam iti kasisigud ti daytoy a wiki.
 Ngem saanto a mabalinen nga ipasubli.',
 'prefs-emailconfirm-label' => 'Pagsingkedan ti e-surat:',
 'prefs-textboxsize' => 'Ti kadakkel ti pagurnosan a tawa',
 '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:',
 'yourvariant' => 'Linaon ti sabali a pagsasao:',
-'prefs-help-variant' => 'Ti kaykayatmo a sabsabali a panagsurat a maipakita kadagiti linaon ti panid daytoy a wiki.',
+'prefs-help-variant' => 'Ti kinaykayatmo a kita ti pagsasao wenno sabali a panagsurat a maipakita kadagiti linaon ti panid daytoy a wiki.',
 'yournick' => 'Baro a pirma:',
 'prefs-help-signature' => 'Komentario kadagiti  pakipatangan a panid ket  mapirmaan koma iti "<nowiki>~~~~</nowiki>" nga agpabalin ti pirmam ken ti petsa.',
 'badsig' => 'Saan a pudno a kilaw a pirma.
@@ -1237,7 +1238,7 @@ Daytoy a pakaammo ket makita ti publiko.',
 'prefs-help-realname' => 'Saan a nasken ti pudno a nagan.
 Ngem no kayatmo nga ited, maaramat daytoy a kas pammadayaw ken pangpatalged iti obram.',
 'prefs-help-email' => 'Ti e-surat a pagtaengan ket saan a masapul, ngem masapul no agsukat ka ti kontrasenias, no baka malipatam ti kontrasenias mo.',
-'prefs-help-email-others' => 'Mabalinmo nga agpili tapno dagiti sabsabali nga agar-aramat ket ma e-suratandaka idiay panagsilpo ti panidmo wenno ti panid ti kapatangam.
+'prefs-help-email-others' => 'Mabalinmo nga agpili tapno dagiti sabsabali nga agar-aramat ket ma e-suratandaka idiay panagsilpo ti panidmo wenno ti panid ti tungtungam.
 Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak kenka.',
 'prefs-help-email-required' => 'Masapul ti e-surat a pagtaengan.',
 'prefs-info' => 'Kangrunaan a pakaammuan',
@@ -1367,12 +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',
-'rightsnone' => '(awan)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaen datoy a panid',
@@ -1609,6 +1611,7 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-notsame' => 'Addaan ti saan a kapada ti papeles idiay $1.',
 'backend-fail-invalidpath' => '$1 ket imbalido a pagnaan ti pagidulinan.',
 'backend-fail-delete' => 'Saan a maikkat ti papeles $1.',
+'backend-fail-describe' => 'Saam a mabaliwan ti metadata para iti papeles ti "$1".',
 'backend-fail-alreadyexists' => 'Ti papeles $1 ket addan.',
 'backend-fail-store' => 'Saan a maidulin ti papeles $1 idiay $2.',
 'backend-fail-copy' => 'Saan a makopia ti papeles $1 idiay $2.',
@@ -1989,16 +1992,16 @@ Kitaen met [[Special:WantedCategories|dagiti makidkiddaw a kategoria]].',
 # Special:DeletedContributions
 'deletedcontributions' => 'Dagiti naikkat nga inararamid ti agar-aramat',
 'deletedcontributions-title' => 'Dagiti naikkat nga inararamid ti agar-aramat',
-'sp-deletedcontributions-contribs' => 'dagiti parawad',
+'sp-deletedcontributions-contribs' => 'naar-aramid',
 
 # Special:LinkSearch
 'linksearch' => 'Dagiti panagbiruk ti ruar a panilpo',
 '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 />
-Natapayaen a protokol: <code>$1</code> (saanmo nga inayon dagitoy iti panagbirukmo) .',
+{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,10 +2020,6 @@ Natapayaen a protokol: <code>$1</code> (saanmo nga inayon dagitoy iti panagbiruk
 '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.
@@ -2047,7 +2046,7 @@ Adda pay ngata [[{{MediaWiki:Listgrouprights-helppage}}|adu pay a pakaammo]] a m
 'emailuser-title-target' => 'E-suratam daytoy nga {{GENDER:$1|agar-aramat}}',
 'emailuser-title-notarget' => 'E-suratan ti agar-aramat',
 'emailpage' => 'E-suratan ti agar-aramat',
-'emailpagetext' => 'Mabalinmo nga usaren ti kinabuklan dita baba nga agipatulod ti e-surat a mensahe daytoy nga agar-aramat.
+'emailpagetext' => 'Mabalinmo nga usaren ti kinabuklan dita baba nga agipatulod ti e-surat a mensahe ti daytoy nga {{GENDER:$1|agar-aramat}}.
 Ti e-surat nga inkabilmo idiay  [[Special:Preferences|kakaykayatam]] ket agparang a kas "Naggapu" a pagtaengan ti e-surat, tapno ti nagipatulodam ket makasungbat kenka.',
 'usermailererror' => 'Kita ti surat ket nangisubli ti biddut:',
 'defemailsubject' => '{{SITENAME}} e-surat naggapo ken ni "$1"',
@@ -2079,7 +2078,7 @@ Ti e-surat nga inkabilmo idiay  [[Special:Preferences|kakaykayatam]] ket agparan
 
 # Watchlist
 'watchlist' => 'Bambantayak',
-'mywatchlist' => 'Bambantayak',
+'mywatchlist' => 'Bambantayan',
 'watchlistfor2' => 'Para iti $1 $2',
 'nowatchlist' => 'Awan ti banag iti listaan dagiti bambantayam.',
 'watchlistanontext' => 'Pangngaasim ti $1 tapno makitam dagiti inurnosmo dita bambantayam.',
@@ -2115,20 +2114,23 @@ Mailistanto ditoy dagiti pinagsukat daytoy a panid iti masakbayan agraman ti kan
 
 'enotif_mailer' => 'Agipatulod ti pakiammo ti {{SITENAME}}',
 'enotif_reset' => 'Markaan amin a pampanid a kas nasarungkaranen',
-'enotif_newpagetext' => 'Baro daytoy a panid.',
 'enotif_impersonal_salutation' => '{{SITENAME}} agar-aramat',
-'changed' => 'nasukatan',
-'created' => 'naaramid',
-'enotif_subject' => 'Ti {{SITENAME}} a panid a $PAGETITLE ket $CHANGEDORCREATED ni $PAGEEDITOR',
+'enotif_subject_deleted' => 'Ti {{SITENAME}} a panid ti $1 ket inikkat idin babaen ni {{gender:$2|$2}}',
+'enotif_subject_created' => 'Ti {{SITENAME}} a panid ti $1 ket napartuat idin babaen ni {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Ti {{SITENAME}} panid ti $1 ket naiyalis idin babaen ni {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Ti {{SITENAME}} a panid ti $1 ket naipasubli idin babaen ni {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Ti {{SITENAME}} a panid ti $1 ket nasukatan idin babaen ni {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Ti {{SITENAME}} a panid ti $1 ket naikkat idin idiay $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.',
+'enotif_body_intro_created' => 'Ti {{SITENAME}} a panid ti $1 ket napartuat idin idiay $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.',
+'enotif_body_intro_moved' => 'Ti {{SITENAME}} a panid ti $1 ket naiyalis idin idiay $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.',
+'enotif_body_intro_restored' => 'Ti {{SITENAME}} a panid ti $1 ket naipasubli idi idiay $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.',
+'enotif_body_intro_changed' => 'Ti {{SITENAME}} a panid ti $1 ket nasukatan idin idiay $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.',
 'enotif_lastvisited' => 'Kitaen ti $1 para iti am-amin a panagsukat sipud ti naudi nga isasarungkarmo.',
 'enotif_lastdiff' => 'Kitaen ti $1 tapno mabuya daytoy a panagsukat.',
 'enotif_anon_editor' => 'di am-ammo nga agar-aramat $1',
 'enotif_body' => 'Nadungngo a $WATCHINGUSERNAME,
 
-
-Ti {{SITENAME}} a panid $PAGETITLE ket $CHANGEDORCREATED idi $PAGEEDITDATE ni $PAGEEDITOR, kitaen ti $PAGETITLE_URL ti agdama a panagbaliw.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Pakabuklan ti mannurat: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2136,10 +2138,9 @@ Kontaken ti mannurat:
 surat: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Awanen iti sabali pay a paka-ammo a maipatulod kenka no adda pay dagiti masukatan inggana laeng no sarungkaram daytoy a panid.
-Mabalin met nga ipasadiwa dagiti bandera ti paka-ammom para amin kadagiti buybuyaem a panid idiay bambantayam.
+Awanen ti sabali pay a paka-ammo a maipatulod kenka no adda pay dagiti masukatan inggana laeng no sarungkaram daytoy a panid. Mabalin met nga ipasadiwa dagiti bandera ti paka-ammom para amin kadagiti buybuyaem a panid idiay bambantayam.
 
-                        Ti gayyem mo iti {{SITENAME}} a sistema ti pagpa-ammo
+Ti gayyemmo ti {{SITENAME}} a sistema ti pagpa-ammo
 
 --
 Ti panagsukat ti kasasaad ti e-surat a pagpa-ammom, sarungkaram ti
@@ -2153,6 +2154,8 @@ $UNWATCHURL
 
 Ti makunkunam ken no masapulmo pay ti tulong:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'naaramid',
+'changed' => 'nasukatan',
 
 # Delete
 'deletepage' => 'Ikkaten ti panid',
@@ -2344,9 +2347,9 @@ $1',
 'blanknamespace' => '(Umuna)',
 
 # Contributions
-'contributions' => 'Naaramidan dagiti agar-aramat',
+'contributions' => 'Naar-aramid ti {{GENDER:$1|Agar-aramat}}',
 'contributions-title' => 'Naaramidan ni $1',
-'mycontris' => 'Naaramidak',
+'mycontris' => 'Naar-aramid',
 'contribsub2' => 'Para iti $1 ($2)',
 'nocontribs' => 'Awan ti nasarakan a nasukatan a kapada daytoy a kita.',
 'uctop' => '(rabaw)',
@@ -2387,7 +2390,7 @@ Ti naudi a listaan ti panakaserra ket adda dita baba ta usaren a reperensia:',
 'whatlinkshere-hideredirs' => '$1 dagiti baw-ing',
 'whatlinkshere-hidetrans' => '$1 dagiti mailaklak-am',
 'whatlinkshere-hidelinks' => '$1 dagiti silpo',
-'whatlinkshere-hideimages' => '$1 dagiti silpo ti imahen',
+'whatlinkshere-hideimages' => '$1 a silsilpo ti papeles',
 'whatlinkshere-filters' => 'Dagiti sagat',
 
 # Block/unblock
@@ -2622,6 +2625,7 @@ saanmo a maiyalis ti panid ti isu met laeng a panid.',
 'immobile-target-namespace-iw' => 'Ti panilpo nga interwiki ket saan na mabalin nga iyalis.',
 'immobile-source-page' => 'Saan a mabalin nga iyalis daytoy a panid.',
 'immobile-target-page' => 'Saan a maiyalis dita a papananna a titulo.',
+'bad-target-model' => 'Ti kinaykayat a pagipanan ket agus-usar ti sabali a modelo ti linaon. Saan a maipabalin manipud ti $1 iti $2.',
 'imagenocrossnamespace' => 'Saan a maiyalis ti papeles idiay saan a papeles a nagan ti lugar',
 'nonfile-cannot-move-to-file' => 'Saan a maiyalis ti saan a papeles idiay papeles a nagan a lugar',
 'imagetypemismatch' => 'Ti baro a pagpaatiddog ti papeles ket saan nga agpada ti kita na',
@@ -2760,15 +2764,15 @@ Pangngaasi a padasem manen.',
 'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit test suite',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Daytoy ti panid mo',
+'tooltip-pt-userpage' => 'Panidmo nga agar-aramat',
 'tooltip-pt-anonuserpage' => 'Ti panid ti agar-aramat daytoy nga IP a pagtaengan nga urnosem a  kasla',
 'tooltip-pt-mytalk' => 'Pakitungtungam a panid',
 'tooltip-pt-anontalk' => 'Pakitungtungan a maipapan ti panagurnos a naggapu ditoy nga IP a pagtaengan',
-'tooltip-pt-preferences' => 'Dagiti kaykayatmo',
-'tooltip-pt-watchlist' => 'Listaan dagiti panid a sipsiputem ti panagsuksutda',
-'tooltip-pt-mycontris' => 'Listaan dagiti naaramidmo',
-'tooltip-pt-login' => 'Maisingasing ti inka panag-serrek; nupay kasta, daytoy ket saan a maipapilit',
-'tooltip-pt-anonlogin' => 'Maisingasing ti inka panag-serrek; nupay kasta, daytoy ket saan a maipapilit',
+'tooltip-pt-preferences' => 'Dagiti kakaykayatam',
+'tooltip-pt-watchlist' => 'Listaan dagiti panid a sipsiputem para iti panakabalbaliw',
+'tooltip-pt-mycontris' => 'Listaan dagiti inaramidmo',
+'tooltip-pt-login' => 'Maisingasing a sumrekka; nupay kasta, daytoy ket saan a maipapilit',
+'tooltip-pt-anonlogin' => 'Maisingasing a sumrekka; nupay kasta, daytoy ket saan a maipapilit',
 'tooltip-pt-logout' => 'Rummuar',
 'tooltip-ca-talk' => 'Pagtungtungan a maipapan ti linaon ti panid',
 'tooltip-ca-edit' => 'Mabalinmo nga urnosen daytoy a panid. Pangngaasi nga aramatem ti buton ti panagipadas sakbay nga agidulin',
@@ -2793,7 +2797,7 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-n-currentevents' => 'Agsapul iti lugar ti likud a pakaammo kadagiti agdama a paspasamak',
 'tooltip-n-recentchanges' => 'Listaan dagiti naudi a sinukatan iti wiki.',
 'tooltip-n-randompage' => 'Mangiparuar iti pugto a panid',
-'tooltip-n-help' => 'Ti lugar a pakasapulan.',
+'tooltip-n-help' => 'Ti lugar a pagsapulan',
 'tooltip-t-whatlinkshere' => 'Listaan ti am-amin a pampanid ti wiki a nakasilpo ditoy',
 'tooltip-t-recentchangeslinked' => 'Kinaudian a sinukatan  dagiti panid a nakasilpo ditoy a panid',
 'tooltip-feed-rss' => 'RSS a pakan para iti daytoy a panid',
@@ -2826,7 +2830,7 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-upload' => 'Rugian ti agip-ipan',
 'tooltip-rollback' => '"Baliktaden"   isubli ti inurnos (dagiti inurnos) ti daytoy a panid ti kinaudi a nangaramid iti maysa a takla',
 'tooltip-undo' => '"Ibabawi" ipasubli daytoy nga urnos ken lukatanna ti kinabuklan ti urnos iti panagpadas. Agpabalin daytoy a mangikabil ti rason idiay pinakabuklan.',
-'tooltip-preferences-save' => 'Idulin dagiti kaykayatmo',
+'tooltip-preferences-save' => 'Idulin dagiti kakaykayatam',
 'tooltip-summary' => 'Ikabil ti bassit a pakabuklan',
 
 # Metadata
@@ -2856,7 +2860,7 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 
 # Info page
 'pageinfo-title' => 'Pakaammo para iti "$1"',
-'pageinfo-not-current' => 'Ti pakaammo ket mabalin laeng a maiparang para iti agdama a panagbalbaliw.',
+'pageinfo-not-current' => 'Pasensia, saan a mabalin ti mangited ti pakaammo para kadagiti daan a panagbalbaliw.',
 'pageinfo-header-basic' => 'Kangrunaan a pakaammuan',
 'pageinfo-header-edits' => 'Pakasaritaan ti inurnos',
 'pageinfo-header-restrictions' => 'Panagsalaknib ti panid',
@@ -2865,6 +2869,7 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 'pageinfo-default-sort' => 'Kasisigud a kangrunaan a panagilasin',
 'pageinfo-length' => 'Kaatiddog ti panid (kadagiti byte)',
 'pageinfo-article-id' => 'ID ti panid',
+'pageinfo-language' => 'Pagsasao ti naglaon a panid',
 'pageinfo-robot-policy' => 'Kasasaad ti panagbiruk a makina',
 'pageinfo-robot-index' => 'Mabalin a maipasurotan',
 'pageinfo-robot-noindex' => 'Saan a mabalin a maipasurotan',
@@ -2903,6 +2908,8 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 'markedaspatrollederror' => 'Madi a mamarkaan a kas napatruliaan',
 'markedaspatrollederrortext' => 'Nasken a naganam ti maysa a rebision tapno mamarkaan a kas napatruliaan.',
 'markedaspatrollederror-noautopatrol' => 'Saanmo a mabalin a markaan dagita sinukatam a kas napatruliaan.',
+'markedaspatrollednotify' => 'Daytoy a panagbaliw ti $1 ket namarkaanen a kas napatruliaan.',
+'markedaspatrollederrornotify' => 'Ti panagmarka a kas napatruliaan ket napaay.',
 
 # Patrol log
 'patrol-log-page' => 'Listaan ti napatruliaan',
@@ -2936,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.',
@@ -2966,6 +2974,7 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'hours' => '{{PLURAL:$1|$1 oras$1 oras}}',
 'days' => '{{PLURAL:$1|$1 aldaw|$1 al-aldaw}}',
 'ago' => '$1 nagtapos',
+'just-now' => 'tatta laeng',
 
 # Bad image list
 'bad_image_list' => 'Ti kinabuklan ket kas iti sumaganad:
@@ -3546,7 +3555,7 @@ Mabalinmo pay nga [[Special:EditWatchlist|usaren ti dati a panagurnos]].',
 'watchlisttools-raw' => 'Urnosen ti kilaw a listaan ti bambantayan',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|patang]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|tungtungan]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'Di amammo a pagpaatiddog nga etiketa "$1"',
@@ -3572,6 +3581,7 @@ Mabalinmo pay nga [[Special:EditWatchlist|usaren ti dati a panagurnos]].',
 'version-license' => 'Lisensia',
 'version-poweredby-credits' => "Daytoy a wiki ket pinaandar ti '''[//www.mediawiki.org/ MediaWiki]''', karbengan a kopia © 2001-$1 $2.",
 'version-poweredby-others' => 'dadduma pay',
+'version-credits-summary' => 'Kayat mi kuma a pammadayawan dagiti sumaganad a tao para kadagiti inparawadda ti [[Special:Version|MediaWiki]].',
 'version-license-info' => 'Ti MediaWiki ket nawaya a software; maiwarasmo ken/wenno mabaliwam babaen ti banag iti GNU General Public License a naipablaak babaen ti Free Software Foundation; nupay iti bersion 2 iti Lisensia, wenno (ti panagpilim) ti  ania man a bersion.
 
 Ti MediaWiki ket naiwarwaras nga adda ti namnama a makatulong, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANAKAILAKO wenno KALAINGAN NA ITI DAYTOY A PANGGEP. Kitaen ti GNU Sapasap a  Publiko a Lisensia para kadagiti adu pay a salaysay.
@@ -3616,7 +3626,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 'specialpages-group-users' => 'Dagiti agar-aramat ken karkarbengan',
 'specialpages-group-highuse' => 'Adu ti panaka-usar a pampanid',
 'specialpages-group-pages' => 'Listaan dagiti panid',
-'specialpages-group-pagetools' => 'Dagiti ramramit ti panid',
+'specialpages-group-pagetools' => 'Ramramit ti panid',
 'specialpages-group-wiki' => 'Linaon ti wiki ken ramramit',
 'specialpages-group-redirects' => 'Maibawbaw-ing dagiti espesial a pampanid',
 'specialpages-group-spam' => 'Ramramit kontra spam',
@@ -3712,11 +3722,15 @@ Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'logentry-move-move_redir-noredirect' => 'Inyalis ni $1 ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing a saan a nangibati ti baw-ing',
 'logentry-patrol-patrol' => 'Minarkaan ni $1 ti panagbaliw a $4 ti panid ti  $3 a napatruliaan',
 'logentry-patrol-patrol-auto' => 'Automatiko a minarkaan ni $1 ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
-'logentry-newusers-newusers' => 'Nagpartuat ni $1 ti pakabilangan ti  agar-aramat',
-'logentry-newusers-create' => 'Nagpartuat ni $1 ti pakabilangan ti agar-aramat',
-'logentry-newusers-create2' => 'Nagpartuat ni $1 ti pakabilangan ti agar-aramat ti $3',
+'logentry-newusers-newusers' => 'Nagpartuat idi ti $1 a pakabilangan ti agar-aramat',
+'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].
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 7bb15f3..505fa76 100644 (file)
@@ -410,9 +410,6 @@ nekorekta interlinguale od interwikale ligilo.',
 
 Vu povas durar uzante {{SITENAME}} anonimale, o vu povas <span class='plainlinks'>[$1 enirar itere]</span> kom la sama o diferenta uzanto.
 Atencez ke kelka pagini posible duras montresar semblante ke vu ne ekirus, til vu vakuigas la tempala-magazino di vua navigilo.",
-'welcomecreation' => '== Bonveno, $1! ==
-Vua konto kreesis.
-Voluntez, ne obliviez chanjor vua [[Special:Preferences|preferaji en {{SITENAME}}]].',
 'yourname' => 'Vua uzantonomo:',
 'yourpassword' => 'Pasovorto:',
 'yourpasswordagain' => 'Riskribez la pasovorto:',
@@ -576,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.',
@@ -791,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',
@@ -1033,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)',
@@ -1083,7 +1078,6 @@ Volutez kontrolar <strong>[[:$1]]</strong> se vu ne esas certa pri chanjar olu.
 'watching' => 'Surveyanta…',
 'unwatching' => 'Cesanta surveyar…',
 
-'enotif_newpagetext' => 'Ico esas nula pagino.',
 'enotif_impersonal_salutation' => 'Uzanto di {{SITENAME}}',
 'enotif_anon_editor' => 'anonima uzanto $1',
 
@@ -1553,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 40ac42d..a5dcde3 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Bjarki S
  * @author Cessator
  * @author Friðrik Bragi Dýrfjörð
  * @author Gott wisst
@@ -238,7 +239,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Fela yfirfarnar breytingar í nýlegum breytingum',
 'tog-newpageshidepatrolled' => 'Fela yfirfarnar breytingar í listanum yfir nýjar síður',
 'tog-extendwatchlist' => 'Sýna allar breytingar á vaktlistanum, ekki einungis þær nýjustu',
-'tog-usenewrc' => 'Endurbættar auknar nýlegar breytingar (þarfnast JavaScript)',
+'tog-usenewrc' => 'Flokka breytingar eftir síðu í nýlegum breytingum og vaktlista (þarfnast JavaScript)',
 'tog-numberheadings' => 'Númera fyrirsagnir sjálfkrafa',
 'tog-showtoolbar' => 'Sýna breytingarverkfærastiku (JavaScript)',
 'tog-editondblclick' => 'Breyta síðum þegar tvísmellt er (JavaScript)',
@@ -279,7 +280,7 @@ $messages = array(
 
 'underline-always' => 'Alltaf',
 'underline-never' => 'Aldrei',
-'underline-default' => 'skv. vafrastillingu',
+'underline-default' => 'Fletta eða vafra sjálfkrafa',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Breyta leturgerð í textareitum',
@@ -366,7 +367,7 @@ $messages = array(
 'newwindow' => '(opnast í nýjum glugga)',
 'cancel' => 'Hætta við',
 'moredotdotdot' => 'Meira...',
-'mypage' => 'Mín síða',
+'mypage' => 'Síða',
 'mytalk' => 'Spjall',
 'anontalk' => 'Spjallsíða þessa vistfangs.',
 'navigation' => 'Flakk',
@@ -389,7 +390,7 @@ $messages = array(
 'vector-action-protect' => 'Vernda',
 'vector-action-undelete' => 'Hætta við eyðingu',
 'vector-action-unprotect' => 'Breyta verndunarstigi',
-'vector-simplesearch-preference' => 'Virkja leitaruppástungur (eingöngu fyrir vector þema)',
+'vector-simplesearch-preference' => 'Virkja einfaldaða leitarstiku (Vector-þemað eingöngu)',
 'vector-view-create' => 'Skapa',
 'vector-view-edit' => 'Breyta',
 'vector-view-history' => 'Breytingaskrá',
@@ -399,6 +400,7 @@ $messages = array(
 'namespaces' => 'Nafnrými',
 'variants' => 'Útgáfur',
 
+'navigation-heading' => 'Leiðsagnarval',
 'errorpagetitle' => 'Villa',
 'returnto' => 'Aftur á: $1.',
 'tagline' => 'Úr {{SITENAME}}',
@@ -459,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',
@@ -480,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.',
@@ -591,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.',
@@ -603,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.
@@ -638,15 +643,16 @@ Möppudýrið sem læsti skránni gaf þessa ástæðu: "\'\'$3\'\'".',
 
 Þú getur haldið áfram að nota {{SITENAME}} óþekkt(ur), eða þú getur <span class='plainlinks'>[$1 skráð þig inn aftur]</span> sem sami eða annar notandi.
 Athugaðu að sumar síður kunna að birtast líkt og þú sért ennþá skráð(ur) inn, þangað til að þú hreinsar skyndiminnið í vafranum þínum.",
-'welcomecreation' => '== Velkomin(n), $1! ==
-Aðgangurinn þinn hefur verið búinn til.
-Ekki gleyma að breyta [[Special:Preferences|{{SITENAME}}-stillingunum]] þínum.',
+'welcomeuser' => 'Velkomin(n), $1!',
+'welcomecreation-msg' => 'Aðgangurinn þinn hefur verið búinn til.
+Ekki gleyma að breyta [[Special:Preferences|{{SITENAME}} stillingunum]] þínum.',
 'yourname' => 'Notandanafn:',
 'yourpassword' => 'Lykilorð:',
 'yourpasswordagain' => 'Endurrita lykilorð:',
 'remembermypassword' => 'Muna innskráninguna mína í þessum vafra (í allt að $1 {{PLURAL:$1|dag|daga}})',
 'securelogin-stick-https' => 'Halda öllum samskiptum áfram yfir HTTPS eftir að þú skráir þig inn',
 'yourdomainname' => 'Þitt lén:',
+'password-change-forbidden' => 'Þú getur ekki breytt lykilorðum á þessum wiki.',
 'externaldberror' => 'Uppfærsla mistókst. Annaðhvort varð villa í gagnasafninu eða að þér sé óheimilt að uppfæra aðra aðganga.',
 'login' => 'Innskrá',
 'nav-login-createaccount' => 'Innskrá / Búa til aðgang',
@@ -796,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ð',
 
@@ -902,12 +909,11 @@ Gjörðu svo vel og athugaðu hvort að þú viljir skapa/breyta þessari síðu
 'userpage-userdoesnotexist-view' => 'Notandinn "$1" er ekki skráður.',
 'blocked-notice-logextract' => 'Þessi notandi er í banni.
 Síðasta færsla notandans úr bönnunarskrá er sýnd hér fyrir neðan til skýringar:',
-'clearyourcache' => "Athugaðu - Eftir vistun, má vera að þú þurfir að komast hjá skyndiminni vafrans til að sjá breytingarnar.'''
-'''Mozilla / Firefox / Safari:''' haltu ''Shift'' og smelltu á ''Reload'', eða ýttu á annaðhvort ''Ctrl-F5'' eða ''Ctrl-R'' (''Command-R'' á Mac)
-'''Google Chrome: '''smelltu á ''Ctrl-Shift-R'' (''Command-Shift-R'' á Mac)
-'''Konqueror: '''smelltu á ''Reload'' eða ýttu á ''F5'' 
-'''Opera:''' hreinsaðu skyndiminnið í ''Tools → Prefernces'';
-'''Internet Explorer:''' haltu ''Ctrl'' og smelltu á ''Refresh'', eða ýttu á ''Ctrl-F5''.",
+'clearyourcache' => "'''Athugaðu:''' Eftir vistun kann að vera að þú þurfir að komast hjá skyndiminni vafrans þíns til að sjá breytingarnar.
+* '''Firefox / Safari:''' Haltu ''Shift'' samtímis og þú smellir á ''Endurhlaða (Reload)'', eða ýttu á annaðhvort ''Ctrl-F5'' eða ''Ctrl-R'' (''⌘-R'' á Mac)
+* '''Google Chrome:''' Ýttu á ''Ctrl-Shift-R'' (''⌘-Shift-R'' á Mac)
+* '''Internet Explorer:''' Haltu ''Ctrl'' samtímis og þú smellir á ''Endurnýja (Refresh)'', eða ýttu á ''Ctrl-F5''
+* '''Opera:''' Hreinsaðu skyndiminnið í ''Verkfæri (Tools) → Stillingar (Preferences)''",
 'usercssyoucanpreview' => "'''Ath:''' Hægt er að nota „{{int:showpreview}}“ hnappinn til að prófa CSS-kóða áður en hann er vistaður.",
 'userjsyoucanpreview' => "'''Ath:''' Hægt er að nota \"{{int:showpreview}}\" hnappinn til að prófa JavaScript-kóða áður en hann er vistaður.",
 'usercsspreview' => "'''Mundu að þú ert aðeins að forskoða CSS-kóðann þinn.'''
@@ -922,7 +928,7 @@ Síðasta færsla notandans úr bönnunarskrá er sýnd hér fyrir neðan til sk
 'updated' => '(Uppfært)',
 'note' => "'''Athugið:'''",
 'previewnote' => "'''Það sem sést hér er aðeins forskoðun og hefur ekki enn verið vistað!'''",
-'continue-editing' => 'Halda áfram að breyta',
+'continue-editing' => 'Fara á breytingasvæði',
 'previewconflict' => 'Þessi forskoðun endurspeglar textann í efra breytingarsvæði eins og hann myndi líta út ef þú vistar.',
 'session_fail_preview' => "'''Því miður! Gat ekki unnið úr breytingum þínum vegna týndra lotugagna.
 Vinsamlegast reyndu aftur síðar. Ef það virkar ekki heldur skaltu reyna að skrá þig út og inn á ný.'''",
@@ -974,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.',
@@ -990,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.',
@@ -997,6 +1004,15 @@ 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',
+'content-model-text' => 'hreinn texti',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Viðvörun:''' Þessi síða inniheldur of mörg vinnslufrek aðgerðar þáttunar köll.
@@ -1129,9 +1145,10 @@ Ekki er hægt að fela hana.',
 'revdelete-no-change' => "'''Viðvörun:''' Breytingin frá $1 $2 hefur þegar umbeðnar sýnileika stillingar.",
 'revdelete-only-restricted' => 'Mistókst að fela breytingu frá $1 $2: Þú getur ekki falið breytingu fyrir möppudýrum án þess að velja eina af hinum sýnileika stillingunum.',
 'revdelete-reason-dropdown' => '*Algengar eyðingarástæður
-** Höfundarréttarbrot
-** Óviðeigandi persónuuplýsingar
-** Mögulega ærumleiðandi upplýsingar',
+**Höfundarréttarbrot
+**Óviðeigandi athugasemdir eða persónuuplýsingar
+**Óviðeigandi notandanafn
+**Mögulega ærumleiðandi upplýsingar',
 'revdelete-otherreason' => 'Aðrar/fleiri ástæður:',
 'revdelete-reasonotherlist' => 'Önnur ástæða',
 'revdelete-edit-reasonlist' => 'Eyðingarástæður',
@@ -1157,8 +1174,8 @@ Sjáðu til þess að þessi breyting sameini breytingarskrárnar samfellt.',
 
 # Diffs
 'history-title' => '$1: Breytingaskrá',
-'difference-title' => '$1: Munur á milli útgáfa',
-'difference-title-multipage' => '$1 og $2: Munur á milli síðna',
+'difference-title' => 'Munur á milli breytinga „$1“',
+'difference-title-multipage' => 'Munur á milli síðna „$1“ og „$2“',
 'difference-multipage' => '(Munur á milli síðna)',
 'lineno' => 'Lína $1:',
 'compareselectedversions' => 'Bera saman valdar útgáfur',
@@ -1242,7 +1259,7 @@ Athugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.',
 
 # Preferences page
 'preferences' => 'Stillingar',
-'mypreferences' => 'Stillingar',
+'mypreferences' => 'Mínar stillingar',
 'prefs-edits' => 'Fjöldi breytinga:',
 'prefsnologin' => 'Ekki innskráður',
 'prefsnologintext' => 'Þú verður að vera <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} skráð(ur) inn]</span> til að breyta notandastillingum.',
@@ -1304,7 +1321,7 @@ Hér er gildi sem var valið af handahófi sem þú getur notað: $1',
 'timezoneregion-indian' => 'Indlandshaf',
 'timezoneregion-pacific' => 'Kyrrahaf',
 'allowemail' => 'Virkja tölvupóst frá öðrum notendum',
-'prefs-searchoptions' => 'Leitarvalmöguleikar',
+'prefs-searchoptions' => 'Leit',
 'prefs-namespaces' => 'Nafnrými',
 'defaultns' => 'Leita í þessum nafnrýmum sjálfgefið:',
 'default' => 'sjálfgefið',
@@ -1317,13 +1334,13 @@ 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:',
-'yourvariant' => 'Útgáfa:',
+'yourvariant' => 'Afbrigði efnismáls:',
 'prefs-help-variant' => 'Þín sérvalda útgáfa eða réttritun til að birta innihald síðna í.',
 'yournick' => 'Undirskrift:',
 'prefs-help-signature' => 'Ummæli á spjallsíðum eiga að vera skrifuð undir með "<nowiki>~~~~</nowiki>" sem verður breytt í undirskrift þína og dagsetningu.',
@@ -1469,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',
@@ -1937,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}}',
@@ -1965,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)',
@@ -2040,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
@@ -2061,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.',
 
@@ -2082,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. 
@@ -2109,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',
@@ -2142,15 +2161,15 @@ Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]
 
 # Watchlist
 'watchlist' => 'Vaktlistinn',
-'mywatchlist' => 'Vaktlistinn',
+'mywatchlist' => 'Vaktlisti',
 'watchlistfor2' => 'Eftir $1 $2',
 'nowatchlist' => 'Vaktlistinn er tómur.',
 'watchlistanontext' => 'Vinsamlegast $1 til að skoða eða breyta vaktlistanum þí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',
@@ -2176,12 +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_newpagetext' => 'Þetta er ný síða.',
 'enotif_impersonal_salutation' => '{{SITENAME}}notandi',
-'changed' => 'breytt',
-'created' => 'búin til',
-'enotif_subject' => '$PAGETITLE á {{SITENAME}} hefur verið $CHANGEDORCREATED af $PAGEEDITOR',
+'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',
@@ -2190,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 á:
@@ -2221,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',
@@ -2291,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:',
@@ -2375,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.",
@@ -2407,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)',
@@ -2450,7 +2473,7 @@ Síðasta færsla vistfangsins úr bönnunarskrá er sýnd hér fyrir neðan til
 'whatlinkshere-hideredirs' => '$1 tilvísanir',
 'whatlinkshere-hidetrans' => '$1 ítengingar',
 'whatlinkshere-hidelinks' => '$1 tengla',
-'whatlinkshere-hideimages' => '$1 myndatenglar',
+'whatlinkshere-hideimages' => '$1 skrátenglar',
 'whatlinkshere-filters' => 'Síur',
 
 # Block/unblock
@@ -2598,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',
@@ -2894,11 +2918,42 @@ Vinsamlegast reyndu aftur.',
 
 # Info page
 'pageinfo-title' => 'Upplýsingar um $1',
+'pageinfo-header-basic' => 'Grunnupplýsingar',
 'pageinfo-header-edits' => 'Breytingarskrá',
+'pageinfo-header-restrictions' => 'Verndunarstig síðunnar',
+'pageinfo-header-properties' => 'Eiginleikar síðunnar',
+'pageinfo-display-title' => 'Sýnilegur titill',
+'pageinfo-default-sort' => 'Sjálfgefinn röðunarlykill',
+'pageinfo-length' => 'Lengd síðunnar (í bætum)',
+'pageinfo-article-id' => 'Einkennisnúmer síðunnar',
+'pageinfo-language' => 'Tungumál síðunnar',
+'pageinfo-robot-policy' => 'Leitarvélastaða',
+'pageinfo-robot-index' => 'Skráanleg',
+'pageinfo-robot-noindex' => 'Óskráanleg',
 'pageinfo-views' => 'Fjöldi innlita',
 'pageinfo-watchers' => 'Fjöldi notenda, sem vakta síðuna',
+'pageinfo-redirects-name' => 'Tilvísanir til þessarar síðu',
+'pageinfo-subpages-name' => 'Undirsíður þessarar síðu',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|tilvísun|tilvísanir}}; $3 {{PLURAL:$3|ekki tilvísun|ekki tilvísanir}})',
+'pageinfo-firstuser' => 'Stofnandi síðunnar',
+'pageinfo-firsttime' => 'Dagsetning stofnunar síðunnar',
+'pageinfo-lastuser' => 'Síðasti notandinn til þess að breyta',
+'pageinfo-lasttime' => 'Dagsetning síðustu breytingar',
 'pageinfo-edits' => 'Heildarfjöldi breytinga',
 'pageinfo-authors' => 'Heildarfjöldi einstakra höfunda',
+'pageinfo-recent-edits' => 'Fjöldi nýlegra breytinga á síðunni (síðustu $1)',
+'pageinfo-recent-authors' => 'Fjöldi notenda sem breytt hafa síðunni nýlega',
+'pageinfo-magic-words' => 'Töfra {{PLURAL:$1|orð}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Falinn flokkur|Faldir flokkar}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Innifalið snið|Innifalin snið}} ($1)',
+'pageinfo-toolboxlink' => 'Síðuupplýsingar',
+'pageinfo-redirectsto' => 'Vísar til',
+'pageinfo-redirectsto-info' => 'upplýsingar',
+'pageinfo-contentpage' => 'Talin sem efnissíða',
+'pageinfo-contentpage-yes' => 'Já',
+'pageinfo-protect-cascading' => 'Keðjuvörn hefst hér',
+'pageinfo-protect-cascading-yes' => 'Já',
+'pageinfo-protect-cascading-from' => 'Keðjuvörn stafar frá',
 
 # Skin names
 'skinname-standard' => 'Sígilt',
@@ -3644,11 +3699,12 @@ 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 0aa8d2c..63ef592 100644 (file)
@@ -19,6 +19,7 @@
  * @author Brownout
  * @author Candalua
  * @author Civvì
+ * @author Codicorumus
  * @author Cruccone
  * @author Cryptex
  * @author Dakrismeno
@@ -38,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
@@ -321,9 +325,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',
@@ -401,8 +405,9 @@ $messages = array(
 'newwindow' => '(si apre in una nuova finestra)',
 'cancel' => 'Annulla',
 'moredotdotdot' => 'Altro...',
-'mypage' => 'La mia pagina',
-'mytalk' => 'mie discussioni',
+'morenotlisted' => 'Altro...',
+'mypage' => 'Pagina',
+'mytalk' => 'discussioni',
 'anontalk' => 'Discussioni per questo IP',
 'navigation' => 'Navigazione',
 'and' => '&#32;e',
@@ -434,6 +439,7 @@ $messages = array(
 'namespaces' => 'Namespace',
 'variants' => 'Varianti',
 
+'navigation-heading' => 'Menu di navigazione',
 'errorpagetitle' => 'Errore',
 'returnto' => 'Torna a $1.',
 'tagline' => 'Da {{SITENAME}}.',
@@ -480,7 +486,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.",
@@ -641,11 +647,11 @@ Query: $2',
 'viewsource-title' => 'Visualizza sorgente di $1',
 'actionthrottled' => 'Azione ritardata',
 'actionthrottledtext' => "Come misura di sicurezza contro lo spam, l'esecuzione di alcune azioni è limitata a un numero massimo di volte in un determinato periodo di tempo, limite che in questo caso è stato superato. Si prega di riprovare tra qualche minuto.",
-'protectedpagetext' => 'Questa pagina è stata protetta per impedirne la modifica.',
+'protectedpagetext' => 'Questa pagina è stata protetta per impedirne la modifica o altre operazioni.',
 '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)',
@@ -675,9 +681,9 @@ L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
 
 Si può continuare ad usare {{SITENAME}} come utente anonimo oppure <span class='plainlinks'>[$1 eseguire un nuovo accesso]</span>, con lo stesso nome utente o un nome diverso.
 Nota che alcune pagine potrebbero continuare ad apparire come se il logout non fosse avvenuto finché non viene pulita la cache del proprio browser.",
-'welcomecreation' => "== Benvenuto, $1! ==
-
-L'account è stato creato correttamente. Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITENAME}}]].",
+'welcomeuser' => 'Benvenuto, $1!',
+'welcomecreation-msg' => "L'account è stato creato correttamente.
+Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITENAME}}]].",
 'yourname' => 'Nome utente:',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'Ripeti la password:',
@@ -696,7 +702,7 @@ L'account è stato creato correttamente. Non dimenticare di personalizzare le [[
 'notloggedin' => 'Accesso non effettuato',
 'nologin' => "Non hai ancora un accesso? '''$1'''.",
 'nologinlink' => 'Registrati',
-'createaccount' => 'Crea un accesso',
+'createaccount' => "Crea un'utenza",
 'gotaccount' => "Hai già un accesso? '''$1'''.",
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => 'Hai dimenticato i tuoi dati di accesso?',
@@ -766,6 +772,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',
@@ -787,10 +794,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?',
@@ -827,6 +834,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',
 
@@ -860,7 +868,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.',
@@ -997,7 +1005,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',
@@ -1102,7 +1109,7 @@ Legenda: '''({{int:cur}})''' = differenze con la versione attuale, '''({{int:las
 'rev-deleted-text-permission' => "Questa versione della pagina è stata '''cancellata'''.
 Consultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
 'rev-deleted-text-unhide' => "Questa versione della pagina è stata '''cancellata'''.
-Consultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.
+Consultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.
 Agli amministratori è ancora consentito [$1 visualizzare questa versione] se necessario.",
 'rev-suppressed-text-unhide' => "Questa versione della pagina è stata '''rimossa'''.
 Consultare il [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} log di rimozione] per ulteriori dettagli.
@@ -1383,9 +1390,9 @@ L'operazione non può essere annullata.",
 'prefs-emailconfirm-label' => "Conferma dell'e-mail:",
 'prefs-textboxsize' => 'Dimensione della finestra di modifica',
 'youremail' => 'Indirizzo e-mail:',
-'username' => 'Nome utente:',
-'uid' => 'ID utente:',
-'prefs-memberingroups' => 'Membro {{PLURAL:$1|del gruppo|dei gruppi}}:',
+'username' => '{{GENDER:$1|Nome utente}}:',
+'uid' => '{{GENDER:$1|ID utente}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Membro}} {{PLURAL:$1|del gruppo|dei gruppi}}:',
 'prefs-registration' => 'Data di registrazione:',
 'yourrealname' => 'Nome vero:',
 'yourlanguage' => "Lingua dell'interfaccia:",
@@ -1438,7 +1445,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.',
@@ -1533,15 +1540,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',
@@ -1770,6 +1775,7 @@ $1',
 'backend-fail-notsame' => 'Esiste già un file non identico a  $1 .',
 'backend-fail-invalidpath' => '$1 non è un percorso di archiviazione valido.',
 'backend-fail-delete' => 'Impossibile cancellare il file $1.',
+'backend-fail-describe' => 'Impossibile modificare i metadati del file "$1".',
 'backend-fail-alreadyexists' => 'Il file $1 esiste già.',
 'backend-fail-store' => 'Impossibilie memorizzare file  $1  in  $2 .',
 'backend-fail-copy' => 'Impossibile copiare il file  $1  in  $2 .',
@@ -2024,7 +2030,7 @@ I redirect <del>cancellati</del> sono stati corretti.',
 'fewestrevisions' => 'Pagine con meno revisioni',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
+'nbytes' => '$1 {{PLURAL:$1|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|categoria|categorie}}',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|collegamento|collegamenti}}',
@@ -2154,9 +2160,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.",
 
@@ -2175,10 +2181,6 @@ Protocolli supportati: <code>$1</code> (predefinito http:// se nessun protocollo
 '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.
@@ -2244,9 +2246,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',
@@ -2274,32 +2275,36 @@ il titolo della pagina apparirà in '''grassetto''' nella pagina delle [[Special
 
 'enotif_mailer' => 'Sistema di notifica via e-mail di {{SITENAME}}',
 'enotif_reset' => 'Segna tutte le pagine come già visitate',
-'enotif_newpagetext' => 'Questa è una nuova pagina.',
 'enotif_impersonal_salutation' => 'Utente di {{SITENAME}}',
-'changed' => 'modificata',
-'created' => 'creata',
-'enotif_subject' => 'La pagina $PAGETITLE di {{SITENAME}} è stata $CHANGEDORCREATED da $PAGEEDITOR',
-'enotif_lastvisited' => "Consultare $1 per vedere tutte le modifiche dall'ultima visita.",
-'enotif_lastdiff' => 'Vedere $1 per visualizzare la modifica.',
+'enotif_subject_deleted' => 'La pagina $1 di {{SITENAME}} è stata cancellata da {{gender:$2|$2}}',
+'enotif_subject_created' => 'La pagina $1 di {{SITENAME}} è stata creata da {{gender:$2|$2}}',
+'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_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.',
+'enotif_body_intro_changed' => 'La pagina $1 di {{SITENAME}} è stata modificata da {{gender:$2|$2}} il $PAGEEDITDATE, vedi $3 per la versione attuale.',
+'enotif_lastvisited' => "Visita $1 per vedere tutte le modifiche dall'ultima visita.",
+'enotif_lastdiff' => 'Visita $1 per vedere la modifica.',
 'enotif_anon_editor' => 'utente anonimo $1',
 'enotif_body' => 'Gentile $WATCHINGUSERNAME,
 
-la pagina $PAGETITLE di {{SITENAME}} è stata $CHANGEDORCREATED in data $PAGEEDITDATE da $PAGEEDITOR; la versione attuale si trova all\'indirizzo $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
-Oggetto della modifica, inserito dall\'autore: $PAGESUMMARY $PAGEMINOREDIT
+Oggetto dell\'intervento, inserito dall\'autore: $PAGESUMMARY $PAGEMINOREDIT
 
-Contatta l\'autore della modifica:
-via e-mail: $PAGEEDITOR_EMAIL
+Contatta l\'autore:
+via posta elettronica: $PAGEEDITOR_EMAIL
 sul sito: $PAGEEDITOR_WIKI
 
-Non verranno inviate altre notifiche in caso di ulteriori cambiamenti, a meno che tu non visiti la pagina. Inoltre, è possibile reimpostare l\'avviso di notifica per tutte le pagine nella lista degli osservati speciali.
+Non verranno inviate altre notifiche in caso di ulteriori attività, se non visiti la pagina. Inoltre, è possibile modificare le impostazioni di notifica per tutte le pagine nella lista degli osservati speciali.
 
              Il sistema di notifica di {{SITENAME}}, al tuo servizio
 
 --
-Per modificare le impostazioni delle notifiche via e-mail, visita 
+Per modificare le impostazioni delle notifiche via posta elettronica, visita 
 {{canonicalurl:{{#special:Preferences}}}}
 
 Per modificare la lista degli osservati speciali, visita 
@@ -2310,6 +2315,8 @@ $UNWATCHURL
 
 Per commentare e ricevere aiuto:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creata',
+'changed' => 'modificata',
 
 # Delete
 'deletepage' => 'Cancella pagina',
@@ -2374,6 +2381,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:',
@@ -2388,9 +2397,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',
@@ -2485,9 +2494,9 @@ $1',
 'blanknamespace' => '(Principale)',
 
 # Contributions
-'contributions' => 'Contributi utente',
+'contributions' => 'Contributi {{GENDER:$1|utente}}',
 'contributions-title' => 'Contributi di $1',
-'mycontris' => 'miei contributi',
+'mycontris' => 'contributi',
 'contribsub2' => 'Per $1 ($2)',
 'nocontribs' => 'Non sono state trovate modifiche che soddisfino i criteri di ricerca.',
 'uctop' => '(ultima per la pagina)',
@@ -2680,7 +2689,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.",
@@ -2853,6 +2862,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.',
@@ -3019,7 +3029,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-robot-index' => 'Indicizzabile',
 'pageinfo-robot-noindex' => 'Non indicizzabile',
 'pageinfo-views' => 'Numero di visualizzazioni',
-'pageinfo-watchers' => 'Numero di utenti che hanno la pagina nei loro Osservati Speciali',
+'pageinfo-watchers' => 'Numero di utenti che hanno la pagina nei loro osservati speciali',
 'pageinfo-redirects-name' => 'Redirect a questa pagina',
 'pageinfo-subpages-name' => 'Sottopagine di questa pagina',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirect}}; $3 {{PLURAL:$3|non redirect}})',
@@ -3033,7 +3043,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',
@@ -3042,6 +3053,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',
@@ -3053,6 +3068,8 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'markedaspatrollederror' => 'Impossibile contrassegnare la voce come verificata',
 'markedaspatrollederrortext' => 'Occorre specificare una modifica da contrassegnare come verificata.',
 'markedaspatrollederror-noautopatrol' => 'Non si dispone dei permessi necessari per segnare le proprie modifiche come verificate.',
+'markedaspatrollednotify' => 'La modifica a $1 è stata contrassegnata come verificata.',
+'markedaspatrollederrornotify' => 'Errore durante la verifica.',
 
 # Patrol log
 'patrol-log-page' => 'Modifiche verificate',
@@ -3085,6 +3102,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.',
@@ -3118,7 +3136,10 @@ $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',
 
 # Bad image list
 'bad_image_list' => "Il formato è il seguente:
@@ -3880,11 +3901,15 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'logentry-move-move_redir-noredirect' => '$1 ha spostato la pagina $3 a $4 al posto di un redirect senza lasciare redirect',
 'logentry-patrol-patrol' => '$1 ha segnato la versione $4 della pagina $3 come verificata',
 'logentry-patrol-patrol-auto' => '$1 ha segnato automaticamente la versione $4 della pagina $3 come verificata',
-'logentry-newusers-newusers' => "$1 ha creato un'utenza",
-'logentry-newusers-create' => "$1 ha creato un'utenza",
-'logentry-newusers-create2' => "$1 ha creato un'utenza $3",
+'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-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.',
index 3e7f8c7..41b4dac 100644 (file)
@@ -43,6 +43,7 @@
  * @author Muttley
  * @author Mzm5zbC3
  * @author Ohgi
+ * @author Ort43v
  * @author Penn Station
  * @author Reedy
  * @author Schu
@@ -370,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' => '自分が編集したページやファイルをウォッチリストに追加',
@@ -495,8 +496,9 @@ $messages = array(
 'newwindow' => '(新しいウィンドウで開きます)',
 'cancel' => '中止',
 'moredotdotdot' => '続き...',
-'mypage' => '自分のページ',
-'mytalk' => '自分のトーク',
+'morenotlisted' => 'その他...',
+'mypage' => 'ページ',
+'mytalk' => 'トーク',
 'anontalk' => 'このIPアドレスのトーク',
 'navigation' => '案内',
 'and' => '&#32;および&#32;',
@@ -528,6 +530,7 @@ $messages = array(
 'namespaces' => '名前空間',
 'variants' => '変種',
 
+'navigation-heading' => '案内メニュー',
 'errorpagetitle' => 'エラー',
 'returnto' => '$1 に戻る。',
 'tagline' => '提供:{{SITENAME}}',
@@ -609,8 +612,8 @@ $1',
 'policy-url' => 'Project:方針',
 'portal' => 'コミュニティ・ポータル',
 'portal-url' => 'Project:コミュニティ・ポータル',
-'privacy' => 'プライバシー ポリシー',
-'privacypage' => 'Project:プライバシー ポリシー',
+'privacy' => 'プライバシーポリシー',
+'privacypage' => 'Project:プライバシーポリシー',
 
 'badaccess' => '権限がありません',
 'badaccess-group0' => '要求した操作を行うことは許可されていません。',
@@ -693,7 +696,7 @@ URL を間違って入力したか、正しくないリンクをたどった可
 「$1」
 (関数「$2」内)。
 データベースはエラー「$3:$4」を返しました',
-'laggedslavemode' => "'''警告:'''ページに最新の編集が反映されていない可能性があります。",
+'laggedslavemode' => "'''警告:''' ページに最新の編集が反映されていない可能性があります。",
 'readonly' => 'データベースがロックされています',
 'enterlockreason' => 'ロックの理由とロック解除の予定を入力してください',
 'readonlytext' => 'データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらくデータベースの定期メンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。
@@ -712,7 +715,7 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'internalerror_info' => '内部エラー:$1',
 'fileappenderrorread' => '追加中に、「$1」を読み取れませんでした。',
 'fileappenderror' => '「$1」を「$2」に追加できませんでした。',
-'filecopyerror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\82\92ã\80\8c$2ã\80\8dã\81¸複製できませんでした。',
+'filecopyerror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\82\92ã\80\8c$2ã\80\8dã\81«複製できませんでした。',
 'filerenameerror' => 'ファイル名を「$1」から「$2」へ変更できませんでした。',
 'filedeleteerror' => 'ファイル「$1」を削除できませんでした。',
 'directorycreateerror' => 'ディレクトリ「$1」を作成できませんでした。',
@@ -741,7 +744,7 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'actionthrottled' => '操作が速度規制されました',
 'actionthrottledtext' => '短時間にこの操作を大量に行ったため、スパム対策として設定されている制限を超えました。
 少し時間をおいてからもう一度操作してください。',
-'protectedpagetext' => 'このページは編集できないように保護されています。',
+'protectedpagetext' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯ç·¨é\9b\86ã\82\84ä»\96ã\81®æ\93\8dä½\9cã\81\8cã\81§ã\81\8dã\81ªã\81\84ã\82\88ã\81\86ã\81«ä¿\9dè­·ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82',
 'viewsourcetext' => 'このページのソースの閲覧やコピーができます:',
 'viewyourtext' => "このページへの'''あなたの編集'''のソースの閲覧やコピーができます:",
 'protectedinterface' => 'このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。
@@ -753,14 +756,14 @@ 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' => 'ログインしていません',
@@ -776,8 +779,8 @@ $2',
 
 このまま匿名で{{SITENAME}}の使用を続行できます。同じまたは別の利用者として<span class='plainlinks'>[$1 もう一度ログイン]</span>することもできます。
 なお、ページによっては、ブラウザーのキャッシュをクリアするまで、ログインしているかのように表示され続ける場合があるためご注意ください。",
-'welcomecreation' => '== ようこそ、$1 さん! ==
-アカウントが作成されました。
+'welcomeuser' => 'ようこそ、$1さん!',
+'welcomecreation-msg' => 'アカウントが作成されました。
 [[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
 'yourname' => '利用者名:',
 'yourpassword' => 'パスワード:',
@@ -807,7 +810,7 @@ $2',
 'userexists' => '入力された利用者名は既に使用されています。
 他の名前を選んでください。',
 'loginerror' => 'ログインのエラー',
-'createaccounterror' => 'アカウントを作成できませんでした $1',
+'createaccounterror' => 'アカウントを作成できませんでした: $1',
 'nocookiesnew' => '利用者アカウントは作成されましたが、ログインしていません。
 {{SITENAME}}では利用者のログインに Cookie を使用します。
 ご使用のブラウザーでは Cookie が無効になっています。
@@ -849,8 +852,8 @@ 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' => 'メールの送信中にエラーが発生しました:$1',
@@ -859,7 +862,7 @@ Cookieを有効にしていることを確認して、このページを再読
 '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' => '入力されたメールアドレスが正しい形式に従っていないため、受け付けられません。
 正しい形式で入力し直すか、メールアドレス欄を空にしておいてください。',
@@ -875,7 +878,7 @@ Cookieを有効にしていることを確認して、このページを再読
 このアカウントが何かの手違いで作成された場合は、このメッセージを無視してください。',
 'usernamehasherror' => '利用者名には番号記号を含めることができません',
 'login-throttled' => 'ログインの失敗が制限回数を超えました。
-しばらく時間をおいてから再度お試しください。',
+しばらく時間をおいてから再度試してください。',
 'login-abort-generic' => 'ログインに失敗しました - 中止',
 'loginlanguagelabel' => '言語: $1',
 'suspicious-userlogout' => '壊れたブラウザーまたはキャッシュプロキシによって送信された可能性があるため、ログアウト要求は拒否されました。',
@@ -883,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' => 'パスワードの変更',
@@ -894,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' => 'このページに直接アクセスするためにはログインしている必要があります。',
@@ -942,16 +946,17 @@ $2
 仮パスワード:$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' => '中止',
 
@@ -976,8 +981,8 @@ $2
 'hr_tip' => '水平線を挿入(利用は控えめに)',
 
 # Edit pages
-'summary' => '編集内容の要約',
-'subject' => '題名/見出し',
+'summary' => '編集内容の要約:',
+'subject' => '題名/見出し:',
 'minoredit' => 'これは細部の編集です',
 'watchthis' => 'このページをウォッチ',
 'savearticle' => 'ページを保存',
@@ -985,13 +990,13 @@ $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' => '題名/見出しのプレビュー:',
@@ -1038,9 +1043,9 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロッ
 'accmailtext' => "[[User talk:$1|$1]]のために無作為に生成したパスワードを、$2に送信しました。
 
 この新アカウントのパスワードは、ログインした際に''[[Special:ChangePassword|パスワード変更]]''ページで変更できます。",
-'newarticle' => '(新)',
+'newarticle' => '(新)',
 'newarticletext' => "まだ存在しないページへのリンクをたどりました。
-このページを新規作成するには、ページの内容を以下のボックスに記入してください (詳しくは[[{{MediaWiki:Helppage}}|ヘルプ ページ]]を参照してください)。
+このページを新規作成するには、ページの内容を以下のボックスに記入してください (詳しくは[[{{MediaWiki:Helppage}}|ヘルプページ]]を参照してください)。
 誤ってこのページにたどり着いた場合には、ブラウザーの'''戻る'''ボタンで前のページに戻ってください。",
 'anontalkpagetext' => "----''このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。
 匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。
@@ -1060,34 +1065,34 @@ 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'')
 * '''Internet Explorer:''' ''Ctrl'' を押しながら ''最新の情報に更新'' をクリックするか、''Ctrl-F5'' を押してください
 * '''Opera:''' ''ツール → 設定'' からキャッシュをクリアしてください。",
-'usercssyoucanpreview' => "'''ヒント:'''「{{int:showpreview}}」ボタンを使うと、保存前に新しいスタイルシートを試験できます。",
-'userjsyoucanpreview' => "'''ヒント:''' 「{{int:showpreview}}」ボタンを使うと、保存前に新しいスクリプトを試験できます。",
-'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。'''
-'''まだ保存されていません'''",
+'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ã\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' => '(更新)',
-'note' => "'''お知らせ'''",
+'''まだ保存されていません!'''",
+'userinvalidcssjstitle' => "'''警告:'''「$1」という外装はありません。
+カスタム .css/.js ページではページ名を小文字にしてください。例{{ns:user}}:Hoge/Vector.css ではなく {{ns:user}}:Hoge/vector.css",
+'updated' => '(更新)',
+'note' => "'''お知らせ:'''",
 'previewnote' => "'''これはプレビューです。'''
 変更内容はまだ保存されていません!",
 'continue-editing' => '編集を続行',
 'previewconflict' => 'これは、上の編集エリアの文章を保存した場合にどう表示されるかを示すプレビューです。',
-'session_fail_preview' => "'''申し訳ありませんセッションデータが消失したため編集を処理できませんでした。'''
+'session_fail_preview' => "'''申し訳ありませんセッションデータが消失したため編集を処理できませんでした。'''
 もう一度やり直してください。
 それでも失敗する場合、[[Special:UserLogout|ログアウト]]してからログインし直してください。",
-'session_fail_preview_html' => "'''申し訳ありませんセッション データが消失したため編集を処理できませんでした。'''
+'session_fail_preview_html' => "'''申し訳ありませんセッション データが消失したため編集を処理できませんでした。'''
 
 ''{{SITENAME}}では生のHTMLが有効であり、JavaScriptでの攻撃を予防するためにプレビューを表示していません。''
 
@@ -1121,30 +1126,29 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'copyrightwarning2' => "{{SITENAME}}へのすべての投稿は、他の利用者が編集、変更、除去する可能性があります。
 あなたの投稿を、他人が遠慮なく編集するのを望まない場合は、ここには投稿しないでください。<br />
 また、投稿するのは、あなたが書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は$1を参照)。
-'''著作権保護されている作品を、許諾なしに投稿してはいけません'''",
-'longpageerror' => "'''エラー投稿された文章は {{PLURAL:$1|$1 KB}} の長さがあります。これは投稿できる最大の長さ {{PLURAL:$2|$2 KB}} を超えています。'''
-この編集は保存できません。",
-'readonlywarning' => "'''警告:データベースがメンテナンスのためロックされており、現在は編集を保存できません。'''
+'''著作権保護されている作品を、許諾なしに投稿してはいけません!'''",
+'longpageerror' => "'''エラー投稿された文章は {{PLURAL:$1|$1 KB}} の長さがあります。これは投稿できる最大の長さ {{PLURAL:$2|$2 KB}} を超えています。'''
+この編集内容は保存できません。",
+'readonlywarning' => "'''警告: データベースがメンテナンスのためロックされており、現在は編集内容を保存できません。'''
 必要であれば文章をカット&amp;ペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。
 
-データベースをロックした管理者による説明は以下の通りです$1",
-'protectedpagewarning' => "'''警告このページは保護されているため、管理者権限を持つ利用者のみが編集できます。'''
-参考として以下に最後の記録を表示します",
-'semiprotectedpagewarning' => "'''注意:'''このページは保護されているため、登録利用者のみが編集できます。
-参考として以下に最後の記録を表示します",
-'cascadeprotectedwarning' => "'''警告:'''このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、管理者権限を持つ利用者のみが編集できるように保護されています:",
-'titleprotectedwarning' => "'''警告このページは保護されているため、作成には[[Special:ListGroupRights|特定の権限]]が必要です。'''
-参考として以下に最後の記録を表示します",
+データベースをロックした管理者による説明は以下の通りです$1",
+'protectedpagewarning' => "'''警告このページは保護されているため、管理者権限を持つ利用者のみが編集できます。'''
+参考として以下に最後の記録を表示します:",
+'semiprotectedpagewarning' => "'''注意:''' このページは保護されているため、登録利用者のみが編集できます。
+参考として以下に最後の記録を表示します:",
+'cascadeprotectedwarning' => "'''警告:''' このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、管理者権限を持つ利用者のみが編集できるように保護されています:",
+'titleprotectedwarning' => "'''警告このページは保護されているため、作成には[[Special:ListGroupRights|特定の権限]]が必要です。'''
+参考として以下に最後の記録を表示します:",
 'templatesused' => 'このページで使用されている{{PLURAL:$1|テンプレート}}:',
 'templatesusedpreview' => 'このプレビューで使用されている{{PLURAL:$1|テンプレート}}:',
 'templatesusedsection' => 'この節で使用されている{{PLURAL:$1|テンプレート}}:',
-'template-protected' => '(保護)',
-'template-semiprotected' => '(半保護)',
+'template-protected' => '(保護)',
+'template-semiprotected' => '(半保護)',
 'hiddencategories' => 'このページは {{PLURAL:$1|$1 個の隠しカテゴリ}}に属しています:',
 'edittools' => '<!-- ここに書いたテキストは編集及びアップロードのフォームの下に表示されます。 -->',
-'nocreatetitle' => 'ページの作成が制限されています',
 'nocreatetext' => '{{SITENAME}}ではページの新規作成を制限しています。
-元のページに戻って既存のページを編集するか、[[Special:UserLogin|ログインまたはアカウント作成]]をしてください。',
+元のページに戻って既存のページを編集するか、[[Special:UserLogin|ログインまたはアカウント作成]]をしてください。',
 'nocreate-loggedin' => '新しいページを作成する権限がありません。',
 'sectioneditnotsupported-title' => '節単位編集はサポートされていません',
 'sectioneditnotsupported-text' => 'このページでは節単位編集はサポートされません。',
@@ -1165,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」コンテンツは許可されていません',
 
@@ -1178,14 +1182,14 @@ 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' => 'テンプレートのループが検出されました:[[$1]]',
@@ -1227,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' => '最古',
@@ -1263,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 この差分を閲覧]できます。",
@@ -1278,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' => "秘匿は、'''以下の場合に限って'''使用すべきです:
 * 名誉毀損の恐れのある記述
 * 非公開個人情報
 *: ''自宅の住所、電話番号、社会保障番号など''",
@@ -1307,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' => "'''記録の閲覧レベルを設定できませんでした。'''
@@ -1320,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-modify-missing' => '版 ID $1 の項目の変更に失敗しました: データベース内にありません!',
+'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' => '秘匿記録',
@@ -1381,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) が見つかりませんでした。
 
 通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 
@@ -1406,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' => '検索オプション',
@@ -1545,9 +1549,9 @@ $1",
 'prefs-emailconfirm-label' => 'メールアドレスの確認:',
 'prefs-textboxsize' => '編集画面の大きさ',
 'youremail' => 'メールアドレス:',
-'username' => '利用者名:',
-'uid' => '利用者 ID:',
-'prefs-memberingroups' => '所属{{PLURAL:$1|グループ}}:',
+'username' => '{{GENDER:$1|利用者名}}:',
+'uid' => '{{GENDER:$1|利用者}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|所属}}{{PLURAL:$1|グループ}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => '登録日時:',
 'prefs-registration-date-time' => '$1',
@@ -1569,7 +1573,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 この情報は公開されます。',
 'email' => 'メール',
 'prefs-help-realname' => '本名は省略できます。
-入力すると、あなたの著作物の帰属表記に本名を使用します。',
+入力すると、あなたの著作物の帰属表示に使われます。',
 'prefs-help-email' => 'メールアドレスは省略できますが、パスワードを忘れた際にパスワードをリセットするのに必要です。',
 'prefs-help-email-others' => '利用者ページやトークページ上のリンクを通じて、他の利用者があなたにメールで連絡を取れるようにすることもできます。
 他の利用者が連絡を取る際にあなたのメールアドレスが開示されることはありません。',
@@ -1577,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' => '詳細設定',
@@ -1591,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' => '利用者権限を管理',
@@ -1703,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' => 'このページの閲覧',
@@ -1813,12 +1815,13 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 
 参考のため、このページの削除と移動の記録を以下に示します:",
 '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。',
@@ -1847,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' => 'ファイル名が短すぎます。',
@@ -1865,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]]
@@ -1898,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' => 'この名前のファイルは一度アップロードされ、その後削除されています。
@@ -1935,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|管理者]]に連絡してください。',
@@ -1962,19 +1965,20 @@ $1',
 'backend-fail-backup' => 'ファイル $1 をバックアップできませんでした。',
 'backend-fail-notexists' => 'ファイル $1 は存在しません。',
 'backend-fail-hashes' => 'ファイルの比較用のハッシュを取得できませんでした。',
-'backend-fail-notsame' => 'ファイル名 $1 は既に他のファイルが使用しています。',
-'backend-fail-invalidpath' => '$1 はストレージパスに使用できません。',
-'backend-fail-delete' => 'ファイル $1 を削除できませんでした。',
-'backend-fail-alreadyexists' => 'ファイル $1 は既に存在します。',
-'backend-fail-store' => 'ファイル $1 を $2 に格納できませんでした。',
-'backend-fail-copy' => 'ファイル $1 を $2 にコピーできませんでした。',
-'backend-fail-move' => 'ファイル $1 を $2 に移動できませんでした。',
+'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' => 'サイズが {{PLURAL:$2|$2 バイト}}を超えているため、ファイル $1 に書き込めませんでした。',
+'backend-fail-read' => 'ファイル「$1」から読み取れませんでした。',
+'backend-fail-create' => 'ファイル「$1」に書き込めませんでした。',
+'backend-fail-maxsize' => 'サイズが {{PLURAL:$2|$2 バイト}}を超えているため、ファイル「$1」に書き込めませんでした。',
 'backend-fail-readonly' => "ストレージバックエンド「$1」は現在読み取り専用です。理由:「''$2''」",
 'backend-fail-synced' => 'ファイル「$1」は、ストレージバックエンド内部で不一致の状態にあります',
 'backend-fail-connect' => 'ストレージバックエンド「$1」に接続できませんでした。',
@@ -1994,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 上のロックを解放できませんでした。',
@@ -2009,10 +2013,10 @@ $1',
 
 # Special:UploadStash
 'uploadstash' => '未公開アップロード',
-'uploadstash-summary' => 'このページでは、アップロードされた、もしくはアップロード中の、ウィキ上でまだ公開されていないファイルを表示します。これらのファイルは、アップロードした利用者以外閲覧できません。',
+'uploadstash-summary' => 'このページでは、アップロード済みまたはアップロード中の、ウィキ上でまだ公開されていないファイルを表示します。これらのファイルは、アップロードした利用者以外閲覧できません。',
 'uploadstash-clear' => '未公開ファイルを消去',
 'uploadstash-nofiles' => '未公開ファイルはありません。',
-'uploadstash-badtoken' => '操作を実行できませんでした。編集するための認証の期限切れが原因である可能性があります。再度お試しください。',
+'uploadstash-badtoken' => '操作を実行できませんでした。編集するための認証の期限切れが原因である可能性があります。再度試してください。',
 'uploadstash-errclear' => 'ファイルの消去に失敗しました。',
 'uploadstash-refresh' => 'ファイルの一覧を更新',
 'invalid-chunk-offset' => '無効なチャンクオフセット',
@@ -2034,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',
 
@@ -2059,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' => 'サムネイル',
@@ -2101,7 +2105,7 @@ 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 ファイル解説ページ]を参照してください。',
@@ -2124,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の版]に差し戻されました。",
@@ -2135,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' => '*よくある削除理由
 ** 著作権侵害
@@ -2153,8 +2157,8 @@ $1での[$2 ファイル解説ページ]にある説明を編集したほうが
 # MIME search
 'mimesearch' => 'MIMEタイプ検索',
 'mimesearch-summary' => 'このページでは、ファイルをMIMEタイプで絞り込みます。
-contenttype/subtypeの形式で入力してください(例:<code>image/jpeg</code>)。',
-'mimetype' => 'MIMEタイプ',
+contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</code>)。',
+'mimetype' => 'MIMEタイプ:',
 'download' => 'ダウンロード',
 
 # Unwatched pages
@@ -2260,7 +2264,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'mostinterwikis' => 'ウィキ間リンクの多いページ',
 'mostrevisions' => '版の多いページ',
 'prefixindex' => '先頭が同じ全ページ',
-'prefixindex-namespace' => '先頭が同じ全ページ($1名前空間)',
+'prefixindex-namespace' => '先頭が同じ全ページ ($1名前空間)',
 'shortpages' => '短いページ',
 'longpages' => '長いページ',
 'deadendpages' => '行き止まりページ',
@@ -2276,10 +2280,10 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'listusers' => '利用者一覧',
 'listusers-editsonly' => '投稿記録のある利用者のみを表示',
 'listusers-creationsort' => '作成日順に並べ替え',
-'usereditcount' => '$1 {{PLURAL:$1|回編集}}',
+'usereditcount' => '$1 {{PLURAL:$1|回編集}}',
 'usercreated' => '$1 $2 に{{GENDER:$3|作成}}',
 'newpages' => '新しいページ',
-'newpages-username' => '利用者名',
+'newpages-username' => '利用者名:',
 'ancientpages' => '最古のページ',
 'move' => '移動',
 'movethispage' => 'このページを移動',
@@ -2328,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' => 'リダイレクトを隠す',
@@ -2359,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' => 'ワイルドカードはホスト名の先頭でのみ使用できます。',
 
@@ -2378,10 +2382,6 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'activeusers-hidesysops' => '管理者を隠す',
 'activeusers-noresult' => '利用者が見つかりませんでした。',
 
-# Special:Log/newusers
-'newuserlogpage' => 'アカウント作成記録',
-'newuserlogpagetext' => '以下はアカウント作成の記録です。',
-
 # Special:ListGroupRights
 'listgrouprights' => '利用者グループの権限',
 'listgrouprights-summary' => '以下は、このウィキに登録されている利用者グループと、それぞれに割り当てられている権限の一覧です。
@@ -2391,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',
@@ -2410,11 +2410,11 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'emailuser-title-target' => 'この{{GENDER:$1|利用者}}にメールを送信',
 'emailuser-title-notarget' => '利用者にメールを送信',
 'emailpage' => '利用者にメールを送信',
-'emailpagetext' => '以下のフォームを使用してこの利用者にメールを送信できます。
+'emailpagetext' => '以下のフォームを使用してこの{{GENDER:$1|利用者}}にメールを送信できます。
 「差出人」として、[[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' => 'この利用者は有効なメールアドレスを登録していません。',
@@ -2422,16 +2422,16 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'nowikiemailtext' => 'この利用者は他の利用者からメールを受け取らない設定にしています。',
 'emailnotarget' => '受信者の利用者名が存在しない、あるいは無効です。',
 'emailtarget' => '受信者の利用者名を入力してください',
-'emailusername' => '利用者名',
+'emailusername' => '利用者名:',
 'emailusernamesubmit' => '送信',
 'email-legend' => '{{SITENAME}} の他の利用者にメールを送信',
-'emailfrom' => '差出人',
-'emailto' => '宛先',
-'emailsubject' => '件名',
-'emailmessage' => '本文',
+'emailfrom' => '差出人:',
+'emailto' => '宛先:',
+'emailsubject' => '件名:',
+'emailmessage' => '本文:',
 'emailsend' => '送信',
 'emailccme' => '自分宛に控えを送信する。',
-'emailccsubject' => '$1に送信したメールの控え:$2',
+'emailccsubject' => '$1 に送信したメールの控え: $2',
 'emailsent' => 'メールを送信しました',
 'emailsenttext' => 'メールを送信しました。',
 'emailuserfooter' => 'このメールは$1から$2へ、{{SITENAME}}の「利用者にメールを送信」機能で送信されました。',
@@ -2449,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' => 'ウォッチ',
@@ -2460,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' => '最近の更新内のウォッチされているページを確認中',
@@ -2468,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
@@ -2478,19 +2478,23 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 
 'enotif_mailer' => '{{SITENAME}} 通知メール',
 'enotif_reset' => 'すべてのページを訪問済みにする',
-'enotif_newpagetext' => 'これは新しいページです。',
-'enotif_impersonal_salutation' => '{{SITENAME}} 利用者',
-'changed' => '変更',
-'created' => '作成',
-'enotif_subject' => '{{SITENAME}}のページ「$PAGETITLE」が$PAGEEDITORによって$CHANGEDORCREATEDされました',
-'enotif_lastvisited' => '最後に閲覧して以降のすべての変更は $1 をご覧ください。',
+'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 をご覧ください。
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 編集内容の要約:$PAGESUMMARY($PAGEMINOREDIT)
 
@@ -2498,8 +2502,7 @@ $NEWPAGE
 メール:$PAGEEDITOR_EMAIL
 ウィキ:$PAGEEDITOR_WIKI
 
-このページを訪れない限り、これ以上の変更に対する通知は送信されません。
-ウォッチリスト内のすべてのページについて、通知を再設定することもできます。
+このページを訪れない限り、これ以上の活動に対する通知は送信されません。ウォッチリスト内のすべてのページについて、通知を再設定することもできます。
 
                          {{SITENAME}}通知システム
 
@@ -2515,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' => '操作を完了しました',
@@ -2536,8 +2541,8 @@ $UNWATCHURL
 'dellogpagetext' => '以下は最近の削除と復元の一覧です。',
 'deletionlog' => '削除記録',
 'reverted' => '以前の版への差し戻し',
-'deletecomment' => '理由',
-'deleteotherreason' => '他の、または追加の理由',
+'deletecomment' => '理由:',
+'deleteotherreason' => '他の、または追加の理由:',
 'deletereasonotherlist' => 'その他の理由',
 'deletereason-dropdown' => '*よくある削除理由
 ** 投稿者依頼
@@ -2563,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による編集を差し戻しました。
@@ -2588,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' => '*よくある保護理由
 ** 度重なる荒らし
@@ -2660,7 +2667,7 @@ $2による直前の版へ変更されました。',
 'undeletehistorynoadmin' => 'このページは削除されています。
 削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。
 管理者以外の利用者には、削除された各版の本文への制限がかけられています。',
-'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版',
+'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版:',
 'undeleterevision-missing' => '無効または存在しない版です。
 間違ったリンクをたどったか、この版は既に復元されたか、もしくは保存版から除去された可能性があります。',
 'undelete-nodiff' => 'これより前の版はありません。',
@@ -2680,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' => '削除の保存版に、一致するページが見つかりませんでした。',
@@ -2694,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
@@ -2706,9 +2713,9 @@ $1',
 'blanknamespace' => '(標準)',
 
 # Contributions
-'contributions' => '利用者の投稿記録',
+'contributions' => '{{GENDER:$1|利用者}}の投稿記録',
 'contributions-title' => '$1の投稿記録',
-'mycontris' => '自分の投稿記録',
+'mycontris' => '投稿記録',
 'contribsub2' => '利用者: $1 ($2)',
 'nocontribs' => 'これらの条件に一致する変更は見つかりませんでした。',
 'uctop' => '(最新)',
@@ -2725,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' => '最新版の編集のみを表示',
@@ -2736,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' => 'ファイルへのリンク',
@@ -2763,8 +2770,8 @@ $1',
 このような措置は、荒らしからの防御の目的のみに行われるべきで、また[[{{MediaWiki:Policy-url}}|方針]]に沿ったものであるべきです。
 以下にブロックの理由を具体的に書いてください (例えば、荒らされたページへの言及など)。',
 'ipadressorusername' => 'IPアドレスまたは利用者名:',
-'ipbexpiry' => '有効期限',
-'ipbreason' => '理由',
+'ipbexpiry' => '有効期限:',
+'ipbreason' => '理由:',
 'ipbreasonotherlist' => 'その他の理由',
 'ipbreason-dropdown' => '*よくあるブロック理由
 ** 虚偽情報の挿入
@@ -2779,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アドレス',
@@ -2804,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 のブロックを非表示',
@@ -2839,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|ブロックの一覧]]をご覧ください。',
@@ -2863,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' => 'この機能は無効になっています。',
@@ -2885,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' => 'データベースをロックするとすべての利用者はページの編集や、個人設定の変更、ウォッチリストの編集、その他データベースでの変更を要求する作業ができなくなります。
 本当にデータベースをロックしていいかどうか確認し、メンテナンスが終了したらロックを解除してください。',
@@ -2896,8 +2903,8 @@ $1 のブロックの理由は「''$2''」です。",
 'lockbtn' => 'データベースをロック',
 'unlockbtn' => 'データベースのロックを解除',
 'locknoconfirm' => '確認ボックスにチェックが入っていません。',
-'lockdbsuccesssub' => 'データベースのロックに成功しました',
-'unlockdbsuccesssub' => 'データベースのロックを除去しました',
+'lockdbsuccesssub' => 'データベースのロック',
+'unlockdbsuccesssub' => 'データベースのロック除去',
 'lockdbsuccesstext' => 'データベースをロックしました。<br />
 メンテナンスが完了したら、忘れずに[[Special:UnlockDB|ロックを除去]]してください。',
 'unlockdbsuccesstext' => 'データベースのロックを解除しました。',
@@ -2911,11 +2918,11 @@ $1 のブロックの理由は「''$2''」です。",
 'move-page-legend' => 'ページの移動',
 'movepagetext' => "下のフォームを使用すると、ページ名を変更でき、そのページの履歴も変更先に移動できます。
 移動元のページは移動先への転送ページになります。
-移動元のページへのリダイレクトを自動的に修正できます。
-[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
+移動元のページへの転送ページを自動的に修正できます。
+[[Special:DoubleRedirects|二重転送]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
 リンクを正しく維持するのは移動した人の責任です。
 
-移動先が既に存在する場合は、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
+移動先が既に存在する場合は、そのページが転送ページであり、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
 
 '''注意!'''
 よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期しない結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。",
@@ -2924,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' => '移動に成功しました',
@@ -2955,7 +2962,7 @@ $1 のブロックの理由は「''$2''」です。",
 'cantmove-titleprotected' => '新しいページ名が作成保護されているため、この場所にページを移動できません',
 'talkexists' => "'''ページ自身は移動できましたが、トークページは移動先のページが存在したため移動できませんでした。
 手動で統合してください。'''",
-'movedto' => '移動先',
+'movedto' => '移動先:',
 'movetalk' => '付随するトークページも移動',
 'move-subpages' => '下位ページも移動 ($1 件まで)',
 'move-talk-subpages' => 'トークページの下位ページも移動 ($1 件まで)',
@@ -2968,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' => '移動元と移動先のページ名が同じです。
@@ -2982,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' => '選ばれたファイル名は既に共有リポジトリ上で使用されています。
@@ -3010,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' => 'システムメッセージの一覧',
@@ -3027,7 +3034,7 @@ $1 のブロックの理由は「''$2''」です。",
 'allmessagesdefault' => '既定のメッセージ文',
 'allmessagescurrent' => '現在のメッセージ文',
 'allmessagestext' => 'これは MediaWiki 名前空間で利用できるシステム メッセージの一覧です。
-MediaWiki 全般のローカライズ(地域化)に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ] や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
+MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ]や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''が無効のため、このページを使用できません。",
 'allmessages-filter-legend' => '絞り込み',
 'allmessages-filter' => '変更状態により絞り込む:',
@@ -3041,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' => '一時的なサムネイルファイルを作成できません',
@@ -3049,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' => 'ページデータの取り込み',
@@ -3058,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' => '取り込みファイルはアップロードされませんでした。',
@@ -3088,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データをアップロード',
@@ -3116,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 テストのドキュメント]を参照してください。',
@@ -3162,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' => 'このページのこの版への固定リンク',
@@ -3283,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' => '情報',
@@ -3292,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' => 'クラシック',
@@ -3313,7 +3325,9 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'rcpatroldisabledtext' => '最近の更新の巡回機能は現在無効になっています。',
 'markedaspatrollederror' => '巡回済みにできません',
 'markedaspatrollederrortext' => '巡回済みにするには、版を指定する必要があります。',
-'markedaspatrollederror-noautopatrol' => '自分の編集を巡回済みにする権限がありません。',
+'markedaspatrollederror-noautopatrol' => 'あなたには自分の編集を巡回済みにする権限がありません。',
+'markedaspatrollednotify' => '$1 へのこの変更を巡回済みにしました。',
+'markedaspatrollederrornotify' => '巡回済みにするのに失敗しました。',
 
 # Patrol log
 'patrol-log-page' => '巡回記録',
@@ -3323,7 +3337,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 # Image deletion
 'deletedrevision' => '古い版 $1 を削除しました',
 'filedeleteerror-short' => 'ファイルの削除エラー: $1',
-'filedeleteerror-long' => 'ファイルの削除中にエラーが発生しました
+'filedeleteerror-long' => 'ファイルの削除中にエラーが発生しました:
 
 $1',
 'filedelete-missing' => 'ファイル「$1」は存在しないため、削除できません。',
@@ -3336,8 +3350,8 @@ $1',
 'nextdiff' => '新しい編集→',
 
 # Media information
-'mediawarning' => "'''警告:'''この種類のファイルは悪意のあるコードを含んでいる可能性があります。
-実行するとシステムが危険にさらされる可能性があります。",
+'mediawarning' => "'''警告:''' この種類のファイルは、悪意があるコードを含んでいる可能性があります。
+実行するとシステムが危険にさらされるおそれがあります。",
 'imagemaxsize' => "画像のサイズ制限: <br />''(ファイルページに対する)''",
 'thumbsize' => 'サムネイルの大きさ:',
 'widthheight' => '$1 × $2',
@@ -3348,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。',
@@ -3365,7 +3380,7 @@ $1',
 'imagelisttext' => "以下は、'''$1'''{{PLURAL:$1|ファイル}}の$2で並べ替えた一覧です。",
 'newimages-summary' => 'この特別ページでは、最近アップロードされたファイルを表示します。',
 'newimages-legend' => '絞り込み',
-'newimages-label' => 'ファイル名(またはその一部):',
+'newimages-label' => 'ファイル名 (またはその一部):',
 'showhidebots' => '(ボットを$1)',
 'noimages' => '表示できるものがありません。',
 'ilsubmit' => '検索',
@@ -3375,13 +3390,17 @@ $1',
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'video-dims' => '$1、 $2 × $3',
 'seconds-abbrev' => '$1 s',
+'minutes-abbrev' => '$1 m',
 'hours-abbrev' => '$1 h',
 'days-abbrev' => '$1 d',
 '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' => '書式は以下の通りです:
@@ -3396,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' => '香港正体',
@@ -3407,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
@@ -3550,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' => '高度',
@@ -3600,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' => '言語',
@@ -3713,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' => 'ストロボのリターン検出',
@@ -3789,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' => 'キロメートル/時',
@@ -3859,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' => 'すべて',
@@ -3883,7 +3902,7 @@ Variants for Chinese language
 'confirmemail_sendfailed' => '{{SITENAME}}は確認メールを送信できませんでした。
 メールアドレスが無効な文字を含んでいないかご確認ください。
 
-メールサーバーからの返答$1',
+メールサーバーからの返答$1',
 'confirmemail_invalid' => '確認用コードが正しくありません。
 このコードの有効期限が切れている可能性があります。',
 'confirmemail_needlogin' => 'メールアドレスを確認するために$1が必要です。',
@@ -3944,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削除しました。本当にこのページを再作成していいかご確認ください。',
+'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削除しました。本当にこのページを再作成していいかご確認ください。',
 'recreate' => '再作成する',
 
 # action=purge
 'confirm_purge_button' => 'OK',
-'confirm-purge-top' => 'このページのキャッシュを破棄しますか',
+'confirm-purge-top' => 'このページのキャッシュを破棄しますか?',
 'confirm-purge-bottom' => 'ページをパージすると、キャッシュが破棄され、強制的に最新版が表示されます。',
 
 # action=watch/unwatch
@@ -3974,7 +3993,7 @@ $5
 'imgmultipageprev' => '&larr;前ページ',
 'imgmultipagenext' => '次ページ&rarr;',
 'imgmultigo' => '表示',
-'imgmultigoto' => '$1へ行く',
+'imgmultigoto' => 'ページ$1に移動',
 
 # Table pager
 'ascending_abbrev' => '昇順',
@@ -3992,7 +4011,7 @@ $5
 'autosumm-blank' => 'ページの白紙化',
 'autosumm-replace' => '内容を「$1」で置換',
 'autoredircomment' => '[[$1]]への転送ページ',
-'autosumm-new' => 'ページの作成「$1」',
+'autosumm-new' => 'ページの作成:「$1」',
 
 # Size units
 'size-bytes' => '$1バイト',
@@ -4008,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
@@ -4018,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' => '関連する変更を閲覧',
@@ -4107,7 +4126,7 @@ $5
 
 # Core parser functions
 'unknown_extension_tag' => '不明な拡張機能タグ「$1」です',
-'duplicate-defaultsort' => "'''警告:'''既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
+'duplicate-defaultsort' => "'''警告:''' 既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
 
 # Special:Version
 'version' => 'バージョン情報',
@@ -4215,18 +4234,18 @@ MediaWikiは、有用であることを期待して配布されていますが
 'compare-rev1' => '版 1',
 'compare-rev2' => '版 2',
 'compare-submit' => '比較',
-'compare-invalid-title' => '指定したページ名は使用できません。',
-'compare-title-not-exists' => 'æ\8c\87å®\9aã\81\95ã\82\8cたページは存在しません。',
-'compare-revision-not-exists' => 'æ\8c\87å®\9aã\81\95ã\82\8cた版は存在しません。',
+'compare-invalid-title' => '指定したページ名は無効です。',
+'compare-title-not-exists' => 'æ\8c\87å®\9aã\81\97たページは存在しません。',
+'compare-revision-not-exists' => 'æ\8c\87å®\9aã\81\97た版は存在しません。',
 
 # 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
@@ -4271,11 +4290,15 @@ 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-autocreate' => 'アカウント $1 が自動的に作成されました',
-'newuserlog-byemail' => 'パスワードをメールでお送りしました',
+'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 バグ報告]をお願いします。
@@ -4331,10 +4354,10 @@ MediaWikiは、有用であることを期待して配布されていますが
 'api-error-stashfailed' => '内部エラー:サーバーは一時ファイルを格納できませんでした。',
 'api-error-timeout' => 'サーバーが決められた時間内に応答しませんでした。',
 'api-error-unclassified' => '不明なエラーが発生しました。',
-'api-error-unknown-code' => '不明なエラー「$1」',
+'api-error-unknown-code' => '不明なエラー:「$1」',
 'api-error-unknown-error' => '内部エラー:ファイルのアップロードの途中で問題が発生しました。',
-'api-error-unknown-warning' => '不明な警告「$1」',
-'api-error-unknownerror' => '不明なエラー「$1」',
+'api-error-unknown-warning' => '不明な警告:「$1」',
+'api-error-unknownerror' => '不明なエラー:「$1」',
 'api-error-uploaddisabled' => 'このウィキではアップロードは無効になっています。',
 'api-error-verification-error' => 'このファイルは壊れているか、間違った拡張子になっています。',
 
index 1d68f6e..637df82 100644 (file)
@@ -404,9 +404,6 @@ Di riizn dehn gi a "\'\'$2\'\'".',
 
 Yu kiahn kantiniu yuuz {{SITENAME}} ananimosli, ar yu kiahn <span class='plainlinks'>[$1 lag iin agen]</span> az di siem ar az difrant yuuza.
 Nuot se som piej maita kantiniu fi displie laik se yu stil log iin, antel yu klier yu brouza kiash.",
-'welcomecreation' => '== Welkom, $1! ==
-Yu akount don kriet.
-No figat fi chienj yu [[Special:Preferences|{{SITENAME}} prefransdem]].',
 'yourname' => 'Yuuzaniem:',
 'yourpassword' => 'Paaswod:',
 'yourpasswordagain' => 'Ritaip paaswod:',
@@ -667,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',
@@ -739,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',
 
@@ -829,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..331f912 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',
 
index cfc77ad..b37c7a0 100644 (file)
@@ -184,8 +184,8 @@ $messages = array(
 'newwindow' => '(buka ing jendhéla anyar)',
 'cancel' => 'Batalna',
 'moredotdotdot' => 'Liyané...',
-'mypage' => 'Kacaku',
-'mytalk' => 'Gunemanku',
+'mypage' => 'Kaca',
+'mytalk' => 'Wicara',
 'anontalk' => 'Dhiskusi IP puniki',
 'navigation' => 'Pandhu Arah',
 'and' => '&#32;Lan',
@@ -207,7 +207,7 @@ $messages = array(
 'vector-action-protect' => 'Reksa',
 'vector-action-undelete' => 'Batalna pambusakan',
 'vector-action-unprotect' => 'Owahi pangreksan',
-'vector-simplesearch-preference' => 'Aktifaken pamrayogi pamadosan ingkang kasampurnakaken (namung kulit vektor)',
+'vector-simplesearch-preference' => 'Urubaké wilah panggolèkan ringkes (namung kulit Vèktor)',
 'vector-view-create' => 'Gawé',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Sajarah kaca',
@@ -217,6 +217,7 @@ $messages = array(
 'namespaces' => 'Ruang jeneng',
 'variants' => 'Varian',
 
+'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Kasalahan',
 'returnto' => 'Bali menyang $1.',
 'tagline' => 'Saka {{SITENAME}}',
@@ -415,7 +416,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.',
@@ -450,9 +451,7 @@ 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.",
-'welcomecreation' => '== Sugeng rawuh, $1! ==
-
-Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.',
+'welcomeuser' => 'Sugeng Rawuh, $1!',
 'yourname' => 'Asma pangangeman',
 'yourpassword' => 'Tembung sandhi:',
 'yourpasswordagain' => 'Balènana tembung sandhi',
@@ -675,7 +674,7 @@ Yèn ora sengaja tekan kéné, bisa ngeklik pencètan '''back''' waé ing panjla
 utawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nyunting kaca iki]</span>.',
 'noarticletext-nopermission' => 'Saiki ora ana tèks ing kaca iki. 
 Sampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki judhul kaca iki]] nèng kaca liya, 
-utawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|kaca={{urlencode:{{FULLPAGENAME}}}}}} nggolèki log sing kaitan].',
+utawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|kaca={{urlencode:{{FULLPAGENAME}}}}}} nggolèki log sing kaitan]</span>, nanging Sampéyan ora nduwèni idin nggawé kaca iki.',
 'missing-revision' => 'Benahan #$1 saka kaca ajeneng "{{PAGENAME}}" ora ana.
 
 Iki biasané kasebabaké pranala riwayat sing kedaluwarsa saka kaca kuwi wis dibusak.
@@ -750,7 +749,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',
@@ -1054,7 +1052,7 @@ Rinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 
 # Preferences page
 'preferences' => 'Preferensi (pilihan)',
-'mypreferences' => 'Préferènsiku',
+'mypreferences' => 'Préferènsi',
 'prefs-edits' => 'Gunggungé suntingan:',
 'prefsnologin' => 'Durung mlebu log',
 'prefsnologintext' => 'Panjenengan kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}| mlebu log]</span> kanggo ngowahin préferènsi njenengan.',
@@ -1282,12 +1280,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',
@@ -1902,10 +1901,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é.
@@ -1962,7 +1957,7 @@ Alamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi
 
 # Watchlist
 'watchlist' => 'Daftar artikel pilihan',
-'mywatchlist' => 'Daftar pangawasanku',
+'mywatchlist' => 'Daftar pangawasan',
 'watchlistfor2' => 'Kanggo $1 $2',
 'nowatchlist' => 'Daftar pangawasan panjenengan kosong.',
 'watchlistanontext' => 'Mangga $1 kanggo mirsani utawa nyunting daftar pangawasan panjenengan.',
@@ -1998,11 +1993,7 @@ 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_newpagetext' => 'Iki sawijining kaca anyar.',
 'enotif_impersonal_salutation' => 'Panganggo {{SITENAME}}',
-'changed' => 'kaubah',
-'created' => 'kadamel',
-'enotif_subject' => 'Kaca $PAGETITLE ing {{SITENAME}} wis $CHANGEDORCREATED déning $PAGEEDITOR',
 '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',
@@ -2028,6 +2019,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',
@@ -2214,7 +2207,7 @@ $1',
 # Contributions
 'contributions' => 'Sumbangan panganggo',
 'contributions-title' => 'Kontribusi panganggo kanggo $1',
-'mycontris' => 'Kontribusiku',
+'mycontris' => 'Kontribusi',
 'contribsub2' => 'Kanggo $1 ($2)',
 'nocontribs' => 'Ora ditemokaké owah-owahan sing cocog karo kritéria kasebut iku.',
 'uctop' => ' (dhuwur)',
@@ -2255,7 +2248,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 pangalihan-pangalihan',
 'whatlinkshere-hidetrans' => '$1 transklusi',
 'whatlinkshere-hidelinks' => 'pranala-pranala $1',
-'whatlinkshere-hideimages' => '$1 pranala-pranala berkas',
+'whatlinkshere-hideimages' => '$1 pranala berkas',
 'whatlinkshere-filters' => 'Filter-filter',
 
 # Block/unblock
@@ -2693,11 +2686,22 @@ Mbokmanawa iki disebabaké anané pranala jaba sing klebu daftar ireng.',
 
 # Info page
 'pageinfo-title' => 'Inpormasi kanggo "$1"',
-'pageinfo-header-edits' => 'Suntingan',
+'pageinfo-header-edits' => 'Riwayat suntingan',
 'pageinfo-views' => 'Cacahing delokan',
-'pageinfo-watchers' => 'Cacahing pangawas',
-'pageinfo-edits' => 'Cacahing suntingan',
-'pageinfo-authors' => 'Cacahing beda-beda panganggit',
+'pageinfo-watchers' => 'Cacahé pangawas kaca',
+'pageinfo-lasttime' => 'Tanggal suntingan pungkasan',
+'pageinfo-edits' => 'Cacahé kabèh suntingan',
+'pageinfo-authors' => 'Cacahé kabèh panganggit sing bédha-bédha.',
+'pageinfo-recent-edits' => 'Cacahé suntingan saiki (ing $1 kapungkur)',
+'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-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-yes' => 'Iya',
 
 # Patrolling
 'markaspatrolleddiff' => 'Tandhanana wis dipatroli',
@@ -3470,11 +3474,12 @@ Gambar dituduhaké mawa résolusi kebak lan tipe liyané berkas bakal dibuka lan
 'logentry-move-move_redir-noredirect' => '$1 mindhahaké kaca $3 nèng $4 ngliwati pangalihan tanpa nginggalaké pangalihan',
 'logentry-patrol-patrol' => '$1 nandhai benahan $4 saka kaca $3 kaawasi',
 'logentry-patrol-patrol-auto' => '$1 otomatis nandhai benahan $4 saka kaca $3 kaawasai',
-'logentry-newusers-newusers' => '$1 nggawé akun panganggo',
-'logentry-newusers-create' => '$1 nggawé akun panganggo',
-'logentry-newusers-create2' => '$1 nggawé akun panganggo $3',
+'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-autocreate' => 'Akun $1 digawé otomatis',
 'newuserlog-byemail' => 'tembung sandhi wis dikirim liwat e-mail',
+'rightsnone' => '(ora ana)',
 
 # Feedback
 'feedback-bugornote' => 'Yèn Sampéyan siap njelasaké masalah tèhnis kanthi rinci mangga [$1 laporaké bug].
index a0fa0a4..4f673ff 100644 (file)
@@ -215,7 +215,7 @@ $messages = array(
 
 'underline-always' => 'მუდამ',
 'underline-never' => 'არასდროს',
-'underline-default' => 'á\83\91á\83 á\83\90á\83£á\83\96á\83\94á\83 á\83\98á\83¡ á\83£á\83\9eá\83\98á\83 á\83\9dá\83\91á\83\9d á\83\90á\83 á\83©á\83\94á\83\95á\83\90á\83\9cá\83\98',
+'underline-default' => 'á\83\93á\83\90á\83\9bá\83\9dá\83\99á\83\98á\83\93á\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\94á\83\9aá\83\96á\83\94 á\83\90á\83\9c á\83\91á\83 á\83\90á\83£á\83\96á\83\94á\83 á\83\98á\83¡ á\83\90á\83 á\83©á\83\94á\83\95á\83\90á\83\9cá\83\96á\83\94',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'რედაქტირების არის შრიფტის ტიპი:',
@@ -303,8 +303,9 @@ $messages = array(
 'newwindow' => '(ახალ ფანჯარაში)',
 'cancel' => 'გაუქმება',
 'moredotdotdot' => 'ვრცლად...',
-'mypage' => 'ჩემი გვერდი',
-'mytalk' => 'ჩემი განხილვა',
+'morenotlisted' => 'მეტი არ არის ნაჩვენები...',
+'mypage' => 'გვერდი',
+'mytalk' => 'განხილვა',
 'anontalk' => 'ამ IP-ს განხილვა',
 'navigation' => 'ნავიგაცია',
 'and' => '&#32;და',
@@ -336,6 +337,7 @@ $messages = array(
 'namespaces' => 'სახელთა სივრცე',
 'variants' => 'ვარიანტები',
 
+'navigation-heading' => 'სანავიგაციო მენიუ',
 'errorpagetitle' => 'შეცდომა',
 'returnto' => 'დაბრუნდი $1-ზე.',
 'tagline' => '{{SITENAME}} გვერდიდან',
@@ -550,7 +552,7 @@ $1',
 'viewsource-title' => 'იხილეთ წყარო გვერდისთვის $1',
 'actionthrottled' => 'სიჩქარის შეზღუდვა.',
 'actionthrottledtext' => 'სპამთან ბრძოლასთან დაკავშირებით აკრძალულია შემდეგი მონაცემების მრავალჯერ გამეორება. გთხოვთ გაიმეოროთ იგი მოგვიანებით.',
-'protectedpagetext' => 'ეს გვერდი დაბლოკილია რედაქტირებისთვის.',
+'protectedpagetext' => 'á\83\94á\83¡ á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83\9aá\83\98á\83\90 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\9c á\83¡á\83®á\83\95á\83\90 á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡.',
 'viewsourcetext' => 'თქვენ შეგიძლიათ ნახოთ ამ გვერდის საწყისი ფაილი და მისი ასლი შექმნათ:',
 'viewyourtext' => "თქვენ შეგიძლიათ იხილოთ და დააკოპიროთ  '''თქვენი რედაქტირებების''' საწყისი ტექსტი ამ გვერდზე:",
 'protectedinterface' => 'ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.',
@@ -585,8 +587,8 @@ $2',
 შეგიძლიათ გამოიყენოთ {{SITENAME}} ანონიმურად, ან შეგიძლიათ
 <span class='plainlinks'>[$1 შეხვიდეთ ისევ]</span> როგორც იგივე ან სხვა მომხმარებელი.
 შენიშნეთ, რომ ზოგიერთ გვერდზე შესაძლოა ისევ უჩვენებდეს რომ შესული ხართ სანამ თქვენი ბრაუზერის მეხსიერებას არ გაწმენდთ.",
-'welcomecreation' => '== მოგესალმებით, $1! ==
-თქვენი ანგარიში შექმნილია.
+'welcomeuser' => 'მოგესალმებით, $1!',
+'welcomecreation-msg' => 'თქვენი ანგარიში შექმნილია.
 არ დაგავიწყდეთ თქვენი [[Special:Preferences|{{SITENAME}}-ის კონფიგურაციის]] შეცვლა.',
 'yourname' => 'მომხმარებელი:',
 'yourpassword' => 'პაროლი:',
@@ -671,7 +673,7 @@ $1 საათში.',
 'cannotchangeemail' => 'ანგარიშის ელ-ფოსტის მისამართების შეცვლა ამ ვიკიში შეუძლებელია.',
 'emaildisabled' => 'ამ საიტს არ შეუძლია ელ.ფოსტის გაგზავნა.',
 'accountcreated' => 'ანგარიში შეიქმნა',
-'accountcreatedtext' => 'á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98 $1-á\83¡á\83\97á\83\95á\83\98á\83¡ á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\98á\83\9aá\83\98á\83\90.',
+'accountcreatedtext' => 'á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\98á\83\9aá\83\98á\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98 $1.',
 'createaccount-title' => 'ანგარიშის შექმნა {{SITENAME}}-თვის',
 'createaccount-text' => 'ვიღაცამ შექმნა ანგარიში სახელით „$2“ და პაროლით „$3“ თქვენი ელექტრონული ფოსტისთვის {{SITENAME}}-ში ($4). გთხოვთ დარეგისტრირდეთ და შეცვალოთ პაროლი.
 
@@ -753,6 +755,7 @@ $2
 'changeemail-oldemail' => 'ელ-ფოსტის ამჟამინდელი მისამართი:',
 'changeemail-newemail' => 'ახალი ელ-ფოსტის მისამართი:',
 'changeemail-none' => '(არაფერი)',
+'changeemail-password' => 'თქვენი პაროლი პროექტში {{SITENAME}}:',
 'changeemail-submit' => 'ელ-ფოსტის შეცვლა',
 'changeemail-cancel' => 'გაუქმება',
 
@@ -824,7 +827,7 @@ $2
 არ გაქვთ მითითებული თქვენს [[Special:Preferences|კონფიგურაციაში]] და არ ხართ დაბლოკილი მისი გამოყენებისთვის.
 
 თქვენი IP — $3. თქვენი დაბლოკვის საიდენტიფიკაციო ნომერია $5. გთხოვთ მიუთითოთ ეს ნომერი, ნებისმიერ მიმოწერაში.",
-'blockednoreason' => 'á\83¡á\83\90á\83\91á\83\90á\83\91á\83\98 á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83£á\83\9aá\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡',
+'blockednoreason' => 'á\83\9bá\83\98á\83\96á\83\94á\83\96á\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83£á\83\9aá\83\98',
 'whitelistedittext' => 'გვერდების რედაქტირებისათვის თქვენ გესაჭიროებათ $1.',
 'confirmedittext' => 'გვერდების დარედაქტირებამდე უნდა დაადასტუროთ თქვენი ელფოსტის მისამართი. გთხოვთ [[Special:Preferences|მომხმარებლის პარამეტრებში]] მიუთითოთ და დაამოწმოთ ელფოსტის მისამართი.',
 'nosuchsectiontitle' => 'სექცია არ არსებობს',
@@ -855,6 +858,10 @@ $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' => 'ეს მომხმარებელი უკვე დაიბლოკა.
@@ -912,10 +919,10 @@ $2
 *თქვენ აგრეთვე პირობას დებთ, რომ თქვენს მიერ განთავსებული ტექსტი თქვენი დაწერილია, ან გადმოწერილია საზოგადოებრივი დომენიდან ან მსგავსი თავისუფალი წყაროდან. (იხ. $1 დეტალებისთვის).
 *'''ნუ შემოიტანთ საავტორო უფლებებით დაცულ ნაშრომს ავტორის ნებართვის გარეშე!'''",
 'longpageerror' => "'''შეცდომა: თქვენს მიერ აკრეფილი ტექსტის ზომა {{PLURAL:$1|$1 კილობაიტია}}, რაც აღემატება, დადგენილ {{PLURAL:$2|$2 კილობაიტიან}} ზღვარს. გვერდის შენახვა შეუძლებელია.'''",
-'readonlywarning' => "'''გაფრთხილება''': მონაცემთა ბაზა დახურულია პერიოდული შემოწმებისთვის, შესაბამისად თქვენ ვერ შეძლებთ რედაქტირებას ამ მომენტში.
+'readonlywarning' => "'''გაფრთხილება: მონაცემთა ბაზა დახურულია პერიოდული შემოწმებისთვის, შესაბამისად თქვენ ვერ შეძლებთ რედაქტირებას ამ მომენტში.'''
 სასურველია ტექსტის ასლი შეინახოთ ტექსტურ რედაქტორში და მოგვიანებით შემოიტანოთ.
 
\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\97á\83\90 á\83\91á\83\90á\83\96á\83\98á\83\96 á\83\93á\83\90á\83\9bá\83\91á\83\9aá\83\9dá\83\99á\83\95á\83\94á\83\9aá\83\9bá\83\90 á\83\90á\83\93á\83\9bá\83\98á\83\9cá\83\98á\83¡á\83¢á\83 á\83\90á\83¢á\83\9dá\83 á\83\9bá\83\90 á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 á\83\9bá\83\98á\83\96á\83\94á\83\96ი დატოვა: $1",
\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\97á\83\90 á\83\91á\83\90á\83\96á\83\98á\83¡ á\83\93á\83\90á\83\9bá\83\91á\83\9aá\83\9dá\83\99á\83\95á\83\94á\83\9aá\83\9bá\83\90 á\83\90á\83\93á\83\9bá\83\98á\83\9cá\83\98á\83¡á\83¢á\83 á\83\90á\83¢á\83\9dá\83 á\83\9bá\83\90 á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 á\83\99á\83\9dá\83\9bá\83\94á\83\9cá\83¢á\83\90á\83 ი დატოვა: $1",
 'protectedpagewarning' => "'''ყურადღება:  ეს გვერდი დაბლოკილია და მისი რედაქტირება შეუძლიათ მხოლოდ მომხმარებლებს ადმინისტრატორის უფლებებით'''
 იხილეთ დაცვის ჟურნალის ჩანაწერი",
 'semiprotectedpagewarning' => "'''ყურადღება:''' ეს გვერდი დაბლოკილია და მისი რედაქტირება მხოლოდ რეგისტრირებულ მომხმარებლებს შეუძლიათ.
@@ -931,7 +938,6 @@ $2
 'hiddencategories' => 'ეს გვერდი გაერთიანებულია $1 დამალულ კატეგორიაში.',
 'edittools' => '<!-- აქ განთავსებული ტექსტი ნაჩვენები იქნება რედაქტირებისა და ატვირთვის ფორმების ქვეშ. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'გვერდის შექმნა ლიმიტირებულია',
 'nocreatetext' => 'ამ გვერდზე შეუძლებელია ახალი გვერდის შექმნა არსებული აკრძალვის გამო. თქვენ შეგიძლიათ უკან დაბრუნება და არსებული გვერდის რედაქტირება ან [[სპეციალური:Userlogin|შესვლა და ანგარიშის შექმნა]]',
 'nocreate-loggedin' => 'თქვენ არ გაქვთ ახალი გვერდების შექმნის უფლება.',
 'sectioneditnotsupported-title' => 'სექციის რედაქტირება ვერ ხერხდება',
@@ -1173,6 +1179,10 @@ $1",
 'editundo' => 'გაუქმება',
 'diff-multi' => '({{PLURAL:$2|ერთი მომხმარებლის|$2 მომხმარებლების}} {{PLURAL:$1|ერთი შუალედური ვერსია|$1 შუალედური ვერსიები}} არ არის ნაჩვენები.)',
 'diff-multi-manyusers' => '({{PLURAL:$2|ერთი მომხმარებლის|$2 მომხმარებლების}} {{PLURAL:$1|ერთი შუალედური ვერსია|$1 შუალედური ვერსიები}}, რომლებიც არ არის ნაჩვენები.)',
+'difference-missing-revision' => '{{PLURAL:$2|$2 ვერსია}} ამ შედარებისათვის ($1) {{PLURAL:$2|ვერ მოიძებნა}}.
+
+ეს ჩვეულებრივ ხდება მაშინ, თუ ვერსიების შედარების მოძველებული ბმულით გადადიხართ გვერდზე, რომელიც წაიშალა.
+დეტალური ინფორმაცია შესაძლებელია იყოს [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლების ჟურნალში].',
 
 # Search results
 'searchresults' => 'ძიების შედეგები',
@@ -1248,7 +1258,7 @@ $1",
 
 # Preferences page
 'preferences' => 'კონფიგურაცია',
-'mypreferences' => 'á\83©á\83\94á\83\9bá\83\98 á\83\99á\83\9dá\83\9cá\83¤á\83\98á\83\92á\83£á\83 á\83\90á\83ªá\83\98á\83\90',
+'mypreferences' => 'კონფიგურაცია',
 'prefs-edits' => 'რედაქციების რაოდენობა:',
 'prefsnologin' => 'შესული არ ხართ',
 'prefsnologintext' => 'თქვენ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} რეგისტრირებული უნდა იყოთ]</span> მომხმარებლის კონფიგურაციის შესაცვლელად.',
@@ -1323,9 +1333,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-memberingroups-type' => '$1',
 'prefs-registration' => 'რეგისტრაციის თარიღი',
 'prefs-registration-date-time' => '$1',
@@ -1377,7 +1387,7 @@ $1",
 'userrights-editusergroup' => 'რედაქტირება გაუკეთეთ მომხმარებელთა ჯგუფებს',
 'saveusergroups' => 'მომხმარებელთა ჯგუფების შენახვა',
 'userrights-groupsmember' => 'ჯგუფის წევრი:',
-'userrights-groupsmember-auto' => 'á\83\92á\83\90á\83£á\83\92á\83\94á\83\91á\83\90á\83 ი წევრი:',
+'userrights-groupsmember-auto' => 'á\83\9cá\83\90á\83\92á\83£á\83\9aá\83\98á\83¡á\83®á\83\9bá\83\94á\83\95ი წევრი:',
 'userrights-groups-help' => 'თქვენ შეგიძლიათ შეცვალოთ ჯგუფები, რომელშიც შედის ეს მომხმარებელი.
 * თუ ჯგუფის სახელწოდებასთან გაკეთებულია ნიშნული, ე.ი მომხმარებელი შედის ამ ჯგუფში.
 * თუ ნიშნული არ არის – მომხმარებელი არ განეკუთვნება არსებულ ჯგუფს.
@@ -1477,12 +1487,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' => 'ამ გვერდის კითხვა',
@@ -1653,7 +1664,7 @@ $1",
 თუ თქვენ მაინც გსურთ მისი ატვირთვა დაბრუნდით უკან და ატვირთეთ სხვა სახელით. [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'ფაილი ამ სახელწოდებით უკვე არსებობს ფაილების საერთო საცავში. თუ შეიძლება, უკან დაბრუნდით და ჩატვირთეთ ფაილი სხვა სახელწოდებით. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'ეს ფაილი არის შემდეგი {{PLURAL:$1|შემდეგი ფაილის|сშემდეგი ფაილების}} დუბლიკატი:',
-'file-deleted-duplicate' => 'á\83\9bá\83¡á\83\92á\83\90á\83\95á\83¡á\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98 ([[:$1]]) á\83£á\83\99á\83\95á\83\94 á\83¬á\83\90á\83¨á\83\9aá\83\98á\83\9aá\83\90. á\83\92á\83\97á\83®á\83\9dá\83\95á\83\97, á\83\92á\83\90á\83\94á\83ªá\83\90á\83\9cá\83\98á\83\97 á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83¬á\83\90á\83¨á\83\9aá\83\98á\83¡ á\83\98á\83¡á\83¢á\83\9dá\83 á\83\98á\83\90á\83¡, á\83\9bá\83\90á\83\9cá\83\90á\83\9bá\83\93á\83\94 á\83\95á\83\98á\83\93á\83 á\83\94 á\83\9bá\83\90á\83¡ á\83®á\83\94á\83\9aá\83\9bá\83\94á\83\9dá\83 á\83\94á\83\93 á\83\90á\83¢á\83\95á\83\98á\83 á\83¢ავთ.',
+'file-deleted-duplicate' => 'á\83\9bá\83¡á\83\92á\83\90á\83\95á\83¡á\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98 ([[:$1]]) á\83£á\83\99á\83\95á\83\94 á\83¬á\83\90á\83¨á\83\9aá\83\98á\83\9aá\83\90. á\83\92á\83\97á\83®á\83\9dá\83\95á\83\97, á\83\92á\83\90á\83\94á\83ªá\83\90á\83\9cá\83\98á\83\97 á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83¬á\83\90á\83¨á\83\9aá\83\98á\83¡ á\83\98á\83¡á\83¢á\83\9dá\83 á\83\98á\83\90á\83¡, á\83\9bá\83\90á\83\9cá\83\90á\83\9bá\83\93á\83\94 á\83\95á\83\98á\83\93á\83 á\83\94 á\83\9bá\83\90á\83¡ á\83®á\83\94á\83\9aá\83\9bá\83\94á\83\9dá\83 á\83\94á\83\93 á\83\90á\83¢á\83\95á\83\98á\83 á\83\97ავთ.',
 'uploadwarning' => 'გადატვირთვის შეხსენება',
 'uploadwarning-text' => 'გთხოვთ ჩაასწოროთ ფაილის აღწერა ქვევით და ხელმეორედ სცადოთ.',
 'savefile' => 'ფაილის შენახვა',
@@ -1709,6 +1720,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-ში ვერ მოხერხდა.',
@@ -1839,8 +1851,8 @@ $1',
 'filehist-missing' => 'ფაილი ვერ მოიძებნა',
 'imagelinks' => 'ფაილის გამოყენება',
 'linkstoimage' => 'მომდევნო {{PLURAL:$1|გვერდი|გვერდები}} ებმის ამ ფაილს:',
-'linkstoimage-more' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98\83¤ვერდების|გვერდები}} რომლებსაც აქვთ ბმულები ამ ფაილზე.
-В данном списке {{PLURAL:$1|წარმოდგენილია მხოლოდ $1 ბმული|წარმოდგენილია მხოლოდ $1 ბმულები|წარმოდგენილია მხოლოდ $1 ბმულების}} ამ ფაილზე
+'linkstoimage-more' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98\83\92ვერდების|გვერდები}} რომლებსაც აქვთ ბმულები ამ ფაილზე.
+მოცემულ სიაში {{PLURAL:$1|წარმოდგენილია მხოლოდ $1 ბმული|წარმოდგენილია მხოლოდ $1 ბმულები|წარმოდგენილია მხოლოდ $1 ბმულების}} ამ ფაილზე.
 შეგიძლიათ ნახოთ ასევე [[Special:WhatLinksHere/$2|სრული სია]].',
 'nolinkstoimage' => 'არ არსებობს ამ ფაილთან დაკავშირებული გვერდები.',
 'morelinkstoimage' => 'იხილეთ [[Special:WhatLinksHere/$1|სხვა ბმულები]] ამ ფაილზე.',
@@ -1895,7 +1907,7 @@ $1',
 
 # MIME search
 'mimesearch' => 'MIME ძიება',
-'mimesearch-summary' => 'ამ გვერდის მეშვეობით ესაძლებელია ფაილების მოძიება მათი MIME-ტიპის მიხედვით. შეტანის ფორმა: შიგთავსის ტიპი/ქვეტიპი, მაგ <code>image/jpeg</code>.',
+'mimesearch-summary' => 'á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83\9bá\83\94á\83¨á\83\95á\83\94á\83\9dá\83\91á\83\98á\83\97 á\83¨á\83\94á\83¡á\83\90á\83«á\83\9aá\83\94á\83\91á\83\94á\83\9aá\83\98á\83\90 á\83¤á\83\90á\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\9dá\83«á\83\98á\83\94á\83\91á\83\90 á\83\9bá\83\90á\83\97á\83\98 MIME-á\83¢á\83\98á\83\9eá\83\98á\83¡ á\83\9bá\83\98á\83®á\83\94á\83\93á\83\95á\83\98á\83\97. á\83¨á\83\94á\83¢á\83\90á\83\9cá\83\98á\83¡ á\83¤á\83\9dá\83 á\83\9bá\83\90: á\83¨á\83\98á\83\92á\83\97á\83\90á\83\95á\83¡á\83\98á\83¡ á\83¢á\83\98á\83\9eá\83\98\83¥á\83\95á\83\94á\83¢á\83\98á\83\9eá\83\98, á\83\9bá\83\90á\83\92 <code>image/jpeg</code>.',
 'mimetype' => 'MIME ტიპი:',
 'download' => 'გადმოტვირთვა',
 
@@ -1926,7 +1938,7 @@ $1',
 'statistics-header-views' => 'გვერდის მონახულების სტატისტიკა',
 'statistics-header-users' => 'მომხმარებლის სტატისტიკა',
 'statistics-header-hooks' => 'სხვა სტატისტიკა',
-'statistics-articles' => 'á\83¡á\83¢á\83\90á\83¢á\83\98á\83\94á\83\91á\83\98á\83¡',
+'statistics-articles' => 'á\83¡á\83¢á\83\90á\83¢á\83\98á\83\90',
 'statistics-pages' => 'გვერდები',
 'statistics-pages-desc' => 'ვიკის ყველა გვერდი, განხილვის, გადამისამართების და სხვ. ჩათვლით.',
 'statistics-files' => 'ატვირთული ფაილები',
@@ -1937,7 +1949,7 @@ $1',
 'statistics-views-peredit' => 'შესწორებათა ხილვა',
 'statistics-users' => 'დარეგისტრირებული [[Special:ListUsers|მომხმარებლები]]',
 'statistics-users-active' => 'აქტიური მომხმარებლები',
-'statistics-users-active-desc' => 'მომხმარებლები, რომლებმაც განახორციელეს ქმედება  {{PLURAL:$1|ბოლო $1 დღე|ბოლო  $1 დღის|ბოლო $1 დღეების}}',
+'statistics-users-active-desc' => 'მომხმარებლები, რომლებმაც განახორციელეს ქმედება {{PLURAL:$1|ბოლო $1 დღის|ბოლო $1 დღის}} განმავლობაში',
 'statistics-mostpopular' => 'ყველზე ხშირად ხილვადი გვერდები',
 
 'disambiguations' => 'გვერდები, რომელთაც აქვთ ბმული მრავალმნიშვნელოვან გვერდებზე',
@@ -2011,7 +2023,7 @@ $1',
 'protectedpages-indef' => 'მხოლოდ უვადო დაცვები',
 'protectedpages-cascade' => 'მხოლოდ კასკადური დაცვა',
 'protectedpagestext' => 'შემდეგი გვერდები დაცულია გადატანისა თუ ცვლილებებისგან.',
-'protectedpagesempty' => 'ამ დროისთვის არ არსებობს დაცული გვერდები მოთხოვნილი პარამეტრეით.',
+'protectedpagesempty' => 'á\83\90á\83\9b á\83\93á\83 á\83\9dá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83  á\83\90á\83 á\83¡á\83\94á\83\91á\83\9dá\83\91á\83¡ á\83\93á\83\90á\83ªá\83£á\83\9aá\83\98 á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98 á\83\9bá\83\9dá\83\97á\83®á\83\9dá\83\95á\83\9cá\83\98á\83\9aá\83\98 á\83\9eá\83\90á\83 á\83\90á\83\9bá\83\94á\83¢á\83 á\83\94á\83\91á\83\98á\83\97.',
 'protectedtitles' => 'დაცული სათაურები',
 'protectedtitlestext' => 'შემდეგი სახელების გამოყენება არ შეიძლება',
 'protectedtitlesempty' => 'ამ დროისთვის არ არსებობს მოთხოვნილი გვერდები მოცემული პარამეტრებით.',
@@ -2099,9 +2111,9 @@ $1',
 'linksearch-pat' => 'ძიების თარგი:',
 'linksearch-ns' => 'სახელთა სივრცე:',
 'linksearch-ok' => 'ძიება',
-'linksearch-text' => 'შესაძლებელია გამოიყენოთ ქვეხაზოვანი სიმბოლოები, მაგალითად, <code>*.wikipedia.org</code>.
-უკიდურეს შემთხვევაში საჭიროა ზედა დონის დომენი, მაგალითად <code>*.org</code><br />
-მხარდამჭერი პროტოკოლები: <code>$1</code> (არ დაამატოს ნებისმიერი მათგანი თქვენ სიაში)',
+'linksearch-text' => 'შესაძლებელია გამოიყენოთ ქვეხაზოვანი სიმბოლოები, მაგალითად, "*.wikipedia.org".
+უკიდურეს შემთხვევაში საჭიროა ზედა დონის დომენი, მაგალითად "*.org"<br />
+მხარდამჭერი {{PLURAL:$2|პროტოკოლი|პროტოკოლები}}: <code>$1</code> (სტანდარტულად http:// თუკი პროტოკოლი არ არის მითითებული)',
 'linksearch-line' => 'ბმულები $1-ზე  $2-დან',
 'linksearch-error' => 'წარმოდგენილი სიმბოლოების გამოყენება შესაძლებელია მხოლოდ მისამართის დასაწყისში.',
 
@@ -2120,10 +2132,6 @@ $1',
 'activeusers-hidesysops' => 'ადმინისტრატორების დამალვა',
 'activeusers-noresult' => 'მომხმარებლები არ არიან ნაპოვნი.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'მომხმარებლის რეგისტრაციის ჟურნალი',
-'newuserlogpagetext' => 'ბოლო დროს დარეგისტრირებულ მომხმარებელთა სია',
-
 # Special:ListGroupRights
 'listgrouprights' => 'მომხმარებელთა ჯგუფების უფლებები',
 'listgrouprights-summary' => 'ქვემოთ წარმოდგენილია ამ ვიკიში გარკვეულ ჯგუფთა სია და მათი უფლებები.
@@ -2141,7 +2149,7 @@ $1',
 'listgrouprights-addgroup-all' => 'ჩაამატეთ ყველა ჯგუფი',
 'listgrouprights-removegroup-all' => 'ყველა ჯგუფის წაშლა',
 'listgrouprights-addgroup-self' => 'შეუძლია ჩაუმატოს {{PLURAL:$2|ჯგუფი|ჯგუფები}} თავის ანგარიშს: $1',
-'listgrouprights-removegroup-self' => 'á\83¨á\83\94á\83£á\83«á\83\9aá\83\98á\83\90 á\83¬á\83\90á\83¨á\83\90á\83\9aá\83\9dá\83¡ {{PLURAL:$2|á\83¯á\83\92á\83§á\83¤á\83£|ჯგუფები}} თავისი ანგარიშიდან: $1',
+'listgrouprights-removegroup-self' => 'á\83¨á\83\94á\83£á\83«á\83\9aá\83\98á\83\90 á\83¬á\83\90á\83¨á\83\90á\83\9aá\83\9dá\83¡ {{PLURAL:$2|á\83¯á\83\92á\83£á\83¤á\83\98|ჯგუფები}} თავისი ანგარიშიდან: $1',
 'listgrouprights-addgroup-self-all' => 'შეუძლია ყელა ჯგუფია ჩამატება ანგარიშს.',
 'listgrouprights-removegroup-self-all' => 'შეუძლია თავისი ანგარიშის ყველა ჯგუფის წაშლა.',
 
@@ -2184,7 +2192,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'ჩემი კონტროლის სია',
-'mywatchlist' => 'á\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',
+'mywatchlist' => 'კონტროლის სია',
 'watchlistfor2' => '$1 ($2) თვის',
 'nowatchlist' => 'თქვენი კონტროლის სია ცარიელია.',
 'watchlistanontext' => '$1
@@ -2193,8 +2201,8 @@ $1',
 'watchnologin' => 'რეგისტრაცია ვერ შესრულდა',
 'watchnologintext' => 'თქვენ უნდა მოახდინოთ [[Special:UserLogin|რეგისტრაცია]] თქვენი კონტროლის სიის მოდიფიცირებისათვის.',
 'addwatch' => 'კონტროლის სიაში დამატება',
-'addedwatchtext' => "გვერდი „[[:$1]]“ დაემატა თქვენს [[Special:Watchlist|კონტროლის სიას]]. 
-ამ და მასთან დაკავშირებული განხილვის გვერდის შემდგომი ცვლილებები აისახება '''გამუქებულად''' [[Special:RecentChanges|ბოლო ცვლილებების სიაში]], რათა ადვილად დაინახოთ იგი. თუ გსურთ მისი კონტროლის სიიდან ამოშლა, დააწკაპეთ „კონტროლის მოხსნას“ ზედა დაფაზე.",
+'addedwatchtext' => 'გვერდი „[[:$1]]“ დაემატა თქვენს [[Special:Watchlist|კონტროლის სიას]].
+ამ და მასთან დაკავშირებული განხილვის გვერდის შემდგომი ცვლილებები აისახება იქ.',
 'removewatch' => 'კონტროლის სიიდან წაშლა',
 'removedwatchtext' => 'გვერდი „[[:$1]]“ ამოღებულია თქვენი [[Special:Watchlist|კონტროლის სიიდან]].',
 'watch' => 'კონტროლი',
@@ -2222,19 +2230,23 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}}. ელ. ფოსტით შეტყობინების სამსახური',
 'enotif_reset' => 'აღნიშნე ყველა გვერდი, როგორც გადასინჯული',
-'enotif_newpagetext' => 'ეს არის ახალი გვერდი.',
 'enotif_impersonal_salutation' => 'ვიკიპედიის მომხმარებელი',
-'changed' => 'შეცვლილი',
-'created' => 'შექმნილია',
-'enotif_subject' => '{{SITENAME}}: გვერდი $PAGETITLE $CHANGEDORCREATED იქნა მომხმარებლის $PAGEEDITOR მიერ',
+'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' => '$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',
+'enotif_body_intro_changed' => '$PAGEEDITDATE {{gender:$2|მომხმარებელმა}} $2 შეცვალა გვერდი პროექტიდან „{{SITENAME}}“ სახელწოდებით „$1“, მიმდინარე ვერსია იხილიეთ ბმულზე: $3',
 'enotif_lastvisited' => 'იხ. $1 ყველა ცვლილებისთვის თქვენი ბოლო შემოსვლის შემდეგ.',
 'enotif_lastdiff' => 'იხილეთ $1 ამ ცვლილების სანახავად.',
 'enotif_anon_editor' => 'ანონიმური მომხმარებელი $1',
-'enotif_body' => 'á\83\9eá\83\90á\83¢á\83\98á\83\95á\83ªá\83\94á\83\9bá\83£á\83\9aო $WATCHINGUSERNAME,
+'enotif_body' => 'á\83«á\83\95á\83\98á\83 á\83¤á\83\90á\83¡ო $WATCHINGUSERNAME,
 
-პროექტ "{{SITENAME}}"-ის გვერდი $PAGETITLE შეიცვალა $CHANGEDORCREATED $PAGEEDITDATE მომხმარებელ $PAGEEDITOR-ის მიერ, მინდინარე ვერსიის სანახავად იხილეთ $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 ცვლილების მოკლე აღწერა: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2242,10 +2254,9 @@ $NEWPAGE
 ელ.ფოსტა: $PAGEEDITOR_EMAIL
 ვიკი: $PAGEEDITOR_WIKI
 
-შემდგომი ცვლილებების შესახებ შეტყობინებების მისაღებად ამ გვერდს კვლავ უნდა ესტუმროთ.
-აგრეთვე შეგიძლიათ აღადგინოთ შეტყობინებათა პარამეტრები თქვენს კონტროლის სიაში შეტანილი ყველა საკონტროლო გვერდისათვის.
+შემდგომი ცვლილებების შესახებ შეტყობინებების მისაღებად ამ გვერდს კვლავ უნდა ესტუმროთ. თქვენ აგრეთვე შეგიძლიათ თქვენ კონტროლის სიაში გათიშოთ შეტყობინების ფუნქცია ყველა გვერდისათვის.
 
-             {{SITENAME}} შეტყობინებათა სისტემა
+                        {{SITENAME}} შეტყობინებათა სისტემა
 
 --
 შეტყობინების პარამეტრების ცვლილება
@@ -2259,6 +2270,8 @@ $UNWATCHURL
 
 დამატებითი ინფორმაცია
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'შექმნილია',
+'changed' => 'შეცვლილი',
 
 # Delete
 'deletepage' => 'გვერდის წაშლა',
@@ -2294,7 +2307,7 @@ $UNWATCHURL
 იმოქმედეთ სიფრთხილით.',
 
 # Rollback
-'rollback' => 'á\83 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83\92á\83\90á\83£á\83¥á\83\9bá\83\94á\83\91á\83\90',
+'rollback' => 'ცვლილებების გაუქმება',
 'rollback_short' => 'სწრაფი გაუქმება',
 'rollbacklink' => 'სწრაფი გაუქმება',
 'rollbacklinkcount' => '$1 {{PLURAL:$1|ცვლილების|ცვლილების}} გაუქმება',
@@ -2344,7 +2357,7 @@ $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-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' => 'ახალი და არარეგისტრირებული მომხმარებლებისაგან დაცვა',
 'protect-level-sysop' => 'მხოლოდ ადმინისტრატორები',
 'protect-summary-cascade' => 'იერარქიული',
@@ -2398,7 +2411,7 @@ $UNWATCHURL
 'undeleterevdel' => 'აღდგენა არ შესრულდება, თუ ის გამოიწვევს გვერდის ბოლო ვერსიის ან ფაილის ნაწილობრივ წაშლას.
 ასეთ შემთხვევაში თქვენ უნდა მოხსნათ ნიშნული ან აჩვენოთ ბოლო წაშლილი ვერსიები.',
 'undeletehistorynoadmin' => 'ეს სტატია წაშლილია. წაშლის მიზეზი ნაჩვენებია მოკლე ანოტაციაში ქვემოთ, იმ მომხმარებელთა დეტალებთან ერთად ვინც რედაქტირება გაუკეთა ამ გვერდს წაშლის წინ. იმ წაშლილი ტექსტების აქტუალური ვერსიები მიღწევადია მხოლოდ ადმინისტრატორებისათვის.',
-'undelete-revision' => 'წაიშალა ვერსია $1 ($4-დან  $5) მომხმარებლის $3:',
+'undelete-revision' => '$1-ის წაშლილი ვერსია ($5, $4-ის მდგომარეობით), შენახული მომხმარებლის $3 მიერ:',
 'undeleterevision-missing' => 'არასწორი ან არარსებული ვერსია. სავარაუდოდ ქვენ გადახვედით არასწორ ბმულზე, ან იგი წაიშალა არქივიდან.',
 'undelete-nodiff' => 'წინა ცვლილება ვერ ვიპოვეთ.',
 'undeletebtn' => 'აღდგენა',
@@ -2443,9 +2456,9 @@ $1',
 'blanknamespace' => '(მთავარი)',
 
 # Contributions
-'contributions' => 'მომხმარებლის წვლილი',
+'contributions' => '{{GENDER:$1|მომხმარებელი}} წვლილი',
 'contributions-title' => 'მომხმარებლის წვლილი $1',
-'mycontris' => 'á\83©á\83\94á\83\9bá\83\98 á\83¬á\83\95á\83\9aá\83\98á\83\9aá\83\98',
+'mycontris' => 'წვლილი',
 'contribsub2' => '$1 ($2) თვის',
 'nocontribs' => 'ძებნისას მითითებული პარამეტრების შესაბამისი არც ერთი ცვლილება ნაპოვნი არ არის',
 'uctop' => '(თავი)',
@@ -2530,7 +2543,7 @@ $1',
 'badipaddress' => 'არასწორი IP მისამართი',
 'blockipsuccesssub' => 'ბლოკირება შესრულებულია',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ბლოკირებულ იქნა.<br />
-იხილეთ [[Special:BlockList|ბლოკირებების სია]].',
\83\98á\83®á\83\98á\83\9aá\83\94á\83\97 [[Special:BlockList|á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 IP á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\94á\83\91á\83\98á\83¡ á\83¡á\83\98á\83\90]].',
 'ipb-blockingself' => 'თქვენ აპირებთ დაბლოკოთ საკუთარი თავი! დარწმუნებული ხართ, რომ გსურთ ამის გაკეთება?',
 'ipb-confirmhideuser' => 'თქვენ აპირებთ მომხმარებლის დაბლოკვას და ჩართული გაქვთ ოპცია „დამალე მომხმარებელი“. ასეთი ქმედება აღკვეთს მომხმარებლის სახელს ყველა სიიდან და ჟურნალების ჩანაწერებიდან. დარწმუნებული ხართ, რომ ამის გაკეთება გსურთ?',
 'ipb-edit-dropdown' => 'დაბლოკვის მიზეზების რედაქტირება',
@@ -2843,7 +2856,7 @@ $1',
 'tooltip-pt-anonuserpage' => 'ჩემი IP-ის მქონე მომხმარებლის გვერდი',
 'tooltip-pt-mytalk' => 'თქვენი განხილვის გვერდი',
 'tooltip-pt-anontalk' => 'ჩემი  IP-ის განხილვის გვერდი',
-'tooltip-pt-preferences' => 'á\83©á\83\94á\83\9bი კონფიგურაცია',
+'tooltip-pt-preferences' => 'á\83\97á\83¥á\83\95á\83\94á\83\9cი კონფიგურაცია',
 'tooltip-pt-watchlist' => 'გვერდების სია, რომელთა ცვლილებებს თქვენ უთვალთვალებთ',
 'tooltip-pt-mycontris' => 'თქვენი წვლილის სია',
 'tooltip-pt-login' => 'სასურველია დარეგისტრირდეთ, თუმცა აუცილებელია არაა.',
@@ -2943,8 +2956,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-თან',
@@ -2953,7 +2966,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'ინფორმაცია „$1“-თვის',
-'pageinfo-not-current' => 'á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\94á\83\91á\83\98 á\83¬á\83\90á\83 á\83\9bá\83\9dá\83\93á\83\92á\83\94á\83\9cá\83\98á\83\9aá\83\98á\83\90 á\83\9bá\83®á\83\9dá\83\9aá\83\9dá\83\93 á\83\9bá\83\98á\83\9bá\83\93á\83\98á\83\9cá\83\90á\83 á\83\94 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡.',
+'pageinfo-not-current' => 'á\83\91á\83\9dá\83\93á\83\98á\83¨á\83\98, á\83\94á\83¡ á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90 á\83¨á\83\94á\83\98á\83«á\83\9aá\83\94á\83\91á\83\90 á\83\90á\83  á\83\98á\83§á\83\9dá\83¡ á\83«á\83\95á\83\94á\83\9a á\83\95á\83\94á\83 á\83¡á\83\98á\83\94á\83\91á\83¨á\83\98.',
 'pageinfo-header-basic' => 'საბაზისო ინფორმაცია',
 'pageinfo-header-edits' => 'რედაქტირების ისტორია',
 'pageinfo-header-restrictions' => 'გვერდის დაცვა',
@@ -2962,6 +2975,7 @@ $1',
 'pageinfo-default-sort' => 'სტანდარტული სორტირების გასაღები',
 'pageinfo-length' => 'გვერდის სიგრძე (ბაიტებში)',
 'pageinfo-article-id' => 'გვერდის ID',
+'pageinfo-language' => 'გვერდის შინაარსის ენა',
 'pageinfo-robot-policy' => 'საძიებო სისტემის სტატუსი',
 'pageinfo-robot-index' => 'ინდექსირდება',
 'pageinfo-robot-noindex' => 'არ ინდექსირდება',
@@ -2983,9 +2997,13 @@ $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' => 'კლასიკური',
@@ -2999,15 +3017,17 @@ $1',
 'skinname-vector' => 'ვექტორული',
 
 # Patrolling
-'markaspatrolleddiff' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83\94 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83\9dლირებული',
+'markaspatrolleddiff' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83\94 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83£ლირებული',
 'markaspatrolledtext' => 'მონიშნე ეს სტატია როგორც პატრულირებული',
-'markedaspatrolled' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83\9dლირებული',
-'markedaspatrolledtext' => 'á\83\90á\83 á\83©á\83\94á\83£á\83\9aá\83\98 á\83\95á\83\94á\83 á\83¡á\83\98á\83\90 [[:$1]] á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83¨á\83\94á\83\9bá\83\9dá\83¬á\83\9bებული',
+'markedaspatrolled' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83£ლირებული',
+'markedaspatrolledtext' => 'á\83\90á\83 á\83©á\83\94á\83£á\83\9aá\83\98 á\83\95á\83\94á\83 á\83¡á\83\98á\83\90 [[:$1]] á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83£á\83\9aá\83\98á\83 ებული',
 'rcpatroldisabled' => 'ბოლო ცვლილებების პატრულირება აკრძალულია',
 'rcpatroldisabledtext' => 'ბოლო ცვლილებების პატრულირების შესაძლებლობა ამ მომენტისთვის გათიშულია',
 'markedaspatrollederror' => 'შეუძლებელია ამ სტატიის მოhttp://translatewiki.net/w/i.php?title=MediaWiki:Markedaspatrollederror/ka&action=edit&loadgroup=core&loadtask=untranslatedნიშნვნა პატრულირებულად.',
 'markedaspatrollederrortext' => 'თქვენ უნდა მონიშნოთ ვერსია, რომელიც პატრულირებულად ჩაითვლება.',
-'markedaspatrollederror-noautopatrol' => 'თქვენ ვერ მონიშნავთ ამ შესწორებას შემოწმებულად.',
+'markedaspatrollederror-noautopatrol' => 'თქვენ ვერ მონიშნავთ თქვენივე შესწორებებს პატრულირებულად.',
+'markedaspatrollednotify' => 'ეს ცვლილება გვერდზე $1 პატრულირებულად მოინიშნა.',
+'markedaspatrollederrornotify' => 'პატრულირებულად მონიშვნა ვერ მოხერხდა.',
 
 # Patrol log
 'patrol-log-page' => 'პატრულირების ჟურნალი',
@@ -3042,6 +3062,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.',
@@ -3077,6 +3098,7 @@ $1',
 'hours' => '$1 საათის',
 'days' => '$1 დღის',
 'ago' => '$1 წინ',
+'just-now' => 'ახლახანს',
 
 # Bad image list
 'bad_image_list' => 'ფორმატი შემდეგია:
@@ -3372,7 +3394,7 @@ $8',
 'exif-lightsource-9' => 'კარგი ამინდი',
 'exif-lightsource-10' => 'მოღრუბლული ამინდი',
 'exif-lightsource-11' => 'ჩრდილი',
-'exif-lightsource-12' => 'ღის სინათლის ნათურა D (5700 − 7100K)',
+'exif-lightsource-12' => 'á\83\93á\83¦á\83\98á\83¡ á\83¡á\83\98á\83\9cá\83\90á\83\97á\83\9aá\83\98á\83¡ á\83\9cá\83\90á\83\97á\83£á\83 á\83\90 D (5700 â\88\92 7100K)',
 'exif-lightsource-13' => 'დღის სინათლის ნათურა N(4600 − 5400K)',
 'exif-lightsource-14' => 'დღის სინათლის ნათურა W (3900 − 4500K)',
 'exif-lightsource-15' => 'დღის სინათლის ნათურა WW (3200 − 3700K)',
@@ -3761,6 +3783,7 @@ $5
 'version-license' => 'ლიცენზია',
 'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[//www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'სხვები',
+'version-credits-summary' => 'გვინდა მადლობა გადავუხადოთ შემდეგ მომხმარებლებს მათი წვლილისათვის [[Special:Version|მედიავიკის]] განვითარებაში.',
 'version-license-info' => 'MediaWiki არის თავისუფალი პროგრამული უზრუნველყოფა; შეგიძლიათ მისი გავრცელება ან/და მოდიფიცირება GNU General Public License ლიცენზიის პირობების შესაბამისად. როგორც გამოქვეყნებულია თავისუფალი პროგრამული უზრუნველყოფის ფონდის მიერ; ან ლიცენზიის მეორე ვერსიაში, ან (თქვენი აზრით) უფრო ახალში.
 
 MediaWiki ვრცელდება იმ იმედით, რომ ის სასარგებლო იქნება, მაგრამ გარანტიის გარეშე; კომერციული ღირებულების ნაგულისხმევი გარანტიის გარეშეც კი ან რაიმე მიზნისთვის სარგებლის მისაღებად. მეტი დეტალური ინფორმაციისთვის, იხილეთ GNU General Public License.
@@ -3873,7 +3896,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'sqlite-no-fts' => '$1 სრული ტექსტის ძიების მხარდაჭერის გარეშე',
 
 # New logging system
-'logentry-delete-delete' => '$1 წაშალა გვერდი: „$3“',
+'logentry-delete-delete' => 'მომხმარებელმა $1 წაშალა გვერდი: „$3“',
 'logentry-delete-restore' => '$1 აღადგინა გვერდი $3',
 'logentry-delete-event' => '$1 შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
 'logentry-delete-revision' => '$1 შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა გვერდისათვის $3: $4',
@@ -3892,17 +3915,21 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 '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' => 'მომხმარებელმა $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 გააკეთა გვერდის „$3“ $4 ვერსიის პატრულირება',
 'logentry-patrol-patrol-auto' => '$1 ავტომატურად გააკეთა გვერდის „$3“ $4 ვერსიის პატრულირება',
-'logentry-newusers-newusers' => '$1 შექმნა მომხმარებლის ანგარიში',
-'logentry-newusers-create' => '$1 შექმნა მომხმარებლის ანგარიში',
-'logentry-newusers-create2' => '$1 შექმნა მომხმარებელ $3 ანგარიში',
-'logentry-newusers-autocreate' => 'á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98 $1 á\83\90á\83\95á\83¢á\83\9dá\83\9bá\83\90á\83¢á\83£á\83 á\83\90á\83\93 á\83¨á\83\94á\83\98á\83¥á\83\9bá\83\9cá\83\90',
+'logentry-newusers-newusers' => 'მომხმარებლის ანგარიში $1 შექმნილია',
+'logentry-newusers-create' => 'შეიქმნა მომხმარებლის ანგარიში $1',
+'logentry-newusers-create2' => 'მომხმარებლის ანგარიში $3 შექმნა მომხმარებელმა $1',
+'logentry-newusers-autocreate' => 'á\83\90á\83\95á\83¢á\83\9dá\83\9bá\83\90á\83¢á\83£á\83 á\83\90á\83\93 á\83¨á\83\94á\83\98á\83¥á\83\9bá\83\9cá\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98 $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 8b12cf6..cbbb01f 100644 (file)
@@ -512,10 +512,6 @@ Keltirilgen sebep: ''$2''.",
 Siz {{SITENAME}} saytınan anonim halda paydalanıwın'ız mu'mkin.
 Yamasa siz ja'ne ha'zirgi yaki basqa paydalanıwshı atı menen <span class='plainlinks'>[$1 qaytadan sistemag'a kiriwin'izge]</span> boladı.
 Sonı este saqlan', ayrım betler sizin' brauzerin'izdin' keshi tazalanbag'anlıg'ı sebebli sistemada kirgenin'izdey ko'riniste dawam ettire beriwi mu'mkin.",
-'welcomecreation' => "== Xosh keldin'iz, $1! ==
-
-Akkauntın'ız jaratıldı.
-[[Special:Preferences|{{SITENAME}} sazlawların'ızdı]] o'zgertiwdi umıtpan'.",
 'yourname' => 'Paydalanıwshı atı:',
 'yourpassword' => 'Parol:',
 'yourpasswordagain' => "Paroldi qayta kiritin':",
@@ -705,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.",
@@ -1019,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',
@@ -1370,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,14 +1424,12 @@ Eger siz bul betti baqlaw dizimin'izden o'shirmekshi bolsan'ız bettin' joqarg'
 
 'enotif_mailer' => '{{SITENAME}} eskertiw xatın jiberiw xızmeti',
 'enotif_reset' => "Barlıq betti ko'rip shıg'ıldı dep belgile",
-'enotif_newpagetext' => 'Bul taza bet.',
 'enotif_impersonal_salutation' => '{{SITENAME}} paydalanıwshısı',
-'changed' => "o'zgertilgen",
-'created' => "jaratılg'an",
-'enotif_subject' => '{{SITENAME}} proektindegi $PAGEEDITOR $PAGETITLE atamalı betti $CHANGEDORCREATED',
 '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",
@@ -1952,5 +1943,6 @@ Bul tastıyıqlaw kodının' pitetug'ın waqtı: $4.",
 '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 f5531d0..a3f2e0c 100644 (file)
@@ -445,10 +445,6 @@ Anedbal i tid sekkweṛen yefkad taɣẓint agi : « $3 ».',
 
 Tzemreḍ ad tesseqdceḍ {{SITENAME}} d udrig, <span class='plainlinks'>[$1 ad tkecmeḍ daɣen]</span> s yisem n wemseqdac inek (neɣ nniḍen).
 Kra n isebtar zemren ad sskanen belli mazal-ik s yisem n wemseqdac inek armi temḥuḍ lkac.",
-'welcomecreation' => '== Anṣuf yisek (yisem), $1 ! ==
-
-Amiḍan ik (im) yesnulfad.
-Ur tettuḍ ara ad tbeddleḍ [[Special:Preferences|isemyifiyen inek (inem) ɣef {{SITENAME}}]].',
 'yourname' => 'Isem n wemseqdac',
 'yourpassword' => 'Awal n tbaḍnit',
 'yourpasswordagain' => 'Ɛiwed ssekcem awal n tbaḍnit',
@@ -760,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.',
@@ -1302,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',
@@ -1935,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.
@@ -2037,11 +2029,7 @@ Ma tebɣiḍ ad tekkseḍ asebter seg wumuɣ n uɛessi inek, wekki ɣef \"Fakk a
 
 'enotif_mailer' => 'Email n talɣut n {{SITENAME}}',
 'enotif_reset' => 'Rcem akk isebtar mmeẓren',
-'enotif_newpagetext' => 'Wagi d asebter amaynut.',
 'enotif_impersonal_salutation' => 'Amseqdac n {{SITENAME}}',
-'changed' => 'yettubeddel',
-'created' => 'yettwaxleq',
-'enotif_subject' => 'Asebter $PAGETITLE n {{SITENAME}} $CHANGEDORCREATED sɣur $PAGEEDITOR',
 'enotif_lastvisited' => 'Ẓer $1 i akk ibeddlen segwasmi tkecmeḍ tikelt taneggarut.',
 'enotif_lastdiff' => 'Ẓer $1 akken ad tmuqleḍ abeddel.',
 'enotif_anon_editor' => 'aseqdac ur i siggezen ara $1',
@@ -2074,6 +2062,8 @@ $UNWATCHURL
 
 Tuɣalin d tadhelt :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yettwaxleq',
+'changed' => 'yettubeddel',
 
 # Delete
 'deletepage' => 'Mḥu asebter',
@@ -2549,6 +2539,7 @@ Lukan a t-tesseqdceḍ yezmer ad yexsser aselkim inek/inem.",
 'hours' => '{{PLURAL:$1|$1 asrag|$1 isragen}}',
 'days' => '{{PLURAL:$1|$1 ass|$1 ussan}}',
 'ago' => '$1 aya',
+'just-now' => 'Tura kan',
 
 # Bad image list
 'bad_image_list' => 'Amasal d-wagi :
@@ -3012,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 4d79af7..7071b00 100644 (file)
@@ -409,9 +409,6 @@ $2',
 
 Уихьэжьыфыну {{grammar:genitive|{{SITENAME}}}} зыкъумгъэцӀыху иэ <span class='plainlinks'>[$1 зыкъегъэцӀыхун аргуэру]</span> уи цӀэмкӀэ иэ нэмыщӀымкӀэ.
 НапэкӀуэцӀ гуэрэхэр япэми хуэду къикӀыфынухэ, системэм уимыкӀыжьа хуэду. Апхуэду щымытын щхьэкӀэ браузэр кэшыр къэгъэщӀырыщӀын хуэй.",
-'welcomecreation' => '== Къеблагъэ, $1! ==
-Уи аккаунтыр хьэзырщ.
-Зыщумгъэгъупшэ сайтым уи [[Special:Preferences|персонал зэгъэзэхуэгъуэ]] быщӀын.',
 'yourname' => 'Уи цӀэр:',
 'yourpassword' => 'Пэролыр:',
 'yourpasswordagain' => 'Иджыри зэ пэролыр:',
@@ -689,7 +686,6 @@ $2',
 'template-protected' => '(теубыдащ)',
 'template-semiprotected' => '(иныкъуэр теубыдащ)',
 'hiddencategories' => 'Мы напэкӀуэцӀыр зхэхьэр $1 {{PLURAL:$1|1 категориэ зэхуэща|$1 категориэ зэхуэщахэр}}:',
-'nocreatetitle' => 'НапэкӀуэцӀ щӀыныр тубыдащ',
 'nocreatetext' => 'Мы сайтым деж ныпэкӀуэцӀ щӀэуэ щӀынхэм щхьэкӀэ теубыдыгъуэ щыӀэщ.
 Бгъэзэжу, напэкӀуэцӀ щыӀэр бгъэтэрэзыфынущ, [[Special:UserLogin|системэмэ зыкъегъэцӀыхун иэ щӀэуэ аккаунт щӀын]].',
 'nocreate-loggedin' => 'НапэкӀуэцӀыщӀэ пщӀыну хуитыныгъэ уиӀэкъым.',
@@ -979,6 +975,9 @@ $1",
 
 'grouppage-sysop' => '{{ns:project}}:Тхьэмадэхэр',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ЦӀыхухэтхэм я регистрациэ тхылъ',
+
 # User rights log
 'rightslog' => 'Хэтым пӀалъэ иӀэхэм я тхылъ',
 
@@ -1075,9 +1074,6 @@ $1",
 # Special:LinkSearch
 'linksearch' => 'КІуэцІ техьэпІэхэр',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ЦӀыхухэтхэм я регистрациэ тхылъ',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(гупым и тхылъ)',
 
index a685766..0470242 100644 (file)
@@ -237,6 +237,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}}',
@@ -283,6 +284,8 @@ $1',
 'toc' => 'فہرست',
 'showtoc' => 'پشاوے',
 'hidetoc' => 'کھوشتاوے',
+'collapsible-collapse' => 'خاتمہ/Collapse',
+'collapsible-expand' => 'فراخ کورے',
 'thisisdeleted' => 'لوڑے  یا بحال کورے $1',
 'viewdeleted' => 'لوڑے $1؟',
 'restorelink' => '{{PLURAL:$1|ای ترمیم حذف ہوی|$1 ترامیم حذف ہونی}}',
@@ -386,13 +389,10 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 # Login and logout pages
 'logouttext' => "'''ھنیسے تو خارج بیتی آسوس'''<br />
 تو خفی الاسم {{SITENAME}}  استعمال جاری لاکھیکو بوس، یا دوبارہ ھیہ نامو یا مختلف نامان سورا داخل دی بیکو بوس۔  ھیہ یاد آوری کورے کہ ای کما صفحات ھش <span class='plainlinks'>[\$1 دوباری لاگن بوس]</span> غیچھی گونی کہ تو ھنیسے خارج نو بیتی آسوس، کلہ پت کہ تو تان تفصحہ (براؤزرو) ابطن (cache) صاف نوکوروس۔\",",
-'welcomecreation' => '== رحمت عزیز چترالی تتے خوشان گیے ریران، $1 ! ==
-
-تہ  کھاتہ ساوزینو بیتی شیر تو تان [[Special:Preferences|{{SITENAME}} ترجیحات]]ن مرتب کوریکو مو روخڅے.',
 'yourname' => 'اسمِ رکنیت',
 'yourpassword' => 'کلمۂ شناخت(پاسورڈ)',
 'yourpasswordagain' => 'کلمۂ شناخت(پاسورڈو)دوبارہ نیویشے',
-'remembermypassword' => '!!Rachitrali!!مہ یاد لاکھے (کم از کم $1 {{PLURAL:$1|بس|بس}})',
+'remembermypassword' => 'ھیہ براوزیرا مہ داخلِ نوشتگی معلوماتن یاد لاکھے (زیاتاری زیات $1 {{PLURAL:$1|بس|بسان}} بچے)',
 'yourdomainname' => 'تہ ڈومین',
 'externaldberror' => 'یا تھے توثیقی ڈیٹابیسا خطا واقع بیتی شیر یا تتے بیریو کھاتو بتاریخ کوریکو اِجازت نیکی',
 'login' => 'داخل بوس',
@@ -480,6 +480,11 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 
 # Special:PasswordReset
 'passwordreset' => 'پاسورڈو ری سیٹ کورے',
+'passwordreset-username' => 'ممبارو نم',
+
+# Special:ChangeEmail
+'changeemail-none' => '(نو)',
+'changeemail-cancel' => 'کھینسل',
 
 # Edit page toolbar
 'bold_sample' => 'بوسک متن',
@@ -556,8 +561,15 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'moveddeleted-notice' => 'ھیہ ای حذف شدہ صفحہ شیر.
 صفحو نوشتۂ حذف شدگی و منتقلی ذیلا بطورِ حوالہ دیونو بویان.',
 
+# Content models
+'content-model-javascript' => 'جاوا اسکرپٹ',
+
 # Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''خبردار:''' سانچو سایز بو لوٹ شیر.
+بعضی سانچہ شامل نو بونی.",
 'post-expand-template-inclusion-category' => 'ھش صفحات کہ ھتیرا ٹمپلیٹ یعنی سانچو ناپ لوٹ بیتی شیر۔',
+'post-expand-template-argument-warning' => "'''خبردار:''' ھیہ صفحا ای سانچہ(ٹمپلیٹ) مشقولگی دیونو بیتی شیر وا ھمو سایز بولوٹ شیر۔
+ھمی لوان نیزونو بیتی شیر",
 'post-expand-template-argument-category' => 'ھش صفحات کہ ھتیرا بوغینو بیرو سانچان یعنی(ٹمپلیٹان) لو شینی۔',
 
 # History pages
@@ -569,6 +581,7 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'nextrevision' => '→پروشٹیو اعادہ',
 'currentrevisionlink' => 'حالیہ نظرثانی',
 'cur' => 'رائج',
+'next' => 'پروشٹیو',
 'last' => 'سابقہ',
 'histlegend' => "انتخاب: مختلف نسخان موازنہ کوریکو بچے ، پیامی خانان نشان زد کوری موڑا دیرو بٹنا کلک کورے۔
 
@@ -579,12 +592,16 @@ 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' => 'ویزیبل رویژنز',
@@ -645,10 +662,12 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'powersearch-ns' => 'جائے ناما تلاش:',
 'powersearch-redir' => 'فہرستِ رجوع مکرر',
 'powersearch-field' => 'تلاش برائے',
+'powersearch-toggleall' => 'سف',
 
 # Preferences page
 'preferences' => 'ترجیحات',
 'mypreferences' => 'مہ ترجیہات',
+'skin-preview' => 'نمائش',
 'youremail' => 'بشلی کغاز',
 'username' => 'ممبارو نم',
 'uid' => 'ممبارو لمبار:',
@@ -673,9 +692,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' => 'ھیہ صفحا ایڈیٹنگ کورے',
@@ -689,6 +710,7 @@ HTML tags لوڑے.',",
 'recentchanges-label-newpage' => 'ھیہ ترمیم نوغ صفحہ تخلیق آریر',
 'recentchanges-label-minor' => 'ھیہ ای معمولی ترمیم شیر',
 'recentchanges-label-bot' => 'ھیہ ایڈیٹو خود کار بوٹو زریعا انجام دیونو ہوی',
+'recentchanges-label-unpatrolled' => 'ھیہ ترمیمو ھمونیہ پت مراجعت(Patrolled) کورونو نو بیتی شیر',
 'rcnote' => "درج ذیل گزشتہ {{PLURAL:$2|بس|'''$2''' انوسا}} باک {{PLURAL:$1|'''ای''' تبدیلی شیر|آخری '''$1''' تبدیلی شینی}}، $5، $4.",
 'rcnotefrom' => "ھیہ موڑا '''$2''' کورونو بیرو تبدیلیان تفصیلات شینی ('''$1''' تبدیلیان پشینو بونیان)۔",
 'rclistfrom' => '$1 نوغ تبدیلیاں پشیک شروع کورے',
@@ -713,6 +735,7 @@ HTML tags لوڑے.',",
 'recentchangeslinked' => 'متعلقہ تبدیلی',
 'recentchangeslinked-toolbox' => 'موقعی تبدیلی',
 'recentchangeslinked-title' => 'متعلقہ تبدیلی "$1"',
+'recentchangeslinked-noresult' => 'ھمی صفحا موجودہ وختہ کیہ تبدیلی نیکی۔',
 'recentchangeslinked-summary' => "ھیہ ھتے تبدیلیان لسٹ شیر کہ ھیتان پھوک مدا پروشٹی ساوزینو بیتی شینی وا ھے صفحان سوم جستہ خور کیہ صفحہ چوکی شینی یا کیہ خاص زمرہ جاتو ممبرانن سوم چوکی شینی<br />
 ساوزیرو [[Special:Watchlist|موڑا صفحہ]] '''بولڈ''' شینی",
 'recentchangeslinked-page' => 'کھوار ویکیپیڈیو منصوبو صفحو لوڑے',
@@ -743,6 +766,8 @@ HTML tags لوڑے.',",
 'imagelinks' => 'مسلو روابط',
 'linkstoimage' => 'ھیہ مسلو سوم درج ذیل {{PLURAL:$1|صفحہ مربوط شیر|$1 صفحات مربوط شینی}}',
 'nolinkstoimage' => 'ھیہ کھوار ویکیپیڈیا ھش کیہ صفحات نیکی کہ ھتیت ھیہ مسل (فائلو) متعلقہ شینی',
+'sharedupload-desc-here' => 'ھیہ فائل $1 موژاری شیر وا ھیہ خور پرجیکٹہ استعمال بویان۔
+مزید معلومات ھمو [$2 فائل مشقولگی صفحہا]  دیونو بیتی شیر',
 'uploadnewversion-linktext' => 'ھیہ مسلو نوغ ورژنو اپلوڈ کورے',
 
 # Random page
@@ -819,9 +844,6 @@ HTML tags لوڑے.',",
 'linksearch-ok' => 'Search/تلاش',
 'linksearch-line' => '$1 مربوط شیر $2 ری',
 
-# Special:Log/newusers
-'newuserlogpage' => 'نوشتۂ آمد صارف',
-
 # Special:ListGroupRights
 'listgrouprights-members' => 'ممبارانن فھرست',
 
@@ -889,7 +911,7 @@ HTML tags لوڑے.',",
 'blanknamespace' => '(مرکز)',
 
 # Contributions
-'contributions' => 'صارفو حصہ',
+'contributions' => ' $1 صارفو حصہ',
 'contributions-title' => '$1 صارفو حصہ',
 'mycontris' => 'مہ حصہ',
 'contribsub2' => 'براۓ $1 ($2)',
@@ -928,6 +950,7 @@ HTML tags لوڑے.',",
 
 # Block/unblock
 'blockip' => 'داخلہ ممنوع براۓ صارف',
+'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',
 'ipblocklist' => 'داخلہ ممنوع براۓ صارف',
 'blocklink' => 'پاوبندی لیگاوے',
 'unblocklink' => 'پاوبندی ختم',
@@ -1059,6 +1082,8 @@ HTML tags لوڑے.',",
 * gpslongitude
 * gpsaltitude',
 
+'exif-dc-date' => 'تاریخ',
+
 # External editor support
 'edit-externally' => 'ھیہ مسلو ایڈیٹ کورے',
 'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)
@@ -1069,6 +1094,9 @@ HTML tags لوڑے.',",
 'namespacesall' => 'تھمامو',
 'monthsall' => 'سف',
 
+# action=purge
+'confirm_purge_button' => 'OK/ٹھیک شیر',
+
 # Table pager
 'table_pager_first' => 'آویلو صفحہ',
 
@@ -1080,10 +1108,38 @@ HTML tags لوڑے.',",
 # Core parser functions
 'duplicate-defaultsort' => '\'\'\'خبردار:\'\'\' ڈیفالٹ تاڑٰ(نغڑی) "$2" پروشٹیو ڈیفالٹ تاڑا "$1" لیگی شیر۔',
 
+# Special:FilePath
+'filepath-page' => 'فایل',
+'filepath-submit' => 'Go/بوغے',
+
 # Special:SpecialPages
 'specialpages' => 'اسپیشل صفحہ',
 
+# External image whitelist
+'external_image_whitelist' => ' #ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر<pre>
+#موڑا ریگولر لوان دیور((صرف ھتیتان کیاغ ھمیتان موژی شینی //) //) 
+#بیریو ھوٹوان آر ایلان سوم ھمیتان میچ کورنو بوی
+# کیاغ کہ میچ ھونی ھیتان ھوٹوان سوم پشینو بوی بصورت دیگر ھیتان لنک کیاغ کی شینی ھتیتان پشینو بوی
+#لاین کیاغ کی شروع بویان  # کومنٹ جوشونو بوی۔
+#ھیہ کیس سینسیٹو شیر۔
+
+#لینو سورا ریجیکس فریگمنٹو لاکھے. ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر۔</pre>',
+
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Tag]] filter:',
+'tag-filter-submit' => 'فلٹر',
+'tags-title' => 'Tags/ٹیگز',
+
+# Special:ComparePages
+'compare-page1' => 'صفحہ 1',
+
+# New logging system
+'rightsnone' => '(نو)',
+
+# Feedback
+'feedback-message' => 'پیغام',
+
+# Search suggestions
+'searchsuggest-search' => 'Search/تلاش',
 
 );
index cb79b93..f253611 100644 (file)
@@ -448,9 +448,6 @@ Sebebê ho ''$2'' dero.",
 
 Sıma şikinê dızdêni {{SITENAME}} de dewam kerê, ya jê eyni karberi ya ki jê jüyê de bini <span class='plainlinks'>[$1 oncia cıkuyê]</span>.
 Beno ke taê peli sıma hona cıkote asnenê, hata ke sıma ''browser cache''ê ho kerd pak.",
-'welcomecreation' => '== Xêr amê, $1! ==
-Hesabê sıma vıraciya.
-Vurnaena [[Special:Preferences|melumatanê {{SITENAME}}]] ho vira mekerê.',
 'yourname' => 'Namê karberi:',
 'yourpassword' => 'Parola:',
 'yourpasswordagain' => 'Parola tekrar ke:',
@@ -908,11 +905,12 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-delete' => 'Pelu bıestere',
 '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',
@@ -1010,7 +1008,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 '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-deleteone' => 'bestere',
 'filehist-revert' => 'raçarne',
 'filehist-current' => 'nıkaên',
 'filehist-datetime' => 'Tarix/Dem',
@@ -1041,7 +1039,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'filedelete' => 'Bıestere $1',
 'filedelete-legend' => 'Dosya bıestere',
 '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',
@@ -1065,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',
@@ -1130,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',
@@ -1154,7 +1149,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 
 # Watchlist
 'watchlist' => 'Pela mına şêrkerdene',
-'mywatchlist' => 'Lista mına şêrkerdışi',
+'mywatchlist' => 'Lista şêrkerdışi',
 'watchlistfor2' => 'Serba $1 ($2)',
 'addedwatchtext' => "Pela \"[[:\$1]]\"i ilawe biye be [[Special:Watchlist|pela şêrkerdişi]].
 Nara dıme, vurnaisê na pele u pela hurênaisê dawa alaqedare ita bena lista, u pele [[Special:RecentChanges|lista vurnaisunê peyênu]] de '''qolınd''' asena ke cı ra asan weçiniyo.",
@@ -1174,7 +1169,7 @@ Nara dıme, vurnaisê na pele u pela hurênaisê dawa alaqedare ita bena lista,
 
 # Delete
 'deletepage' => 'Pele bıestere',
-'delete-legend' => 'Bıestere',
+'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',
@@ -1257,9 +1252,9 @@ 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ıraqê mı',
+'mycontris' => 'İştıraqi',
 'contribsub2' => 'Serba $1 ($2)',
 'uctop' => '(ser)',
 'month' => 'Asme ra (u ravêr):',
@@ -1290,7 +1285,7 @@ Tı şikina sewiya sevekiyaena na pele bıvurnê, hema yê nae sevekiyaena qedem
 'whatlinkshere-hideredirs' => 'peyser sono $1',
 'whatlinkshere-hidetrans' => 'İlawekerdê çaprazi $1',
 'whatlinkshere-hidelinks' => '$1 girey',
-'whatlinkshere-hideimages' => 'girê resmu $1',
+'whatlinkshere-hideimages' => 'Girê dosya $1',
 'whatlinkshere-filters' => 'Filtrey',
 
 # Block/unblock
@@ -1608,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 8e1f306..edc0a10 100644 (file)
@@ -726,9 +726,6 @@ $2',
 
 جۇيەگە كىرمەستەن {{SITENAME}} جوباسىن پايدالانۋىن جالعاستىرا الاسىز, نەمەسە ٴدال سول نە وزگە قاتىسۋشى بوپ قايتا كرۋىڭىز مۇمكىن.
 اڭعارتپا: كەيبىر بەتتەر شولعىشىڭىزدىڭ بۇركەمەسىن تازارتقانشا دەيىن ٴالى دە كىرپ قالعانىڭىزداي كورىنۋى مۇمكىن.",
-'welcomecreation' => '== قوش كەلدىڭىز, $1! ==
-جاڭا تىركەلگىڭىز جاسالدى.
-{{SITENAME}} باپتالىمدارىڭىزدى وزگەرتۋىن ۇمىتپاڭىز.',
 'yourname' => 'قاتىسۋشى اتىڭىز:',
 'yourpassword' => 'قۇپىييا ٴسوزىڭىز:',
 'yourpasswordagain' => 'قۇپىييا ٴسوزدى قايتالاڭىز:',
@@ -961,7 +958,6 @@ IP مەكەنجايىڭىز بۇل بەتتىڭ تۇزەتۋ تارىيحىند
 'template-protected' => '(قورعالعان)',
 'template-semiprotected' => '(جارتىلاي قورعالعان)',
 'hiddencategories' => 'بۇل بەت $1 جاسىرىن ساناتتىڭ مۇشەسى:',
-'nocreatetitle' => 'بەتتى باستاۋ شەكتەلگەن',
 'nocreatetext' => '{{SITENAME}} جوباسىندا جاڭا بەت باستاۋى شەكتەلگەن.
 كەرى قايتىپ بار بەتتى وڭدەۋىڭىزگە بولادى, نەمەسە [[Special:UserLogin|كىرۋىڭىزگە نە تىركەلۋىڭىزگە]] بولادى.',
 'nocreate-loggedin' => '{{SITENAME}} جوباسىندا جاڭا بەت باستاۋ رۇقساتىڭىز جوق.',
@@ -1307,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 وزگەرىس',
@@ -1686,10 +1684,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'كورسەت',
 'listusers-noresult' => 'قاتىسۋشى تابىلعان جوق.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'تىركەلۋ جۋرنالى',
-'newuserlogpagetext' => 'بۇل قاتىسۋشى تىركەلگى جاساۋ جۋرنالى',
-
 # Special:ListGroupRights
 'listgrouprights' => 'قاتىسۋشى توبى قۇقىقتارى',
 'listgrouprights-summary' => 'كەلەسى تىزىمدە بۇل ۋىيكىيدە تاعايىندالعان قاتىسۋشى قۇقىقتارى (بايلانىستى قاتىناۋ قۇقىقتارىمەن بىرگە) كورسەتىلەدى.
@@ -1753,11 +1747,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{SITENAME}} ەسكەرتۋ حات جىبەرۋ قىزمەتى',
 'enotif_reset' => 'بارلىق بەت كەلىپ-كەتىلدى دەپ بەلگىلە',
-'enotif_newpagetext' => 'مىناۋ جاڭا بەت.',
 'enotif_impersonal_salutation' => '{{SITENAME}} قاتىسۋشىسى',
-'changed' => 'وزگەرتتى',
-'created' => 'باستادى',
-'enotif_subject' => '{{SITENAME}} جوباسىندا $PAGEEDITOR $PAGETITLE اتاۋلى بەتتى $CHANGEDORCREATED',
 'enotif_lastvisited' => 'سوڭعى كەلىپ-كەتۋىڭىزدەن بەرى بولعان وزگەرىستەر ٴۇشىن $1 دەگەندى قاراڭىز.',
 'enotif_lastdiff' => 'وسى وزگەرىس ٴۇشىن $1 دەگەندى قاراڭىز.',
 'enotif_anon_editor' => 'تىركەلگىسىز قاتىسۋشى $1',
@@ -1785,6 +1775,8 @@ $NEWPAGE
 
 سىن-پىكىر بەرۋ جانە بىلايعى جاردەم الۋ ٴۇشىن:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'باستادى',
+'changed' => 'وزگەرتتى',
 
 # Delete
 'deletepage' => 'بەتتى جويۋ',
@@ -2904,5 +2896,6 @@ $5
 # New logging system
 'revdelete-restricted' => 'اكىمشىلەرگە تىيىمدار قولدادى',
 'revdelete-unrestricted' => 'اكىمشىلەردەن تىيىمداردى الاستادى',
+'rightsnone' => '(ەشقانداي)',
 
 );
index 2d4042f..b015c83 100644 (file)
@@ -757,9 +757,6 @@ $2',
 
 Жүйеге кірместен де {{SITENAME}} жобасын пайдалана аласыз, немесе баяғы не өзге қатысушы ретінде жүйеге <span class='plainlinks'>[$1 қайта кіруіңізге]</span> болады.
 Аңғартпа: Кейбір беттер шолғышыңыздың кэшін тазартқанша әлі де жүйеге кіріп отырғаныңыздай көрінуі мүмкін.",
-'welcomecreation' => '== Қош келдіңіз, $1! ==
-Жаңа тіркелгіңіз жасалды.
-Өзіңіздің [[Special:Preferences|жеке баптауларыңызды]] өзгертуді ұмытпаңыз.',
 'yourname' => 'Қатысушы аты:',
 'yourpassword' => 'Құпия сөз:',
 'yourpasswordagain' => 'Құпия сөзді қайталаңыз:',
@@ -1056,7 +1053,6 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 'template-protected' => '(қорғалған)',
 'template-semiprotected' => '(жартылай қорғалған)',
 'hiddencategories' => 'Бұл бет $1 жасырын санаттың мүшесі:',
-'nocreatetitle' => 'Бетті бастау шектелген',
 'nocreatetext' => '{{SITENAME}} жобасында жаңа бет бастауы шектелген.
 Кері қайтып бар бетті өңдеуіңізге болады, немесе [[Special:UserLogin|кіруіңізге не тіркелуіңізге]] болады.',
 'nocreate-loggedin' => 'Жаңа бет бастауға рұқсатыңыз жоқ.',
@@ -1495,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' => 'Осы бетті оқу',
@@ -1920,10 +1918,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Көрсет',
 'listusers-noresult' => 'Қатысушы табылған жоқ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Тіркелу журналы',
-'newuserlogpagetext' => 'Бұл қатысушы тіркелгі жасау журналы',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Қатысушы тобы құқықтары',
 'listgrouprights-summary' => 'Келесі тізімде бұл уикиде тағайындалған қатысушы құқықтары (байланысты қатынау құқықтарымен бірге) көрсетіледі.
@@ -1990,11 +1984,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{SITENAME}} ескерту хат жіберу қызметі',
 'enotif_reset' => 'Барлық бет келіп-кетілді деп белгіле',
-'enotif_newpagetext' => 'Мынау жаңа бет.',
 'enotif_impersonal_salutation' => '{{SITENAME}} қатысушысы',
-'changed' => 'өзгертті',
-'created' => 'бастады',
-'enotif_subject' => '{{SITENAME}} жобасында $PAGEEDITOR $PAGETITLE атаулы бетті $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Соңғы келіп-кетуіңізден бері болған өзгерістер үшін $1 дегенді қараңыз.',
 'enotif_lastdiff' => 'Осы өзгеріс үшін $1 дегенді қараңыз.',
 'enotif_anon_editor' => 'тіркелгісіз қатысушы $1',
@@ -2022,6 +2012,8 @@ $NEWPAGE
 
 Сын-пікір беру және былайғы жәрдем алу үшін:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'бастады',
+'changed' => 'өзгертті',
 
 # Delete
 'deletepage' => 'Бетті жою',
@@ -3189,6 +3181,7 @@ $5
 'logentry-newusers-create2' => '$1 $3 деген аккаунт тіркеді',
 'logentry-newusers-autocreate' => '$1 аккаунты автоматты түрде тіркелді',
 'newuserlog-byemail' => 'Құпия сөз e-mail арқылы жіберілді',
+'rightsnone' => '(ешқандай)',
 
 # Search suggestions
 'searchsuggest-search' => 'Іздеу',
index 9c491d9..d1c1562 100644 (file)
@@ -689,9 +689,6 @@ Keltirilgen sebebi: ''$2''.",
 
 Jüýege kirmesten {{SITENAME}} jobasın paýdalanwın jalğastıra alasız, nemese däl sol ne özge qatıswşı bop qaýta krwiñiz mümkin.
 Añğartpa: Keýbir better şolğışıñızdıñ bürkemesin tazartqanşa deýin äli de kirp qalğanıñızdaý körinwi mümkin.",
-'welcomecreation' => '== Qoş keldiñiz, $1! ==
-Jaña tirkelgiñiz jasaldı.
-{{SITENAME}} baptalımdarıñızdı özgertwin umıtpañız.',
 'yourname' => 'Qatıswşı atıñız:',
 'yourpassword' => 'Qupïya söziñiz:',
 'yourpasswordagain' => 'Qupïya sözdi qaýtalañız:',
@@ -924,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.',
@@ -1270,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',
@@ -1649,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.
@@ -1716,11 +1710,7 @@ Bul bettiñ jäne baýlanıstı talqılaw betiniñ keleşektegi özgeristeri mı
 
 'enotif_mailer' => '{{SITENAME}} eskertw xat jiberw qızmeti',
 'enotif_reset' => 'Barlıq bet kelip-ketildi dep belgile',
-'enotif_newpagetext' => 'Mınaw jaña bet.',
 'enotif_impersonal_salutation' => '{{SITENAME}} qatıswşısı',
-'changed' => 'özgertti',
-'created' => 'bastadı',
-'enotif_subject' => '{{SITENAME}} jobasında $PAGEEDITOR $PAGETITLE atawlı betti $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Soñğı kelip-ketwiñizden beri bolğan özgerister üşin $1 degendi qarañız.',
 'enotif_lastdiff' => 'Osı özgeris üşin $1 degendi qarañız.',
 'enotif_anon_editor' => 'tirkelgisiz qatıswşı $1',
@@ -1748,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',
@@ -2863,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 fa139c8..d33d200 100644 (file)
@@ -646,6 +646,7 @@ $2',
 'filereadonlyerror' => 'មិនអាចកែប្រែឯកសារ "$1" បានទេពីព្រោះថតឯកសារ "$2" ស្ថិតក្នុងម៉ូដសំរាប់តែអានប៉ុណ្ណោះ។
 
 អភិបាលដែលបានចាក់សោរវាបានផ្ដល់សេចក្ដីពន្យល់បែបនេះ៖ "$3"។',
+'exception-nologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
 'exception-nologin-text' => 'ទំព័រឬសកម្មភាពនេះតំរូវអោយអ្នកធ្វើការកត់ឈ្មោះចូលទៅក្នុងវិគីនេះ។',
 
 # Virus scanner
@@ -659,9 +660,8 @@ $2',
 អ្នកអាចបន្តប្រើប្រាស់{{SITENAME}}ក្នុងភាពអនាមិក ឬ <span class='plainlinks'>[$1 កត់ឈ្មោះចូលម្ដងទៀត]</span>ក្នុងនាមជាអ្នកប្រើប្រាស់ដដែលឬផ្សេងទៀត។
 
 សូមកត់សំគាល់ថាទំព័រមួយចំនួនប្រហែលជានៅតែបង្ហាញដូចពេលលោកអ្នកកត់ឈ្មោះចូលក្នុងគណនីរបស់លោកអ្នកដដែល។ ប្រសិនបើមានករណីនេះកើតឡើង សូមសំអាត សតិភ្ជាប់នៃកម្មវិធីរុករករបស់លោកអ្នក។",
-'welcomecreation' => '== សូមស្វាគមន៍ $1! ==
-
-គណនីរបស់អ្នកត្រូវបានបង្កើតហើយ។
+'welcomeuser' => 'សូមស្វាគមន៍ $1!',
+'welcomecreation-msg' => 'គណនីរបស់អ្នកត្រូវបានបង្កើតហើយ។
 កុំភ្លេចផ្លាស់ប្ដូរ[[Special:Preferences|ចំណង់ចំណូលចិត្ត{{SITENAME}}]]របស់អ្នក។',
 'yourname' => 'អត្តនាម៖',
 'yourpassword' => 'ពាក្យសំងាត់៖',
@@ -977,7 +977,7 @@ $2
 'updated' => '(បានបន្ទាន់សម័យ)',
 'note' => "'''ចំណាំ៖'''",
 'previewnote' => "'''សូមចាំថានេះគ្រាន់តែជា​ការបង្ហាញការមើលជាមុនប៉ុណ្ណោះ។ បំលាស់ប្ដូរ​របស់អ្នកមិនទាន់បាន​រក្សាទុកទេ!'''",
-'continue-editing' => 'á\9e\94á\9e\93á\9f\92á\9e\8fធ្វើការកែប្រែ',
+'continue-editing' => 'á\9e\91á\9f\85á\9e\80á\9e¶á\9e\93á\9f\8bá\9e\80á\9e\93á\9f\92á\9e\9bá\9f\82á\9e\84á\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bធ្វើការកែប្រែ',
 'previewconflict' => 'ការមើលមុននេះយោងតាមអត្ថបទក្នុងប្រអប់កែប្រែខាងលើ។ ទំព័រអត្ថបទនឹងបង្ហាញចេញបែបនេះប្រសិនបើអ្នកជ្រើសរើសរក្សាទុក។',
 'session_fail_preview' => "'''សូមអភ័យទោស! យើងមិនអាចរក្សាទុកការកែប្រែរបស់អ្នកបានទេ ដោយសារបាត់ទិន្នន័យវេនការងារ។
 
@@ -1037,7 +1037,6 @@ $2
 'template-protected' => '(ត្រូវបានការពារ)',
 'template-semiprotected' => '(ត្រូវបានការពារពាក់កណ្តាល)',
 'hiddencategories' => 'ទំព័រនេះស្ថិតនៅក្នុង {{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានបិទបាំងមួយ|ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានបិទបាំងចំនួន$1}}:',
-'nocreatetitle' => 'ការបង្កើតទំព័រ​ត្រូវបានកម្រិត',
 'nocreatetext' => '{{SITENAME}} បានដាក់កំហិតលទ្ធភាពបង្កើតទំព័រថ្មី ។
 អ្នកអាចត្រឡប់ក្រោយ និង កែប្រែទំព័រមានស្រាប់ ឬ  [[Special:UserLogin|កត់ឈ្មោះចូលឬបង្កើតគណនី]]។',
 'nocreate-loggedin' => 'អ្នកគ្មានការអនុញ្ញាត​ឱ្យបង្កើតទំព័រថ្មី​ទេ។',
@@ -1063,6 +1062,10 @@ $2
 ទំព័រនេះមានរួចហើយ។',
 'defaultmessagetext' => 'អត្ថបទសារតាមលំនាំដើម',
 
+# Content models
+'content-model-wikitext' => 'អត្ថបទវិគី',
+'content-model-text' => 'អត្ថបទសុទ្ធ',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ប្រយ័ត្ន៖''' ទំព័រនេះមានប្រើអនុគមន៍ញែកច្រើនពេកហើយ។
 
@@ -1200,7 +1203,8 @@ $1",
 'revdelete-no-change' => "'''ប្រយ័ត្ន​៖''' វត្ថុ​ដែល​មាន​កាល​បរិច្ឆេទ​ $2, $1 ត្រូវ​បាន​ស្នើ​សុំ​ការ​កំណត់​គំហើញ​រួច​ហើយ​។",
 'revdelete-reason-dropdown' => '*មូលហេតុលុបចោលទូទៅ
 ** បំពានលើកម្មសិទ្ធិបញ្ញា
-** ព័ត៌មានផ្ទាល់ខ្លួនមិនសមរម្យ
+** មតិយោបល់ឬព័ត៌មានផ្ទាល់ខ្លួនមិនសមរម្យ
+** ឈ្មោះអ្នកប្រើប្រាស់មិនសមរម្យ
 ** ព័ត៌មានបង្ខូចកេរ្តិ៍ឈ្មោះ',
 'revdelete-otherreason' => 'មូលហេតុផ្សេង​ៗ/ដទៃទៀត​៖',
 'revdelete-reasonotherlist' => 'មូលហេតុផ្សេង​ទៀត​',
@@ -1394,7 +1398,7 @@ $1",
 'timezoneregion-indian' => 'មហាសមុទ្រឥណ្ឌា',
 'timezoneregion-pacific' => 'មហាសមុទ្រប៉ាស៊ីហ្វិក',
 'allowemail' => 'ទទួលអ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃទៀត',
-'prefs-searchoptions' => 'á\9e\87á\9e\98á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e¶á\9e\9aá\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80',
+'prefs-searchoptions' => 'ស្វែងរក',
 'prefs-namespaces' => 'ប្រភេទ',
 'defaultns' => 'ស្វែងរក​ក្នុង​លំហឈ្មោះ​ទាំងនេះ​តាម​បែប​ផ្សេង៖',
 'default' => 'លំនាំដើម',
@@ -1553,12 +1557,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' => 'អានទំព័រនេះ',
@@ -1757,6 +1762,8 @@ $1",
 'uploadvirus' => 'ឯកសារមានមេរោគ!
 
 សេចក្តីលំអិត៖ $1',
+'uploadjava' => 'ឯកសារនេះជាប្រភេទ ZIP ដែលមានផ្ទុក Java .class។
+ការផ្ទុកឡើងឯកសារ Java ត្រូវបានហាមឃាត់ ព្រោះវាអាចធ្វើមានបញ្ហាក្នុងការឆ្លងកុងត្រូលសុវត្តិភាព។',
 'upload-source' => 'ឯកសារប្រភព',
 'sourcefilename' => 'ឈ្មោះឯកសារប្រភព៖',
 'sourceurl' => 'URLប្រភព៖',
@@ -1908,6 +1915,7 @@ $1',
 'uploadnewversion-linktext' => 'ផ្ទុកឡើងមួយកំណែថ្មីនៃឯកសារនេះ',
 'shared-repo-from' => 'ពី $1',
 'shared-repo' => 'ឃ្លាំងរួម​',
+'upload-disallowed-here' => 'អ្នកមិនអាចសរសេរជាន់ពីលើឯកសារនេះទេ។',
 
 # File reversion
 'filerevert' => 'ត្រឡប់ $1',
@@ -1937,6 +1945,7 @@ $1',
 **ឯកសារជាន់គ្នា',
 'filedelete-edit-reasonlist' => 'មូលហេតុនៃការលុបការកែប្រែ',
 'filedelete-maintenance' => 'ការលុបឬស្តារឯកសារឡើងវិញត្រូវបានផ្អាកជាបណ្ដោះអាសន្ន​ក្នុងពេលធ្វើការថែទាំប្រព័ន្ធ។',
+'filedelete-maintenance-title' => 'មិនអាចលុបឯកសារចោល',
 
 # MIME search
 'mimesearch' => 'ស្វែងរក MIME',
@@ -1988,9 +1997,9 @@ $1',
 
 'disambiguations' => 'ទំព័រដែលភ្ជាប់ទៅទំព័រមានចំណងជើងស្រដៀងគ្នា',
 'disambiguationspage' => 'Template:ស្រដៀងគ្នា',
-'disambiguations-text' => "ទំព័រទាំងឡាយខាងក្រោមនេះភ្ជាប់ទៅកាន់'''ទំព័រពាក្យស្រដៀងគ្នា'''។
+'disambiguations-text' => "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\98á\9e·á\9e\93á\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\99á\9f\89á\9e¶á\9e\84á\9e\8fá\9e·á\9e\85á\9e\98á\9e½á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9f\85á\9e\80á\9e¶á\9e\93á\9f\8b'''á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\92á\9e\9aá\9e\8aá\9f\80á\9e\84á\9e\82á\9f\92á\9e\93á\9e¶'''á\9f\94
 
\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e\93á\9f\81á\9f\87á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9f\85á\9e\94á\9f\92á\9e\9aá\9e\92á\9e¶á\9e\93á\9e\94á\9e\91á\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82á\9e\98á\9f\92á\9e\8aá\9e\84។<br />
\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e\93á\9f\81á\9f\87á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9f\85á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\87á\9e¶á\9e\84á\9e\93á\9f\81á\9f\87á\9e\9cá\9e·á\9e\89។<br />
 ទំព័រមួយត្រូវចាត់ទុកជាទំព័រពាក្យស្រដៀងគ្នា ប្រសិនបើវាប្រើទំព័រគំរូដែលភ្ជាប់មកពី[[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'ទំព័របញ្ជូនបន្តទ្វេដង',
@@ -2018,6 +2027,7 @@ $1',
 # 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|កំណែប្រែ}}',
@@ -2044,8 +2054,10 @@ $1',
 'mostlinkedtemplates' => 'ទំព័រគំរូ​ដែលត្រូវបានប្រើប្រាស់​ច្រើនបំផុត',
 'mostcategories' => 'អត្ថបទដែលមានចំណាត់ថ្នាក់ក្រុមច្រើនបំផុត',
 'mostimages' => 'រូបភាពដែលត្រូវបានតភ្ជាប់មកច្រើនបំផុត',
+'mostinterwikis' => 'អត្ថបទដែលមានតំនភ្ជាប់អន្តរវិគីច្រើនបំផុត',
 'mostrevisions' => 'អត្ថបទដែលត្រូវបានកែប្រែច្រើនបំផុត',
 'prefixindex' => 'ទំព័រ​ទាំង​អស់​ជាមួយ​បុព្វបទ',
+'prefixindex-namespace' => 'ទំព័រទាំងអស់ដែលមានបុព្វបទ (លំហឈ្មោះ $1)',
 'shortpages' => 'ទំព័រខ្លីៗ',
 'longpages' => 'ទំព័រវែងៗ',
 'deadendpages' => 'ទំព័រ​ទាល់',
@@ -2099,6 +2111,7 @@ $1',
 អ្នកអាចបង្រួមការបង្ហាញដោយជ្រើសរើសប្រភេទកំណត់ហេតុ អត្តនាម ឬ ទំព័រពាក់ព័ន្ធ។',
 'logempty' => 'គ្មានអ្វីក្នុងកំណត់ហេតុដែលត្រូវនឹងអ្វីដែលអ្នកចង់រកទេ។',
 'log-title-wildcard' => 'ស្វែងរកចំណងជើងចាប់ផ្តើមដោយឃ្លានេះ',
+'showhideselectedlogentries' => 'បង្ហាញ/លាក់កំណត់ហេតុដែលបានជ្រើសយក',
 
 # Special:AllPages
 'allpages' => 'ទំព័រទាំងអស់',
@@ -2116,6 +2129,10 @@ $1',
 'allpagesprefix' => 'បង្ហាញទំព័រដែលចាប់ផ្ដើមដោយ ៖',
 'allpagesbadtitle' => 'ចំណងជើង​ទំព័រ​ដែល​ត្រូវ​បាន​ផ្តល់ឱ្យ​គឺ​គ្មាន​សុពលភាព​ឬក៏​មាន​បុព្វបទ​ដែល​មាន​អន្តរភាសា​ឬអ​ន្តរវីគី​។ ប្រហែលជា​វា​មាន​អក្សរ​មួយ​ឬ​ច្រើន ដែល​មិន​អាច​ត្រូវ​ប្រើ​នៅក្នុង​ចំណងជើង​។',
 'allpages-bad-ns' => '{{SITENAME}}មិនមានឈ្មោះប្រភេទ"$1"ទេ។',
+'allpages-hide-redirects' => 'លាក់ការបញ្ជូនបន្ត',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'មើ់លកំណែថ្មីបំផុត។',
 
 # Special:Categories
 'categories' => 'ចំណាត់ថ្នាក់ក្រុម',
@@ -2136,9 +2153,9 @@ $1',
 'linksearch-pat' => 'ស្វែងរកគំរូ៖',
 'linksearch-ns' => 'លំហឈ្មោះ៖',
 'linksearch-ok' => 'ស្វែងរក',
-'linksearch-text' => 'កូដពិសេសដូចជា "*.wikipedia.org" អាចប្រើបាន។
+'linksearch-text' => 'Wildcards ដូចជា "*.wikipedia.org" អាចប្រើបាន។
 តំរូវអោយមានយ៉ាងហោចណាស់អោយមានដូម៉ែនកំរិតលើគេ ឧទាហារណ៍ "*.org"។<br />
-ប្រូតូខូលប្រើបាន៖ <code>$1</code> (កុំបន្ថែមវាទាំងនេះទៅក្នុងការស្វែងរករបស់អ្នកអោយសោះ)។',
+ប្រូតូខូលប្រើបាន៖ <code>$1</code>  (តាមលំនាំដើមជា http:// ប្រសិនបើគ្មានបញ្ជាក់ប្រូតូខូល)។',
 'linksearch-line' => '$1បានតភ្ជាប់ពី$2',
 
 # Special:ListUsers
@@ -2156,10 +2173,6 @@ $1',
 'activeusers-hidesysops' => 'លាក់អ្នកអភិបាល',
 'activeusers-noresult' => 'អ្នកប្រើប្រាស់​រកមិនឃើញ​។​',
 
-# Special:Log/newusers
-'newuserlogpage' => 'កំណត់ហេតុនៃការបង្កើតគណនី',
-'newuserlogpagetext' => 'នេះជាកំណត់ហេតុនៃការបង្កើតអ្នកប្រើប្រាស់។',
-
 # Special:ListGroupRights
 'listgrouprights' => 'សិទ្ធិនិងក្រុមអ្នកប្រើប្រាស់',
 'listgrouprights-summary' => 'ខាងក្រោមនេះជាបញ្ជីរាយឈ្មោះក្រុមអ្នកប្រើប្រាស់ដែលបានកំណត់ជាមួយនឹងសិទ្ធិរបស់គេនៅលើវិគីនេះ។ មាន[[{{MediaWiki:Listgrouprights-helppage}}|ព័ត៌មានបន្ថែម]] អំពីសិទ្ធិផ្ទាល់ខ្លួន។',
@@ -2185,8 +2198,8 @@ $1',
 'emailuser-title-target' => 'ផ្ញើសារទៅកាន់ {{GENDER:$1|អ្នកប្រើប្រាស់}} នេះ',
 'emailuser-title-notarget' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់',
 'emailpage' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់',
-'emailpagetext' => 'អ្នក​អាច​ប្រើសំនុំ​បែប​បទ​ខាង​ក្រោម​ក្នុង​ការ​ផ្ញើ​សារ​ជា​អ៊ីមែល​ទៅ​កាន់​អ្នក​ប្រើប្រាស់​នេះ​
-អាសយដ្ឋាន​អ៊ីមែល​ដែល​អ្នក​បាន​វាយ​បញ្ចូល​ក្នុង​[[Special:Preferences|ចំណង់ចំណូល​ចិត្ត​]]​របស់​អ្នក នឹង​បង្ហាញ​ជា​អាសយដ្ឋាន​អ៊ីមែល "From" ដូច្នោះ​អ្នក​ទទួល​នឹង​អាច​ឆ្លើយ​តប​ទៅ​អ្នក​វិញ​ដោយ​ផ្ទាល់​។',
+'emailpagetext' => 'អ្នក​អាច​ប្រើសំនុំ​បែប​បទ​ខាង​ក្រោម​ក្នុង​ការ​ផ្ញើ​សារ​ជា​អ៊ីមែល​ទៅ​កាន់​{{GENDER:$1|អ្នកប្រើប្រាស់}}នេះ
+អាសយដ្ឋាន​អ៊ីមែល​ដែល​អ្នក​បាន​វាយ​បញ្ចូល​ក្នុង [[Special:Preferences|ចំណង់ចំណូលចិត្តរបស់អ្នក]]នឹង​បង្ហាញ​ជា​អាសយដ្ឋាន​អ៊ីមែល "From" ដូច្នោះ​អ្នក​ទទួល​នឹង​អាច​ឆ្លើយ​តប​ទៅ​អ្នក​វិញ​ដោយ​ផ្ទាល់​។',
 'usermailererror' => 'កំហុសឆ្គងក្នុងចំណងជើងអ៊ីមែល៖',
 'defemailsubject' => 'អ៊ីមែល{{SITENAME}}ពី "$1"',
 'usermaildisabled' => 'មិនប្រើអ៊ីមែល',
@@ -2252,11 +2265,7 @@ $1',
 
 'enotif_mailer' => 'ភ្នាក់ងារផ្ញើអ៊ីមែលផ្ដល់ដំណឹងរបស់ {{SITENAME}}',
 'enotif_reset' => 'កត់សម្គាល់រាល់គ្រប់ទំព័រដែលបានចូលមើល',
-'enotif_newpagetext' => 'នេះជាទំព័រថ្មី។',
 'enotif_impersonal_salutation' => 'អ្នកប្រើប្រាស់ {{SITENAME}}',
-'changed' => 'បានផ្លាស់ប្តូរ',
-'created' => 'បានបង្កើត',
-'enotif_subject' => 'ទំព័រ $PAGETITLE នៃ {{SITENAME}} ត្រូវបាន $CHANGEDORCREATED ដោយ $PAGEEDITOR',
 'enotif_lastvisited' => 'ពិនិត្យ $1 ចំពោះគ្រប់បំលាស់ប្តូរ តាំងពីពេលចូលមើល ចុងក្រោយ។',
 'enotif_lastdiff' => 'សូមពិនិត្យ$1ដើម្បីមើលបំលាស់ប្តូរនេះ។',
 'enotif_anon_editor' => 'អ្នកប្រើប្រាស់អនាមិក $1',
@@ -2294,6 +2303,8 @@ $UNWATCHURL
 
 មតិ​យោបល់​និងជំនួយបន្ថែម ៖
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'បានបង្កើត',
+'changed' => 'បានផ្លាស់ប្តូរ',
 
 # Delete
 'deletepage' => 'លុបទំព័រចោល',
@@ -2927,14 +2938,19 @@ $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' => 'អត្តលេខទំព័រ',
+'pageinfo-language' => 'ភាសារបស់ខ្លឹមសារទំព័រ',
 'pageinfo-robot-policy' => 'ស្ថានភាពម៉ាស៊ីនស្វែងរក',
+'pageinfo-robot-index' => 'អាចដាក់ក្នុងលិបិក្រម',
+'pageinfo-robot-noindex' => 'មិនអាចដាក់ក្នុងលិបិក្រម',
 'pageinfo-views' => 'ចំនួនការបើកមើល',
 'pageinfo-watchers' => 'ចំនួនអ្នកតាមដានទំព័រ',
 'pageinfo-redirects-name' => 'ចំនួនការបញ្ជូនបន្តមកកាន់ទំព័រនេះ',
@@ -2950,6 +2966,15 @@ $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' => 'បុរាណ',
@@ -3030,6 +3055,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 ម៉ោង|$1 ម៉ោង}}',
 'days' => '{{PLURAL:$1|$1 ថ្ងៃ|$1 ថ្ងៃ}}',
 'ago' => '$1 មុន',
+'just-now' => 'អំបាញ់មិញនេះ',
 
 # Bad image list
 'bad_image_list' => 'ទម្រង់ ដូចតទៅ ៖
@@ -3102,7 +3128,12 @@ $1',
 'exif-gpslatitude' => 'រយៈទទឹង',
 'exif-gpslongituderef' => 'រយៈបណ្ដោយ​ខាងកើតឬខាងលិច',
 'exif-gpslongitude' => 'រយៈបណ្តោយ',
+'exif-gpsaltituderef' => 'តំរុយរយៈកម្ពស់',
 'exif-gpsaltitude' => 'រយៈកម្ពស់',
+'exif-gpstimestamp' => 'ពេល GPS (នាឡិកាអាតូមិច)',
+'exif-gpssatellites' => 'ផ្កាយរណបដែលប្រើសំរាប់វាស់វែង',
+'exif-gpsstatus' => 'ស្ថានភាពរបស់ម៉ាស៊ីនទទួលសញ្ញា',
+'exif-gpsmeasuremode' => 'ម៉ូដវាស់វែល',
 'exif-gpsspeedref' => 'ខ្នាតល្បឿន',
 'exif-gpsspeed' => 'ល្បឿន​នៃ​ឧបករណ៍​ទទួល​​ GPS',
 'exif-gpstrackref' => 'ឯកសារ​យោង​ ទិស​នៃ​ចលនា​',
@@ -3609,11 +3640,15 @@ $5
 'logentry-move-move-noredirect' => '$1 បានប្ដូរទីតាំង ទំព័រ $3 ពី $4 ដោយមិនបន្សល់ទុកតំនភ្ជាប់បញ្ជូនបន្ត',
 'logentry-move-move_redir' => '$1 បានប្ដូរទីតាំង ទំព័រ $3 ពី $4 តាមរយៈការបញ្ជូនបន្ត',
 'logentry-move-move_redir-noredirect' => '$1 បានប្ដូរទីតាំង ទំព័រ $3 ពី $4 តាមរយៈការបញ្ជូនបន្ត ដោយមិនបន្សល់ទុកតំនភ្ជាប់បញ្ជូនបន្ត',
-'logentry-newusers-newusers' => '$1 បានបង្កើត គណនីអ្នកប្រើប្រាស់មួយ',
-'logentry-newusers-create' => '$1 បានបង្កើត គណនីអ្នកប្រើប្រាស់មួយ',
-'logentry-newusers-create2' => '$1 បានបង្កើត គណនីអ្នកប្រើប្រាស់មួយ $3',
-'logentry-newusers-autocreate' => 'គណនី $1 ត្រូវ បានបង្កើត ដោយស្វ័យប្រវត្តិ',
+'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-subject' => 'កម្មវត្ថុ ៖',
@@ -3665,5 +3700,6 @@ $5
 'duration-years' => '$1 {{PLURAL:$1|ឆ្នាំ|ឆ្នាំ}}',
 'duration-decades' => '$1 {{PLURAL:$1|ទសវត្សរ៍|ទសវត្សរ៍}}',
 'duration-centuries' => '$1 {{PLURAL:$1|សតវត្សរ៍|សតវត្សរ៍}}',
+'duration-millennia' => '$1 {{PLURAL:$1|សហសវត្សរ៍|សហសវត្សរ៍}}',
 
 );
index d0edf3a..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,8 +196,8 @@ $messages = array(
 'newwindow' => '(ಹೊಸ ಕಿಟಕಿಯನ್ನು ತೆರೆಯುತ್ತದೆ)',
 'cancel' => 'ವಜಾ ಮಾಡಿ',
 'moredotdotdot' => 'ಇನ್ನಷ್ಟು...',
-'mypage' => 'ನನà³\8dನ à²ªà³\81à²\9f',
-'mytalk' => 'ನನà³\8dನ à²\9aರà³\8dà²\9aà³\86',
+'mypage' => 'ಪುಟ',
+'mytalk' => 'ಚರ್ಚೆ',
 'anontalk' => 'ಈ ಐ.ಪಿ ಗೆ ಮಾತನಾಡಿ',
 'navigation' => 'ಸಂಚರಣೆ',
 'and' => '&#32;ಮತ್ತು',
@@ -438,9 +439,6 @@ $2',
 
 ನೀವು {{SITENAME}} ಅನ್ನು ಅನಾಮಧೇಯವಾಗಿ ಉಪಯೋಗಿಸಬಹುದು, ಅಥವ ಮತ್ತೆ ಇದೇ ಹೆಸರಿನಲ್ಲಿ ಅಥವ ಬೇರೆ ಹೆಸರಿನಲ್ಲಿ <span class='plainlinks'>[$1 ಲಾಗ್ ಇನ್]</span> ಆಗಬಹುದು.
 ಗಮನಿಸಿ: ನಿಮ್ಮ ಬ್ರೌಸರ್‍ನ cache ಅನ್ನು ಅಳಿಸುವವರೆಗೂ ಕೆಲವು ಪುಟಗಳು ನೀವಿನ್ನೂ ಲಾಗ್ ಇನ್ ಆಗಿರುವಂತೆ ಪ್ರದರ್ಶಿತವಾಗಬಹುದು.",
-'welcomecreation' => '== ಸುಸ್ವಾಗತ, $1! ==
-ನಿಮ್ಮ ಅಕೌಂಟನ್ನು ಸೃಷ್ಟಿಸಲಾಗಿದೆ.
-ನಿಮ್ಮ [[Special:Preferences|{{SITENAME}} ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು]] ಬದಲಾಯಿಸುವುದನ್ನು ಮರೆಯಬೇಡಿ.',
 'yourname' => 'ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು',
 'yourpassword' => 'ನಿಮ್ಮ ಪ್ರವೇಶಪದ',
 'yourpasswordagain' => 'ಪ್ರವೇಶ ಪದ ಮತ್ತೊಮ್ಮೆ ಟೈಪ್ ಮಾಡಿ',
@@ -531,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' => 'ದಪ್ಪಗಿನ ಅಚ್ಚು',
@@ -557,11 +560,14 @@ $2',
 'savearticle' => 'ಪುಟವನ್ನು ಉಳಿಸಿ',
 'preview' => 'ಮುನ್ನೋಟ',
 'showpreview' => 'ಮುನ್ನೋಟ',
+'showlivepreview' => 'ಸಜೀವ ಮುನ್ನೋಟ',
 'showdiff' => 'ಬದಲಾವಣೆಗಳನ್ನು ತೋರಿಸು',
 'anoneditwarning' => "'''ಎಚ್ಚರ:''' ನೀವು ಲಾಗ್ ಇನ್ ಆಗಿಲ್ಲ. ನಿಮ್ಮ ಐಪಿ ವಿಳಾಸವು ಪುಟದ ಸಂಪಾದನೆಗಳ ಇತಿಹಾಸದಲ್ಲಿ ದಾಖಲಾಗುತ್ತದೆ.",
+'anonpreviewwarning' => "''ನೀವು ಲಾಗಿನ್ ಆಗಿಲ್ಲ . ಉಳಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ನಿಮ್ಮ IP ವಿಳಾಸವನ್ನು ಈ ಪುಟದ ಸಂಪಾದನೆ ಇತಿಹಾಸದಲ್ಲಿ ನಮೂದಿಸಲಗುವುದು.''",
 'missingsummary' => "'''ಗಮನಿಸಿ:''' ನಿಮ್ಮ ಸಂಪಾದನೆಯ ಸಾರಾಂಶವನ್ನು ನೀವು ನೀಡಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ \"ಉಳಿಸು\" ಗುಂಡಿಯನ್ನು ಒತ್ತಿದರೆ, ಸಾರಾಂಶವಿಲ್ಲದೆಯೇ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗುವುದು.",
-'missingcommentheader' => "'''ಗಮನಿಸಿ:''' ಈ ವ್ಯಾಖ್ಯಾನದ ವಿಷಯ ಅಥವ ತಲೆಬರಹ ನೀವು ಸೂಚಿಸಿಲ್ಲ.
-ಮತ್ತೊಮೆ ಉಳಿಸಿ ಅನ್ನು ಒತ್ತಿದರೆ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಹಾಗೆಯೇ ಉಳಿಸಲಾಗುವುದು.",
+'missingcommenttext' => 'ಕೆಳಗೆ ಒಂದು ಟಿಪ್ಪಣಿ ನಮೂದಿಸಿ',
+'missingcommentheader' => "'''ಗಮನಿಸಿ:''' ಈ ವ್ಯಾಖ್ಯಾನಕ್ಕೆ ವಿಷಯ ಅಥವ ತಲೆಬರಹ ನೀವು ಸೂಚಿಸಿಲ್ಲ. ನೀವು \"{{int:savearticle}}\"
+ಮತ್ತೊಮೆ ಒತ್ತಿದರೆ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಹಾಗೆಯೇ ಉಳಿಸಲಾಗುವುದು.",
 'summary-preview' => 'ತಾತ್ಪರ್ಯ ಮುನ್ನೋಟ:',
 'subject-preview' => 'ವಿಷಯದ/ತಲೆಬರಹದ ಮುನ್ನೋಟ:',
 'blockedtitle' => 'ಈ ಸದಸ್ಯರನ್ನು ತಡೆ ಹಿಡಿಯಲಾಗಿದೆ.',
@@ -622,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ನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ.'''
@@ -629,8 +637,10 @@ $2',
 'userjspreview' => "'''ಗಮನಿಸಿ: ನೀವು ನಿಮ್ಮ ಬಳಕೆದಾರ JavaScriptನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ ಅಥವ ಪ್ರಯೋಗ ಮಾಡುತ್ತಿರುವಿರಿ. ಅದನ್ನಿನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ!'''",
 'sitecsspreview' => "'''ನೆನಪಿಡಿ: ನೀವು ಇಲ್ಲಿ ಕೇವಲ ನಿಮ್ಮ ಬಳಕೆದಾರ CSSನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ.''''''ಅದನ್ನು ಇನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ!'''",
 'sitejspreview' => "'''ನೆನಪಿಡಿ: ನೀವು ಇಲ್ಲಿ ಕೇವಲ ನಿಮ್ಮ ಬಳಕೆದಾರ CSSನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ.''''''ಅದನ್ನು ಇನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ!'''",
+'updated' => '(ನಕಲೆರಿಸಲಾಗಿದೆ)',
 'note' => "'''ಸೂಚನೆ:'''",
 'previewnote' => "'''ಇದು ಕೇವಲ ಮುನ್ನೋಟ; ಪುಟವನ್ನು ಇನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ ಎಂಬುದನ್ನು ಮರೆಯದಿರಿ!'''",
+'continue-editing' => 'ಸಂಪಾದನೆಯ ಪ್ರದೇಶಕ್ಕೆ  ಹೋಗಿ',
 'editing' => "'$1' ಲೇಖನ ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ",
 'editingsection' => '$1 (ವಿಭಾಗ) ಅನ್ನು ಸಂಪಾದಿಸುತ್ತಿರುವಿರಿ',
 'editingcomment' => '$1 (ಹೊಸ ವಿಭಾಗ) ಸಂಪಾದಿಸಲಾಗುತ್ತಿದೆ',
@@ -664,7 +674,6 @@ $2',
 'template-protected' => '(ಸಂರಕ್ಷಿತ)',
 'template-semiprotected' => '(ಅರೆ-ಸಂರಕ್ಷಿತ)',
 'hiddencategories' => 'ಈ ಪುಟವು {{PLURAL:$1|೧ ಗುಪ್ತ ವರ್ಗಕ್ಕೆ|$1 ಗುಪ್ತ ವರ್ಗಗಳಿಗೆ}} ಸೇರಿದೆ:',
-'nocreatetitle' => 'ಪುಟವನ್ನು ಸೃಷ್ಟಿಸುವುದನ್ನು ನಿಯಮಿಸಲಾಗಿದೆ',
 'nocreatetext' => '{{SITENAME}} ಅಲ್ಲಿ ಹೊಸ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸಲು ಕೆಲವು ನಿಬಂಧನೆಗಳಿವೆ.
 ನೀವು ಹಿಂದಿರುಗಿ ಆಗಲೇ ಅಸ್ಥಿತ್ವದಲ್ಲಿರುವ ಪುಟವೊಂದನ್ನು ಸಂಪಾದಿಸಿ, ಅಥವ [[Special:UserLogin|ಲಾಗ್ ಇನ್ ಆಗಿ ಅಥವ ಹೊಸ ಸದಸ್ಯರಾಗಿ]].',
 'nocreate-loggedin' => 'ಹೊಸ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ.',
@@ -875,7 +884,7 @@ $2',
 
 # Preferences page
 'preferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
-'mypreferences' => 'ನನà³\8dನ à²ªà³\8dರಾಶಸà³\8dತà³\8dಯà²\97ಳà³\81',
+'mypreferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
 'prefs-edits' => 'ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ:',
 'prefsnologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ',
 'prefsnologintext' => 'ಬಳಕೆದಾರ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ಬದಲಾಯಿಸಲು ನೀವು <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ಲಾಗ್ ಇನ್]</span> ಆಗಿರಬೇಕು.',
@@ -1001,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|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}',
@@ -1100,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' => 'ಈ ಫೈಲು ಸರ್ವರ್‍ನಲ್ಲಿ ಸೇರ್ಪಡೆ ಮಾಡಲು ಶಿಫಾರಿತ ಗಾತ್ರಕ್ಕಿಂತ ದೊಡ್ಡದಾಗಿದೆ.',
@@ -1135,6 +1167,7 @@ $2',
 'upload-source' => 'ಮೂಲ ಕಡತ',
 'sourcefilename' => 'ಮೂಲ ಫೈಲಿನ ಹೆಸರು:',
 'upload-maxfilesize' => 'ಗರಿಷ್ಠ ಫೈಲು ಗಾತ್ರ: $1',
+'upload-description' => 'ಕಡತ ವಿವರಣೆ',
 'watchthisupload' => 'ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ',
 'filewasdeleted' => 'ಈ ಹೆಸರಿನ ಫೈಲು ಮುಂಚೆ ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿ ಅದನ್ನು ಆನಂತರ ಅಳಿಸಲಾಗಿತ್ತು.
 ಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ಅಪ್ಲೋಡ್ ಮಾಡುವ ಮುನ್ನ ನೀವು $1 ಅನ್ನು ಪರೀಕ್ಷಿಸಬೇಕು.',
@@ -1146,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" ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.',
@@ -1155,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' => ' (ನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲಿರುವ ಒಂದು ಫೈಲು)',
 
@@ -1189,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
@@ -1218,6 +1268,7 @@ $2',
 ** ಕೃತಿಸ್ವಾಮ್ಯತೆ ಉಲ್ಲಂಘನೆ
 ** ದ್ವಿಪ್ರತಿಗಳಿರುವ ಫೈಲು',
 'filedelete-edit-reasonlist' => 'ಅಳಿಸುವಿಕೆಯ ಕಾರಣಗಳನ್ನು ಸಂಪಾದಿಸು',
+'filedelete-maintenance-title' => 'ಕಡತವನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ',
 
 # MIME search
 'mimesearch' => 'MIME ಹುಡುಕಾಟ',
@@ -1250,7 +1301,9 @@ $2',
 'statistics-header-views' => 'ವೀಕ್ಷಣಾ ಅಂಕಿಅಂಶಗಳು',
 'statistics-header-users' => 'ಸದಸ್ಯರ ಅಂಕಿ ಅಂಶ',
 'statistics-header-hooks' => 'ಇತರ ಅಂಕಿಅಂಶಗಳು',
+'statistics-articles' => 'ಲೇಖನ ಪುಟ',
 'statistics-pages' => 'ಪುಟಗಳು',
+'statistics-views-total' => 'ಒಟ್ಟು ವೀಕ್ಷಣೆಗಳು',
 'statistics-mostpopular' => 'ಅತ್ಯಂತ ಹೆಚ್ಚು ವೀಕ್ಷಿತ ಪುಟಗಳು',
 
 'disambiguations' => 'ದ್ವಂದ್ವನಿವಾರಣಾ ಪುಟಗಳು',
@@ -1371,9 +1424,7 @@ $2',
 
 # Special:ActiveUsers
 'activeusers' => 'ಸಕ್ರಿಯ ಸದಸ್ಯರ ಪಟ್ಟಿ',
-
-# Special:Log/newusers
-'newuserlogpage' => 'ಸದಸ್ಯತ್ವ ಸೃಷ್ಟಿಗಳ ದಾಖಲೆ',
+'activeusers-noresult' => 'ಯಾವ ಬಳಕೆದಾರರೂ ಸಿಗಲಿಲ್ಲ.',
 
 # Special:ListGroupRights
 'listgrouprights' => 'ಬಳಕೆದಾರ ಗುಂಪು ಹಕ್ಕುಗಳು',
@@ -1388,6 +1439,7 @@ $2',
 'mailnologin' => 'ಕಳುಹಿಸುವ ವಿಳಾಸ ಇಲ್ಲ',
 'mailnologintext' => 'ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇ-ಅಂಚೆ ಕಳುಹಿಸಲು ನೀವು [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಿರಬೇಕು ಮತ್ತು ನಿಮ್ಮ [[Special:Preferences|ಪ್ರಾಶಸ್ತ್ಯಗಳ ಪುಟದಲ್ಲಿ]] ಒಂದು ಧೃಡೀಕೃತ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿರಬೇಕು.',
 'emailuser' => 'ಈ ಸದಸ್ಯರಿಗೆ ಇ-ಅಂಚೆ ಕಳಿಸಿ',
+'emailuser-title-notarget' => 'ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ',
 'emailpage' => 'ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ',
 'defemailsubject' => 'ವಿಕಿಪೀಡಿಯ ವಿ-ಅ೦ಚೆ',
 'noemailtitle' => 'ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲ',
@@ -1404,7 +1456,7 @@ $2',
 
 # Watchlist
 'watchlist' => 'ವೀಕ್ಷಣಾ ಪಟ್ಟಿ',
-'mywatchlist' => 'ನನà³\8dನ à²µà³\80à²\95à³\8dಷಣಾಪà²\9fà³\8dà²\9fಿ',
+'mywatchlist' => 'ವೀಕ್ಷಣಾಪಟ್ಟಿ',
 'watchlistfor2' => '$1 ($2) ಗೆ',
 'nowatchlist' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ಯಾವುದೇ ಪುಟಗಳಿಲ್ಲ',
 'watchlistanontext' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ನೋಡಲು ಅಥವ ಸಂಪಾದಿಸಲು ದಯವಿಟ್ಟು $1 ಮಾಡಿ.',
@@ -1432,12 +1484,11 @@ $2',
 'unwatching' => 'ವೀಕ್ಷಣೆಯಿಂದ ತೆಗೆಯಲಾಗುತ್ತಿದೆ...',
 
 'enotif_reset' => 'ಭೇಟಿಯಿತ್ತ ಎಲ್ಲಾ ಪುಟಗಳನ್ನು ಗುರುತು ಮಾಡಿ',
-'enotif_newpagetext' => 'ಇದೊಂದು ಹೊಸ ಪುಟ.',
 'enotif_impersonal_salutation' => '{{SITENAME}} ಸದಸ್ಯ',
-'changed' => 'ಬದಲಾಯಿಸಲಾಗಿದೆ',
-'created' => 'ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿದೆ',
 'enotif_lastvisited' => 'ನಿಮ್ಮ ಕಳೆದ ಭೇಟಿಯ ನಂತರದ ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳಿಗೆ $1 ನೋಡಿ.',
 'enotif_anon_editor' => 'ಅನಾಮಧೇಯ ಸದಸ್ಯ $1',
+'created' => 'ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿದೆ',
+'changed' => 'ಬದಲಾಯಿಸಲಾಗಿದೆ',
 
 # Delete
 'deletepage' => 'ಪುಟವನ್ನು ಅಳಿಸಿ',
@@ -1541,7 +1592,7 @@ $2',
 # Contributions
 'contributions' => 'ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳು',
 'contributions-title' => '$1 ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳು',
-'mycontris' => 'ನನà³\8dನ à²\95ಾಣಿà²\95à³\86à²\97ಳà³\81',
+'mycontris' => 'ಕಾಣಿಕೆಗಳು',
 'contribsub2' => '$1 ($2) ಗೆ',
 'uctop' => ' (ಮೇಲಕ್ಕೆ)',
 'month' => 'ಈ ತಿಂಗಳಿಂದ (ಮತ್ತು ಮುಂಚಿನ):',
@@ -1554,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' => 'ಕೇವಲ ಇತ್ತೀಚಿನ ಪರಿಷ್ಕರಣೆಗೆ ಸಂಬಂಧಿಸಿದ ಸಂಪಾದನೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು',
@@ -1812,6 +1865,10 @@ $2',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|ಸದಸ್ಯ|ಸದಸ್ಯರು}} $1',
 'creditspage' => 'ಪುಟದ ಗೌರವಗಳು',
 
+# Info page
+'pageinfo-toolboxlink' => 'ಪುಟದ ಮಾಹಿತಿ',
+'pageinfo-redirectsto' => 'ಪುನರ್ನಿರ್ದೇಶನ:',
+
 # Image deletion
 'deletedrevision' => 'ಹಳೆ ಆವೃತ್ತಿ $1 ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ',
 'filedeleteerror-short' => 'ಈ ಫೈಲನ್ನು ಅಳಿಸುವುದರಲ್ಲಿ ದೋಷ: $1',
@@ -2120,5 +2177,17 @@ $5
 # New logging system
 'revdelete-restricted' => 'ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು',
 'revdelete-unrestricted' => 'ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು',
+'rightsnone' => '(ಯಾವೂ ಇಲ್ಲ)',
+
+# 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 e0c126a..dcd9262 100644 (file)
@@ -26,6 +26,7 @@
  * @author Kaganer
  * @author Klutzy
  * @author Kwj2772
+ * @author LFM
  * @author Mintz0223
  * @author Pi.C.Noizecehx
  * @author PuzzletChung
@@ -477,8 +478,9 @@ $messages = array(
 'newwindow' => '(새 창으로 열림)',
 'cancel' => '취소',
 'moredotdotdot' => '더 보기...',
-'mypage' => '내 사용자 문서',
-'mytalk' => '내 사용자 토론',
+'morenotlisted' => '목록에 없는 항목 더 보기...',
+'mypage' => '문서',
+'mytalk' => '토론',
 'anontalk' => '익명 사용자 토론',
 'navigation' => '둘러보기',
 'and' => ',',
@@ -510,8 +512,9 @@ $messages = array(
 'namespaces' => '이름공간',
 'variants' => '변수',
 
+'navigation-heading' => '둘러보기 메뉴',
 'errorpagetitle' => '오류',
-'returnto' => '$1(으)로 돌아갑니다.',
+'returnto' => '$1 문서로 돌아갑니다.',
 'tagline' => '{{SITENAME}}',
 'help' => '도움말',
 'search' => '찾기',
@@ -596,7 +599,7 @@ $1',
 
 'badaccess' => '권한 오류',
 'badaccess-group0' => '요청한 동작을 실행할 권한이 없습니다.',
-'badaccess-groups' => '요청한 동작은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게만 가능합니다: $1.',
+'badaccess-groups' => '요청한 동작은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게만 가능합니다: $1',
 
 'versionrequired' => '미디어위키 $1 버전 필요',
 'versionrequiredtext' => '이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.
@@ -606,7 +609,7 @@ $1',
 'retrievedfrom' => '원본 주소 "$1"',
 'youhavenewmessages' => '다른 사용자가 $1란에 글을 남겼습니다. ($2)',
 'newmessageslink' => '사용자 토론',
-'newmessagesdifflink' => 'ë°\94ë\80\90 ë\82´ì\9a© ë¹\84êµ\90',
+'newmessagesdifflink' => 'ë§\88ì§\80ë§\89 ë°\94ë\80\90 ë\82´ì\9a©',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1란에 글을 남겼습니다. ($2)',
 'youhavenewmessagesmanyusers' => '여러 사용자가 $1란에 글을 남겼습니다. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|사용자 토론}}',
@@ -720,7 +723,7 @@ URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니
 'actionthrottled' => '동작 중지',
 'actionthrottledtext' => '스팸을 막기 위해 짧은 시간 안에 이 작업을 너무 많이 하는 것을 막고 있습니다.
 제한을 넘었으니 몇 분 뒤에 새로 시도하세요.',
-'protectedpagetext' => '이 문서는 편집할 수 없도록 보호되어 있습니다.',
+'protectedpagetext' => 'ì\9d´ ë¬¸ì\84\9cë\8a\94 í\8e¸ì§\91í\95\98ê±°ë\82\98 ë\8b¤ë¥¸ í\96\89ë\8f\99ì\9d\84 í\95  ì\88\98 ì\97\86ë\8f\84ë¡\9d ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.',
 'viewsourcetext' => '문서의 원본을 보거나 복사할 수 있습니다:',
 'viewyourtext' => "이 문서에 남긴 '''내 편집''' 내용을 보거나 복사할 수 있습니다:",
 'protectedinterface' => '이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.
@@ -755,8 +758,8 @@ $2',
 
 이대로 이름 없이 {{SITENAME}}을(를) 이용하거나, 방금 사용했던 계정이나 다른 계정으로 다시 <span class='plainlinks'>[$1 로그인]</span>해서 이용할 수 있습니다.
 웹 브라우저의 캐시를 지우지 않으면 몇몇 문서에서 로그인이 되어 있는 것처럼 보일 수 있다는 점을 유의해 주세요.",
-'welcomecreation' => '== $1 님, 환영합니다! ==
-계정이 만들어졌습니다.
+'welcomeuser' => '$1, 환영합니다!',
+'welcomecreation-msg' => '계정이 만들어졌습니다.
 [[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.',
 'yourname' => '사용자 이름:',
 'yourpassword' => '비밀번호:',
@@ -777,7 +780,7 @@ $2',
 'nologin' => '계정이 없나요? $1.',
 'nologinlink' => '계정을 만들 수 있습니다',
 'createaccount' => '계정 만들기',
-'gotaccount' => "계정이 이미 있다면, '''$1'''.",
+'gotaccount' => '계정이 이미 있다면, $1.',
 'gotaccountlink' => '로그인하세요',
 'userlogin-resetlink' => '사용자 이름이나 비밀번호를 잊으셨나요?',
 'createaccountmail' => '이메일로 보내기',
@@ -806,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' => '이 사용자 이름과 비밀번호는 사용할 수 없습니다.',
@@ -860,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' => '비밀번호 바꾸기',
@@ -893,7 +897,7 @@ $2',
 'passwordreset-capture-help' => '이 상자에 체크하면 이메일이 발송된 즉시 임시 비밀번호가 담긴 이메일을 볼 수 있습니다.',
 'passwordreset-email' => '이메일 주소:',
 'passwordreset-emailtitle' => '{{SITENAME}} 계정 자세한 정보',
-'passwordreset-emailtext-ip' => 'IP 주소 $1을 사용하는 누군가(아마도 당신이), {{SITENAME}} ($4)의 비밀번호 찾기를 요청하였습니다.
+'passwordreset-emailtext-ip' => 'IP 주소 $1을 사용하는 누군가가 아마 자신이 {{SITENAME}} ($4)의 비밀번호 찾기를 요청하였습니다.
 이 이메일 주소와 연관된 계정의 목록입니다:
 
 $2
@@ -923,6 +927,7 @@ $2
 'changeemail-oldemail' => '현재 이메일 주소 :',
 'changeemail-newemail' => '새 이메일 주소:',
 'changeemail-none' => '(없음)',
+'changeemail-password' => '{{SITENAME}} 비밀번호:',
 'changeemail-submit' => '이메일 주소 바꾸기',
 'changeemail-cancel' => '취소',
 
@@ -932,7 +937,7 @@ $2
 'italic_sample' => '기울인 글씨',
 'italic_tip' => '기울인 글씨',
 'link_sample' => '링크 제목',
-'link_tip' => '내부 링크',
+'link_tip' => '안쪽 링크',
 'extlink_sample' => 'http://www.example.com 사이트 이름',
 'extlink_tip' => '바깥 링크 (주소 앞에 http://가 있어야 합니다.)',
 'headline_sample' => '제목',
@@ -955,7 +960,7 @@ $2
 'showlivepreview' => '실시간 미리 보기',
 'showdiff' => '차이 보기',
 'anoneditwarning' => "'''경고''': 로그인하고 있지 않습니다.
-당신의 IP 주소가 문서 역사에 남게 됩니다.",
+IP 주소가 문서 역사에 남게 됩니다.",
 'anonpreviewwarning' => "'''로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''",
 'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다.
 이대로 \"{{int:savearticle}}\"을 클릭하면 편집 요약 없이 저장됩니다.",
@@ -978,7 +983,8 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 [[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.
 지금 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.
 문의할 때에 이 정보를 같이 알려주세요.",
-'autoblockedtext' => "당신의 IP 주소는 $1이 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다. 차단된 이유는 다음과 같습니다:
+'autoblockedtext' => '당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.
+차단된 이유는 다음과 같습니다:
 
 :$2
 
@@ -988,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' => '문서를 고치려면 이메일 인증 절차가 필요합니다.
@@ -1110,7 +1116,6 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'template-semiprotected' => '(준보호됨)',
 'hiddencategories' => '이 문서는 다음 숨은 분류 $1개에 속해 있습니다:',
 'edittools' => '<!-- 이 문서는 편집 창과 파일 올리기 창에 출력됩니다. -->',
-'nocreatetitle' => '문서 만들기 제한',
 'nocreatetext' => '{{SITENAME}}에서 새로운 문서를 만드는 것은 제한되어 있습니다.
 이미 존재하는 다른 문서를 편집하거나, [[Special:UserLogin|로그인하거나 계정을 만들 수 있습니다]].',
 'nocreate-loggedin' => '새 문서를 만들 권한이 없습니다.',
@@ -1131,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' => '잘못된 내용 데이터입니다',
@@ -1159,10 +1164,10 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'parser-template-loop-warning' => '재귀적인 틀이 발견되었습니다: [[$1]]',
 'parser-template-recursion-depth-warning' => '틀 반복 횟수 제한을 초과함($1)',
 'language-converter-depth-warning' => '언어 변환기 실행 제한 초과($1)',
-'node-count-exceeded-category' => '페이지가 노드 횟수를 초과하였습니다.',
-'node-count-exceeded-warning' => '페이지가 노드 수를 초과하였습니다.',
-'expansion-depth-exceeded-category' => '페이지가 확장 깊이를 초과하였습니다.',
-'expansion-depth-exceeded-warning' => '페이지가 확장 깊이를 초과하였습니다',
+'node-count-exceeded-category' => '문서가 노드 횟수를 초과하였습니다.',
+'node-count-exceeded-warning' => '문서가 노드 수를 초과하였습니다.',
+'expansion-depth-exceeded-category' => '문서가 확장 깊이를 초과하였습니다.',
+'expansion-depth-exceeded-warning' => '문서가 확장 깊이를 초과하였습니다',
 'parser-unstrip-loop-warning' => '스트립하지 않는 반복이 감지되었습니다',
 'parser-unstrip-recursion-limit' => '스트립하지 않는 재귀 한도가 초과됨 ($1)',
 'converter-manual-rule-error' => '언어 변환 규칙을 수동으로 지정하는 도중 오류',
@@ -1341,14 +1346,14 @@ $1",
 
 # Merge log
 'mergelog' => '병합 기록',
-'pagemerge-logentry' => '사용자가 [[$1]]을 [[$2]]에 병합 ($3판이 위로 옮겨짐)',
+'pagemerge-logentry' => '사용자가 [[$1]]을 [[$2]]에 병합했습니다 ($3판이 위로 옮겨짐)',
 'revertmerge' => '병합 해제',
 'mergelogpagetext' => '다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.',
 
 # Diffs
 'history-title' => '"$1" 문서의 바뀜 내역',
 'difference-title' => '"$1"의 두 판 사이의 차이',
-'difference-title-multipage' => '문서 "$1"(와)과 "$2" 사이의 차이',
+'difference-title-multipage' => '"$1" 문서와 "$2" 문서 사이의 차이',
 'difference-multipage' => '(문서 사이의 차이)',
 'lineno' => '$1번째 줄:',
 'compareselectedversions' => '선택한 판을 비교하기',
@@ -1377,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]]\" 문서를 만드세요!'''",
@@ -1419,7 +1424,7 @@ $1",
 'powersearch-field' => '찾기',
 'powersearch-togglelabel' => '확인:',
 'powersearch-toggleall' => '모두 선택',
-'powersearch-togglenone' => '모두 선택하지 않음',
+'powersearch-togglenone' => '음',
 'search-external' => '바깥 찾기',
 'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
 기능이 작동하지 않는 동안에는 구글(Google)을 이용해 찾을 수 있습니다.
@@ -1436,7 +1441,7 @@ $1",
 
 # Preferences page
 'preferences' => '사용자 환경 설정',
-'mypreferences' => '사용자 환경 설정',
+'mypreferences' => '환경 설정',
 'prefs-edits' => '편집 횟수:',
 'prefsnologin' => '로그인하지 않음',
 'prefsnologintext' => '사용자 환경 설정을 바꾸려면 먼저 <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 로그인]</span>해야 합니다.',
@@ -1494,7 +1499,7 @@ $1",
 'timezoneregion-arctic' => '북극',
 'timezoneregion-asia' => '아시아',
 'timezoneregion-atlantic' => '대서양',
-'timezoneregion-australia' => '오스트레일리아',
+'timezoneregion-australia' => '호주',
 'timezoneregion-europe' => '유럽',
 'timezoneregion-indian' => '인도양',
 'timezoneregion-pacific' => '태평양',
@@ -1512,9 +1517,9 @@ $1",
 'prefs-emailconfirm-label' => '이메일 인증:',
 'prefs-textboxsize' => '편집창의 크기',
 'youremail' => '이메일:',
-'username' => '사용자 이름:',
-'uid' => '사용자 ID:',
-'prefs-memberingroups' => '소속 {{PLURAL:$1|그룹}}:',
+'username' => '{{GENDER:$1|사용자 이름}}:',
+'uid' => '{{GENDER:$1|사용자}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|소속}} {{PLURAL:$1|그룹}}:',
 'prefs-registration' => '등록 일시:',
 'yourrealname' => '실명:',
 'yourlanguage' => '언어:',
@@ -1537,7 +1542,7 @@ HTML 태그를 확인하세요.',
 실명을 입력할 경우 문서 기여에 자신의 이름이 들어가게 됩니다.',
 'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 바꾸기를 위해 필요합니다.',
 'prefs-help-email-others' => '자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
-이 경우에도 당신의 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
+이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
 'prefs-help-email-required' => '이메일 주소가 필요합니다.',
 'prefs-info' => '기본 정보',
 'prefs-i18n' => '언어 설정',
@@ -1581,7 +1586,7 @@ HTML 태그를 확인하세요.',
 'userrights-unchangeable-col' => '바꿀 수 없는 권한',
 
 # Groups
-'group' => 'ê\8cí\95\9c:',
+'group' => '그룹:',
 'group-user' => '사용자',
 'group-autoconfirmed' => '자동 인증된 사용자',
 'group-bot' => '봇',
@@ -1666,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' => '이 문서를 읽기',
@@ -1877,7 +1880,7 @@ $2 형식만 사용할 수 있습니다.',
 'watchthisupload' => '이 파일 주시하기',
 'filewasdeleted' => '같은 이름을 가진 파일이 올라온 적이 있었고 그 후에 삭제되었습니다.
 올리기 전에 $1을 확인해 주시기 바랍니다.',
-'filename-bad-prefix' => '올리려고 하는 파일 이름이 \'\'\'"$1"\'\'\'(으)로 시작합니다. "$1"은(는) 디지털 사진기가 자동으로 붙이는 의미없는 이름입니다.
+'filename-bad-prefix' => '올리려고 하는 파일 이름이 \'\'\'"$1"\'\'\' 이름으로 시작합니다. "$1" 이름은 디지털 사진기가 자동으로 붙이는 의미없는 이름입니다.
 파일에 대해 알기 쉬운 이름을 골라주세요.',
 'filename-prefix-blacklist' => ' #<!-- 이 줄은 그대로 두십시오 --> <pre>
 # 문법은 다음과 같습니다:
@@ -1924,6 +1927,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 경로에 복사하지 못했습니다.',
@@ -1977,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를 지원하지 않을 때 나타날 수 있습니다.
@@ -2042,7 +2046,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'filehist-deleteall' => '모두 삭제',
 'filehist-deleteone' => '삭제',
 'filehist-revert' => '되돌리기',
-'filehist-current' => '최신',
+'filehist-current' => '현재',
 'filehist-datetime' => '날짜/시간',
 'filehist-thumb' => '섬네일',
 'filehist-thumbtext' => '$1 판의 파일',
@@ -2294,7 +2298,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => '지금 이 문서의 캐시된 버전을 보고 있습니다. 이 버전은 최대 $1만큼 지난 버전일 가능성이 있습니다.',
-'cachedspecial-viewing-cached-ts' => '현재 이 페이지는 캐시 처리된 버전으로 현재 문서 상태를 반영하지 않을 수도 있습니다.',
+'cachedspecial-viewing-cached-ts' => '현재 이 문서는 캐시 처리된 버전으로 현재 문서 상태를 반영하지 않을 수도 있습니다.',
 'cachedspecial-refresh-now' => '최신 버전 보기.',
 
 # Special:Categories
@@ -2318,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' => '와일드카드는 주소의 처음 부분에만 사용될 수 있습니다.',
 
@@ -2337,10 +2341,6 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'activeusers-hidesysops' => '관리자를 숨기기',
 'activeusers-noresult' => '사용자가 없습니다.',
 
-# Special:Log/newusers
-'newuserlogpage' => '사용자 등록 기록',
-'newuserlogpagetext' => '사용자 등록 기록입니다.',
-
 # Special:ListGroupRights
 'listgrouprights' => '사용자 권한 목록',
 'listgrouprights-summary' => '다음은 이 위키에서 설정된 사용자 권한 그룹의 목록입니다.
@@ -2400,15 +2400,15 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # Watchlist
 'watchlist' => '주시문서 목록',
-'mywatchlist' => '내 주시문서 목록',
+'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' => '주시',
@@ -2436,19 +2436,23 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 'enotif_mailer' => '{{SITENAME}} 자동 알림 메일',
 'enotif_reset' => '모든 문서를 방문한 것으로 표시하기',
-'enotif_newpagetext' => '이 문서는 새 문서입니다.',
 'enotif_impersonal_salutation' => '{{SITENAME}} 사용자',
-'changed' => '바꾸',
-'created' => '만들',
-'enotif_subject' => '{{SITENAME}}에서 $PAGEEDITOR 사용자가 $PAGETITLE 문서를 $CHANGEDORCREATED었습니다.',
-'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_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 에서 볼 수 있습니다.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 편집 요약: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2456,8 +2460,7 @@ $NEWPAGE
 이메일: $PAGEEDITOR_EMAIL
 위키: $PAGEEDITOR_WIKI
 
-이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다.
-모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
+이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
 
 {{SITENAME}} 알림 시스템
 
@@ -2473,6 +2476,8 @@ $UNWATCHURL
 
 도움을 얻거나 피드백 하기:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '만들었',
+'changed' => '바꾸었',
 
 # Delete
 'deletepage' => '문서 삭제하기',
@@ -2536,15 +2541,17 @@ $UNWATCHURL
 'protectlogpage' => '문서 보호 기록',
 'protectlogtext' => '아래의 목록은 문서 보호에 관한 바뀜 사항에 대한 기록입니다.
 현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참고하세요.',
-'protectedarticle' => 'ì\82¬ì\9a©ì\9e\90ê°\80 "[[$1]]" ë¬¸ì\84\9c를 ë³´í\98¸í\95¨',
-'modifiedarticleprotection' => 'ì\82¬ì\9a©ì\9e\90ê°\80 "[[$1]]" ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë°\94ê¿\88',
-'unprotectedarticle' => 'ì\82¬ì\9a©ì\9e\90ê°\80 "[[$1]]" ë¬¸ì\84\9c를 ë³´í\98¸ í\95´ì \9cí\95¨',
-'movedarticleprotection' => 'ì\82¬ì\9a©ì\9e\90ê°\80 ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 "[[$2]]"ì\97\90ì\84\9c "[[$1]]"ì\9c¼ë¡\9c ì\98®ê¹\80',
+'protectedarticle' => 'ì\82¬ì\9a©ì\9e\90ê°\80 "[[$1]]" ë¬¸ì\84\9c를 ë³´í\98¸í\96\88ì\8aµë\8b\88ë\8b¤',
+'modifiedarticleprotection' => 'ì\82¬ì\9a©ì\9e\90ê°\80 "[[$1]]" ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë°\94꿨ì\8aµë\8b\88ë\8b¤',
+'unprotectedarticle' => 'ì\82¬ì\9a©ì\9e\90ê°\80 "[[$1]]" ë¬¸ì\84\9c를 ë³´í\98¸ í\95´ì \9cí\96\88ì\8aµë\8b\88ë\8b¤',
+'movedarticleprotection' => 'ì\82¬ì\9a©ì\9e\90ê°\80 ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 "[[$2]]"ì\97\90ì\84\9c "[[$1]]"ì\9c¼ë¡\9c ì\98®ê²¼ì\8aµë\8b\88ë\8b¤',
 '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' => '보호 기간:',
@@ -2561,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에 해제',
@@ -2602,7 +2609,7 @@ $UNWATCHURL
 # Undelete
 'undelete' => '삭제된 문서 보기',
 'undeletepage' => '삭제된 문서를 보거나 되살리기',
-'undeletepagetitle' => "'''아래는 [[:$1|$1]]의 삭제된 판입니다.'''.",
+'undeletepagetitle' => "'''아래는 [[:$1|$1]]의 삭제된 판입니다'''.",
 'viewdeletedpage' => '삭제된 문서 보기',
 'undeletepagetext' => '다음 {{PLURAL:$1|문서는|문서 $1개는}} 삭제되었지만 아직 보관되어 있고 되살릴 수 있습니다.
 보관된 문서는 주기적으로 삭제될 것입니다.',
@@ -2663,9 +2670,9 @@ $1',
 'blanknamespace' => '(일반)',
 
 # Contributions
-'contributions' => '사용자 기여',
+'contributions' => '{{GENDER:$1|사용자}} 기여',
 'contributions-title' => '$1 사용자의 기여 목록',
-'mycontris' => '내 기여 목록',
+'mycontris' => '기여 목록',
 'contribsub2' => '$1($2)의 기여',
 'nocontribs' => '이 사용자는 아무 것도 기여하지 않았습니다.',
 'uctop' => '(최신)',
@@ -2800,8 +2807,8 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 해당 사용자의 차단 기록은 다음과 같습니다:',
 'blocklog-showsuppresslog' => '이 사용자는 과거에 차단된 적이 있으며, 그 기록이 숨겨져 있습니다.
 해당 사용자의 차단 기록은 다음과 같습니다:',
-'blocklogentry' => 'ì\82¬ì\9a©ì\9e\90ê°\80 [[$1]] ì\82¬ì\9a©ì\9e\90를 $2 ì°¨ë\8b¨í\95¨ $3',
-'reblock-logentry' => 'ì\82¬ì\9a©ì\9e\90ê°\80 [[$1]] ì\82¬ì\9a©ì\9e\90ì\9d\98 ì°¨ë\8b¨ ê¸°ê°\84ì\9d\84 $2(ì\9c¼)ë¡\9c ë°\94ê¿\88 $3',
+'blocklogentry' => 'ì\82¬ì\9a©ì\9e\90ê°\80 [[$1]] ì\82¬ì\9a©ì\9e\90를 $2 ì°¨ë\8b¨í\96\88ì\8aµë\8b\88ë\8b¤ $3',
+'reblock-logentry' => 'ì\82¬ì\9a©ì\9e\90ê°\80 [[$1]] ì\82¬ì\9a©ì\9e\90ì\9d\98 ì°¨ë\8b¨ ê¸°ê°\84ì\9d\84 $2(ì\9c¼)ë¡\9c ë°\94꾸ì\97\88ì\8aµë\8b\88ë\8b¤ $3',
 'blocklogtext' => '이 목록은 사용자 차단/차단 해제 기록입니다.
 자동으로 차단된 IP 주소는 여기에 나오지 않습니다.
 [[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.',
@@ -2821,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 범위가 잘못되었습니다.',
@@ -2872,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¤'''.
+참고로 새 제목으로 된 문서가 이미 있을 때, 넘겨주기 문서이고 문서 역사가 없을 때에만 이동하며 그렇지 않을 경우에는 이동하지 '''않습니다'''.
 실수로 문서를 옮겼을 때 되돌릴 수는 있지만 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
 
 '''경고!'''
@@ -3057,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" 이름공간은 하위 문서를 허용하지 않습니다.',
@@ -3072,7 +3080,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 # JavaScriptTest
 'javascripttest' => '자바스크립트 테스트',
 'javascripttest-title' => '$1 테스트 실행',
-'javascripttest-pagetext-noframework' => '이 페이지는 자바스크립트 테스트를 실행하기 위한 용도로 할당되어 있습니다.',
+'javascripttest-pagetext-noframework' => '이 문서는 자바스크립트 테스트를 실행하기 위한 용도로 할당되어 있습니다.',
 'javascripttest-pagetext-unknownframework' => '실험용 프레임워크 "$1"를 알 수 없습니다.',
 'javascripttest-pagetext-frameworks' => '다음 실험용 프레임워크 중 하나를 선택하세요: $1',
 'javascripttest-pagetext-skins' => '실험할 스킨을 선택하세요:',
@@ -3135,7 +3143,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-ca-nstab-help' => '도움말 문서 내용을 봅니다.',
 'tooltip-ca-nstab-category' => '분류 문서 내용을 봅니다.',
 'tooltip-minoredit' => '사소한 편집으로 표시하기',
-'tooltip-save' => '편집 내용을 저장하기',
+'tooltip-save' => '바뀜 저장하기',
 'tooltip-preview' => '편집 미리 보기. 저장하기 전에 꼭 미리 보기를 해 주세요!',
 'tooltip-diff' => '자신이 바꾼 것 보기',
 'tooltip-compareselectedversions' => '이 문서에서 선택한 두 판간의 차이를 비교',
@@ -3151,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 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */',
@@ -3241,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' => '정보',
@@ -3249,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' => '클래식',
@@ -3271,6 +3284,8 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'markedaspatrollederror' => '검토한 것으로 표시할 수 없습니다.',
 'markedaspatrollederrortext' => '검토한 것으로 표시할 판을 지정해야 합니다.',
 'markedaspatrollederror-noautopatrol' => '자신의 편집은 스스로 검토할 수 없습니다.',
+'markedaspatrollednotify' => '$1에 대한 바뀜을 검토한 것으로 표시했습니다.',
+'markedaspatrollederrornotify' => '검토한 것으로 표시를 실패했습니다.',
 
 # Patrol log
 'patrol-log-page' => '검토 기록',
@@ -3304,9 +3319,10 @@ $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 프레임',
@@ -3329,11 +3345,14 @@ $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' => '방금',
 
 # Bad image list
 'bad_image_list' => '형식은 아래와 같습니다.
@@ -3524,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점 만점)',
@@ -3771,7 +3790,7 @@ Variants for Chinese language
 'edit-externally-help' => '(자세한 정보는 [//www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
 
 # 'all' in various places, this might be different for inflected languages
-'watchlistall2' => '모ë\93  ê¸°ê°\84',
+'watchlistall2' => '모ë\91\90',
 'namespacesall' => '모두',
 'monthsall' => '모든 달',
 'limitall' => '모두',
@@ -3799,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" 계정에 이메일 인증 신청을 했습니다.
@@ -3961,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 일반 공중 사용 허가서 전문을 참고하십시오.
@@ -3997,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' => '로그인 / 계정 만들기',
@@ -4078,8 +4097,8 @@ $5
 'sqlite-no-fts' => '$1 (본문은 찾기에서 제외)',
 
 # New logging system
-'logentry-delete-delete' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c를 ì\82­ì \9cí\95\98ì\98\80습니다.',
-'logentry-delete-restore' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c를 ë³µêµ¬í\95\98ì\98\80습니다.',
+'logentry-delete-delete' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c를 ì\82­ì \9cí\96\88습니다.',
+'logentry-delete-restore' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c를 ë³µêµ¬í\96\88습니다.',
 'logentry-delete-event' => '$1 사용자가 $3의 기록 $5개에 대해 보이기 설정을 바꾸었습니다: $4',
 'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 바꾸었습니다: $4',
 'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 보이기 설정을 바꾸었습니다.',
@@ -4103,15 +4122,19 @@ $5
 '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' => '$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 버그를 신고]해 주세요.
-아니면 아래에 쉬운 양식을 쓸 수 있습니다. 당신의 의견은 사용자 이름과 사용 중인 브라우저 정보와 함께 "[$3 $2]"에 남겨질 것입니다.',
+아니면 아래에 쉬운 양식을 쓸 수 있습니다. 의견은 사용자 이름과 함께 "[$3 $2]"에 남겨질 것입니다.',
 'feedback-subject' => '제목:',
 'feedback-message' => '내용:',
 'feedback-cancel' => '취소',
@@ -4120,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' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
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 6ba2d82..37955af 100644 (file)
@@ -43,9 +43,9 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Джибериулени черт:',
 'tog-justify' => 'Текстни бетни кенглигине кёре тиз',
-'tog-hideminor' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\81пиÑ\81огÑ\83нда гитче тюрлениулени кёргюзме',
-'tog-hidepatrolled' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\81пиÑ\81огÑ\83нда тинтилген тюрлениулени кёргюзме',
-'tog-newpageshidepatrolled' => 'Ð\94жангÑ\8b Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83нда тинтилген бетлени кёргюзме',
+'tog-hideminor' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\82измеÑ\81инде гитче тюрлениулени кёргюзме',
+'tog-hidepatrolled' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\82измеÑ\81инде тинтилген тюрлениулени кёргюзме',
+'tog-newpageshidepatrolled' => 'Ð\94жангÑ\8b Ð±ÐµÑ\82лени Ñ\82измеÑ\81инде тинтилген бетлени кёргюзме',
 'tog-extendwatchlist' => 'Кёзде тургъан тизмени, къуру ахыр тюл, бютеу тюрлениулени кёрюр ючюн кенгерт',
 'tog-usenewrc' => 'Ахыр тюрлениуледе эм кёздеги тизмеде бетлени къауум тюрлениулери (JavaScript керекди)',
 'tog-numberheadings' => 'Башлыкъланы (бёлюмлени атлары) автомат номерленсинле',
@@ -55,17 +55,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Бёлюмлени бёлюм башлыкъгъа басханлай тюрлендириу бетин ач',
 'tog-showtoc' => 'Башларын кёргюз (3-ден кёб бёлюм башлыгъы болгъан бетлеге)',
 'tog-rememberpassword' => 'Бу компьютерде мени тергеў джазыўуму сакъла (эм кёб $1 {{PLURAL:$1|кюн|кюн}})',
-'tog-watchcreations' => 'Мен къурагъан (башлагъан) бетлени кёзюмде тургъан тизмеме къош',
-'tog-watchdefault' => 'Мен тюрлендирген бетлени кёзюмде тургъан тизмеме къош',
-'tog-watchmoves' => 'Мен атларын ауушдургъан бетлени кёзюмде тургъан тизмеме къош',
-'tog-watchdeletion' => 'Мен кетерген бетлени кёзюмде тургъан тизмеме къош',
+'tog-watchcreations' => 'Мен къурагъан (башлагъан) бетлени эм мен джюклеген файлланы кёзюмде тургъан тизмеме къош',
+'tog-watchdefault' => 'Мен тюрлендирген бетлени эм файлланы кёзюмде тургъан тизмеме къош',
+'tog-watchmoves' => 'Мен атларын ауушдургъан бетлени эм файлланы кёзюмде тургъан тизмеме къош',
+'tog-watchdeletion' => 'Мен кетерген бетлени эм файлланы кёзюмде тургъан тизмеме къош',
 'tog-minordefault' => 'Тынгылау бла бары тюрлениулени «аз магъаналы» белгиле',
 'tog-previewontop' => 'Ал къарауну тюрлендириу бетни башы бла кёргюз',
 'tog-previewonfirst' => 'Тюрледириу бетге кёчгенде ал къарауну кёргюз',
 'tog-nocache' => 'Бетлени браузерге кэш этерге къойма',
-'tog-enotifwatchlistpages' => 'Кёзюмде тургъан тизмемдеги бетлени тюрлениулерин E-mail бла билдир',
+'tog-enotifwatchlistpages' => 'Кёзюмде тургъан тизмемдеги бетлени неда файлланы тюрлениулерин E-mail бла билдир',
 'tog-enotifusertalkpages' => 'E-mail бла билдир энчи бетими тюрлениулерин',
-'tog-enotifminoredits' => 'E-mail бла гитче тюрлениуле огъуна болсалада бирдир',
+'tog-enotifminoredits' => 'Бетлени неда файлланы гитче тюрлениулерин огъуна E-mail бла',
 'tog-enotifrevealaddr' => 'E-mail адресими билдириу письмолада кёргюз',
 'tog-shownumberswatching' => 'Бетни, кёзде тургъан тизмелерине къошханланы санын кёргюз',
 'tog-oldsig' => 'Бусагъатдагъы къол салыннган:',
@@ -100,18 +100,18 @@ $messages = array(
 # Dates
 'sunday' => 'Ыйых кюн',
 'monday' => 'Баш кюн',
-'tuesday' => 'Геурге кюн',
-'wednesday' => 'Барас кюн',
+'tuesday' => 'Гюрге кюн',
+'wednesday' => 'Бараз кюн',
 'thursday' => 'Орта кюн',
 'friday' => 'Байрым кюн',
 'saturday' => 'Шабат кюн',
-'sun' => 'Ыйых кюн',
-'mon' => 'Баш кюн',
-'tue' => 'Геурге кюн',
-'wed' => 'Барас кюн',
-'thu' => 'Орта кюн',
-'fri' => 'Байрым кюн',
-'sat' => 'ШабаÑ\82 ÐºÑ\8eн',
+'sun' => 'Ый',
+'mon' => 'Бш',
+'tue' => 'Гр',
+'wed' => 'Брз',
+'thu' => 'Орт',
+'fri' => 'Брм',
+'sat' => 'Шб',
 'january' => 'январь',
 'february' => 'февраль',
 'march' => 'март',
@@ -168,13 +168,13 @@ $messages = array(
 'noindex-category' => 'Индексленмеген бетле',
 'broken-file-category' => 'Ишлемеген файл джибериулери болгъан бетле',
 
-'about' => 'Ð\90Ñ\87Ñ\8bкÑ\8aлау',
+'about' => 'СÑ\83Ñ\80аÑ\82лау',
 'article' => 'Статья',
 'newwindow' => '(джангы терезеде ачылады)',
 'cancel' => 'Ызына алыу',
 'moredotdotdot' => 'Баргъаны…',
-'mypage' => 'ЭнÑ\87и Ð±ÐµÑ\82им',
-'mytalk' => 'Сюзюу бетим',
+'mypage' => 'Ð\91еÑ\82',
+'mytalk' => 'Сюзюу',
 'anontalk' => 'Бу IP-адресге сюзюу бет',
 'navigation' => 'Навигация',
 'and' => '&#32;эм',
@@ -196,16 +196,17 @@ $messages = array(
 'vector-action-protect' => 'Джакъла',
 'vector-action-undelete' => 'Къайтар',
 'vector-action-unprotect' => 'Джакълауну тюрлендир',
-'vector-simplesearch-preference' => 'Ð\9aенглеÑ\88ген Ð¸Ð·Ð»ÐµÑ\83де Ð±Ð¾Ð»Ñ\83Ñ\88лÑ\83кÑ\8aланÑ\8b Ð´Ð¶Ð°Ð½Ð´Ñ\8bÑ\80 (кÑ\8aÑ\83Ñ\80Ñ\83 Ð\92екÑ\82оÑ\80 мотив ючюн)',
+'vector-simplesearch-preference' => 'ТÑ\8bнÑ\87 Ð¸Ð·Ð»ÐµÑ\83де Ð±Ð¾Ð»Ñ\83Ñ\88лÑ\83кÑ\8aланÑ\8b Ð´Ð¶Ð°Ð½Ð´Ñ\8bÑ\80 (кÑ\8aÑ\83Ñ\80Ñ\83 Â«Ð\92екÑ\82оÑ\80» мотив ючюн)',
 'vector-view-create' => 'Къура',
 'vector-view-edit' => 'Тюрлендир',
 'vector-view-history' => 'Тарихин кёргюз',
 'vector-view-view' => 'Окъу',
 'vector-view-viewsource' => 'Кодха къара',
-'actions' => 'Этимле',
+'actions' => 'Этиуле',
 'namespaces' => 'Атланы аламы',
 'variants' => 'Вариантла',
 
+'navigation-heading' => 'Навигация меню',
 'errorpagetitle' => 'Халат',
 'returnto' => '«$1» бетге къайт',
 'tagline' => '{{SITENAME}} сайтдан',
@@ -216,7 +217,7 @@ $messages = array(
 'searcharticle' => 'Кёч',
 'history' => 'Бетни тарихи',
 'history_short' => 'Тарих',
-'updatedmarker' => 'Ахыр киргенимден сора джангыргъан',
+'updatedmarker' => 'Ахыр киргенимден сора джангыргъанды',
 'printableversion' => 'Басмагъа версиясы',
 'permalink' => 'Дайым джибериу',
 'print' => 'Басмала',
@@ -272,7 +273,7 @@ $1',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}} сайтны юсюнден',
-'aboutpage' => 'Project:Ð\90Ñ\87Ñ\8bкÑ\8aлау',
+'aboutpage' => 'Project:СÑ\83Ñ\80аÑ\82лау',
 'copyright' => 'Информация мунга кёре хайырланады: $1',
 'copyrightpage' => '{{ns:project}}:Авторлукъ хакъла',
 'currentevents' => 'Бусагъатда бола тургъанла',
@@ -302,6 +303,10 @@ $1',
 'youhavenewmessages' => 'Сизге $1 келдиле ($2).',
 'newmessageslink' => 'джангы билдириуле',
 'newmessagesdifflink' => 'сюзюу бетигизни ахыр тюрлениую',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Башха бир къошулуучудан|$3 къошулуучудан}} сеннге $1 келди ($2).',
+'youhavenewmessagesmanyusers' => 'Талай къошулуучудан $1 барды. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|джангы билдириу|джангы билдириуле}}',
+'newmessagesdifflinkplural' => 'ахыр {{PLURAL:$1|тюрлениу}}',
 'youhavenewmessagesmulti' => '$1 бетде джангы билдириуле бардыла.',
 'editsection' => 'тюрлендир',
 'editold' => 'тюрлендир',
@@ -315,7 +320,7 @@ $1',
 'collapsible-collapse' => 'джашыр',
 'collapsible-expand' => 'кёргюз',
 'thisisdeleted' => '$1 къараргъа неда къайтарыргъа (тургъузтургъа)?',
-'viewdeleted' => '$1къараймыса?',
+'viewdeleted' => '$1 къараймыса?',
 'restorelink' => 'кетерилген {{PLURAL:$1|1|$1}} тюрлендириу',
 'feedlinks' => 'Бу кёрюмде:',
 'feed-invalid' => 'Джазылыу каналны типи терсди.',
@@ -348,7 +353,7 @@ $1',
 'nosuchspecialpage' => 'Быллай къуллукъ бет джокъду',
 'nospecialpagetext' => '<strong>Сиз излеген къуллукъ бет джокъду.</strong>
 
\91олгÑ\8aан ÐºÑ\8aÑ\83ллÑ\83кÑ\8a Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83: [[Special:SpecialPages|{{int:specialpages}}]].',
\91олгÑ\8aан ÐºÑ\8aÑ\83ллÑ\83кÑ\8a Ð±ÐµÑ\82лени Ñ\82измеÑ\81и: [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
 'error' => 'Халат',
@@ -356,9 +361,9 @@ $1',
 'dberrortext' => 'Информация базагъа джиберилген сорууда синтаксис халат табылды.
 Программада халатны ачыкъларгъа да боллукъду ол.
 Информация базагъа ахыр соруу:
-<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»
@@ -394,6 +399,8 @@ $1',
 'cannotdelete' => '«$1» файлны неда бетни кетерирге болмайды.
 Башха къошулуучу кетерген болургъа боллукъду аны.',
 'cannotdelete-title' => '«$1» бетни кетерирге болмайды',
+'delete-hook-aborted' => 'Тюрлениу тохтатыучу процедура бла ызына алынды.
+Ачыкълау берилмегенди.',
 'badtitle' => 'Джарамагъан ат',
 'badtitletext' => 'Сорулгъан бетни аты терсди, бошду, неда интервики аты терс джазылгъанды. Келишмеген (хайырланыргъа болмагъан) символла хайырланыргъада боллукъдула атында.',
 'perfcached' => 'Бу информация кэшден алыннганды, ахыр тюрлениулени кёргюзмезге боллукъду. Кэшде максимум {{PLURAL:$1|джазыу}} сакъланады.',
@@ -409,15 +416,26 @@ $1',
 'actionthrottledtext' => 'Спамгъа къаршчы кюрешиуню себебинден, аз заманны ичинде бу амал бла кёб кере хайырланыу тыйылыбды. Кечирек джангыдан кёрюгюз.',
 'protectedpagetext' => 'Бу бет тюрлендириуге джабылыбды.',
 'viewsourcetext' => 'Сиз бу бетни башланнган текстине къараргъа эм аны копия этерге боллукъсуз:',
-'protectedinterface' => 'Бу бетде программаны интерфейс билдириую барды. Вандализмге къаршчы кюрешиу себебли, бу бетни тюрлендириу джабылыбды.',
-'editinginterface' => "'''Эс бёлюгюз:'''  Сиз MediaWiki системаны интерфейс бетин тюрлендире турасыз. Бу башха къошулуучулагъ да тиерик затды. Кёчюрюр ючюн [//translatewiki.net/wiki/Main_Page?setlang=ru translatewiki.net] локализация этиу проектни хайырландырыгъыз.",
+'viewyourtext' => "Бу бетде '''кесигизни тюрлендириулеригизни''' къайнакъ текстине къараргъа эм копия этерге боллукъсуз:",
+'protectedinterface' => 'Бу бетде программаны интерфейс билдириую барды.
+Бютеу викиледе да бу билдириуню кёчюрмесин къошар неда тюрлендирир ючюн MediaWiki-ни локализациясыны сайты [//translatewiki.net/ translatewiki.net]-ни хайырландырыгъыз.',
+'editinginterface' => "'''Эс бёл:''' Сен системаны интерфейс бетин тюрлендире тураса. Бу, викини башха къошулуучуларына да тиерик затды. Кёчюрюр ючюн неда кёчюрмелени тюрлендирир ючюн, MediaWiki-ни локализация этиу проекти [//translatewiki.net/ translatewiki.net]-ни хайырландырыгъыз.",
 'sqlhidden' => '(SQL соруу джашырылыбды)',
 'cascadeprotected' => 'Бу бет тюрлениуледен джакъланыбды, ол каскадлы джакълау къабыл этилиннген  {{PLURAL:$1|бетге|бетлеге}} киргени ючюндю:
 $2',
 'namespaceprotected' => '«$1» ат аламда бетлени тюрлендирирге эркинлигигиз джокъду.',
+'customcssprotected' => 'Бу CSS-бетни тюрлендирирге эркинлигигиз джокъду, бу бетде башха къошулуучуну энчи джарашдырыулары барды.',
+'customjsprotected' => 'Бу JavaScript-бетни тюрлендирирге эркинлигигиз джокъду, бу бетде башха къошулуучуну энчи джарашдырыулары барды.',
 'ns-specialprotected' => '«{{ns:special}}» ат аламны бетлерин тюрлендирирге болмайды.',
 'titleprotected' => "Быллай атлы бет къураргъа [[User:$1|$1]]  къоймайды.
 Белгиленнген чурум: ''$2''.",
+'filereadonlyerror' => "«$2» гезен «къуру окъур ючюн» режимде болгъаны себебли «$1» файл тюрленмейди.
+
+Бу режимни салгъан администратор бу ангылатыуну къойгъанды: «''$3''».",
+'invalidtitle-knownnamespace' => '«$2» ат аламы бла эм «$3» тексти бла джарамагъан башлыкъ.',
+'invalidtitle-unknownnamespace' => '$1 белгили болмагъан алам номери бла эм «$2» тексти бла джарамагъан башлыкъ',
+'exception-nologin' => 'Авторизацияны ётмегенсиз',
+'exception-nologin-text' => 'Бу бетге къарар ючюн неда сорулгъан ишни этер ючюн авторизацияны ётерге керекди.',
 
 # Virus scanner
 'virus-badscanner' => "Джарашдырыуну хатасы. Белгисиз вирус сканер: ''$1''",
@@ -429,15 +447,16 @@ $2',
 
 Сиз {{SITENAME}} сайтда аноним халда къалыргъа боллкъсуз. неда <span class='plainlinks'>[$1 джангыдан кирирге]</span>.
 Талай бетле сиз тергеу джазыу (аккаунт) бла киргенча кёрюнюрге боллукъдула, аны кетерир ючюн кэшни джангыртыгъыз.",
-'welcomecreation' => '== Хош келигиз, $1!  ==
-Сизни тергеу джазыуугъуз (аккаунтугъуз) къуралды.
-Сайтны [[Special:Preferences|персонал джарашдырыуларыны]]  къараргъа унутмагъыз.',
+'welcomeuser' => 'Сау кел, $1!',
+'welcomecreation-msg' => 'Сизни тергеу джазыуугъуз (аккаунтугъуз) къуралды.
+{{SITENAME}} сайтда [[Special:Preferences|джарашдырыуларыгъызны]] тюрлендирирге унутмагъыз.',
 'yourname' => 'Къошулуучуну аты',
 'yourpassword' => 'Паролюгъуз:',
 'yourpasswordagain' => 'Паролну джангыдан джаз:',
 'remembermypassword' => 'Бу компьютерде мени тергеў джазыўуму унутма (эм кёб $1 {{PLURAL:$1|кюн|кюн}})',
 'securelogin-stick-https' => 'Чыкъгъандан сора да HTTPS бла байламлы къой',
 'yourdomainname' => 'Сизни доменигиз:',
+'password-change-forbidden' => 'Бу викиде паролугъузну тюрлендиреллик тюлсюз.',
 'externaldberror' => 'Тыш информация базаны болушлугъу бла аутентификация, халатлы болду, неда тыш аккаунтугъузну тюрлендирирге хакъларагъыз джетмейди.',
 'login' => 'Кириу',
 'nav-login-createaccount' => 'Кириу / регистрация этиу',
@@ -462,6 +481,8 @@ $2',
 'createaccounterror' => 'Быллай тергеу джазыу (аккаунт) къураргъа болмайды: $1',
 'nocookiesnew' => 'Къошлуучу регистрацияны ётгенди, алай кирмегенди. {{SITENAME}} къошулуучуланы таныр ючюн «cookies»-ни хайырландырады. Сиз «cookies»-ни эркин этмегенсиз. «Cookies»-ни эркин этигиза да, андан сора джангы атыгъыз эм паролюгъуз бла киригиз.',
 'nocookieslogin' => '{{SITENAME}} къошулуучуланы таныр ючюн «cookies»-ни хаырландырады. Сиз аны джукълатыб турасыз. «Cookies»-ни эркин этигизда джангыдан кёрюгюз.',
+'nocookiesfornew' => 'Къайнагъын тинтир амал болмагъаны себебли тергеу джазыу къуралмады.
+«Cookies» ачыкъ болгъанына ишексиз болугъуз, бетни джангыртыгъыз эм энтда бир кере кёрюгюз.',
 'noname' => 'Терс атны джазгъансыз.',
 'loginsuccesstitle' => 'Авторизация тыйыншлы ётдю',
 'loginsuccess' => "'''Энди {{SITENAME}} сайтха «$1» ат бла кирдигиз.'''",
@@ -475,6 +496,7 @@ $2',
 'wrongpasswordempty' => 'Пароль джазылмай къалгъанды. Джангыдан кёрюгюз.',
 'passwordtooshort' => '$1 {{PLURAL:$1|символдан}} аз болмазгъа керекди пароль.',
 'password-name-match' => 'Пароль къошулуучу атдан башха тюрлю болургъа керекди.',
+'password-login-forbidden' => 'Бу къошулуучу ат бла паролну хайырландыргъан джарамайды.',
 'mailmypassword' => 'Меннге e-mail бла джангы пароль джибер',
 'passwordremindertitle' => '{{SITENAME}}  къошулуучугъа джангы болджаллы пароль',
 'passwordremindertext' => 'Ким эседа (сиз болургъа боллукъсуз, IP-адрес: $1) {{SITENAME}} ($4) къошулуучугъа джангы пароль къураргъа соргъанды. $2 къошулуучугъа джангы пароль: $3. Сорууну джиберген сиз болгъан эсегиз, системагъа кирирге эм паролну алышдырыргъа тыйычлыды. Джангы паролну $5 {{PLURAL:$5|кюнню}} ичинде амалы боллукъду.
@@ -497,6 +519,7 @@ $2',
 'emailconfirmlink' => 'Электрон почта адресигизни бегитигиз.',
 'invalidemailaddress' => 'Электрон почта адресигизи къабыл этилинирге болмайды, форматха келишмегени ючюн.
 Тюз адрес джазыгъыз неда тизгинни бош къоюгъуз.',
+'cannotchangeemail' => 'Тергеу джазыуну электрон почтасыны адреслерин бу викиде тюрлендирирге болмайды.',
 'emaildisabled' => 'Бу сайт, электрон потча бла билдириуле иймейди.',
 'accountcreated' => 'Тергеу джазыу (аккаунт) къуралды',
 'accountcreatedtext' => '$1 къошулуучугъа тергеу джазыу (аккаунт) къуралды.',
@@ -507,11 +530,13 @@ $2',
 'usernamehasherror' => 'Къошулуучуну атында «#» символ болургъа джарамайда.',
 'login-throttled' => 'Сиз асыры кёб кере кирирге кюрешгенсиз.
 Джангыдан кёргюнчю бираз заман ётдюрюгюз.',
+'login-abort-generic' => 'Системагъа кириу джетишимсиз болду',
 'loginlanguagelabel' => 'Тил: $1',
 'suspicious-userlogout' => 'Терс браузер неда кэш этиучу прокси берген соруугъа ушагъаны ючюн, Сизни чыгъаргъа сорууугъуз алынмагъанды.',
 
 # E-mail sending
 'php-mail-error-unknown' => "PHP's mail() функцияда белгили болмагъан халат",
+'user-mail-no-addy' => 'Бир e-mail адрес болмагъанлай e-mail иерге кюрешди',
 
 # Change password dialog
 'resetpass' => 'Паролну тюрлендириу',
@@ -542,8 +567,16 @@ $2',
 'passwordreset-capture-help' => 'Бу белгини салсагъыз, къошулуучугъа ийилген болджаллы пароль бла билдириу сизге кёргюзюллюкдю.',
 'passwordreset-email' => 'Электрон почтаны адреси:',
 'passwordreset-emailtitle' => '{{SITENAME}} сайтдагъы тергеу джазыуну юсюнден билгиле',
+'passwordreset-emailelement' => 'Къошулуучуну аты: $1
+Болджаллы пароль: $2',
+'passwordreset-emailsent' => 'Эсгертиу e-mail ийилди.',
+'passwordreset-emailsent-capture' => 'Ийилген эсгертиу e-mail тюбюрекде берилибди.',
+'passwordreset-emailerror-capture' => 'Ийилген эсгертиу e-mail тюбюрекде берилибди, аны ашырыуу джетишимсиз болду, чурум: $1',
 
 # Special:ChangeEmail
+'changeemail' => 'Электрон почтаны адресин ауушдур',
+'changeemail-header' => 'Электрон почтаны адресин ауушдуруу',
+'changeemail-text' => 'Сизни e-mail адресигизни тюрлендирир ючюн бу форманы толтуругъуз. Тюрлениуню бегитир ючюн паролну джазаргъа керек боллукъду.',
 'changeemail-no-info' => 'Бу бетни кёрюр ючюн сиз системагъа тергеу джазыуугъуз (аккаунтугъуз) бла кирирге керексиз.',
 'changeemail-oldemail' => 'Почтаны бусагъатдагъы адреси:',
 'changeemail-newemail' => 'Электрон почтаны джангы адреси:',
@@ -639,8 +672,7 @@ $2',
 '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> табаргъа боллукъсуз.',
+Сиз [[Special:Search/{{PAGENAME}}|бу атны таныгъан]] башха статьяланы, неда <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналлада джазылгъанланы]</span> табаргъа боллукъсуз, алай а бу бетни къураргъа эркинлигигиз джокъду.',
 'userpage-userdoesnotexist' => '«<nowiki>$1</nowiki>» тергеу джазыу (аккаунт) джокъду. Къураргъа/тюрлендирирге излеймисиз бу бетни?',
 'userpage-userdoesnotexist-view' => '«$1» тергеу джазыу (аккаунт) джокъду.',
 'blocked-notice-logextract' => 'Бу къошулуучу бусагъатда блокланыб турады.
@@ -649,7 +681,6 @@ $2',
 * '''Firefox / Safari''': ''Shift'' тиекни басыб тургъанлай инструментлени панелинде ''Джангырт'' тиекни басыгъыз, неда ''Ctrl-F5'' басыгъыз, неда ''Ctrl-R'' (Mac-да — ''⌘-R'')
 * '''Google Chrome:''' ''Ctrl-Shift-R'' басыгъыз (Mac-да — ''⌘-Shift-R'')
 * '''Internet Explorer:''' ''Ctrl'' тиекни басыб тургъанлай ''Джангырт'' тиекни басыгъыз, неда ''Ctrl-F5'' басыгъыз
-* '''Konqueror:''' ''Джангырт'' тиекни басыгъыз, неда ''F5'' тиекни
 * '''Opera:''' ''Инструментле → Джарашдырыула'' менюда кэшни ариулауну сайлагъыз",
 'usercssyoucanpreview' => "'''Юретиу.''' «{{int:showpreview}}» тиекни басыгъыз, джангы CSS-файлны сакълатырыгъызны аллы бла тинтиб кёрюрча.",
 'userjsyoucanpreview' => "'''Юретиу.''' «{{int:showpreview}}» тиекни басыгъыз, джангы JS-файлны сакълатырыгъызны аллы бла тинтиб кёрюрча.",
@@ -664,7 +695,7 @@ $2',
 'note' => "'''Белги:'''",
 'previewnote' => "'''Бу къуру ал къарауду.'''
 Сиз этген тюрлениуле алкъын сакъланмагъандыла!",
-'continue-editing' => 'ТÑ\8eÑ\80лендиÑ\80иÑ\83нÑ\8e бардырыгъыз',
+'continue-editing' => 'ТÑ\8eÑ\80лендиÑ\80иÑ\83лени бардырыгъыз',
 'previewconflict' => 'Бу ал къарау, башындагъы тюрлендириу терезеде текстни сакъланнганча кёргюзеди.',
 'session_fail_preview' => "'''Джарсыугъа, сессияны идентификаторуну тас этгени себебли, сервер сизни тюрлендириуюгюзни сакълаталмагъанды.
 Энтдада кёрюгюз.
@@ -719,7 +750,6 @@ $2',
 'template-semiprotected' => '(джарты джакъланыбды)',
 'hiddencategories' => 'Бу бет $1 {{PLURAL:$1|1 джашырылыннган категориягъа|$1 джашырылыннган категориялагъа}} киреди:',
 'edittools' => '<!-- Былайда орналгъан текст тюрлениу эмда джюклениу формада кёрюннюкдю. -->',
-'nocreatetitle' => 'Бетле къурау чекленибди',
 'nocreatetext' => 'Бу сайтда джангы бет къуралыу тыйылгъанды.
 Ызына къайтыб болгъан бетни тюрлендирирге боллукъсуз, [[Special:UserLogin|системагъа кесигизни танытыргъа неда джангы тергеу джазыу (аккаунт) къураргъа]].',
 'nocreate-loggedin' => 'Джангы бетле къураргъа эркинлигигиз джокъду.',
@@ -744,6 +774,15 @@ $2',
 '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' => "'''Эсгериу:''' Бу бетде асыры кёб къайнакълы функция барды.
@@ -758,6 +797,13 @@ $2',
 'parser-template-loop-warning' => 'Шаблон тюйюмчек табылгъанды: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Шаблонну рекурсиясыны теренлигини мардасындан тышына чыгъылды ($1)',
 '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' => 'Бу тюрлениу ызына алыныргъа боллукъду. Тилейбиз, версияланы тенглешдириуюн осмакълагъыз, керти да бу тюрлендириулени этерге излегенигизден ишексиз болугъуз, сора, тюрлениуле къабыл этилир ючюн, «Бетни къош» деген тиекден басыгъыз.',
@@ -891,7 +937,9 @@ $1",
 'revdelete-only-restricted' => '$2, $1 Джазыуланы, джашырыуну башха джарашдырыуларындан бирин сайламай, администраторладан джашыраллыкъ тюлсюз.',
 'revdelete-reason-dropdown' => '* Кетериуню стандарт чурумлары
 ** Автор хакъланы бузуу
-** Орунсуз энчи билгиле',
+** Орунсуз энчи билгиле
+** Джарамагъан къошулуучу ат
+** Адамны юсюнден джалгъан билгиле',
 'revdelete-otherreason' => 'Башха/къошакъ чурум:',
 'revdelete-reasonotherlist' => 'Башха чурум',
 'revdelete-edit-reasonlist' => 'Чурумланы тизмесин тюрлендир',
@@ -944,6 +992,11 @@ $1",
 'editundo' => 'ызына алыу',
 'diff-multi' => '({{PLURAL:$2|Бир къошулуучу|$2 къошулуучу}} этген {{PLURAL:$1|$1 аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди)',
 'diff-multi-manyusers' => '($2 къошулуучудан кёб {{PLURAL:$2|Бир къошулуучу|къошулуучу}} этген {{PLURAL:$1|бир аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди)',
+'difference-missing-revision' => 'Бу тенглешдириу ($1) ючюн {{PLURAL:$2|$2 версия}} {{PLURAL:$2|табылмады}}.
+
+
+Бу, эскирген джибериу бла кетерилген бетни версияларын тенглешдириуге кёчген сагъатда кёбюсюне болады.
+Толуракъ информация [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] болургъа боллукъду.',
 
 # Search results
 'searchresults' => 'Излеуню эсеби',
@@ -1018,7 +1071,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Джарашдырыула',
-'mypreferences' => 'Джарашдырыуларым',
+'mypreferences' => 'Джарашдырыула',
 'prefs-edits' => 'Тюрлендириулени саны:',
 'prefsnologin' => 'Системагъа кесигизни танытмагъансыз',
 'prefsnologintext' => 'Къошулуучуну джарашдырыуларын тюрлендирир ючюн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} системагъа кесигизни танытыргъа]</span> керексиз.',
@@ -1029,16 +1082,19 @@ $1",
 'prefs-beta' => 'Бета-амалла',
 'prefs-datetime' => 'Дата бла сагъат',
 'prefs-labs' => 'Эксперимент амалла',
+'prefs-user-pages' => 'Къошулуучуну бетлери',
 'prefs-personal' => 'Энчи билгиле',
 'prefs-rc' => 'Ахыр тюрлениуле',
-'prefs-watchlist' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 Ñ\81пиÑ\81огÑ\83',
-'prefs-watchlist-days' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 Ñ\81пиÑ\81огÑ\83нда ÐºÑ\91Ñ\80гÑ\8eзÑ\8eллÑ\8eк ÐºÑ\8eннÑ\8e саны:',
+'prefs-watchlist' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82изме',
+'prefs-watchlist-days' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измеде ÐºÑ\91Ñ\80гÑ\8eзÑ\8eллÑ\8eк ÐºÑ\8eнлени саны:',
 'prefs-watchlist-days-max' => 'Максимум $1 {{PLURAL:$1|кюн|кюн}}',
-'prefs-watchlist-edits' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 ÐºÐµÐ½Ð³Ð»ÐµÑ\88диÑ\80илген Ñ\81пиÑ\81огÑ\83нда кёргюзюллюк тюрлениулени саны:',
+'prefs-watchlist-edits' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измени ÐºÐµÐ½Ð³Ð»ÐµÑ\88диÑ\80илген Ð²Ð°Ñ\80ианÑ\82Ñ\8bнда кёргюзюллюк тюрлениулени саны:',
 'prefs-watchlist-edits-max' => 'Максимум саны:1000',
-'prefs-watchlist-token' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 Ñ\81пиÑ\81огÑ\83нÑ\83 токени:',
+'prefs-watchlist-token' => 'Ð\9aÑ\91зде Ñ\82Ñ\8bÑ\80гÑ\8aан Ñ\82измени токени:',
 'prefs-misc' => 'Башха джарашдыдырыула',
 'prefs-resetpass' => 'Паролну тюрлендир',
+'prefs-changeemail' => 'Электрон почтаны адресин ауушдур',
+'prefs-setemail' => 'Лл. почтаны адресин айырыу',
 'prefs-email' => 'Электрон почтаны параметрлери',
 'prefs-rendering' => 'Кёрюнюую',
 'saveprefs' => 'Сакъла',
@@ -1056,8 +1112,8 @@ $1",
 'recentchangesdays-max' => '(максимум $1 {{PLURAL:$1|кюн|кюн}})',
 'recentchangescount' => 'Тынгылау бла кёргюзюллюк тюрлениулени саны:',
 'prefs-help-recentchangescount' => 'Бу, ахыр тюрлениулени, бетни тарихлерин эмда журналланы ичине къошады.',
-'prefs-help-watchlist-token' => 'Ð\91Ñ\83 Ð°Ð»Ð°Ð½Ð½Ñ\8b Ð´Ð¶Ð°Ñ\88Ñ\8bÑ\80Ñ\82Ñ\8bн Ð°Ñ\87Ñ\85Ñ\8bÑ\87 Ð±Ð»Ð° Ñ\82олÑ\82Ñ\83Ñ\80Ñ\83Ñ\83, ÐºÑ\8aаÑ\80аÑ\83 Ñ\81пиÑ\81огÑ\83гÑ\8aÑ\83з ючюн бир RSS-трансляция къурайды.
\91Ñ\83 Ð°Ð»Ð°Ð½Ð´Ð°Ð³Ñ\8aÑ\8b Ð°Ñ\87Ñ\85Ñ\8bÑ\87нÑ\8b Ð±Ð¸Ð»Ð³ÐµÐ½Ð»Ðµ ÐºÑ\8aаÑ\80аÑ\83 Ñ\81пиÑ\81огÑ\83гÑ\8aÑ\83знÑ\83 окъургъа боллукъду, ол себебден сырлы магъана сайлагъыз.
+'prefs-help-watchlist-token' => 'Ð\91Ñ\83 Ð°Ð»Ð°Ð½Ð½Ñ\8b Ð´Ð¶Ð°Ñ\88Ñ\8bÑ\80Ñ\82Ñ\8bн Ð°Ñ\87Ñ\85Ñ\8bÑ\87 Ð±Ð»Ð° Ñ\82олÑ\82Ñ\83Ñ\80Ñ\83Ñ\83, ÐºÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегиз ючюн бир RSS-трансляция къурайды.
\91Ñ\83 Ð°Ð»Ð°Ð½Ð´Ð°Ð³Ñ\8aÑ\8b Ð°Ñ\87Ñ\85Ñ\8bÑ\87нÑ\8b Ð±Ð¸Ð»Ð³ÐµÐ½Ð»Ðµ ÐºÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегизни окъургъа боллукъду, ол себебден сырлы магъана сайлагъыз.
 Сакъланмагъанлай генерация этилген магъананы хайырландырыргъа боллукъсуз: $1',
 'savedprefs' => 'Джарашдырыуларыгъыз сакъландыла.',
 'timezonelegend' => 'Заман бел:',
@@ -1078,7 +1134,7 @@ $1",
 'timezoneregion-indian' => 'Индий океан',
 'timezoneregion-pacific' => 'Шош океан',
 'allowemail' => 'Башха къошулуучуладан электрон почтаны келмеге къой',
-'prefs-searchoptions' => 'Излеуню джарашдырыулары',
+'prefs-searchoptions' => 'Излеу',
 'prefs-namespaces' => 'Атла алам',
 'defaultns' => 'Башха халда бу атла аламлада изле:',
 'default' => 'тынгылау бла',
@@ -1100,6 +1156,7 @@ $1",
 'yourrealname' => 'Керти атыгъыз:',
 'yourlanguage' => 'Интерфейсни тили:',
 'yourvariant' => 'Ичиндегисини тилини варианты:',
+'prefs-help-variant' => 'Викини бетлерин кёргюзтюрге сайланнган тилни неда орфографияны варианты',
 'yournick' => 'Псевдонимигиз (къол салыулагъа):',
 'prefs-help-signature' => 'Сюзюу бетледеги комментарийлеге «<nowiki>~~~~</nowiki>» символла къошулуб къол салыныргъа керекди, бу, къолугъузгъа эмда заман тамгъагъа буруллукъду.',
 'badsig' => 'Джараусуз къол салыныу.
@@ -1133,6 +1190,10 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 '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' => 'Къошулуучуланы къауумуна оноу эт',
@@ -1205,6 +1266,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'right-writeapi' => 'API джазыугъа хайырланыуу',
 'right-delete' => 'белтени кетериу',
 'right-bigdelete' => 'узун тарихли бетлени кетериу',
+'right-deletelogentry' => 'журналны белгили бир джазыуларын кетериу эм ызына салыу.',
 'right-deleterevision' => 'бетлени белгили версияларыны кетериу эмда ызына къайтарыу',
 'right-deletedhistory' => 'Узакъдагъы эркинликсиз кетерилген бетлени тарихине къара',
 'right-deletedtext' => 'Кетерилген текстни эм кетерилген версияланы арасындагъы тюрлениулеге къара',
@@ -1232,19 +1294,22 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'right-patrol' => 'Башхаланы тюрлениулерини осмакъланнганларын белгиле',
 'right-autopatrol' => 'Тюрлениуле автоматик осмакъланнган кибик белгиленедиле',
 'right-patrolmarks' => 'Ахыр тюрлениулени осмакъланыуларыны белгилерине къара',
-'right-unwatchedpages' => 'Ð\9aÑ\8aаÑ\80алмагÑ\8aан Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83на ÐºÑ\8aаÑ\80а',
+'right-unwatchedpages' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегизде Ð±Ð¾Ð»Ð¼Ð°Ð³Ñ\8aан Ð±ÐµÑ\82лени Ñ\82измеÑ\81ине ÐºÑ\8aаÑ\80аÑ\83',
 'right-mergehistory' => 'Бетлени тарихлерини бирлешдир',
 'right-userrights' => 'Бютеу къошулуучуланы хакъларыны тюрлендириу',
 'right-userrights-interwiki' => 'Башха викиледеги къошулуучуларыны хакъларын тюрлендир',
 'right-siteadmin' => 'Билги базаны киритле эмда киритни ач',
 'right-override-export-depth' => 'Бетлени, теренлиги 5-ге дери байламлы бетле бла бирге экспорт эт',
 'right-sendemail' => 'Башха къошулуучулагъа электрон почта джиберирге',
+'right-passwordreset' => "пароль тюрлениуле бла e-mail'леге къарау",
+
+# 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' => 'бу бетни окъуу',
@@ -1271,6 +1336,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'action-suppressionlog' => 'бу энчи журналгъа къарау',
 'action-block' => 'Къошулуучуну блок этиу, тюрлендириуле этерге къоймау',
 'action-protect' => 'бу бетни джакълау дараджасын тюрлендириу',
+'action-rollback' => 'бетни ахыр тюрлендирген къошулуучуну тюрлендириулерин дженгил ызына алыу',
 'action-import' => 'бу бетни башха викиден импорт этиу',
 'action-importupload' => 'бу бетни джюкленнген файлдан импорт этиу',
 'action-patrol' => 'башхаланы тюрлендириулерин патруль этилиннгенлеча белгилеу',
@@ -1280,6 +1346,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'action-userrights' => 'къошулуучуну бютеу хакъларын тюрлендириу',
 'action-userrights-interwiki' => 'къошулуучуланы башха викиледе хакъларын тюрлендириу',
 'action-siteadmin' => 'билгилени базасын блокга салыу эм блокдан алыу',
+'action-sendemail' => 'E-mail джибериу',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|тюрлениу|тюрлениу}}',
@@ -1312,9 +1379,11 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 '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' => 'Байламлы тюрлениуле',
@@ -1341,7 +1410,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 
 Бу бетге кетериуле бла ат тюрлендириулени журналы тюбюрекде бериледи:",
 'uploadtext' => "Файл джюклер ючюн тюбюндеги форманы хайырлан.
\90лландан Ð´Ð¶Ñ\8eкленнген Ñ\84айлланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ð½ÐµÐ´Ð° Ð¸Ð·Ð»ÐµÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:FileList|джÑ\8eкленнген Ñ\84айлланÑ\8b Ñ\81пиÑ\81огÑ\83на]] къарагъыз, (джангыдан) джюкленнгенле [[Special:Log/upload|джюклеу журналында]], кетерилгенле [[Special:Log/delete|кетериу журналында]] тутуладыла.
\90лландан Ð´Ð¶Ñ\8eкленнген Ñ\84айлланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ð½ÐµÐ´Ð° Ð¸Ð·Ð»ÐµÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:FileList|джÑ\8eкленнген Ñ\84айлланÑ\8b Ñ\82измеÑ\81ине]] къарагъыз, (джангыдан) джюкленнгенле [[Special:Log/upload|джюклеу журналында]], кетерилгенле [[Special:Log/delete|кетериу журналында]] тутуладыла.
 
 Бетге файл салыр ючюн байлмыгъызда тюбюндеги формаларыны бирин хайырланыгъыз;
 * Файлны бютеу ёлчемини салыр ючюн: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''
@@ -1352,7 +1421,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'upload-prohibited' => 'Джасакъ этилген файлланы типлери: $1.',
 'uploadlog' => 'Джюклеулени журналы',
 'uploadlogpage' => 'Джюклеулени журналы',
-'uploadlogpagetext' => 'ТÑ\8eбÑ\8eнде Ñ\8dм Ð°Ñ\85Ñ\8bÑ\80 ÐºÑ\8aоÑ\88Ñ\83лгÑ\8aан Ñ\84айлланÑ\8b Ñ\81пиÑ\81огÑ\83 барды.
+'uploadlogpagetext' => 'ТÑ\8eбÑ\8eнде Ñ\8dм Ð°Ñ\85Ñ\8bÑ\80 ÐºÑ\8aоÑ\88Ñ\83лгÑ\8aан Ñ\84айлланÑ\8b Ñ\82измеÑ\81и барды.
 Дагъыда [[Special:NewFiles|dosyalджангы файлланы галереясына]] къара, анда джангы джюклеулени юсюнден билгиле толу кёрюгюзюлгендиле.',
 'filename' => 'Файлны аты',
 'filedesc' => 'Къысха ачыкълау',
@@ -1366,6 +1435,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'minlength1' => 'Файлны аты эм азы бла бир харифден болургъа керекди.',
 'illegalfilename' => '«$1» файл атда хайырланыугъа къабыл этилмеген символла бардыла.
 Файлны атын тюрлендириб, джангыдан джюклегиз.',
+'filename-toolong' => 'Файлланы атлары 240 байтдан кёб болмазгъа керекдиле.',
 'badfilename' => 'Файлны аты $1 болуб ауушду.',
 'filetype-mime-mismatch' => '«.$1» файл MIME-типге ($2) келишмейди.',
 'filetype-badmime' => '«$1» MIME типли файлланы джюклениуюне эркинлик берлимейди.',
@@ -1389,6 +1459,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'large-file' => 'Файлланы $1 байтдан уллу болмасы изленеди (бу файлны ёлчеми $2)',
 'largefileserver' => 'Бу файл сервер эркинлик бергенден уллуду.',
 'emptyfile' => 'Джюклеген файлыгъыз бош кёрюнеди. Буну чуруму файлны атыны джазыуда халат болургъа болур. Файлны джюклерге излегенигизден ишексиз болугъуз.',
+'windows-nonascii-filename' => 'ASCII таблицада болмагъан символла бла файл атланы бу вики тутмайды',
 'fileexists' => 'Быллай атлы файл барды.
 Аны ауушдурурда аккылы эсегиз, алгъын <strong>[[:$1]]</strong> файлгъа кёз джетдиригиз.
 [[$1|thumb]]',
@@ -1475,12 +1546,14 @@ URL-адрес тюз болгъанын осмакълагъыз эмда дж
 # File backend
 'backend-fail-delete' => '«$1» файл кетерилмеди.',
 'backend-fail-store' => '$1 файл $2 ичинде сакъланылынмады.',
+'backend-fail-read' => '«$1» файлны окъуялмады.',
 
 # Special:UploadStash
 'uploadstash' => 'Джашыртын джюклеу',
 'uploadstash-clear' => 'Джашырылгъан файлланы ариула',
 'uploadstash-nofiles' => 'Сизни джашырылгъан файлларыгъыз джокъду',
 'uploadstash-refresh' => 'Файлланы тизмесин джангырт',
+'invalid-chunk-offset' => 'Фрагментни джарамагъан офсети',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Эркинлик джасакъланнганды',
@@ -1490,7 +1563,7 @@ CGI тамалында ишлерге эмда <code>img_auth</code> бла иш
 Къарагъыз: https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'Изленнген джол джюклениулени папкасы бла байламлы тюлдю.',
 'img-auth-badtitle' => '«$1» бла джараулу башлыкъ этилмейди.',
-'img-auth-nologinnWL' => 'Сиз Ñ\81иÑ\81Ñ\82емагÑ\8aа ÐºÐ¸Ñ\80медигиз, Ñ\8dмда Â«$1» Ð°ÐºÑ\8a Ñ\81пиÑ\81окда тюлдю.',
+'img-auth-nologinnWL' => 'Сиз Ñ\81иÑ\81Ñ\82емагÑ\8aа ÐºÐ¸Ñ\80медигиз, Ñ\8dмда Â«$1» Ð°ÐºÑ\8a Ñ\82измеде тюлдю.',
 'img-auth-nofile' => '«$1» файл джокъду.',
 'img-auth-isdir' => '«$1» каталогга кирирге излейсиз.
 Къуру файллагъа кирирге эркинлик барды.',
@@ -1531,7 +1604,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 Къошулуучугъа кёре айырыуда, ол къошулуучуну джангыз кёб болмай джюклеген файллары кёргюзюледиле.',
 'listfiles_search_for' => 'Медиа ат бла изле:',
 'imgfile' => 'файл',
-'listfiles' => 'ФайлланÑ\8b Ñ\81пиÑ\81огÑ\83',
+'listfiles' => 'ФайлланÑ\8b Ñ\82измеÑ\81и',
 'listfiles_thumb' => 'Миниатюра',
 'listfiles_date' => 'Заман',
 'listfiles_name' => 'Файлны аты',
@@ -1559,9 +1632,9 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'filehist-missing' => 'Файл джокъду',
 'imagelinks' => 'Файлны хайырланыуу',
 'linkstoimage' => 'Бу файлгъа {{PLURAL:$1|бет|$1 бет}} джибередиле:',
-'linkstoimage-more' => '$1-ден артыкъ {{PLURAL:$1|бет|бет}} бу файлгъа джибериу береди.
\9aÑ\91зÑ\8eÑ\83деги Ñ\81пиÑ\81ок ÐºÑ\8aÑ\83Ñ\80Ñ\83 Ð±Ñ\83 Ñ\84айлгÑ\8aа Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83 Ð±ÐµÑ\80ген {{PLURAL:$1|биÑ\80инÑ\87и Ñ\84айлнÑ\8b|биÑ\80инÑ\87и $1 Ñ\84айлнÑ\8b}} ÐºÑ\91Ñ\80гÑ\8eзеди.
-[[Special:WhatLinksHere/$2|ТолÑ\83 Ñ\81пиоÑ\81ок]] барды.',
+'linkstoimage-more' => '$1 дегенден артыкъ {{PLURAL:$1|бет}} бу файлгъа джибериу береди.
\91Ñ\83 Ñ\82измеде Ð±Ñ\83 Ñ\84айлгÑ\8aа {{PLURAL:$1|кÑ\8aÑ\83Ñ\80Ñ\83 $1 Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83}} ÐºÑ\91Ñ\80гÑ\8eзÑ\8eледи.
+[[Special:WhatLinksHere/$2|ТолÑ\83 Ñ\82изме]] Ð´Ð° барды.',
 'nolinkstoimage' => 'Бу файлгъа джиберген бет джокъду.',
 'morelinkstoimage' => 'Бу файлгъа [[Special:WhatLinksHere/$1|къалгъан джибериулеге]] къара.',
 'linkstoimage-redirect' => '$1 (файл редирект) $2',
@@ -1621,7 +1694,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 # Unused templates
 'unusedtemplates' => 'Хайырландырылмагъан шаблонла',
-'unusedtemplatestext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82 {{ns:template}} Ð°Ð»Ð°Ð½ Ð°Ñ\82Ñ\8bнда Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\8dмда Ð±Ð°Ñ\88Ñ\85а Ð±ÐµÑ\82леге ÐºÑ\8aоÑ\88Ñ\83лгмаÑ\8aан Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83 барды. Кетериуню аллы бла, шаблоннга башха джибериулени джокоълагъыз.',
+'unusedtemplatestext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82 {{ns:template}} Ð°Ð»Ð°Ð½ Ð°Ñ\82Ñ\8bнда Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\8dмда Ð±Ð°Ñ\88Ñ\85а Ð±ÐµÑ\82леге ÐºÑ\8aоÑ\88Ñ\83лгмаÑ\8aан Ð±ÐµÑ\82лени Ñ\82измеÑ\81и барды. Кетериуню аллы бла, шаблоннга башха джибериулени джокоълагъыз.',
 'unusedtemplateswlh' => 'башха джибериуле',
 
 # Random page
@@ -1655,11 +1728,12 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 'disambiguations' => 'Ангылам айыргъан бетлеге джибериулери болгъан бетле',
 'disambiguationspage' => 'Template:кёб магъаналылыкъ',
-'disambiguations-text' => "Бу бетле '''кёб магъаналы бетлеге''' джибериу этедиле. Аны орнуна ала белгили бир статьягъа джибериу этерге керек болурла.<br />
-[[MediaWiki:Disambiguationspage]] бетде аты салынган шаблон бетде болса, ол бет кёб магъаналы бетге саналады.",
+'disambiguations-text' => "Келтирилген бетледе '''кёб магъаналы бетлеге''' эм азы бла бир джибериу барды.
+Аны орнуна ала белгили бир статьягъа джибериу этерге керек болурла.<br />
+[[MediaWiki:Disambiguationspage]] бетде аты салыннган шаблон бар эсе, ол бет кёб магъаналы бетге саналады.",
 
 'doubleredirects' => 'Джибериу болгъан джибериуле',
-'doubleredirectstext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð±Ð°Ñ\88Ñ\85Ñ\8b Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83леге Ñ\8dÑ\82илген Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\81пиÑ\81огÑ\83 барды.
+'doubleredirectstext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð±Ð°Ñ\88Ñ\85Ñ\8b Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83леге Ñ\8dÑ\82илген Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\82измеÑ\81и барды.
 Хар тизгин биринчи неда экинчи джибериуню эмда асламысында бетни аты джазылгъан, биринчи джибериу кёргюзген, экинчи джибериуню нюзюр бети джазылады.
 <del>Юсю сызылгъан</del> джазыула тюзетилген этгендиле.',
 'double-redirect-fixed-move' => '[[$1]] бет атын тюрлендиргенди, энди ол [[$2]] бетге джибериу этеди',
@@ -1731,7 +1805,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'move' => 'Атын тюрлендириу',
 'movethispage' => 'Бу бетни атын тюрлендир',
 'unusedimagestext' => 'Файлла бардыла, алай а бетге джазылмагъандыла.
-УнÑ\83Ñ\82магÑ\8aÑ\8bз, Ð±Ð°Ñ\88Ñ\85а Ð²ÐµÐ± Ñ\81айÑ\82ланÑ\8b Ð±Ñ\83 Ñ\84айлгÑ\8aа Ð°Ñ\87Ñ\8bкÑ\8aдан URL Ð±Ð»Ð° Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83 Ð±ÐµÑ\80иÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aлаÑ\80Ñ\8bн, Ñ\8dмда Ð°Ð½Ñ\8b Ñ\8eÑ\87Ñ\8eн Ð±Ñ\83 Ñ\81пиÑ\81окга киргенине къарамай актив халда хайырланыргъа боллукъду.',
+УнÑ\83Ñ\82магÑ\8aÑ\8bз, Ð±Ð°Ñ\88Ñ\85а Ð²ÐµÐ± Ñ\81айÑ\82ланÑ\8b Ð±Ñ\83 Ñ\84айлгÑ\8aа Ð°Ñ\87Ñ\8bкÑ\8aдан URL Ð±Ð»Ð° Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83 Ð±ÐµÑ\80иÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aлаÑ\80Ñ\8bн, Ñ\8dмда Ð°Ð½Ñ\8b Ñ\8eÑ\87Ñ\8eн Ð±Ñ\83 Ñ\82измеге киргенине къарамай актив халда хайырланыргъа боллукъду.',
 'unusedcategoriestext' => 'Бу категорияла болгъанлыкъгъа, чырт бир статья неда категория джанындан хайырланмыайдыла.',
 'notargettitle' => 'Нюзюр белгиленмегенди',
 'notargettext' => 'Бу функцияны ишлетир ючюн нюзюр бетни неда къошулуучуну белгилемегенсиз.',
@@ -1746,7 +1820,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'booksources-search-legend' => 'Китабны юсюнден информация излеу',
 'booksources-isbn' => 'ISBN:',
 'booksources-go' => 'Таб',
-'booksources-text' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\8dмда Ñ\8dÑ\81ки ÐºÐ¸Ñ\82аб Ñ\81аÑ\82Ñ\85ан Ð±Ð°Ñ\88Ñ\85а Ñ\81айÑ\82лагÑ\8aа Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\81пиÑ\81огÑ\83 барды, эм излеген китабларыгъызны юсюнден кёбюрек билги билирге боллукъсуз.',
+'booksources-text' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\8dмда Ñ\8dÑ\81ки ÐºÐ¸Ñ\82аб Ñ\81аÑ\82Ñ\85ан Ð±Ð°Ñ\88Ñ\85а Ñ\81айÑ\82лагÑ\8aа Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\82измеÑ\81и барды, эм излеген китабларыгъызны юсюнден кёбюрек билги билирге боллукъсуз.',
 'booksources-invalid-isbn' => 'Берилген ISBN джараусуз кибик кёрюнеди; оригинал къайнакъдан кёчюрюлген заманда халатланы контроль этигиз.',
 
 # Special:Log
@@ -1772,7 +1846,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'allpagesprev' => 'Аллындагъы',
 'allpagesnext' => 'Эндиги',
 'allpagessubmit' => 'Тындыр',
-'allpagesprefix' => 'Ð\91Ñ\8bлайда Ð´Ð¶Ð°Ð·Ð³Ñ\8aан Ñ\85аÑ\80иÑ\84леден Ð±Ð°Ñ\88ланнган Ð±ÐµÑ\82лени Ñ\81пиÑ\81ок эт:',
+'allpagesprefix' => 'Ð\91Ñ\8bлайда Ð´Ð¶Ð°Ð·Ð³Ñ\8aан Ñ\85аÑ\80иÑ\84леден Ð±Ð°Ñ\88ланнган Ð±ÐµÑ\82лени Ñ\82изме эт:',
 'allpagesbadtitle' => 'Кирилген бет аты тиллени арасы байлм неда викилени арасында байлам болгъаны себебли джараусузду. Башлыкълада хайырланыуу джасакъ болгъан бир неда андан аслам символ тутаргъа болур.',
 'allpages-bad-ns' => '{{SITENAME}} сайтда «$1» ат алам джокъду.',
 'allpages-hide-redirects' => 'Башха бетлеге джиберген бетлени (редиректлени) джашыр',
@@ -1796,9 +1870,9 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'linksearch-pat' => 'Излеуге шаблон:',
 'linksearch-ns' => 'Ат алам:',
 'linksearch-ok' => 'Таб',
-'linksearch-text' => '<code>*.wikipedia.org</code> кибик символлла хайырландырыргъа боллукъдула.
-Эм азы бла огъары дараджаны домени керекди, юлгюге: <code>*.org</code><br />
\94агÑ\8aан Ð±Ð¾Ð»Ð³Ñ\8aан Ð¿Ñ\80оÑ\82околла: <code>$1</code> (бÑ\8bладан ÐºÑ\8aайÑ\81Ñ\8bÑ\81Ñ\8bнда Ð¸Ð·Ð»ÐµÑ\83Ñ\8eгÑ\8eзге ÐºÑ\8aоÑ\88магÑ\8aÑ\8bз)',
+'linksearch-text' => '"*.wikipedia.org" кибик символлла хайырландырыргъа боллукъдула.
+Эм азы бла огъары дараджаны домени керекди, юлгюге: "*.org".<br />
\94агÑ\8aан Ð±Ð¾Ð»Ð³Ñ\8aан Ð¿Ñ\80оÑ\82околла: <code>$1</code> (пÑ\80оÑ\82окол Ð±ÐµÐ»Ð³Ð¸Ð»ÐµÐ½Ð¼ÐµÐ³ÐµÐ½ Ñ\8dÑ\81е, Ñ\82Ñ\8bнгÑ\8bлаÑ\83 Ð±Ð»Ð° http:// Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aдÑ\83)',
 'linksearch-line' => '$1-ге  $2-ден джибериу берилгенди',
 'linksearch-error' => 'Джокерле къуру адреслени аллында хайырланыргъа боллукъдула.',
 
@@ -1810,20 +1884,16 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 # Special:ActiveUsers
 'activeusers' => 'Актив къошулуучуланы тизмеси',
-'activeusers-intro' => 'Ð\91Ñ\83, Ð°Ñ\85Ñ\8bÑ\80 $1 {{PLURAL:$1|кÑ\8eнде|кÑ\8eнде}} ÐºÑ\8aаллайда Ð±Ð¾Ð»Ñ\81Ñ\83н Ð¸Ñ\88леÑ\82ме ÐºÑ\91Ñ\80гÑ\8eзген ÐºÑ\8aоÑ\88лÑ\83Ñ\83Ñ\87Ñ\83ланÑ\8b Ñ\81пиÑ\81огÑ\83дÑ\83.',
+'activeusers-intro' => 'Ð\91Ñ\83, Ð°Ñ\85Ñ\8bÑ\80 $1 {{PLURAL:$1|кÑ\8eнде|кÑ\8eнде}} ÐºÑ\8aаллайда Ð±Ð¾Ð»Ñ\81Ñ\83н Ð¸Ñ\88леÑ\82ме ÐºÑ\91Ñ\80гÑ\8eзген ÐºÑ\8aоÑ\88лÑ\83Ñ\83Ñ\87Ñ\83ланÑ\8b Ñ\82измеÑ\81иди.',
 'activeusers-count' => 'Ахыр {{PLURAL:$3|кюнде|$3 кюнде}} $1 {{PLURAL:$1|тюрлендириу|тюрлендириу}}',
 'activeusers-from' => 'Бу бла башланнган къошлуучуланы кёргюз:',
 'activeusers-hidebots' => 'Ботланы джашыр',
 'activeusers-hidesysops' => 'Администраторланы джашыр',
 'activeusers-noresult' => 'Къошлуучу табылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Къошулуучуланы регистрацияларыны журналы',
-'newuserlogpagetext' => 'Кёб болмай регистрация этген къошулуучуланы списогу.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Къошулуучуланы къауумуну хакълары',
-'listgrouprights-summary' => 'ТÑ\8eбÑ\8eндеги Ð±Ñ\83 Ð²Ð¸ÐºÐ¸Ð´Ðµ Ñ\82анÑ\8bлгÑ\8aан ÐºÑ\8aоÑ\88Ñ\83лÑ\83Ñ\83Ñ\87Ñ\83 ÐºÑ\8aаÑ\83Ñ\83мланÑ\8b Ñ\8dмда Ð°Ð»Ð°Ð½Ñ\8b Ñ\85акÑ\8aлаÑ\80Ñ\8bнÑ\8b Ñ\81пиÑ\81огÑ\83.
+'listgrouprights-summary' => 'ТÑ\8eбÑ\8eндеги Ð±Ñ\83 Ð²Ð¸ÐºÐ¸Ð´Ðµ Ñ\82анÑ\8bлгÑ\8aан ÐºÑ\8aоÑ\88Ñ\83лÑ\83Ñ\83Ñ\87Ñ\83 ÐºÑ\8aаÑ\83Ñ\83мланÑ\8b Ñ\8dмда Ð°Ð»Ð°Ð½Ñ\8b Ñ\85акÑ\8aлаÑ\80Ñ\8bнÑ\8b Ñ\82измеÑ\81и.
 Энчи хакъла бла байламлы [[{{MediaWiki:Listgrouprights-helppage}}|асламыракъ билги]] болургъа болур.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Берилген хакъла</span>
 * <span class="listgrouprights-revoked">Сыйырылгъан хакъла</span>',
@@ -1878,7 +1948,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 # Watchlist
 'watchlist' => 'Кёзюмде тургъан тизмем',
-'mywatchlist' => 'Кёзюмдеги тизмем',
+'mywatchlist' => 'Кёздеги тизме',
 'watchlistfor2' => '$1 ючюн $2',
 'nowatchlist' => 'Кёзюгюзде тургъан тизмегиз бошду.',
 'watchlistanontext' => 'Кёзюгюзде тургъан тизмегизни статьяланы кёрюр неда тюрлендирир ючюн $1.',
@@ -1888,7 +1958,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'addedwatchtext' => '«[[:$1]]» бет [[Special:Watchlist|кёзюгюзде тургъан тизмегизге]] къошулду.
 Бу бетни эмда муну бла байламлы сюзюу бетни тюрлениулери ол тизмеде белгиленникдиле, [[Special:RecentChanges|джангы тюрлениулени тизмесини]] бетинде уа къалын шрифт бла чертилинникдиле, кёрюрге тынчыракъ болурча.',
 'removewatch' => 'Кёзде тургъан тизмеден кетер',
-'removedwatchtext' => '«[[:$1]]» Ð±ÐµÑ\82 Ñ\81изни [[Special:Watchlist|кÑ\91зÑ\8eгÑ\8eзде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегизден]] ÐºÐµÑ\82еÑ\80илгенди.',
+'removedwatchtext' => '«[[:$1]]» бет сизни [[Special:Watchlist|кёзюгюзде тургъан тизмегизден]] кетерилди.',
 'watch' => 'Кёзде тут',
 'watchthispage' => 'Бу бетни кёзде тут',
 'unwatch' => 'Кёзде тутма',
@@ -1903,7 +1973,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'watchmethod-list' => 'кёзде тургъан бетледе этилген ахыр тюрлениуле кёрюу',
 'watchlistcontains' => 'Кёзюгюзде тургъан тизмегизде $1 {{PLURAL:$1|бет|бет}} барды.',
 'iteminvalidname' => "'$1' элемент бла проблемала, джараусуз ат...",
-'wlnote' => "Ð\90Ñ\85Ñ\8bÑ\80 {{PLURAL:$2|биÑ\80 Ñ\81агÑ\8aаÑ\82Ñ\85а|'''$2''' Ñ\81агÑ\8aаÑ\82Ñ\85а}} Ñ\8dÑ\82илген {{PLURAL:$1|аÑ\85Ñ\8bÑ\80 Ñ\82Ñ\8eÑ\80лениÑ\83|аÑ\85Ñ\8bÑ\80 '''$1''' Ñ\82Ñ\8eÑ\80лениÑ\83}} Ñ\82Ñ\8eбÑ\8eндеди.",
+'wlnote' => "ТÑ\8eбÑ\8eндеди ÐºÑ\91Ñ\80гÑ\8eзÑ\8eлгенди: Ð°Ñ\85Ñ\8bÑ\80 '''$2''' Ñ\81агÑ\8aаÑ\82Ñ\85а Ñ\8dÑ\82илген Ð°Ñ\85Ñ\8bÑ\80 '''$1''' Ñ\82Ñ\8eÑ\80лениÑ\83, $3 $4 Ð·Ð°Ð¼Ð°Ð½Ð½Ð³Ð° Ð´ÐµÑ\80и.",
 'wlshowlast' => 'Арт $1 сагъат $2 кюннге $3 кёргюз',
 'watchlist-options' => 'Кёзде тургъан тизмени джарашдырыулары',
 
@@ -1913,11 +1983,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 'enotif_mailer' => '{{SITENAME}} Билдириу Почта',
 'enotif_reset' => 'Бютеу бетлени къаралгъанча белгиле',
-'enotif_newpagetext' => 'Бу джангы бетди',
 'enotif_impersonal_salutation' => '{{SITENAME}} къошулуучу',
-'changed' => 'тюрленди',
-'created' => 'къуралды',
-'enotif_subject' => '{{SITENAME}} бет $PAGETITLE, $PAGEEDITOR джанындан $CHANGEDORCREATED этилгенди.',
 'enotif_lastvisited' => 'Ахыр кириуюгюзден бу кереге дери болгъан бютеу тюрлениулени кёрюр ючюн $1-ге къара.',
 'enotif_lastdiff' => 'Бу тюрлениуню кёрюр ючюн, $1 бетге къарагъыз.',
 'enotif_anon_editor' => 'аноним къошулуучу $1',
@@ -1933,20 +1999,22 @@ $NEWPAGE
 эл. почта: $PAGEEDITOR_EMAIL
 вики: $PAGEEDITOR_WIKI
 
\91Ñ\83 Ð±ÐµÑ\82ге ÐºÐ¸Ñ\80гинÑ\87игизге Ð´ÐµÑ\80и Ð±Ñ\83 Ð±ÐµÑ\82 Ð±Ð»Ð° Ð±Ð°Ð¹Ð»Ð°Ð¼Ð»Ñ\8b Ð±Ð°Ñ\88Ñ\85а Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\8eÑ\81Ñ\8eнден Ñ\85апаÑ\80 Ð´Ð¶Ð¸Ð±ÐµÑ\80иллик Ñ\82Ñ\8eлдÑ\8e. Ð¡Ð°Ð½Ñ\87Ñ\8bкÑ\8aлаÑ\83 Ñ\81пиÑ\81огÑ\83гÑ\8aÑ\83здагÑ\8aÑ\83 бютеу бетлени билдириу джибериу опцияларын джукълаталлыкъсыз.
\91Ñ\83 Ð±ÐµÑ\82ге ÐºÐ¸Ñ\80гинÑ\87игизге Ð´ÐµÑ\80и Ð±Ñ\83 Ð±ÐµÑ\82 Ð±Ð»Ð° Ð±Ð°Ð¹Ð»Ð°Ð¼Ð»Ñ\8b Ð±Ð°Ñ\88Ñ\85а Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\8eÑ\81Ñ\8eнден Ñ\85апаÑ\80 Ð´Ð¶Ð¸Ð±ÐµÑ\80иллик Ñ\82Ñ\8eлдÑ\8e. Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегиздеги бютеу бетлени билдириу джибериу опцияларын джукълаталлыкъсыз.
 
 {{SITENAME}} сайтны билдириу системасы.
 
 --
 
 Джарашдырыуланы тюрлендирир ючюн:
-{{canonicalurl:Special:Watchlist/edit}}
+{{fullurl:{{#special:Watchlist}}/edit}}
 
 Кёзде тургъан тизмеден кетерир ючюн:
 $UNWATCHURL
 
 Болушлукъ эм теджеуле ючюн:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'къуралды',
+'changed' => 'тюрленди',
 
 # Delete
 'deletepage' => 'Бетни кетер',
@@ -1963,9 +2031,9 @@ $UNWATCHURL
 'actioncomplete' => 'Этим толтурулду',
 'actionfailed' => 'Этим джетишимсиз болду',
 'deletedtext' => '«$1» бет кетерилди.
\90Ñ\85Ñ\8bÑ\80 ÐºÐµÑ\82еÑ\80илгенлени Ñ\81пиÑ\81огÑ\83н кёрюр ючюн, $2на къарагъыз.',
\90Ñ\85Ñ\8bÑ\80 ÐºÐµÑ\82еÑ\80илгенлени Ñ\82измеÑ\81ин кёрюр ючюн, $2на къарагъыз.',
 'dellogpage' => 'Кетерилгенлени журналы',
-'dellogpagetext' => 'ТÑ\8eбÑ\8eндеги Ñ\81пиÑ\81ок ахыр кетериулени журналыды.',
+'dellogpagetext' => 'ТÑ\8eбÑ\8eндеги Ñ\82изме ахыр кетериулени журналыды.',
 'deletionlog' => 'кетериулени журналы',
 'reverted' => 'Алгъынгы версиясына къайтарылгъанды',
 'deletecomment' => 'Чурум:',
@@ -1975,7 +2043,7 @@ $UNWATCHURL
 ** Авторну тилеги
 ** Автор хакъланы бузуу
 ** Вандализм',
-'delete-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\81пиÑ\81огÑ\83Ñ\82 тюрлендир',
+'delete-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\82измеÑ\81ин тюрлендир',
 'delete-toobig' => 'Бу бетни, $1 {{PLURAL:$1|версияла|версияла}} бла бек узун тарихи барды.
 Быллай бетлени кетерилиую, {{SITENAME}} сайтны бузмаз ючюн чекленгенди.',
 'delete-warning-toobig' => 'Бу бетни уллу тюрлендириу тарихи барды, $1 {{PLURAL:$1|версиядан|версиядан}} артыкъ.
@@ -1988,10 +2056,10 @@ $UNWATCHURL
 'rollbacklink' => 'ызына къайтарыу',
 'rollbackfailed' => 'Ызына алыу джетишимсизди',
 'cantrollback' => 'Бетге ахыр юлюш къошхан къошулуучу, бетге юлюшюн къошхан джангыз адам болгъаны себебли, тюрлендириуле ызына алыналмайдыла.',
-'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) джанындан [[:$1]] бетде этилген ахыр тюрлендириу ызына алыналмайды;
+'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|сюзюу]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) джанындан [[:$1]] бетде этилген ахыр тюрлендириу ызына алыналмайды;
 башха бири бетде тюрлендириу этди неда бетни ызына алды.
 
-Ахыр тюрлендириуюню этген: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Ахыр тюрлендириуюню этген: [[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]] къошулуучуну версиясына къайтарылдыла',
@@ -2010,7 +2078,7 @@ $2 тюрлендирген алгъаракъ версиясына къайты
 Андан аслам билги ючюн [[Special:ProtectedPages|Коруугъа алыннган бетле]] атлы бетге къараргъа боллукъсуз.',
 'protectedarticle' => '«[[$1]]» джакъланыбды',
 'modifiedarticleprotection' => '"[[$1]]" бетни джакъланыу дараджасы тюрленилгенди',
-'unprotectedarticle' => '"[[$1]]" бетден къоруулау алыннганды',
+'unprotectedarticle' => '«[[$1]]» бетден джакълыкъ алыннганды',
 'movedarticleprotection' => 'Къоруулауну джарашдырыулары "[[$2]]" бетден "[[$1]]" бетге кёчюрюлгенди',
 'protect-title' => '"$1" ючюн къоруулау дараджаны сайлагъыз',
 'prot_1movedto2' => '[[$1]] бетни джангы аты: [[$2]]',
@@ -2046,7 +2114,7 @@ $2 тюрлендирген алгъаракъ версиясына къайты
 ** Тохтаусуз спам
 ** Тюрлендириулени урушу
 ** Мийик трафикли бет',
-'protect-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\81пиÑ\81огÑ\83н тюрлендир',
+'protect-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\82измеÑ\81ин тюрлендир',
 'protect-expiry-options' => '1 сагъат:1 hour,1 кюн:1 day,1 ыйыкъ:1 week,2 ыйыкъ:2 weeks,1 ау:1 month,3 ау:3 months,6 ау:6 months,1 джыл:1 year,болжалсыз:infinite',
 'restriction-type' => 'Хакълары:',
 'restriction-level' => 'Ийилген дараджасы:',
@@ -2122,7 +2190,7 @@ $1',
 # Contributions
 'contributions' => 'Къошулуучуну къошханы',
 'contributions-title' => '$1 къошулуучуну къошагъы',
-'mycontris' => 'Ð\9aÑ\8aоÑ\88Ñ\85анÑ\8bм',
+'mycontris' => 'Ð\9aÑ\8aоÑ\88Ñ\83м',
 'contribsub2' => '$1 ($2) къошакъ',
 'nocontribs' => 'Бу критерийлеге келишген тюрлениуле табылмадыла',
 'uctop' => '(ахыргъы)',
@@ -2162,10 +2230,11 @@ $1',
 'whatlinkshere-hideredirs' => 'джибериуле $1',
 'whatlinkshere-hidetrans' => 'Къошулуулары $1',
 'whatlinkshere-hidelinks' => '$1 джибериуле',
-'whatlinkshere-hideimages' => 'СÑ\83Ñ\80аÑ\82лагÑ\8aа Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83ле $1',
+'whatlinkshere-hideimages' => 'Файл Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени $1',
 'whatlinkshere-filters' => 'Фильтрле',
 
 # Block/unblock
+'block' => 'Къошулуучуну блокла',
 'blockip' => 'Бу къошулуучуну блок эт',
 'blockip-title' => 'Къошулуучуну блокга салыу',
 'blockip-legend' => 'Къошулуучуну блокга салыу',
@@ -2195,9 +2264,9 @@ $1',
 'ipb-change-block' => 'Бу джарашдырыула бла къошулуучуну джангыдан тый',
 'badipaddress' => 'Терс IP-адрес',
 'blockipsuccesssub' => 'Тыйыу джетишимли болду',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] тыйылды. <br />
¢Ñ\8bйÑ\8bÑ\83ланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:BlockList|Ñ\82Ñ\8bйÑ\8bлгÑ\8aан IP-адÑ\80еÑ\81лени Ñ\81пиÑ\81огÑ\83на]] къарагъыз.',
-'ipb-edit-dropdown' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\81пиÑ\81огÑ\83н тюрлендир',
+'blockipsuccesstext' => '[[Special:Contributions/$1|«$1»]] блокланды.<br />
\91локланÑ\8bÑ\83ланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:BlockList|блокланнган IP-адÑ\80еÑ\81лени Ñ\82измеÑ\81ине]] къарагъыз.',
+'ipb-edit-dropdown' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\82измеÑ\81ин тюрлендир',
 'ipb-unblock-addr' => '$1 блокдан ал',
 'ipb-unblock' => 'Къошулуучуну неда IP-адресни тыйылыуун тохтат',
 'ipb-blocklist' => 'Бусагъатдагъы болгъан тыйгъычланы кёргюз',
@@ -2209,7 +2278,11 @@ $1',
 'unblocked-id' => '$1 тыйылыу къоратылгъанды',
 'ipblocklist' => 'Блок этилиннген къошулуучула',
 'ipblocklist-legend' => 'Тыйылгъан къошулуучуну аты',
+'blocklist-timestamp' => 'Дата/заман',
+'blocklist-target' => 'Ышан',
 'blocklist-expiry' => 'Бошалыу датасы',
+'blocklist-by' => 'Блоклагъан администратор',
+'blocklist-params' => 'Блоклауну параметрлери',
 'blocklist-reason' => 'Чурум',
 'ipblocklist-submit' => 'Таб',
 'ipblocklist-localblock' => 'Локал блокга салыу',
@@ -2221,7 +2294,7 @@ $1',
 'createaccountblock' => 'тергеу джазыула къураргъа болмайды',
 'emailblock' => 'e-mail иерге болмайды',
 'blocklist-nousertalk' => 'кесини сюзюу бетин тюрлендирелмейди',
-'ipblocklist-empty' => 'Ð\91локга Ñ\81алÑ\8bÑ\83ланÑ\8b Ñ\81пиÑ\81огÑ\83 бошду.',
+'ipblocklist-empty' => 'Ð\91локга Ñ\81алÑ\8bÑ\83ланÑ\8b Ñ\82измеÑ\81и бошду.',
 'ipblocklist-no-results' => 'Берилген IP-адрес неда къошулуучу ат блокга салынмагъанды.',
 'blocklink' => 'блок эт',
 'unblocklink' => 'блокну ал',
@@ -2238,7 +2311,7 @@ $1',
 'reblock-logentry' => '[[$1]] ючюн бошалыу заманын $2 $3 этиб тыйыу джарашдырыуларын тюрлендирди',
 'blocklogtext' => 'Къошулуучуланы тыйылыу бла тыйылыудан чыгъарыуну журналы.
 Автомат халда тыйылгъан IP-адресле былайда кёргюзюлмейдиле.
-Банла бла блокланы кёрюр ючюн [[Special:BlockList|IP блок списогуна]] къарагъыз.',
+Банла бла блокланы кёрюр ючюн [[Special:BlockList|блок тизмесине]] къарагъыз.',
 'unblocklogentry' => '$1 къошулуучудан блок алынды',
 'block-log-flags-anononly' => 'джангыз аноним къошулуучула',
 'block-log-flags-nocreate' => 'Тергеу джазыуланы (аккаунтланы) регистрациялары тыйылыбды',
@@ -2340,7 +2413,7 @@ $1',
 'movepage-moved-noredirect' => 'Джибериу къуралыу басдырылды.',
 'articleexists' => 'Быллай аты бла бет барды неда сиз джазгъан ат джарамайды.
 Башха ат сайлагъыз.',
-'cantmove-titleprotected' => 'Ð\91Ñ\83 Ð±ÐµÑ\82ни Ð°Ñ\82Ñ\8bн Ñ\82Ñ\8eÑ\80лендиÑ\80еллик Ñ\82Ñ\8eлÑ\81Ñ\8eз, Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ð°Ñ\82 Ð´Ð¶Ð°Ñ\80аÑ\83Ñ\81Ñ\83з Ð°Ñ\82ланÑ\8b Ñ\81пиÑ\81огÑ\83ндадÑ\8b.',
+'cantmove-titleprotected' => 'Ð\91Ñ\83 Ð±ÐµÑ\82ни Ð°Ñ\82Ñ\8bн Ñ\82Ñ\8eÑ\80лендиÑ\80еллик Ñ\82Ñ\8eлÑ\81Ñ\8eз, Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ð°Ñ\82 Ð´Ð¶Ð°Ñ\80аÑ\83Ñ\81Ñ\83з Ð°Ñ\82ланÑ\8b Ñ\82измеÑ\81индеди.',
 'talkexists' => "'''Бетни аты тюрленнгенди, алай а сюзюу бетни кёчюрюрге джарамайды, аллай аты бла бет болгъаны ючюн. Къол бла къошугъуз аланы бири-бирлерине.'''",
 'movedto' => 'аты тюрленнгенди:',
 'movetalk' => 'Байламлы сюзюу бетни атын тюрлендир',
@@ -2351,7 +2424,7 @@ $1',
 'movepage-page-unmoved' => '$1 бет $2 бетге атын ауушдуралмаз.',
 'movepage-max-pages' => 'Эм кёб $1 {{PLURAL:$1|бет|бет}} атын тюрлендирди эм андан асламы автомат халда атын тюрлендирелмез.',
 'movelogpage' => 'Атла тюрлениуню журналы',
-'movelogpagetext' => 'ТÑ\8eбÑ\8eнде Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\81пиÑ\81ок аты тюрлендирилген бетлени кёргюзеди.',
+'movelogpagetext' => 'ТÑ\8eбÑ\8eнде Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\82изме аты тюрлендирилген бетлени кёргюзеди.',
 'movesubpage' => '{{PLURAL:$1|Subpage|Бет тюбле}}',
 'movesubpagetext' => 'Бу бетни тюбюнде кёргюзюлген $1 {{PLURAL:$1|бет тюбю|бет тюбю}} барды.',
 'movenosubpage' => 'Бу бетни тюб бети джокъду.',
@@ -2407,7 +2480,7 @@ $1',
 'allmessagesname' => 'Ат',
 'allmessagesdefault' => 'Оригинал текст',
 'allmessagescurrent' => 'Хайырлана тургъан текст',
-'allmessagestext' => 'Ð\91Ñ\83 Ñ\81пиÑ\81ок MediaWiki Ð°Ñ\82 Ð°Ð»Ð°Ð¼Ñ\8bнда Ð±Ð°Ñ\80 Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\81иÑ\81Ñ\82ема Ð±Ð¸Ð»Ð´Ð¸Ñ\80иÑ\83лени Ñ\81пиÑ\81огÑ\83дÑ\83.
+'allmessagestext' => 'Ð\91Ñ\83 Ñ\82изме MediaWiki Ð°Ñ\82 Ð°Ð»Ð°Ð¼Ñ\8bнда Ð±Ð°Ñ\80 Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\81иÑ\81Ñ\82ема Ð±Ð¸Ð»Ð´Ð¸Ñ\80иÑ\83лени Ñ\82измеÑ\81иди.
 MediaWiki локализациясына юлюш къошаргъа излей эсегиз, [//www.mediawiki.org/wiki/Localisation MediaWiki локализация] бла [//translatewiki.net translatewiki.net] сайтлагъа киригиз.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' джабыкъ болгъаны ючюн '''{{ns:special}}:Allmessages''' хайырланыугъа ачыкъ тюлдю.",
 'allmessages-filter-legend' => 'Фильтр',
@@ -2444,8 +2517,7 @@ MediaWiki локализациясына юлюш къошаргъа излей
 'import-interwiki-namespace' => 'Нюзюр ат алам:',
 'import-upload-filename' => 'Файлны аты:',
 'import-comment' => 'Эсгериу:',
-'importtext' => 'Файлны вики къайнакъдан [[Special:Export|экспорт амал бла]] эскпорт эт.
-Компьютеригизге салыгъыз эм былайгъа джюклегиз.',
+'importtext' => 'Бетни къайнакъ викиден [[Special:Export|адырны хайырландырыб]] эскпорт этигиз. Файлны дискде сакълагъыз эм былайгъа джюклегиз.',
 'importstart' => 'Файлла импорт этиле турадыла...',
 'import-revision-count' => '$1 {{PLURAL:$1|версия|версия}}',
 'importnopages' => 'Импорт этиллик бет джокъду',
@@ -2571,7 +2643,7 @@ MediaWiki локализациясына юлюш къошаргъа излей
 
 # Spam protection
 'spamprotectiontitle' => 'Спамгъа къаршчы фильтр',
-'spamprotectiontext' => 'Ð\9aÑ\8aоÑ\88аÑ\80гÑ\8aа Ð¸Ð·Ð»ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82 Ñ\81пам Ñ\84илÑ\8cÑ\82Ñ\80 Ð±Ð»Ð° Ð±Ð»Ð¾Ðº Ñ\8dÑ\82илгенди. Ð\9aÑ\8aаÑ\80а Ñ\81пиÑ\81окдагÑ\8aÑ\8b тыш джибериуле чурум болургъа боллукъдула.',
+'spamprotectiontext' => 'Ð\9aÑ\8aоÑ\88аÑ\80гÑ\8aа Ð¸Ð·Ð»ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82 Ñ\81пам Ñ\84илÑ\8cÑ\82Ñ\80 Ð±Ð»Ð° Ð±Ð»Ð¾Ðº Ñ\8dÑ\82илгенди. Ð\9aÑ\8aаÑ\80а Ñ\82измедеги тыш джибериуле чурум болургъа боллукъдула.',
 'spamprotectionmatch' => 'Спам фильтр ишлетген текст: $1',
 'spambot_username' => 'Спамны ариулау',
 'spam_reverting' => '$1 бла джибериую болмагъан ахыр версиягъа къайтылады',
@@ -2579,10 +2651,28 @@ MediaWiki локализациясына юлюш къошаргъа излей
 
 # Info page
 'pageinfo-title' => '«$1» бетни юсюнден информация',
-'pageinfo-header-edits' => 'Тюрлендириуле',
-'pageinfo-watchers' => 'Кёргенлени саны',
-'pageinfo-edits' => 'Тюрлендириулени саны',
-'pageinfo-authors' => 'Авторланы саны',
+'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' => 'Бу бетге редиректле',
+'pageinfo-edits' => 'Бютеу тюрлендириулени саны',
+'pageinfo-authors' => 'Тюрлю-тюрлю авторланы саны',
+'pageinfo-toolboxlink' => 'Бетни юсюнден',
+'pageinfo-redirectsto' => 'Башха бетге редиректди —',
+'pageinfo-redirectsto-info' => 'билги',
+'pageinfo-contentpage-yes' => 'Хоу',
+'pageinfo-protect-cascading-yes' => 'Хоу',
 
 # Skin names
 'skinname-standard' => 'Стандарт',
@@ -2668,7 +2758,7 @@ $1',
 # Bad image list
 'bad_image_list' => 'Формат былай болургъа керекди:
 
\9aÑ\8aÑ\83Ñ\80Ñ\83 Ñ\81пиÑ\81окнÑ\83 кесеклери (* символдан башланнганла) саналлыкъдыла.
\9aÑ\8aÑ\83Ñ\80Ñ\83 Ñ\82измени кесеклери (* символдан башланнганла) саналлыкъдыла.
 Тизгинни биринчи джибериую салыргъа болмагъан (аман) суратха джибериу болургъа керекди.
 Андан ары баргъан джибериуле ол тизгинде, сурат къошулургъа болгъан статьялагъа джибериулеге саналлыкъдыла.',
 
@@ -3194,8 +3284,8 @@ $5
 Нормал ал къарауну хайырланыгъыз.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => '$1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\81пиÑ\81окда кёрюнмезге боллукъдула.',
-'lag-warn-high' => 'Ð\91илги Ð±Ð°Ð·Ð°Ð½Ñ\8b Ñ\81еÑ\80веÑ\80индеги Ð±ÐµÐº ÐºÐµÑ\87игиÑ\83 Ñ\81ебебли, $1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\81пиÑ\81окда кёрюнмей къалыргъа болур.',
+'lag-warn-normal' => '$1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\82измеде кёрюнмезге боллукъдула.',
+'lag-warn-high' => 'Ð\91илги Ð±Ð°Ð·Ð°Ð½Ñ\8b Ñ\81еÑ\80веÑ\80индеги Ð±ÐµÐº ÐºÐµÑ\87игиÑ\83 Ñ\81ебебли, $1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\82измеде кёрюнмей къалыргъа болур.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Кёзде тургъан тизмеде {{PLURAL:$1|1 джазылгъан|$1 джазылгъан}} барды, сюзюу бетлени тышында.',
@@ -3219,8 +3309,8 @@ $5
 'watchlistedit-raw-removed' => '{{PLURAL:$1|1 башлыкъ|$1 башлыкъ}} кетерилди:',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'СпиÑ\81окдан бетледе тюрлениуле',
-'watchlisttools-edit' => 'Ð\9aÑ\8aаÑ\80а/Ñ\82Ñ\8eÑ\80лендиÑ\80 Ñ\81пиÑ\81окну',
+'watchlisttools-view' => 'Тизмеден бетледе тюрлениуле',
+'watchlisttools-edit' => 'Тизмеге ÐºÑ\8aаÑ\80аÑ\83 Ñ\8dм Ñ\82Ñ\8eÑ\80лендиÑ\80иу',
 'watchlisttools-raw' => 'Текстча тюрлендириу',
 
 # Iranian month names
@@ -3338,12 +3428,12 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 * <span class="mw-specialpagecached">Кэш этилген къуллукъчу бетле (эски болургъа боллукъдула).</span>',
 'specialpages-group-maintenance' => 'Техника баджарыуну отчетлары',
 'specialpages-group-other' => 'Башха къуллукъчу бетле',
-'specialpages-group-login' => 'СиÑ\81Ñ\82емагÑ\8aа ÐºÐ¸Ñ\80/регистрация эт',
+'specialpages-group-login' => 'Ð\9aиÑ\80 / регистрация эт',
 'specialpages-group-changes' => 'Ахыр тюрлендириуле бла журналла',
 'specialpages-group-media' => 'Медиа-материалланы юсюнден отчетла бла джюклеуле',
 'specialpages-group-users' => 'Къошулуучула эм хакълары',
 'specialpages-group-highuse' => 'Бек хайырландырылгъан бетле',
-'specialpages-group-pages' => 'Ð\91еÑ\82лени Ñ\81пиÑ\81оклаÑ\80Ñ\8b',
+'specialpages-group-pages' => 'Ð\91еÑ\82лени Ñ\82измелеÑ\80и',
 'specialpages-group-pagetools' => 'Бетге инструментле',
 'specialpages-group-wiki' => 'Вики-билгиле эм инструментле',
 'specialpages-group-redirects' => 'Джиберген къуллукъчу бетле',
@@ -3368,9 +3458,9 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'tag-filter' => '[[Special:Tags|Тег]] фильтр:',
 'tag-filter-submit' => 'Фильтрлендир',
 'tags-title' => 'Тегле',
-'tags-intro' => 'Ð\91Ñ\83 Ð±ÐµÑ\82, Ð´Ð¶Ð°Ð·Ñ\8bлÑ\8bÑ\83нÑ\83 Ñ\82Ñ\8eÑ\80лениÑ\83Ñ\8eнÑ\8e ÐºÑ\91Ñ\80гÑ\8eзÑ\8eÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8a Ñ\82еглени Ñ\8dм Ð°Ð»Ð°Ð½Ñ\8b Ð°Ð½Ð³Ñ\8bламлаÑ\80Ñ\8bнÑ\8b Ñ\81пиÑ\81огÑ\83дÑ\83.',
+'tags-intro' => 'Ð\91Ñ\83 Ð±ÐµÑ\82, Ð´Ð¶Ð°Ð·Ñ\8bлÑ\8bÑ\83нÑ\83 Ñ\82Ñ\8eÑ\80лениÑ\83Ñ\8eнÑ\8e ÐºÑ\91Ñ\80гÑ\8eзÑ\8eÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8a Ñ\82еглени Ñ\8dм Ð°Ð»Ð°Ð½Ñ\8b Ð°Ð½Ð³Ñ\8bламлаÑ\80Ñ\8bнÑ\8b Ñ\82измеÑ\81иди.',
 'tags-tag' => 'Тегни аты',
-'tags-display-header' => 'ТÑ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\81пиÑ\81оклаÑ\80Ñ\8bнда кёрюнюу',
+'tags-display-header' => 'ТÑ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\82измелеÑ\80инде кёрюнюу',
 'tags-description-header' => 'Магъананы толу ангылтыуу',
 'tags-hitcount-header' => 'Белгиленнген тюрлендириуле',
 'tags-edit' => 'тюрлендир',
@@ -3416,13 +3506,25 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 '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 деб тюрлендирди (редиректни башы бла эм редирект къурамай)',
+'logentry-patrol-patrol' => '$1, $3 бетни $4 версияын партруль этиб чыкъды',
 'logentry-patrol-patrol-auto' => '$1, $3 бетни $4 версиясын автомат халда тинтиб чыкъды',
-'logentry-newusers-create' => '$1 тергеу джазыу (аккаунт) къурады',
+'logentry-newusers-newusers' => '$1 тергеу джазыу (аккаунт) къуралды',
+'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' => 'Тема:',
@@ -3444,7 +3546,7 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 '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-illegal-filename' => 'Джарамагъан файл ат.',
index 8ee5883..d2aeef2 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',
@@ -299,7 +299,7 @@ $messages = array(
 'february-gen' => 'Febrewar',
 'march-gen' => 'Määz',
 'april-gen' => 'Aprel',
-'may-gen' => 'Mei',
+'may-gen' => 'Mai',
 'june-gen' => 'Juni',
 'july-gen' => 'Juli',
 'august-gen' => 'Aujuss',
@@ -344,8 +344,8 @@ $messages = array(
 'newwindow' => '(Mäht e neu Finster op, wann Dinge Brauser dat kann)',
 'cancel' => 'Stopp! Avbreche!',
 'moredotdotdot' => 'Mieh&nbsp;…',
-'mypage' => 'ming Metmaacher-Sigg',
-'mytalk' => 'ming Klaafsigg',
+'mypage' => 'Metmaachersigg',
+'mytalk' => 'Klaafsigg',
 'anontalk' => 'Klaaf för de IP-Adress',
 'navigation' => 'Jangk noh de',
 'and' => ', un',
@@ -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.',
@@ -635,10 +636,9 @@ Dä Wiki_Köbes dovun hät beim Deeschmaache als Jrond aanjejovve: „$3“',
 
 Do künnts heh em Wiki wigger maache, als ene namelose Metmaacher. Do kanns De ävver och <span class='plainlinks'>[\$1 widder enlogge]</span>, als däselve oder och ene andere Metmaacher.
 Künnt sin, dat De de ein oder ander Sigg immer wigger aanjezeich kriss, wie wann de noch enjelogg wörs. Dun Dingem Brauser singe <i lang=\"en\">Cache</i> fottschmieße oder leddich maache, öm us dä Nummer erus ze kumme!",
-'welcomecreation' => '== Dach, $1! ==
-Dinge Zojang för heh es do.
-Do bes jetz aanjemeldt.
-Denk dran, Do künnts Der [[Special:Preferences|Ding Enstellunge heh för {{GRAMMAR:Akk|{{SITENAME}}}} zeräächmaache]].',
+'welcomeuser' => 'Wellkumme $1!',
+'welcomecreation-msg' => 'Dinge Zohjang es enjerescht.
+Wann De wells, künnts De Ding [[Special:Preferences|Enschtällonge aanpaße]].',
 'yourname' => 'Metmaacher_Naame:',
 'yourpassword' => 'Paßwoot:',
 'yourpasswordagain' => 'Noch ens dat Passwood',
@@ -840,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',
 
@@ -1070,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',
@@ -1397,7 +1397,7 @@ dat dänne ihr Daate topaktuell sin,
 
 # Preferences page
 'preferences' => 'ming Enstellunge',
-'mypreferences' => 'ming Enstellunge',
+'mypreferences' => 'Enstellunge',
 'prefs-edits' => 'Aanzahl Änderunge am Wiki:',
 'prefsnologin' => 'Nit enjelogg',
 'prefsnologintext' => 'Do mööts ald <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} enjelogg]</span> sin, öm Ding Enstellunge ze ändere.',
@@ -1410,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}}',
@@ -1472,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 *',
@@ -1488,7 +1488,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'yourgender' => 'Do bes *',
 'gender-unknown' => 'wesse mer nit',
 'gender-male' => 'Kääl odder Jung',
-'gender-female' => 'Möhn, Weech odder Mädche',
+'gender-female' => 'Möhn, Weesch odder Mädsche',
 'prefs-help-gender' => '* Moß mer nit aanjevve, un wann et aanjejovve eß, dann kallt et Wiki övver Desch als „dä Pitter“ udder „dat Tiina“, sönß uns „Metmaacher Pütz“. Dat kritt de janne Welt ze sinn, nit nur Do allein.',
 'email' => '<i lang="en">e-mail</i>',
 'prefs-help-realname' => '* Dinge richtije Name — kanns De fott looße — wann De en ävver nenne wells, dann weed dä jebruch, öm Ding Beidräch domet ze schmöcke.',
@@ -1623,12 +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.',
-'rightsnone' => '(nix)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'di Sigg ze lesse',
@@ -1669,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.',
@@ -1892,6 +1893,7 @@ Wann et nit flupp, verzäll et enem [[Special:ListUsers/sysop|Wiki-Köbes]].',
 'backend-fail-notsame' => 'En Dattei mem Name $1 jidd et ald, di es ävver ongerscheidlesch.',
 'backend-fail-invalidpath' => '„$1“ es keine jölteje Pahd för et Speischere.',
 'backend-fail-delete' => 'Mer kunnte di Dattei $1 nit fottschmiiße.',
+'backend-fail-describe' => 'Mer kunnte de Metta_Daate för di Dattei $1 nit ändere.',
 'backend-fail-alreadyexists' => 'En Dattei $1 jidd et ald.',
 'backend-fail-store' => 'Mer kunnte di Dattei $1 nit onger $2 affschpeischere.',
 'backend-fail-copy' => 'Mer kunnte di Dattei $1 nit noh $2 koppėėere.',
@@ -2310,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.
+'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> 
 
-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> 
-
-De Brauserprotokolle, di beim Söke aanjejovve wäde künne, sen: <code>$1</code>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.',
 
@@ -2333,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.
@@ -2366,11 +2362,10 @@ schecke.',
 'emailuser-title-target' => '<i lang="en">E-mail</i> aan {{GENDER:$1|dä Metmaacher|di Metmaacherėn|dä Metmaacher|di Metmaacherėn|dä Metmaacher}} $1',
 'emailuser-title-notarget' => 'Verschegg en <i lang="en">e-mail</i> aan ene Metmaacher',
 'emailpage' => 'Verscheck <i lang="en">e-mail</i> aan ene Metmaacher',
-'emailpagetext' => 'Wann heh dä Metmaacher en Adräß för sing <i lang="en">e-mail</i> aanjejovve hätt en singe Enstellunge,
-un die deit et och, dann kanns De met däm Fomular hee unge en einzel <i lang="en">e-mail</i> aan dä Metmaacher schecke.
+'emailpagetext' => 'Wann {{GENDER:$1|dä Metmaacher heh|dat heh|heh dä Metmaacher|sei|dat heh}} en Adräß för sing <i lang="en">e-mail</i> aanjejovve hätt en singe Enstellunge, un die deit et och, dann kanns De met däm Fomular heh unge en einzel <i lang="en">e-mail</i> aan {{GENDER:$1|inn|it|dä Metmaacher|heh di Metmaacherėn|et}} schecke.
 
 Ding <i lang="en">e-mail</i>-Adräß, di De en [[Special:Preferences|Ding eije Enstellunge]] aanjejovve häs,
-di weed als em Afsender sing Adräß en Ding <i lang="en">e-mail</i> enjedrage.
+di weed als em Afsender sing Adräß enjedrare.
 Domet kann, wä di <i lang="en">e-mail</i> kritt, drop antwoote, un di Antwood jeiht tirek aan Desch.
 Alles klor?',
 'usermailererror' => 'Dat E-Mail-Objek jov ene Fähler us:',
@@ -2403,18 +2398,18 @@ Alles klor?',
 
 # Watchlist
 'watchlist' => 'ming Oppassliss',
-'mywatchlist' => 'ming Oppassliss',
+'mywatchlist' => 'Oppaßleß',
 'watchlistfor2' => 'För dä $1 $2',
 'nowatchlist' => 'En Ding Oppassliss es nix dren.',
 'watchlistanontext' => 'Do muss $1, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.',
 '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.',
@@ -2443,19 +2438,23 @@ 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_newpagetext' => 'Dat es en neu aanjelahte Sigg.',
 'enotif_impersonal_salutation' => 'Metmaacher {{GRAMMAR:Genitiv vun|{{SITENAME}}}}',
-'changed' => 'jeändert',
-'created' => 'neu aanjelaht',
-'enotif_subject' => 'De Sigg "$PAGETITLE" wood $CHANGEDORCREATED vum "$PAGEEDITOR" {{GRAMMAR:em|{{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
 
@@ -2464,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}}}}.
 
@@ -2481,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',
@@ -2628,7 +2629,9 @@ Versione för die neu Sigg enjerich. Die neu Sigg weed nit ersetz.',
 'undeletedrevisions' => '{{PLURAL:$1|ein Version|$1 Versione}} zeröckjehollt',
 'undeletedrevisions-files' => 'Zesammejenomme {{PLURAL:$1|Ein Version|<strong>$1</strong> Versione|<strong>Kein</strong> Version}} vun {{PLURAL:$2|eine Datei|<strong>$2</strong> Dateie|<strong>nix</strong>}} zeröckjehollt',
 'undeletedfiles' => '{{PLURAL:$1|Ein Datei|<strong>$1</strong> Dateie|<strong>Kein</strong> Dateie}} zeröckjehollt',
-'cannotundelete' => '<strong>Dä.</strong> Et Zeröckholle jing donevve. Maach sinn, dat ene andere Metmaacher flöcker wor, un et et eets jedon hät, un jetz es die Sigg ald widder do jewäse.',
+'cannotundelete' => '<strong>Dä.</strong> Et Zeröckholle jing donävve.
+
+$1',
 'undeletedpage' => '<strong>De Sigg „$1“ es jetz widder do</strong>
 Luur Der et [[Special:Log/delete|Logboch met de fottjeschmesse Sigge]] aan, do häs De de Neuste fottjeschmesse
 un widder herjehollte Sigge.',
@@ -2659,9 +2662,10 @@ $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' => 'ming Beidräch',
+'mycontris' => 'Beidrähch',
 'contribsub2' => 'För dä Metmaacher: $1 ($2)',
 'nocontribs' => 'Mer han kein Änderunge jefonge, en de Logböcher, die do passe däte.',
 'uctop' => ' (Neuste)',
@@ -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.',
@@ -3221,6 +3226,7 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 'pageinfo-default-sort' => 'Shtandattmääßesch zottiere met däm Schlößel',
 'pageinfo-length' => 'Bytes en dä Sigg',
 'pageinfo-article-id' => 'Dä Sigg ier Nommer en dä Daatebangk',
+'pageinfo-language' => 'De Schprooch vum Sigge-Enhallt',
 'pageinfo-robot-policy' => 'Eijeschaffte för de Söhkmaschiine',
 'pageinfo-robot-index' => 'kammer opnämme',
 'pageinfo-robot-noindex' => 'kammer nit opnämme',
@@ -3270,6 +3276,8 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 'markedaspatrollederror' => 'Dat Kennzeiche „Nohjeluurt“ kunnt ich nit avspeichere.',
 'markedaspatrollederrortext' => 'Do muss en bestemmte Version ussöke.',
 'markedaspatrollederror-noautopatrol' => 'Do darrefs Ding eije Änderunge nit op „Nohjeloort“ setze!',
+'markedaspatrollednotify' => 'Di Änderong an $1 es jäz nohjekik.',
+'markedaspatrollederrornotify' => 'Dat di Sigg nohjekik es, kunnte mer nit faßhalde.',
 
 # Patrol log
 'patrol-log-page' => 'Logboch vun de nohjeloorte Änderunge',
@@ -3302,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.',
@@ -3332,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>
@@ -4020,6 +4030,7 @@ Dä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlöße
 'version-license' => 'Lizänz',
 'version-poweredby-credits' => "Dat Wiki heh löp met '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'sönß wää',
+'version-credits-summary' => 'Mer bedanke ons för iehr Beidrähsch zom [[Special:Version|MediaWiki]] bei:',
 'version-license-info' => 'MediaWiki es e frei Projramm. Mer kann et unmolesteet wigger verdeile, un mer kann et verändere, wi mer löstich es, wam_mer sesch dobei aan de <i lang="en">GNU General Public License</i> (jenerälle öffentlesche Lizänz noh GNU) hallde deiht, wi se vun der <i lang="en">Free Software Foundation</i> (Steftung för frei Soffwäer) veröffentlesch woode es. Dobei kam_mer sesch ußsöhke of mer sesch aan de Version 2 dovun hallde deiht, udder öhnz en späädere Fassung.
 
 MediaWiki weed verdeilt met dä Hoffnung, dat et för jet jood es, ävver <span style="text-transform:uppercase">der ohne jeede Jarantie</span>, un esujaa ohne ene unjesaate Jedangke, et künnt <span style="text-transform:uppercase">ze verkoufe</span> sin udder <span style="text-transform:uppercase;">för öhndsene bestemmpte Zweck ze jebruche</span>. Loor Der de jenannte Lizänz aan, wann De mieh Einzelheite weße wells.
@@ -4161,11 +4172,15 @@ 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 a17741f..9680f2a 100644 (file)
  * @author Marmzok
  */
 
-$rtl = true;
-
 $fallback = 'ckb';
 
+$rtl = true;
+
 $digitTransformTable = array(
        '0' => '٠', # &#x0660;
        '1' => '١', # &#x0661;
index b86c095..89bc6c9 100644 (file)
@@ -51,6 +51,8 @@ $namespaceAliases = array(
        'Kategorî_nîqaş'   => NS_CATEGORY_TALK,
 );
 
+$separatorTransformTable = array( ',' => '.', '.' => ',' );
+
 $specialPageAliases = array(
        'Categories'                => array( 'Dara_kategoriyan' ),
        'DoubleRedirects'           => array( 'Redirect\'ên_ducarî' ),
@@ -132,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",
@@ -218,6 +220,7 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|Di vê kategoriyê de tenê ev dane heye:|Di vê kategoriyê de {{PLURAL:$2|daneyek heye|$2 dane hene}}. Jêr {{PLURAL:$1|daneyek tê|$1 dane tên}} nîşandan.}}',
 'category-file-count-limited' => 'Ev {{PLURAL:$1|daneya|$1 daneyên}} jêr di vê kategoriyê de ne.',
 'listingcontinuesabbrev' => 'dewam',
+'noindex-category' => 'Rûpelên bênimînok',
 'broken-file-category' => 'Rûpelên bi girêdanên xerabûyî',
 
 'about' => 'Der barê',
@@ -346,6 +349,9 @@ $messages = array(
 'youhavenewmessages' => '$1 yên te hene ($2).',
 'newmessageslink' => 'Peyamên nû',
 'newmessagesdifflink' => 'cudayî ji guhertoya berê',
+'youhavenewmessagesfromusers' => 'Ji {{PLURAL:$3|bikarhênerekê/î|$3 bikarhêneran}}, ji bo te $1 ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|peyameke nû heye|peyamên nû hene}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|guherandin|guherandinên dawî}}',
 'youhavenewmessagesmulti' => 'Peyamên nû li $1 ji te re hene.',
 'editsection' => 'biguherîne',
 'editold' => 'biguherîne',
@@ -451,9 +457,6 @@ $2',
 
 Tu dikarî {{SITENAME}} niha weke bikarhênerekî nediyarkirî bikarbînî, yan jî tu dikarî dîsa bi vî navê xwe yan navekî din wek bikarhêner <span class='plainlinks'>[$1 dîsa têkevî]</span>.
 Bila di bîra te de be ku gengaz e hin rûpel mîna ku tu hîn bi navê xwe qeyd kiriyî werin nîşandan, heta ku tu nîşanên çavlêgerandina (browser) xwe jênebî.",
-'welcomecreation' => '== Tu bi xêr hatî, $1! ==
-
-Hesabê te hate afirandin. Tu dikarî niha [[Special:Preferences|tercîhên xwe di {{SITENAME}}]] de biguherînî.',
 'yourname' => 'Navê bikarhêner:',
 'yourpassword' => 'Şîfre:',
 'yourpasswordagain' => 'Şîfreyê dîsa binivîse:',
@@ -503,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.',
@@ -654,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!'''",
@@ -682,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ê',
@@ -733,8 +736,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'last' => 'berê',
 'page_first' => 'ya pêşîn',
 'page_last' => 'ya paşîn',
-'histlegend' => 'Rênîşan: (cudahî) = cudahiya nav vê û versiyona niha,
-(berê) = cudahiya nav vê û ya berî vê, B = guhertina biçûk',
+'histlegend' => "Rênîşan: ({{int:cur}}) = cudahiya nav vê û versiyona niha, ({{int:last}}) = cudahiya nav vê û ya berî vê, '''{{int:minoreditletter}}''' = guhertina biçûk",
 'history-fieldset-title' => 'Li dîrokê bigere',
 'history-show-deleted' => 'Tenê yên jêbirî',
 'histfirst' => 'Kevintirîn',
@@ -999,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',
@@ -1035,7 +1038,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'rcshowhidebots' => "Bot'an $1",
 'rcshowhideliu' => 'Bikarhênerên qeydkirî $1',
 'rcshowhideanons' => 'Bikarhênerên neqeydkirî (IP) $1',
-'rcshowhidepatr' => '$1 guherandinên kontrolkirî',
+'rcshowhidepatr' => 'Guherandinên kontrolkirî $1',
 'rcshowhidemine' => 'Guherandinên min $1',
 'rclinks' => '$1 guherandinên di $2 rojên dawî de nîşan bide<br />$3',
 'diff' => 'cudahî',
@@ -1333,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',
@@ -1351,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',
@@ -1419,11 +1419,7 @@ Gava tu bixwazî wê rûpelê ji nav lîsteya xwe ya şopandinê derbixî, li se
 'unwatching' => 'Neşopîne…',
 
 'enotif_reset' => 'Hemû rûpelan wek lêsekirî nîşanbide',
-'enotif_newpagetext' => 'Ev rûpeleke nû ye.',
 'enotif_impersonal_salutation' => 'Bikarhênerî {{SITENAME}}',
-'changed' => 'hate guhertin',
-'created' => 'hate afirandin',
-'enotif_subject' => '[{{SITENAME}}] Rûpelê "$PAGETITLE" ji $PAGEEDITOR hate $CANGEDORCREATED',
 'enotif_anon_editor' => 'Bikarhênerê/a neqeydkirî $1',
 'enotif_body' => 'Birêz $WATCHINGUSERNAME,
 
@@ -1446,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',
@@ -1609,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',
@@ -1665,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',
@@ -1682,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',
@@ -1799,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î.',
@@ -1868,6 +1866,10 @@ Ji ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.',
 'pageinfo-views' => 'Hejmara dîtinê',
 'pageinfo-watchers' => 'Hejmara kesên dişopînin',
 'pageinfo-edits' => 'Hejmara guherandinan',
+'pageinfo-toolboxlink' => 'Agahiya rûpelê',
+'pageinfo-redirectsto-info' => 'agahî',
+'pageinfo-contentpage-yes' => 'Erê',
+'pageinfo-protect-cascading-yes' => 'Erê',
 
 # Patrolling
 'markaspatrolleddiff' => 'Wek serrastkirî nîşan bide',
@@ -1902,7 +1904,7 @@ Ji ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.',
 'imagelisttext' => "Jêr lîsteyek ji $1 file'an heye, duxrekirin $2.",
 'newimages-summary' => 'Ev rûpela taybet dosyeyên ku herî dawî hatine barkirin, nîşan dide.',
 'newimages-legend' => 'Parzûn',
-'showhidebots' => '($1 bot)',
+'showhidebots' => "(Bot'an $1)",
 'noimages' => 'Ne tiştek tê dîtin.',
 'ilsubmit' => 'Lêgerîn',
 'bydate' => 'li gor dîrokê',
@@ -2140,6 +2142,7 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 '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 2059a32..8a78f9c 100644 (file)
@@ -12,6 +12,7 @@
  * @author MF-Warburg
  * @author Malafaya
  * @author Mongvras
+ * @author Nemo bis
  * @author Nicky.ker
  * @author Nrowe
  * @author Scryfer
@@ -109,27 +110,41 @@ $specialPageAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-hideminor' => 'Kudha chanjyow bian en chanjyow a-dhiwedhes',
-'tog-watchcreations' => "Keworra folednow gwruthys genev dhe'm rol golyas",
-'tog-watchdefault' => "Keworra folednow chanjys genev dhe'm rol golyas",
-'tog-watchmoves' => "Keworra folednow gwayes genev dhe'm rol golyas",
-'tog-watchdeletion' => "Keworra folednow dileys genev dhe'm rol golyas",
-
-'underline-always' => 'Pub pres',
-'underline-never' => 'Nevra',
-'underline-default' => 'Defowt an beurel',
+'tog-underline' => 'Islinenna kevrennow:',
+'tog-hideminor' => 'Cudha chanjyow bian yn chanjyow a-dhiwedhes',
+'tog-showtoolbar' => 'Disqwedhes an toulvar chanjya (res yw JavaScript)',
+'tog-rememberpassword' => "Perthy cov a'm omgelmy war'n beurel-ma (rag $1 {{PLURAL:$1|dedh}} dhe'n moyha)",
+'tog-watchcreations' => "Keworra folennow gwruthys genev ha restrennow ughkergys genev dhe'm rol golyas",
+'tog-watchdefault' => "Keworra folennow ha restrennow chanjys genev dhe'm rol golyas",
+'tog-watchmoves' => "Keworra folennow ha restrennow gwayys genev dhe'm rol golyas",
+'tog-watchdeletion' => "Keworra folennow ha restrennow dileys genev dhe'm rol golyas",
+'tog-minordefault' => 'Merkya pub chanj avel bian dre dhefowt',
+'tog-showjumplinks' => 'Galosegy kevrennow hedhadowder "lamma dhe"',
+'tog-watchlisthideown' => "Cudha ow chanjyow vy y'n rol golyas",
+'tog-watchlisthidebots' => "Cudha chanjyow gans bottow y'n rol golyas",
+'tog-watchlisthideminor' => "Cudha chanjyow bian y'n rol golyas",
+'tog-watchlisthideliu' => "Cudha chanjyow gans devnydhyoryon omgelmys y'n rol golyas",
+'tog-watchlisthideanons' => "Cudha chanjyow gans devnydhyoryon heb hanow y'n rol golyas",
+'tog-showhiddencats' => 'Disqwedhes classys cudhys',
+
+'underline-always' => 'Puppres',
+'underline-never' => 'Jammes',
+'underline-default' => 'Defowt an beurel po an grohen',
 
 # Font style option in Special:Preferences
 'editfont-default' => 'Defowt an beurel',
+'editfont-monospace' => 'Font unnspasys',
+'editfont-sansserif' => 'Font sans-serif',
+'editfont-serif' => 'Font serif',
 
 # Dates
-'sunday' => "Dy' Sul",
-'monday' => "Dy' Lun",
-'tuesday' => "Dy' Meurth",
-'wednesday' => "Dy' Merher",
-'thursday' => "Dy' Yow",
-'friday' => "Dy' Gwener",
-'saturday' => "Dy' Sadorn",
+'sunday' => "De'Sul",
+'monday' => "De'Lun",
+'tuesday' => "De'Meurth",
+'wednesday' => "De'Merher",
+'thursday' => "De'Yow",
+'friday' => "De'Gwener",
+'saturday' => "De'Sadorn",
 'sun' => 'Sul',
 'mon' => 'Lun',
 'tue' => 'Meu',
@@ -138,31 +153,31 @@ $messages = array(
 'fri' => 'Gwe',
 'sat' => 'Sad',
 'january' => 'Genver',
-'february' => 'Hwevrel',
+'february' => 'Whevrel',
 'march' => 'Meurth',
 'april' => 'Ebrel',
 'may_long' => 'Me',
 'june' => 'Metheven',
 'july' => 'Gortheren',
 'august' => 'Est',
-'september' => 'Gwydngala',
+'september' => 'Gwynngala',
 'october' => 'Hedra',
 'november' => 'Du',
 'december' => 'Kevardhu',
 'january-gen' => 'Genver',
-'february-gen' => 'Hwevrel',
+'february-gen' => 'Whevrel',
 'march-gen' => 'Meurth',
 'april-gen' => 'Ebrel',
 'may-gen' => 'Me',
 'june-gen' => 'Metheven',
 'july-gen' => 'Gortheren',
 'august-gen' => 'Est',
-'september-gen' => 'Gwydngala',
+'september-gen' => 'Gwynngala',
 'october-gen' => 'Hedra',
 'november-gen' => 'Du',
 'december-gen' => 'Kevardhu',
 'jan' => 'Gen',
-'feb' => 'Hwe',
+'feb' => 'Whe',
 'mar' => 'Meu',
 'apr' => 'Ebr',
 'may' => 'Me',
@@ -175,42 +190,42 @@ $messages = array(
 'dec' => 'Kev',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Klass|Klassys}}',
-'category_header' => 'Folednow e\'n klass "$1"',
+'pagecategories' => '{{PLURAL:$1|Class|Classys}}',
+'category_header' => 'Folennow y\'n class "$1"',
 'subcategories' => 'Isglassys',
-'category-media-header' => 'Media e\'n klass "$1"',
-'category-empty' => "''Nyns eus na folednow na media e'n klass-ma.''",
-'hidden-categories' => '{{PLURAL:$1|Klass kovys|Klass kovys}}',
-'hidden-category-category' => 'Klassys kovys',
-'category-subcat-count' => "{{PLURAL:$2|Nyns eus dhe'n klass-ma marnas an isglass a sew.|Yma dhe'n klass-ma an {{PLURAL:$1|isglass|$1 isglass}} a sew, dhyworth sobm a $2.}}",
-'category-subcat-count-limited' => "Yma dhe'n klass-ma an {{PLURAL:$1|isglass|$1 isglass}} a sew.",
-'category-article-count' => "{{PLURAL:$2|Nyns eus dhe'n klass-ma marnas an folen a sew.|Yma'n {{PLURAL:$1|folen|$1 folednow}} a sew e'n klass-ma, dhyworth sobm a $2.}}",
-'category-article-count-limited' => "Yma'n {{PLURAL:$1|folen|$1 folen}} a sew e'n klass-ma.",
-'category-file-count' => "{{PLURAL:$2|Nyns eus dhe'n klass-ma marnas an folen a sew.|Yma'n {{PLURAL:$1|folen|$1 folen}} a sew e'n klass-ma, dhyworth sobm a $2.}}",
-'category-file-count-limited' => "Yma'n {{PLURAL:$1|folen|$1 folen}} a sew e'n klass-ma.",
+'category-media-header' => 'Media y\'n class "$1"',
+'category-empty' => "''Nyns eus na folennow na media y'n class-ma.''",
+'hidden-categories' => '{{PLURAL:$1|Class cudhys|Classys cudhys}}',
+'hidden-category-category' => 'Classys cudhys',
+'category-subcat-count' => "{{PLURAL:$2|Nyns eus dhe'n class-ma marnas an isglass a sew.|Yma dhe'n class-ma an {{PLURAL:$1|isglass|$1 isglass}} a sew, dhyworth somm a $2.}}",
+'category-subcat-count-limited' => "Yma dhe'n class-ma an {{PLURAL:$1|isglass|$1 isglass}} a sew.",
+'category-article-count' => "{{PLURAL:$2|Nyns eus dhe'n class-ma marnas an folen a sew.|Yma'n {{PLURAL:$1|folen|$1 folennow}} a sew y'n class-ma, dhyworth somm a $2.}}",
+'category-article-count-limited' => "Yma'n {{PLURAL:$1|folen|$1 folen}} a sew y'n class-ma.",
+'category-file-count' => "{{PLURAL:$2|Nyns eus dhe'n class-ma an folen a sew.|Yma'n {{PLURAL:$1|folen|$1 folen}} a sew y'n class-ma, dhyworth somm a $2.}}",
+'category-file-count-limited' => "Yma'n {{PLURAL:$1|folen|$1 folen}} a sew y'n class-ma.",
 'listingcontinuesabbrev' => 'pes.',
 
 'about' => 'A-dro dhe',
-'newwindow' => '(y hwra egeri en fenester nowyth)',
-'cancel' => 'Hedhi',
+'newwindow' => '(y whra egery yn fenester noweth)',
+'cancel' => 'Hedhy',
 'moredotdotdot' => 'Moy...',
-'mypage' => 'Ow folen',
-'mytalk' => 'Ow hows',
-'anontalk' => 'Keskows rag an drigva IP-ma',
+'mypage' => 'Folen',
+'mytalk' => 'Kescows',
+'anontalk' => 'Kescows rag an drigva IP-ma',
 'navigation' => 'Lewyans',
 'and' => '&#32;ha(g)',
 
 # Cologne Blue skin
-'qbfind' => 'Kavos',
-'qbbrowse' => 'Peuri',
+'qbfind' => 'Cavos',
+'qbbrowse' => 'Peury',
 'qbedit' => 'Chanjya',
 'qbpageoptions' => 'An folen-ma',
-'qbmyoptions' => 'Ow folednow',
-'qbspecialpages' => 'Folednow arbednek',
+'qbmyoptions' => 'Ow folennow',
+'qbspecialpages' => 'Folennow arbennek',
 'faq' => 'FAQ',
 
 # Vector skin
-'vector-action-addsection' => 'Keworra mater',
+'vector-action-addsection' => 'Keworra testen',
 'vector-action-delete' => 'Dilea',
 'vector-action-move' => 'Gwaya',
 'vector-action-protect' => 'Difres',
@@ -218,22 +233,25 @@ $messages = array(
 'vector-action-unprotect' => 'Chanjya difresans',
 'vector-view-create' => 'Gwruthyl',
 'vector-view-edit' => 'Chanjya',
-'vector-view-history' => 'Gweles an istori',
+'vector-view-history' => 'Gweles an istory',
 'vector-view-view' => 'Redya',
-'vector-view-viewsource' => 'Gweles an bednfenten',
+'vector-view-viewsource' => 'Gweles an bennfenten',
 'actions' => 'Gwriansow',
 'namespaces' => 'Spasys hanow',
+'variants' => 'Dyffransow',
 
+'navigation-heading' => 'Rol lewyans',
 'errorpagetitle' => 'Gwall',
-'returnto' => 'Dehweles dhe $1.',
+'returnto' => 'Dewheles dhe $1.',
 'tagline' => 'Dhyworth {{SITENAME}}',
 'help' => 'Gweres',
-'search' => 'Hwilas',
-'searchbutton' => 'Hwilas',
+'search' => 'Whilas',
+'searchbutton' => 'Whilas',
 'go' => 'Ke',
-'searcharticle' => 'Ke',
-'history' => 'Istori an folen',
-'history_short' => 'Istori',
+'searcharticle' => 'Mos',
+'history' => 'Istory an folen',
+'history_short' => 'Istory',
+'updatedmarker' => 'nowedhys a-ban ow vysytyans diwettha',
 'printableversion' => 'Versyon pryntyadow',
 'permalink' => 'Kevren fast',
 'print' => 'Pryntya',
@@ -244,79 +262,91 @@ $messages = array(
 'create-this-page' => 'Gwruthyl an folen-ma',
 'delete' => 'Dilea',
 'deletethispage' => 'Dilea an folen-ma',
-'undelete_short' => 'Disdhilea {{PLURAL:$1|udn janj|$1 chanj}}',
-'viewdeleted_short' => 'Gweles {{PLURAL:$1|udn janj diles|$1 chanj diles}}',
+'undelete_short' => 'Disdhilea {{PLURAL:$1|unn janj|$1 chanj}}',
+'viewdeleted_short' => 'Gweles {{PLURAL:$1|unn janj diles|$1 chanj diles}}',
 'protect' => 'Difres',
 'protect_change' => 'chanjya',
 'protectthispage' => 'Difres an folen-ma',
 'unprotect' => 'Chanjya difresans',
 'unprotectthispage' => 'Chanjya difresans an folen-ma',
-'newpage' => 'Folen nowyth',
+'newpage' => 'Folen noweth',
 'talkpage' => "Dadhelva a-dro dhe'n folen-ma",
-'talkpagelinktext' => 'keskows',
-'specialpage' => 'Folen arbednek',
+'talkpagelinktext' => 'Kescows',
+'specialpage' => 'Folen arbennek',
 'personaltools' => 'Toulys personel',
-'postcomment' => 'Radn nowyth',
-'talk' => 'Keskows',
+'postcomment' => 'Rann noweth',
+'articlepage' => 'Gweles an folen',
+'talk' => 'Kescows',
 'views' => 'Gwelow',
-'toolbox' => 'Boks toulys',
+'toolbox' => 'Box toulys',
 'userpage' => 'Folen devnydhyer',
 'projectpage' => 'Folen meta',
 'imagepage' => 'Gweles folen an restren',
 'mediawikipage' => 'Gweles folen an messajys',
-'templatepage' => 'Gweles folen an skantlyn',
+'templatepage' => 'Gweles folen an scantlyn',
 'viewhelppage' => 'Gweles an folen gweres',
-'categorypage' => 'Gweles folen an klass',
-'viewtalkpage' => 'Gweles an keskows',
-'otherlanguages' => 'En yethow erel',
+'categorypage' => 'Gweles folen an class',
+'viewtalkpage' => 'Gweles an kescows',
+'otherlanguages' => 'Yn yethow erel',
 'redirectedfrom' => '(Daswedyes dhyworth $1)',
 'redirectpagesub' => 'Folen daswedyans',
-'lastmodifiedat' => 'An folen-ma a veu kens chanjys an $1, dhe $2.',
-'jumpto' => 'Labma dhe:',
+'lastmodifiedat' => 'An folen-ma a veu chanjys an $1, dhe $2.',
+'protectedpage' => 'Folen dhifresys',
+'jumpto' => 'Lamma dhe:',
 'jumptonavigation' => 'lewyans',
-'jumptosearch' => 'hwilas',
+'jumptosearch' => 'whilas',
+'view-pool-error' => 'Drog yw genen, gorgargys yw an servyers orth an termyn-ma.
+Yma re a dhevnydhyoryon owth assaya gweles an folen-ma.
+Gortowgh pols kens why dhe assaya hedhes an folen-ma arta, mar pleg.
+
+$1',
+'pool-errorunknown' => 'Gwall ancoth',
 
 # 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' => 'A-dro dhe {{SITENAME}}',
 'aboutpage' => 'Project:Kedhlow',
-'copyright' => 'Kavadow yw an dalgh en-dadn $1.',
+'copyright' => 'Cavadow yw an dalgh yn-dann $1.',
 'copyrightpage' => '{{ns:project}}:Gwirbryntyansow',
-'currentevents' => 'Darvosow a-lebmyn',
-'currentevents-url' => 'Project:Darvosow a-lebmyn',
+'currentevents' => 'Darvosow a-lemmyn',
+'currentevents-url' => 'Project:Darvosow a-lemmyn',
 'disclaimers' => 'Avisyansow',
-'disclaimerpage' => 'Project:Avisyans ollgebmyn',
+'disclaimerpage' => 'Project:Avisyans ollgemmyn',
 'edithelp' => 'Gweres gans chanjya',
 'edithelppage' => 'Help:Chanjya',
 'helppage' => 'Help:Gweres',
 'mainpage' => 'Folen dre',
 'mainpage-description' => 'Folen dre',
-'policy-url' => 'Project:Polici',
+'policy-url' => 'Project:Policy',
 'portal' => 'Porth an gemeneth',
 'portal-url' => 'Project:Porth an gemeneth',
-'privacy' => 'Polici privetter',
-'privacypage' => 'Project:Polici privetter',
+'privacy' => 'Policy privetter',
+'privacypage' => 'Project:Policy privetter',
 
-'badaccess' => 'Gwall kubmyes',
+'badaccess' => 'Gwall cummyes',
 
 'ok' => 'Sur',
 'retrievedfrom' => 'Daskevys dhyworth "$1"',
 'youhavenewmessages' => 'Yma $1 genowgh ($2).',
-'newmessageslink' => 'messajys nowyth',
-'newmessagesdifflink' => 'chanj kens',
-'youhavenewmessagesmulti' => 'Yma messajys nowyth genowgh war $1',
+'newmessageslink' => 'messajys noweth',
+'newmessagesdifflink' => 'chanj diwettha',
+'youhavenewmessagesfromusers' => 'Yma $1 dhywgh dhyworth {{PLURAL:$3|devnydhyer aral|$3 devnydhyer}} ($2).',
+'youhavenewmessagesmanyusers' => 'Yma $1 dhywgh dhyworth lies devnydhyer ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|messach noweth}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|chanj diwettha}}',
+'youhavenewmessagesmulti' => 'Yma messajys noweth genowgh war $1',
 'editsection' => 'chanjya',
 'editold' => 'chanjya',
-'viewsourceold' => 'gweles an bednfenten',
+'viewsourceold' => 'gweles an bennfenten',
 'editlink' => 'chanjya',
-'viewsourcelink' => 'gweles an bednfenten',
-'editsectionhint' => 'Chanjya an radn: $1',
+'viewsourcelink' => 'gweles an bennfenten',
+'editsectionhint' => 'Chanjya an rann: $1',
 'toc' => 'Rol an folen',
-'showtoc' => 'diskwedhes',
-'hidetoc' => 'kudha',
-'collapsible-expand' => 'Efani',
+'showtoc' => 'disqwedhes',
+'hidetoc' => 'cudha',
+'collapsible-expand' => 'Efany',
 'thisisdeleted' => 'Gweles po restorya $1?',
 'viewdeleted' => 'Gweles $1?',
-'restorelink' => '{{PLURAL:$1|udn janj diles|$1 chanj diles}}',
+'restorelink' => '{{PLURAL:$1|unn janj diles|$1 chanj diles}}',
 'feedlinks' => 'Feed:',
 'site-rss-feed' => '$1 RSS feed',
 'site-atom-feed' => '$1 Atom feed',
@@ -328,271 +358,354 @@ $messages = array(
 'nstab-main' => 'Erthygel',
 'nstab-user' => 'Folen devnydhyer',
 'nstab-media' => 'Folen media',
-'nstab-special' => 'Folen arbednek',
-'nstab-project' => 'Folen towl',
+'nstab-special' => 'Folen arbennek',
+'nstab-project' => 'Folen ragdres',
 'nstab-image' => 'Restren',
 'nstab-mediawiki' => 'Messach',
-'nstab-template' => 'Skantlyn',
+'nstab-template' => 'Scantlyn',
 'nstab-help' => 'Gweres',
-'nstab-category' => 'Klass',
+'nstab-category' => 'Class',
 
 # General errors
 'error' => 'Gwall',
 'databaseerror' => 'Gwall database',
-'readonly' => 'Alhwedhys yw an database',
+'readonly' => 'Alwhedhys yw an database',
 'missingarticle-rev' => '(amendyans#: $1)',
 'missingarticle-diff' => '(Dyffrans: $1, $2)',
 'internalerror' => 'Gwall a-bervedh',
 'internalerror_info' => 'Gwall a-bervedh: $1',
-'filecopyerror' => 'Ny ylles kopia an restren "$1" war-tu "$2".',
-'filerenameerror' => 'Ny ylles dashenwel an restren "$1" dhe "$2".',
-'filedeleteerror' => 'Ny ylles dilea an restren "$1".',
-'filenotfound' => 'Ny ylles kavos an restren "$1".',
+'filecopyerror' => 'Ny veu possybyl copia an restren "$1" dhe "$2".',
+'filerenameerror' => 'Ny veu possybyl dashenwel an restren "$1" dhe "$2".',
+'filedeleteerror' => 'Ny veu possybyl dilea an restren "$1".',
+'filenotfound' => 'Ny veu kevys an restren "$1".',
+'cannotdelete-title' => 'Ny yllir dilea an folen "$1"',
 'badtitle' => 'Titel drog',
-'viewsource' => 'Gweles an bednfenten',
+'viewsource' => 'Gweles an bennfenten',
 
 # Login and logout pages
-'welcomecreation' => '== Dynnargh, $1! ==
-Gwruthys yw agas akont.
-Na wrewgh ankevi dhe janjya agas [[Special:Preferences|dowisyansow {{SITENAME}}]].',
+'logouttext' => "'''Digelmys owgh why lemmyn.'''
+
+Why a yll pesya usya {{SITENAME}} heb hanow, po why a yll <span class='plainlinks'>[$1 omgelmy arta]</span> avel an keth devnydhyer po avel devnydhyer aral.
+Notyowgh: Neb folennow a alsa bos disqwedhys kepar del owgh why omgelmys whath, erna wryllowgh why clerhe cache agas peurel.",
+'welcomeuser' => 'Dynnargh, $1!',
+'welcomecreation-msg' => 'Gwruthys yw agas acont.
+Na wrewgh ankevy dhe janjya agas [[Special:Preferences|dowisyansow {{SITENAME}}]].',
 'yourname' => 'Hanow usyer:',
 'yourpassword' => 'Ger tremena:',
-'yourpasswordagain' => 'Jynnskrifowgh agas ger tremena arta:',
-'remembermypassword' => "Porth kov a'm ger tremena war'n amontyer-ma (rag $1 {{PLURAL:$1|dydh|dydh}} dhe'n moyha)",
-'securelogin-stick-https' => 'Gwitha junyes gans HTTPS wosa omgelmi',
+'yourpasswordagain' => 'Jynnscrifowgh agas ger tremena arta:',
+'remembermypassword' => "Perthy cov a'm omgelmy war'n jynn amontya-ma (rag $1 {{PLURAL:$1|dedh}} dhe'n moyha)",
+'securelogin-stick-https' => 'Gwitha junyes gans HTTPS wosa omgelmy',
 'yourdomainname' => 'Agas tiredh:',
-'login' => 'Omgelmi',
-'nav-login-createaccount' => 'Omgelmi / Formya akont nowyth',
-'loginprompt' => 'Res yw dhewgh galosegi cookies rag omgelmi orth {{SITENAME}}.',
-'userlogin' => 'Omgelmi / formya akont nowyth',
-'userloginnocreate' => 'Omgelmi',
-'logout' => 'Digelmi',
-'userlogout' => 'Digelmi',
+'login' => 'Omgelmy',
+'nav-login-createaccount' => 'Omgelmy / Formya acont noweth',
+'loginprompt' => 'Res yw dhywgh galosegy cookies rag omgelmy orth {{SITENAME}}.',
+'userlogin' => 'Omgelmy / formya acont noweth',
+'userloginnocreate' => 'Omgelmy',
+'logout' => 'Digelmy',
+'userlogout' => 'Digelmy',
 'notloggedin' => 'Digelmys',
-'nologin' => "A nyns eus akont dhewgh? '''$1'''.",
-'nologinlink' => 'Formyowgh akont',
-'createaccount' => 'Formya akont nowyth',
-'gotaccount' => "Eus akont genowgh seulabres? '''$1'''.",
-'gotaccountlink' => 'Omgelmi',
-'userlogin-resetlink' => 'Eus ankevys genowgh agas manylyon omgelmi?',
+'nologin' => "A nyns eus acont dhywgh? '''$1'''.",
+'nologinlink' => 'Formyowgh acont',
+'createaccount' => 'Formya acont noweth',
+'gotaccount' => "Eus acont dhis seulabres? '''$1'''.",
+'gotaccountlink' => 'Omgelmy',
+'userlogin-resetlink' => 'Eus ankevys genowgh agas manylyon omgelmy?',
 'createaccountmail' => 'der e-bost',
-'createaccountreason' => 'Cheson:',
-'badretype' => 'Ny wra parya an geryow-tremena an eyl gans y gila.',
+'createaccountreason' => 'Acheson:',
+'badretype' => 'Ny wrug omdhesedhes an geryow tremena entrys genowgh.',
 'userexists' => "Yma'n hanow usyer entrys genowgh ow pos usys seulabres.
 Dowisowgh hanow aral mar pleg.",
-'loginerror' => 'Gwall omgelmi',
-'createaccounterror' => 'Ny ylles formya an akont: $1',
-'nocookiesnew' => 'An akont yw formys, mes nyns owgh hwi omgelmys.
-Yma {{SITENAME}} owth usya cookies rag omgelmi devnydhyoryon.
+'loginerror' => 'Gwall omgelmy',
+'createaccounterror' => 'Ny veu possybyl formya an acont: $1',
+'nocookiesnew' => 'Formys yw an acont, mes nyns owgh why omgelmys.
+Yma {{SITENAME}} owth usya cookies rag omgelmy devnydhyoryon.
 Dialosegys yw cookies war agas jynn amontya.
-Gwrewgh aga galosegi, hag omgelmi dre usya agas hanow usyer ha ger tremena nowyth.',
+Gwrewgh aga galosegy, hag omgelmowgh dre usya agas hanow usyer ha ger tremena noweth.',
 'nocookieslogin' => 'Yma {{SITENAME}} owth usya cookies rag omgelmi devnydhyoryon.
 Dialosegys yw cookies war agas jynn amontya.
 Gwrewgh aga galosegi hag assaya arta.',
-'noname' => 'Ny wrussowgh hwi ri hanow usyer da.',
-'loginsuccess' => "'''Omgelmys owgh hwi lebmyn orth {{SITENAME}} avel \"\$1\".'''",
-'nouserspecified' => 'Res yw dhewgh ri hanow usyer.',
-'wrongpassword' => 'Kabm o an ger tremena.
+'noname' => 'Ny wrussowgh why ry hanow usyer da.',
+'loginsuccesstitle' => 'Omgelmy a sowenas',
+'loginsuccess' => "'''Omgelmys owgh why lemmyn orth {{SITENAME}} avel \"\$1\".'''",
+'nouserspecified' => 'Res yw dhywgh ry hanow usyer.',
+'wrongpassword' => 'Camm o an ger tremena.
 Assayowgh arta mar pleg.',
 'wrongpasswordempty' => 'Gwag o an ger-tremena res. Assayowgh arta mar pleg.',
+'passwordtooshort' => "Res yw dhe eryow tremena bos {{PLURAL:$1|1 lytheren|$1 lytheren}} dhe'n lyha.",
+'password-name-match' => "Ny yll agas ger tremena bos an keth ha'gas hanow usyer.",
+'password-login-forbidden' => 'Difennys yw usya an hanow usyer-ma hag an ger tremena-ma.',
 'mailmypassword' => 'E-bostya ger tremena nowyth',
-'noemailcreate' => 'Res yw dhewgh ri trigva ebost da',
-'accountcreated' => 'Formys yw an akont',
-'accountcreatedtext' => 'Formys yw an akont rag $1.',
+'passwordremindertitle' => 'Ger tremena noweth rag {{SITENAME}}',
+'passwordremindertext' => 'Nebonen (why martesen, dhyworth an drigva IP $1) a wovynnas ger tremena noweth rag {{SITENAME}} ($4). Ger tremena termynyel rag an devnydhyer
+"$2" re beu gwruthys hag a veu settyes dhe "$3". Mars o henna agas bodh, y fedh res dhywgh omgelmy ha dowis ger tremena noweth lemmyn.
+Agas ger tremena termynyel a wra diwedha yn {{PLURAL:$5|unn jedh|$5 dedh}}.
+
+Mar qwrug nebonen aral govyn hemma, po yma cov dhywgh a\'gas ger tremena ha nyns yw whans dhywgh y janjya namoy, why a yll sconya aswon an messach-ma ha pesya usya agas ger tremena coth.',
+'noemail' => 'Nyns eus trigva ebost recordyes rag an devnydhyer "$1".',
+'noemailcreate' => 'Res yw dhewgh ry trigva ebost da',
+'passwordsent' => 'Ger tremena noweth re beu danvenys dhe\'n drigva ebost covscrifys rag "$1".
+Gwrewgh omgelmy arta mar pleg wosa why dh\'y receva.',
+'emailauthenticated' => 'Afydhyes veu agas trigva ebost an $2 dhe $3.',
+'emailconfirmlink' => 'Afydhyowgh agas trigva ebost',
+'invalidemailaddress' => 'Ny yllir alowa an drigva ebost drefen bos furv drog dhedhy.
+Entrowgh trigva da y furv po gwakhowgh an furvlen-na.',
+'accountcreated' => 'Acont formys',
+'accountcreatedtext' => 'Formys re beu an acont rag $1.',
+'createaccount-title' => 'Formya acont war {{SITENAME}}',
+'createaccount-text' => 'Nebonan a wrug gwruthyl acont rag agas trigva ebost war {{SITENAME}} ($4) henwys "$2", "$3" y er tremena.
+Why a dalvia omgelmy ha chanjya agas ger tremena lemmyn.
+
+Why a yll sconya aswon an messach-ma, mar peu an acont-ma formyes yn gwall.',
+'usernamehasherror' => "Ny yllowgh why usya lytherennow hash y'gas ger tremena",
 'loginlanguagelabel' => 'Yeth: $1',
 
 # Change password dialog
 'resetpass' => 'Chanjya ger-tremena',
-'resetpass_header' => 'Chanjya ger tremena an akont',
-'oldpassword' => 'Ger tremena koth:',
-'newpassword' => 'Ger tremena nowyth:',
+'resetpass_announce' => 'Why a wrug omgelmy yn unn usya coden ebostyes termynyel.
+Rag gorfenna omgelmy, res yw dhywgh settya ger tremena noweth omma:',
+'resetpass_header' => 'Chanjya ger tremena an acont',
+'oldpassword' => 'Ger tremena coth:',
+'newpassword' => 'Ger tremena noweth:',
+'retypenew' => 'Jynnscrifowgh an ger tremena noweth arta:',
+'resetpass_submit' => 'Settya an ger tremena hag omgelmy',
+'resetpass_success' => 'Chanjyes re beu agas ger tremena yn soweny!
+Orth agas omgelmy lemmyn...',
+'resetpass_forbidden' => 'Ny yllir chanjya geryow tremena',
 'resetpass-submit-loggedin' => 'Chanjya an ger-tremena',
 'resetpass-submit-cancel' => 'Hedhi',
+'resetpass-temp-password' => 'Ger tremena termynyel:',
 
 # Special:PasswordReset
+'passwordreset' => 'Dassettya ger tremena',
+'passwordreset-text' => 'Gwrewgh lenwel an furvlen-ma rag receva ebost ynno manylyon agas acont.',
+'passwordreset-legend' => 'Dassettya ger tremena',
+'passwordreset-disabled' => "Dialosegys yw dassettya geryow tremena war'n wiki ma.",
+'passwordreset-pretext' => "{{PLURAL:$1||Entrowgh onen a'n tymmyn a dhata a-woles}}",
 'passwordreset-username' => 'Hanow usyer:',
+'passwordreset-domain' => 'Tiredh:',
 'passwordreset-email' => 'Trigva ebost:',
+'passwordreset-emailtitle' => 'Manylyon agas acont war {{SITENAME}}',
+
+# Special:ChangeEmail
+'changeemail' => 'Chanjya trigva ebost',
+'changeemail-header' => 'Chanjya trigva ebost an acont',
+'changeemail-text' => 'Grewgh lenwel an furvlen-ma rag chanjya agas trigva ebost. Y fedh res dhywgh entra agas ger tremena rag afydhya an chanj-ma.',
 
 # Edit page toolbar
-'bold_sample' => 'Tekst tew',
-'bold_tip' => 'Tekst tew',
-'italic_sample' => 'Tekst italek',
-'italic_tip' => 'Tekst italek',
+'bold_sample' => 'Text tew',
+'bold_tip' => 'Text tew',
+'italic_sample' => 'Text italek',
+'italic_tip' => 'Text italek',
 'link_sample' => 'Titel an gevren',
 'link_tip' => 'Kevren bervedhel',
 'extlink_sample' => 'http://www.example.com titel an gevren',
 'extlink_tip' => 'Kevren a-ves (na ankevowgh an rager http://)',
-'headline_sample' => 'Tekst an titel',
-'headline_tip' => 'Pednlinen nivel 2',
-'nowiki_sample' => 'Keworrowgh tekst heb furvyans obma',
-'nowiki_tip' => 'Skonya ajon furvyans wiki',
+'headline_sample' => 'Text an titel',
+'headline_tip' => 'Pennlinen nivel 2',
+'nowiki_sample' => 'Keworrowgh text heb furvyans omma',
+'nowiki_tip' => 'Sconya aswon furvyans wiki',
 'image_tip' => 'Restren neythys',
 'media_tip' => 'Kevren restren',
 'sig_tip' => 'Agas sinans gans stampa-termyn',
 
 # Edit pages
-'summary' => 'Derivas kot:',
-'subject' => 'Testen/Pednlinen:',
-'minoredit' => 'Chanj bian yw hebma',
+'summary' => 'Derivas cot:',
+'subject' => 'Testen/Pennlinen:',
+'minoredit' => 'Chanj bian yw hemma',
 'watchthis' => 'Golyas an folen-ma',
 'savearticle' => 'Gwitha',
 'preview' => 'Ragwel',
 'showpreview' => 'Ragweles',
-'showdiff' => 'Diskwedhes an chanjyow',
-'anoneditwarning' => "'''Gwarnyans:''' Nyns owgh hwi omgelmys.
-Agas trigva IP a vedh rekordys en istori chanjyow an folen-ma.",
+'showdiff' => 'Disqwedhes an chanjyow',
+'anoneditwarning' => "'''Gwarnyans:''' Nyns owgh why omgelmys.
+Recordys a vedh agas trigva IP yn istory an folen-ma.",
+'anonpreviewwarning' => "''Nyns owgh why omgelmys. Dre witha, agas trigva IP a vedh recordyes yn istory chanjya an folen-ma.''",
 'summary-preview' => "Ragwel a'n derivas kot:",
-'loginreqlink' => 'omgelmi',
+'loginreqtitle' => 'Res yw omgelmy',
+'loginreqlink' => 'omgelmy',
 'accmailtitle' => 'Danvenys yw an ger-tremena.',
-'newarticle' => '(Nowyth)',
-'noarticletext' => 'Nyns eus tekst war an folen-ma.
-Hwi a ell [[Special:Search/{{PAGENAME}}|hwilas titel an folen-ma]] en folednow erel,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hwilas e\'n kovnotednow kelmys],
+'newarticle' => '(Noweth)',
+'newarticletext' => "Why a wrug sewya kevren dhe folen nag yw gwruthys whath.
+Rag gwruthyl an folen, dalethowgh jynnscrifa y'n gist a-woles (gwelowgh an [[{{MediaWiki:Helppage}}|folen weres]] rag moy kedhlow).
+Mar qwrussowgh why dos omma yn camm, clyckyowgh boton '''war-dhelergh''' agas peurel.",
+'noarticletext' => 'Nyns eus text y\'n folen-ma.
+Why a yll [[Special:Search/{{PAGENAME}}|whilas titel an folen-ma]] yn folennow erel,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} whilas y\'n covnotennow kelmys],
 po [{{fullurl:{{FULLPAGENAME}}|action=edit}} chanjya an folen-ma]</span>.',
+'noarticletext-nopermission' => 'Nyns eus text y\'n folen-ma a-lemmyn.
+Why a yll [[Special:Search/{{PAGENAME}}|whilas titel an folen-ma]] yn folennow erel, po <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} whilas y\'n covnotennow kelmys]</span>, mes nyns eus cummyes dhywgh a wruthyl an folen-ma.',
+'userpage-userdoesnotexist' => 'Nyns yw covscrifys an acont devnydhyer "$1".
+Gwrewgh checkya mars yw whans dhywgh gwruthyl/chanjya an folen-ma.',
+'userpage-userdoesnotexist-view' => 'Nyns yw covscrifys an acont devnydher "$1".',
 'updated' => '(Nowedhys)',
 'note' => "'''Noten:'''",
-'previewnote' => "'''Gwrewgh perthi kov, nyns yw hebma marnas ragwel.''' Nyns yw agas chanjyow gwithys hwath!",
-'editing' => 'ow chanjya $1',
-'editingsection' => 'ow chanjya $1 (radn)',
-'editingcomment' => 'ow chanjya $1 (radn nowyth)',
-'yourtext' => 'Agas tekst',
+'previewnote' => "Gwrewgh perthy cov, nyns yw hemma marnas ragwel.''' Nyns yw gwithys agas chanjyow whath!",
+'continue-editing' => "Mos dhe'n teller chanjya",
+'editing' => 'Ow chanjya $1',
+'creating' => 'Ow qwruthyl $1',
+'editingsection' => 'Ow chanjya $1 (rann)',
+'editingcomment' => 'Ow chanjya $1 (rann noweth)',
+'yourtext' => 'Agas text',
 'yourdiff' => 'Dyffransow',
-'templatesused' => '{{PLURAL:$1|Skantlyn|Skantlyns}} usys war an folen-ma:',
-'templatesusedpreview' => "{{PLURAL:$1|Skantlyn|Skantlyns}} usys e'n ragwel-ma:",
+'templatesused' => '{{PLURAL:$1|Scantlyn|Scantlyns}} usys war an folen-ma:',
+'templatesusedpreview' => "{{PLURAL:$1|Scantlyn|Scantlyns}} usys y'n ragwel-ma:",
 'template-protected' => '(gwithys)',
 'template-semiprotected' => '(hanter-difresys)',
-'hiddencategories' => 'Esel a {{PLURAL:$1|1 glass kovys|$1 klass kovys}} yw an folen-ma:',
-'permissionserrorstext-withaction' => 'Nyns eus kubmyes dhewgh dhe $2, rag an {{PLURAL:$1|cheson|chesonys}} a sew:',
+'hiddencategories' => 'Esel a {{PLURAL:$1|1 glass cudhys|$1 class cudhys}} yw an folen-ma:',
+'permissionserrorstext-withaction' => 'Nyns eus cummyes dhywgh dhe $2, rag an {{PLURAL:$1|acheson|achesonys}} a sew:',
+'moveddeleted-notice' => 'Diles yw an folen-ma.
+Yma covnoten dhileans ha gwayans an folen a-woles.',
 'log-fulllog' => 'Gweles an govnoten dien',
 
 # "Undo" feature
-'undo-summary' => 'Diswul amendyans $1 gans [[Special:Contributions/$2|$2]] ([[User talk:$2|keskows]])',
+'undo-summary' => 'Diswul amendyans $1 gans [[Special:Contributions/$2|$2]] ([[User talk:$2|kescows]])',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'Ny ellir formya an akont',
+'cantcreateaccounttitle' => 'Nyns yw possybyl formya an acont',
 
 # History pages
-'viewpagelogs' => 'Gweles kovnotednow an folen-ma',
+'viewpagelogs' => 'Gweles covnotennow an folen-ma',
 'currentrev' => 'Amendyans diwettha',
-'currentrev-asof' => 'An chanj diwettha dhyworth $1',
-'revisionasof' => 'Amendyans wosa $1',
-'revision-info' => 'Amendyans wosa $1 gans $2',
-'previousrevision' => '← Amendyans kottha',
-'nextrevision' => 'Amendyans nowyttha →',
+'currentrev-asof' => 'An chanj diwettha a-ban $1',
+'revisionasof' => 'Versyon an folen a-ban $1',
+'revision-info' => 'Amendyans a-ban $1 gans $2',
+'previousrevision' => '← Amendyans cottha',
+'nextrevision' => 'Amendyans nowettha →',
 'currentrevisionlink' => 'An amendyans diwettha',
-'cur' => 'lebmyn',
+'cur' => 'lemmyn',
 'next' => 'nessa',
 'last' => 'kens',
 'page_first' => 'kensa',
 'page_last' => 'kens',
-'histlegend' => "Dowis dyffransow: Merkyowgh kistednow radyo an amendyansow dhe geheveli, ha gwaskowgh 'entra' po an boton orth goles an folen.<br />
-Alhwedh: '''({{int:cur}})''' = dyffrans gans an amendyans diwettha, '''({{int:last}})''' = dyffrans gans amendyans kens, '''{{int:minoreditletter}}''' = chanj bian.",
-'history-fieldset-title' => 'Peuri an istori',
-'history-show-deleted' => 'Diles hep ken',
+'histlegend' => "Dowis dyffransow: Merkyowgh kistennow radyo a'n amendyansow dhe gehevely, ha gwascowgh 'entra' po an boton orth goles an folen.<br />
+Alwhedh: '''({{int:cur}})''' = an dyffrans dhyworth an amendyans diwettha, '''({{int:last}})''' = an dyffrans dhyworth an amendyans kens, '''{{int:minoreditletter}}''' = chanj bian.",
+'history-fieldset-title' => 'Peury an istory',
+'history-show-deleted' => 'Diles hepken',
 'histfirst' => 'An moyha a-varr',
 'histlast' => 'An diwettha',
+'historysize' => '({{PLURAL:$1|1 bayt}})',
 'historyempty' => '(gwag)',
 
 # Revision feed
+'history-feed-title' => 'Istory chanjya',
+'history-feed-description' => 'Istory chanjya rag an folen-ma war an wiki',
 'history-feed-item-nocomment' => '$1 dhe $2',
 
 # Revision deletion
-'rev-delundel' => 'diskwedhes/kudha',
+'rev-delundel' => 'disqwedhes/cudha',
+'rev-showdeleted' => 'disqwedhes',
 'revdel-restore' => 'chanjya an hewelder',
 'revdel-restore-deleted' => 'amendyansow diles',
 'revdel-restore-visible' => 'amendyansow gweladow',
-'pagehist' => 'Istori an folen',
+'pagehist' => 'Istory an folen',
 
 # History merging
-'mergehistory-reason' => 'Cheson:',
+'mergehistory-reason' => 'Acheson:',
 
 # Merge log
 'revertmerge' => 'Disworunya',
 
 # Diffs
-'history-title' => 'Istori an folen "$1"',
-'difference-multipage' => '(Dyffrans ynter an folednow)',
+'history-title' => 'Istory an folen "$1"',
+'difference-title' => 'Dyffransow ynter amendyansow a "$1"',
+'difference-multipage' => '(Dyffrans ynter an folennow)',
 'lineno' => 'Linen $1:',
-'compareselectedversions' => 'Keheveli an amendyansow dowisyes',
-'showhideselectedversions' => 'Diskwedhes/kudha amendyansow dowisyes',
+'compareselectedversions' => 'Kehevely an amendyansow dowisyes',
+'showhideselectedversions' => 'Disqwedhes/cudha amendyansow dowisyes',
 'editundo' => 'diswul',
 
 # Search results
-'searchresults' => 'Sewyansow an hwilans',
-'searchresults-title' => 'Sewyansow an hwilans rag "$1"',
-'searchresulttext' => 'Rag moy kedhlow a-dro dhe hwilas en {{SITENAME}}, gwelowgh [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => 'Hwi a wrug hwilas \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|keniver folen ow talleth gans "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|keniver folen ow kevredna dhe "$1"]])',
-'searchsubtitleinvalid' => "Hwi a wrug hwilas '''$1'''",
+'searchresults' => 'Sewyansow whilas',
+'searchresults-title' => 'Sewyansow whilas rag "$1"',
+'searchresulttext' => 'Rag moy kedhlow a-dro dhe whilas yn {{SITENAME}}, gwelowgh [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitle' => 'Why a wrug whilas \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|keniver folen ow talleth gans "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|keniver folen ow kevrenna dhe "$1"]])',
+'searchsubtitleinvalid' => "Why a wrug whilas '''$1'''",
 'notitlematches' => 'Nyns eus titel folen ow machya',
-'notextmatches' => 'Nyns eus tekst folen ow machya',
+'notextmatches' => 'Nyns eus text folen ow machya',
 'prevn' => 'kens {{PLURAL:$1|$1}}',
 'nextn' => 'nessa {{PLURAL:$1|$1}}',
 'prevn-title' => '$1 {{PLURAL:$1|sewyans|sewyans}} kens',
 'nextn-title' => '$1 {{PLURAL:$1|sewyans|sewyans}} nessa',
 'viewprevnext' => 'Gweles ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-legend' => 'Etholyow hwilans',
+'searchmenu-legend' => 'Etholyow whilans',
 'searchmenu-exists' => "''Yma folen henwys \"[[:\$1]]\" war an wiki-ma'''",
 'searchmenu-new' => "'''Gwruthyl an folen \"[[:\$1]]\" war an wiki-ma!'''",
 'searchhelp-url' => 'Help:Gweres',
-'searchprofile-articles' => 'Folednow dalhen',
-'searchprofile-project' => 'Folednow gweres ha ragdres',
+'searchprofile-articles' => 'Folennow dhalhen',
+'searchprofile-project' => 'Folennow gweres ha ragdres',
 'searchprofile-images' => 'Liesmedia',
 'searchprofile-everything' => 'Puptra',
-'searchprofile-advanced' => 'Avoncys',
-'searchprofile-articles-tooltip' => 'Hwilas en $1',
-'searchprofile-project-tooltip' => 'Hwilas en $1',
-'searchprofile-images-tooltip' => 'Hwilas restrednow',
-'searchprofile-everything-tooltip' => 'Hwilas en pub teller (en folednow keskows ynwedh)',
+'searchprofile-advanced' => 'Avonsys',
+'searchprofile-articles-tooltip' => 'Whilas yn $1',
+'searchprofile-project-tooltip' => 'Whilas yn $1',
+'searchprofile-images-tooltip' => 'Whilas restrennow',
+'searchprofile-everything-tooltip' => 'Whilas yn pub teller (yn folennow kescows ynwedh)',
+'searchprofile-advanced-tooltip' => 'Whilas yn spassow hanow personelhes',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ger|$2 ger}})',
 'search-result-category-size' => '{{PLURAL:$1|1 esel|$1 esel}} ({{PLURAL:$2|1 isglass|$2 isglass}}, {{PLURAL:$3|1 restren|$3 restren}})',
 'search-redirect' => '(daswedyans $1)',
-'search-section' => '(radn $1)',
-'search-suggest' => 'A wrussowgh hwi menya: $1',
-'search-interwiki-caption' => 'Ragdresow hwor',
+'search-section' => '(rann $1)',
+'search-suggest' => 'A wrussowgh why menya: $1',
+'search-interwiki-caption' => 'Ragdresow whor',
 'search-interwiki-default' => '$1 sewyansow:',
 'search-interwiki-more' => '(moy)',
 'search-relatedarticle' => 'Kelmys',
-'mwsuggest-disable' => 'Dialosegi profyansow AJAX',
-'searcheverything-enable' => 'Hwilas en keniver spas-hanow',
+'mwsuggest-disable' => 'Dialosegy profyansow AJAX',
+'searcheverything-enable' => 'Whilas yn keniver spas-hanow',
 'searchrelated' => 'kelmys',
 'searchall' => 'oll',
 'showingresultsheader' => "{{PLURAL:$5|Sewyans '''$1''' dhyworth '''$3'''|Sewyansow '''$1 - $2''' dhyworth '''$3'''}} rag '''$4'''",
-'nonefound' => "'''Noten''': Nyns yw hwilys marnas radn a'n spasys-hanow dre dhefowt.
-Gwrewgh assaya rag-gorra agas govyn gans ''all:'' rag hwilas en pub teller (a-barth an folednow keskows, skantlyns, etc), po usyowgh an spas-hanow hwensys avel rag-gorrans.",
+'nonefound' => "'''Noten''': Nyns yw marnas rann a'n spasys-hanow whilys dre dhefowt.
+Gwrewgh assaya rag-gorra agas govyn gans ''all:'' rag whilas yn pub teller (ynnans an folennow kescows, scantlyns, etc), po usyowgh an spas-hanow whensys avel rag-gorrans.",
 'search-nonefound' => 'Nyns esa sewyansow ow machya an govyn.',
-'powersearch' => 'Hwilans avoncys',
-'powersearch-legend' => 'Hwilans avoncys',
-'powersearch-ns' => 'Hwilas en spasys-hanow:',
-'powersearch-redir' => 'Gorra an daswedyansow en rol',
-'powersearch-field' => 'Hwilas',
+'powersearch' => 'Whilans avonsys',
+'powersearch-legend' => 'Whilans avonsys',
+'powersearch-ns' => 'Whilas yn spasys-hanow:',
+'powersearch-redir' => 'Gorra an daswedyansow yn rol',
+'powersearch-field' => 'Whilas',
 'powersearch-togglelabel' => 'Dowis:',
 'powersearch-toggleall' => 'Oll',
 'powersearch-togglenone' => 'Nagonen',
-'search-external' => 'Hwilans a-ves',
+'search-external' => 'Whilans a-ves',
 
 # Preferences page
 'preferences' => 'Dowisyansow',
-'mypreferences' => 'Ow dowisyansow',
+'mypreferences' => 'Dowisyansow',
 'changepassword' => 'Chanjya an ger-tremena',
-'prefs-skin' => 'Krohen',
+'prefs-skin' => 'Crohen',
+'skin-preview' => 'Ragweles',
 'prefs-datetime' => 'Dedhyans hag eur',
+'prefs-user-pages' => 'Folennow devnydhyer',
+'prefs-personal' => 'Profil devnydhyer',
 'prefs-rc' => 'Chanjyow a-dhiwedhes',
 'prefs-watchlist' => 'Rol golyas',
+'prefs-watchlist-days' => "Niver a dhedhyow dhe dhisqwedhes y'n rol golyas:",
 'prefs-resetpass' => 'Chanjya ger-tremena',
+'prefs-changeemail' => 'Chanjya an drigva ebost',
+'prefs-setemail' => 'Settya trigva ebost',
 'prefs-email' => 'Etholyow e-bost',
 'saveprefs' => 'Gwitha',
-'searchresultshead' => 'Hwilas',
-'timezoneregion-africa' => 'Afrika',
-'timezoneregion-america' => 'Amerika',
-'timezoneregion-antarctica' => 'Antarktika',
-'timezoneregion-arctic' => 'Arktek',
-'timezoneregion-asia' => 'Asi',
+'resetprefs' => 'Clerhe chanjyow nag yw gwithys',
+'restoreprefs' => 'Restorya pub settyans defowt',
+'prefs-editing' => 'Chanjya',
+'prefs-edit-boxsize' => 'Mens an fenester chanjya.',
+'rows' => 'Rewyow:',
+'columns' => 'Colovennow:',
+'searchresultshead' => 'Whilas',
+'savedprefs' => 'Gwithys re beu agas dowisyansow.',
+'servertime' => 'Eur an servyer:',
+'guesstimezone' => 'Lenwel dhyworth an beurel',
+'timezoneregion-africa' => 'Africa',
+'timezoneregion-america' => 'America',
+'timezoneregion-antarctica' => 'Antarctica',
+'timezoneregion-arctic' => 'Arctek',
+'timezoneregion-asia' => 'Asya',
 'timezoneregion-atlantic' => 'Mor Atlantek',
-'timezoneregion-australia' => 'Ostrali',
+'timezoneregion-australia' => 'Awstralya',
 'timezoneregion-europe' => 'Europa',
 'timezoneregion-indian' => 'Mor Eyndek',
-'timezoneregion-pacific' => 'Mor Kosel',
-'prefs-searchoptions' => 'Etholyow hwilas',
+'timezoneregion-pacific' => 'Mor Cosel',
+'prefs-searchoptions' => 'Whilas',
 'prefs-files' => 'Restrednow',
 'youremail' => 'E-bost:',
 'username' => 'Hanow-usyer:',
@@ -600,55 +713,66 @@ Gwrewgh assaya rag-gorra agas govyn gans ''all:'' rag hwilas en pub teller (a-ba
 'prefs-memberingroups' => "Esel a'n {{PLURAL:$1|bagas|bagasow}}:",
 'yourrealname' => 'Hanow gwir:',
 'yourlanguage' => 'Yeth:',
-'yournick' => 'Sinans nowyth:',
+'yournick' => 'Sinans noweth:',
 'yourgender' => 'Reyth:',
 'gender-male' => 'Gorow',
 'gender-female' => 'Benow',
 'email' => 'E-bost',
+'prefs-help-email' => 'A-dhowis yw ry trigva ebost, mes res yw y sensy rag dassettya agas ger tremena mars yw ankevys.',
+'prefs-help-email-others' => 'Why a yll dowis gasa dhe re erel kestava dhywgh der ebost yn unn glyckya kevren war agas folen devnydhyer po kescows.
+Nyns yw disqwedhys agas trigva ebost pan wrella devnydhyoryon erel kestava dhywgh.',
+'prefs-help-email-required' => 'Res yw trigva ebost.',
 'prefs-signature' => 'Sinans',
-'prefs-advancedediting' => 'Etholyow avoncys',
-'prefs-advancedrc' => 'Etholyow avoncys',
-'prefs-advancedrendering' => 'Etholyow avoncys',
-'prefs-advancedsearchoptions' => 'Etholyow avoncys',
-'prefs-advancedwatchlist' => 'Etholyow avoncys',
+'prefs-advancedediting' => 'Etholyow avonsys',
+'prefs-advancedrc' => 'Etholyow avonsys',
+'prefs-advancedrendering' => 'Etholyow avonsys',
+'prefs-advancedsearchoptions' => 'Etholyow avonsys',
+'prefs-advancedwatchlist' => 'Etholyow avonsys',
+'prefs-displayrc' => 'Etholyow disqwedhes',
+'prefs-displaysearchoptions' => 'Etholyow disqwedhes',
+'prefs-displaywatchlist' => 'Etholyow disqwedhes',
 
 # User rights
+'userrights-user-editname' => 'Entrowgh hanow usyer:',
 'userrights-groupsmember' => 'Esel a:',
-'userrights-reason' => 'Cheson:',
+'userrights-reason' => 'Acheson:',
 
 # Groups
 'group' => 'Bagas:',
 'group-user' => 'Devnydhyoryon',
-'group-bot' => 'Botow',
-'group-sysop' => 'Menystoryon',
+'group-bot' => 'Bottow',
+'group-sysop' => 'Menystroryon',
 'group-all' => '(oll)',
 
 'group-user-member' => '{{GENDER:$1|Devnydhyer}}',
-'group-bot-member' => '{{GENDER:$1|bot}}',
-'group-sysop-member' => '{{GENDER:$1|menyster}}',
+'group-bot-member' => '{{GENDER:$1|bott}}',
+'group-sysop-member' => '{{GENDER:$1|menystrer}}',
 
 'grouppage-user' => '{{ns:project}}:Devnydhyoryon',
-'grouppage-bot' => '{{ns:project}}:Botow',
-'grouppage-sysop' => '{{ns:project}}:Menystoryon',
+'grouppage-bot' => '{{ns:project}}:Bottow',
+'grouppage-sysop' => '{{ns:project}}:Menystroryon',
 
 # Rights
-'right-read' => 'Redya folednow',
-'right-edit' => 'Chanjya folednow',
-'right-createtalk' => 'Gwruthyl folednow keskows',
-'right-createaccount' => 'Formya akontow devnydhyer nowyth',
-'right-move' => 'Gwaya folednow',
-'right-movefile' => 'Gwaya restrednow',
-'right-upload' => 'Ughkarga restrednow',
-'right-delete' => 'Dilea folednow',
+'right-read' => 'Redya folennow',
+'right-edit' => 'Chanjya folennow',
+'right-createtalk' => 'Gwruthyl folennow kescows',
+'right-createaccount' => 'Formya acontow devnydhyer noweth',
+'right-move' => 'Gwaya folennow',
+'right-movefile' => 'Gwaya restrennow',
+'right-upload' => 'Ughcarga restrennow',
+'right-delete' => 'Dilea folennow',
+
+# Special:Log/newusers
+'newuserlogpage' => 'Covnoten formya acontow devnydhyer',
 
 # User rights log
-'rightslog' => 'Kovnoten gwiryow an devnydhyer',
+'rightslog' => 'Covnoten wiryow an devnydhyer',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'chanjya an folen-ma',
-'action-move' => 'gwaya an folen ma',
-'action-movefile' => 'gwaya an restren ma',
-'action-upload' => 'ughkarga an restren-ma',
+'action-move' => 'gwaya an folen-ma',
+'action-movefile' => 'gwaya an restren-ma',
+'action-upload' => 'ughcarga an restren-ma',
 'action-delete' => 'dilea an folen-ma',
 
 # Recent changes
@@ -656,72 +780,92 @@ Gwrewgh assaya rag-gorra agas govyn gans ''all:'' rag hwilas en pub teller (a-ba
 'recentchanges' => 'Chanjyow a-dhiwedhes',
 'recentchanges-legend' => 'Etholyow an chanjyow a-dhiwedhes',
 'recentchanges-summary' => "Sewya an chanjyow diwettha eus dhe'n wiki war'n folen-ma.",
-'recentchanges-feed-description' => "Sewya an chanjyow diwettha dhe'n wiki e'n feed-ma.",
-'recentchanges-label-newpage' => 'An chanj-ma a wrug gwruthyl folen nowyth',
-'recentchanges-label-minor' => 'Chanj bian yw hebma',
-'recentchanges-label-bot' => 'An chanj-ma a veu gwres gans bot',
-'rclistfrom' => 'Diskwedhes chanjyow nowyth ow talleth a-dhia $1.',
+'recentchanges-feed-description' => "Helerhy an chanjyow diwettha dhe'n wiki y'n feed-ma.",
+'recentchanges-label-newpage' => 'Y feu gwres folen noweth gans an chanj-ma',
+'recentchanges-label-minor' => 'Chanj bian yw hemma',
+'recentchanges-label-bot' => 'An chanj-ma a veu gwres gans bott',
+'rcnote' => "A-woles yma'n {{PLURAL:$1|'''1''' chanj}} y'n {{PLURAL:$2|jedh|'''$2''' dedh}} diwettha, a-ban $5, $4.",
+'rclistfrom' => 'Disqwedhes chanjyow noweth ow talleth a-ban $1.',
 'rcshowhideminor' => '$1 chanjyow bian',
 'rcshowhidebots' => '$1 botow',
 'rcshowhideliu' => '$1 devnydhoryon omgelmys',
 'rcshowhideanons' => '$1 devnydhyoryon dihanow',
 'rcshowhidemine' => '$1 ow chanjyow',
-'rclinks' => "Diskwedhes an $1 chanj a-dhiwedhes gwres e'n $2 dydh a-dhiwedhes<br />$3",
+'rclinks' => "Disqwedhes an $1 chanj diwettha gwres y'n $2 dedh diwettha<br />$3",
 'diff' => 'dyffrans',
-'hist' => 'istori',
-'hide' => 'Kudha',
-'show' => 'Diskwedhes',
+'hist' => 'istory',
+'hide' => 'Cudha',
+'show' => 'Disqwedhes',
 'minoreditletter' => 'B',
 'newpageletter' => 'N',
-'boteditletter' => 'bot',
-'newsectionsummary' => '/* $1 */ radn nowyth',
-'rc-enhanced-expand' => 'Diskwedhes an manylyon (res yw JavaScript)',
-'rc-enhanced-hide' => 'Kudha manylyon',
+'boteditletter' => 'bott',
+'newsectionsummary' => '/* $1 */ rann noweth',
+'rc-enhanced-expand' => 'Disqwedhes an manylyon (res yw JavaScript)',
+'rc-enhanced-hide' => 'Cudha manylyon',
 
 # Recent changes linked
 'recentchangeslinked' => 'Chanjyow kelmys',
 'recentchangeslinked-feed' => 'Chanjyow kelmys',
 'recentchangeslinked-toolbox' => 'Chanjyow kelmys',
 'recentchangeslinked-title' => 'Chanjyow kelmys dhe "$1"',
-'recentchangeslinked-summary' => "Hemm yw rol a janjyow a-dhiwedhes gwres war folednow kevrednys dhyworth folen res (po dhe eseli a glass res).
-'''Tew''' yw folednow eus war agas [[Special:Watchlist|rol golyas]].",
+'recentchangeslinked-noresult' => 'Nyns esa chanj veth war folennow kevrennys dres an termyn res.',
+'recentchangeslinked-summary' => "Hemm yw rol a janjyow a-dhiwedhes gwres dhe folennow yw kevrennys dhyworth folen res (po dhe esely a glass res).
+'''Tew''' yw folennow eus war agas [[Special:Watchlist|rol golyas]].",
 'recentchangeslinked-page' => 'Hanow an folen:',
+'recentchangeslinked-to' => "Disqwedhes chanjyow dhe folennow kevennys dhe'n folen res yn le",
 
 # Upload
-'upload' => 'Ughkarga restren',
-'uploadbtn' => 'Ughkarga restren',
-'uploadlogpage' => 'Kovnoten ughkarga',
-'filename' => 'Hanow-restren',
-'filedesc' => 'Derivas kot',
-'filesource' => 'Pednfenten:',
+'upload' => 'Ughcarga restren',
+'uploadbtn' => 'Ughcarga restren',
+'reuploaddesc' => "Hedhy ughcarga ha dewheles dhe'n furvlen ughcarga",
+'uploadnologin' => 'Digelmys',
+'uploadnologintext' => 'Res yw bos [[Special:UserLogin|omgelmys]] rag ughcarga restrennow.',
+'uploaderror' => 'Gwall ughcarga',
+'uploadlogpage' => 'Covnoten ughcarga',
+'filename' => 'Hanow an restren',
+'filedesc' => 'Derivas cot',
+'fileuploadsummary' => 'Derivas cot:',
+'filesource' => 'Pennfenten:',
 'savefile' => 'Gwitha restren',
 'uploadedimage' => '"[[$1]]" ughkergys',
 'watchthisupload' => 'Golya an folen-ma',
 
 # Special:ListFiles
 'imgfile' => 'restren',
-'listfiles_date' => 'Dedhyas',
+'listfiles_date' => 'Dedhyans',
 'listfiles_name' => 'Hanow',
 'listfiles_user' => 'Devnydhyer',
+'listfiles_size' => 'Mens',
+'listfiles_description' => 'Descrifans',
+'listfiles_count' => 'Versyons',
 
 # File description page
 'file-anchor-link' => 'Restren',
-'filehist' => 'Istori an folen',
-'filehist-help' => 'Klyckyowgh war dedhyans/eur rag gweles an folen del veu hi nena.',
+'filehist' => 'Istory an restren',
+'filehist-help' => 'Clyckyowgh war dedhyans/eur rag gweles an folen del veu nena.',
 'filehist-deleteall' => 'dilea oll',
 'filehist-deleteone' => 'dilea',
-'filehist-current' => 'a-lebmyn',
+'filehist-revert' => 'trebuchya',
+'filehist-current' => 'a-lemmyn',
 'filehist-datetime' => 'Dedhyans/Eur',
-'filehist-thumb' => 'Skeusednik',
-'filehist-thumbtext' => 'Skeusednik rag an versyon wosa $1',
+'filehist-thumb' => 'Skeusennik',
+'filehist-thumbtext' => 'Skeusennik rag an versyon a-ban $1',
+'filehist-nothumb' => 'Nyns eus skeudennik',
 'filehist-user' => 'Devnydhyer',
 'filehist-dimensions' => 'Mensow',
+'filehist-filesize' => 'Mens an restren',
 'filehist-comment' => 'Ger',
 'imagelinks' => 'Devnydh an restren',
-'linkstoimage' => "Yma'n {{PLURAL:$1|folen|$1 folen}} a sew ow kevredna dhe'n restren-ma:",
-'nolinkstoimage' => "Nyns eus folen ow kevredna dhe'n restren-ma.",
-'sharedupload' => 'Yma an folen-ma ow tos dhyworth $1 ha hi a ell bos usys gans ragdresow erel.',
-'uploadnewversion-linktext' => "Ughkarga versyon nowyth a'n restren-ma",
+'linkstoimage' => "Yma'n {{PLURAL:$1|folen|$1 folen}} a sew ow kevrenna dhe'n restren-ma:",
+'linkstoimage-more' => "Yma moy es $1 {{PLURAL:$1|folen}} ow kevrenna dhe'n restren-ma.
+Yma an rol a sew ow tisqwedhes an {{PLURAL:$1|an kensa kevren folen|kensa $1 kevren folen}} dhe'n restren-ma hepken.
+Yma [[Special:WhatLinksHere/$2|rol leun]] cavadow.",
+'nolinkstoimage' => "Nyns eus folen ow kevrenna dhe'n restren-ma.",
+'morelinkstoimage' => "Gweles [[Special:WhatLinksHere/$1|moy kevrennow]] dhe'n restren-ma.",
+'sharedupload' => 'Yma an folen-ma ow tos dhyworth $1 ha hy a alsa bos yn-dann devnydh gans ragdresow erel.',
+'sharedupload-desc-here' => "Yma'n restren-ma ow tos dhyworth $1 ha hy a alsa bos yn-dann devnydh gans ragdresow erel.
+Yma'n descrifans war y [$2 folen dhescrifans] disqwedhys a-woles.",
+'uploadnewversion-linktext' => "Ughcarga versyon noweth a'n restren-ma",
 
 # File deletion
 'filedelete' => 'Dilea $1',
@@ -729,92 +873,92 @@ Gwrewgh assaya rag-gorra agas govyn gans ''all:'' rag hwilas en pub teller (a-ba
 'filedelete-submit' => 'Dilea',
 
 # MIME search
-'download' => 'iskarga',
+'download' => 'iscarga',
 
 # Unwatched pages
-'unwatchedpages' => 'Folednow nag eus ow pos golyes',
+'unwatchedpages' => 'Folennow nag eus den veth ow colyas',
 
 # List redirects
 'listredirects' => 'Rol an daswedyansow',
 
 # Unused templates
-'unusedtemplates' => 'Skantlyns heb devnydh',
-'unusedtemplateswlh' => 'kevrednow erel',
+'unusedtemplates' => 'Scantlyns heb devnydh',
+'unusedtemplateswlh' => 'kevrennow erel',
 
 # Random page
 'randompage' => 'Folen dre jons',
 
 # Statistics
-'statistics-pages' => 'Folednow',
+'statistics' => 'Statystygyon',
+'statistics-pages' => 'Folennow',
 
 'brokenredirects-edit' => 'chanjya',
 'brokenredirects-delete' => 'dilea',
 
-'withoutinterwiki' => 'Folednow heb kevrednow yeth',
-'withoutinterwiki-submit' => 'Diskwedhes',
+'withoutinterwiki' => 'Folennow heb kevrennow yeth',
+'withoutinterwiki-submit' => 'Disqwedhes',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bayt|bayt}}',
 'nmembers' => '$1 {{PLURAL:$1|esel|esel}}',
-'uncategorizedpages' => 'Folednow heb klass',
-'uncategorizedcategories' => 'Klassys heb klass',
-'uncategorizedimages' => 'Restrednow heb klass',
-'uncategorizedtemplates' => 'Skantlyns heb klass',
-'unusedcategories' => 'Klassys gwag',
-'unusedimages' => 'Restrednow heb devnydh',
-'shortpages' => 'Folednow berr',
-'longpages' => 'Folednow hir',
-'protectedpages' => 'Folednow difresys',
+'uncategorizedpages' => 'Folennow heb class',
+'uncategorizedcategories' => 'Classys heb class',
+'uncategorizedimages' => 'Restrennow heb class',
+'uncategorizedtemplates' => 'Scantlyns heb class',
+'unusedcategories' => 'Classys gwag',
+'unusedimages' => 'Restrennow heb devnydh',
+'prefixindex' => 'Keniver folen gans an rager',
+'shortpages' => 'Folennow cot',
+'longpages' => 'Folennow hir',
+'protectedpages' => 'Folennow difresys',
 'protectedtitles' => 'Titlys difresys',
-'usercreated' => '{{GENDER:$3|Formyes}} war $1 dhe $2',
-'newpages' => 'Folednow nowyth',
+'usercreated' => '{{GENDER:$3|Formyes}} an $1 dhe $2',
+'newpages' => 'Folennow noweth',
 'newpages-username' => 'Hanow-usyer:',
-'ancientpages' => 'Folednow kottha',
+'ancientpages' => 'An cottha folennow',
 'move' => 'Gwaya',
 'movethispage' => 'Gwaya an folen-ma',
-'pager-newer-n' => '{{PLURAL:$1|1 nowyttha|$1 nowyttha}}',
-'pager-older-n' => '{{PLURAL:$1|1 kottha|$1 kottha}}',
+'pager-newer-n' => '{{PLURAL:$1|1 nowettha|$1 nowettha}}',
+'pager-older-n' => '{{PLURAL:$1|1 cottha|$1 cottha}}',
 
 # Book sources
-'booksources' => 'Pednfentynyow lyver',
-'booksources-search-legend' => 'Hwilas pednfentynyow lyver',
+'booksources' => 'Pennfentynyow lyver',
+'booksources-search-legend' => 'Whilas pennfentynyow lyver',
 'booksources-go' => 'Mos',
 
 # Special:Log
-'specialloguserlabel' => 'Devnydhyer:',
+'specialloguserlabel' => 'Awtour:',
 'speciallogtitlelabel' => 'Titel:',
-'log' => 'Kovnotednow',
+'log' => 'Covnotennow',
 
 # Special:AllPages
 'allpages' => 'Keniver folen',
 'alphaindexline' => '$1 dhe $2',
 'prevpage' => 'Folen gens ($1)',
-'allpagesfrom' => 'Diskwedhes folednow ow talleth orth:',
-'allpagesto' => 'Diskwedhes folednow ow tiwedha orth:',
+'allpagesfrom' => 'Disqwedhes folennow ow talleth orth:',
+'allpagesto' => 'Disqwedhes folennow ow tiwedha orth:',
 'allarticles' => 'Keniver folen',
 'allpagesprev' => 'Kens',
 'allpagesnext' => 'Nessa',
 'allpagessubmit' => 'Mos',
+'allpages-hide-redirects' => 'Cudha daswedyansow',
 
 # Special:Categories
-'categories' => 'Klassys',
+'categories' => 'Classys',
 
 # Special:DeletedContributions
 'sp-deletedcontributions-contribs' => 'kevrohow',
 
 # Special:LinkSearch
-'linksearch' => 'Hwilas kevrednow a-ves',
-'linksearch-ok' => 'Hwilas',
-'linksearch-line' => '$1 yw kevrednys dhyworth $2',
+'linksearch' => 'Whilas kevrennow a-ves',
+'linksearch-ok' => 'Whilas',
+'linksearch-line' => 'Kevrennys yw $1 dhyworth $2',
 
 # Special:ListUsers
-'listusers-submit' => 'Diskwedhes',
-
-# Special:Log/newusers
-'newuserlogpage' => 'Kovnoten formya akontow devnydhyer',
+'listusers-submit' => 'Disqwedhes',
 
 # Special:ListGroupRights
-'listgrouprights-members' => '(rol an eseli)',
+'listgrouprights-members' => '(rol esely)',
 
 # E-mail user
 'emailuser' => 'E-bostya an devnydhyer-ma',
@@ -832,227 +976,239 @@ Gwrewgh assaya rag-gorra agas govyn gans ''all:'' rag hwilas en pub teller (a-ba
 'watch' => 'Golyas',
 'watchthispage' => 'Golyas an folen-ma',
 'unwatch' => 'Diswolyas',
-'watchlist-details' => 'Yma {{PLURAL:$1|$1 folen|$1 folen}} war agas rol golyas, heb ynkludya folednow kows.',
+'watchlist-details' => 'Yma {{PLURAL:$1|$1 folen}} war agas rol golyas, marnas folennow kescows.',
+'wlshowlast' => 'Disqwedhes an $1 our $2 dedh $3 diwettha',
 'watchlist-options' => 'Etholyow an rol golyas',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'Ow kolyas...',
+'watching' => 'Ow colyas...',
 'unwatching' => 'Ow tisgolyas...',
 
 # Delete
 'deletepage' => 'Dilea an folen',
+'confirm' => 'Afydhya',
+'excontent' => 'yth esa ynny: "$1"',
 'delete-confirm' => 'Dilea "$1"',
 'delete-legend' => 'Dilea',
-'actioncomplete' => 'Kowlwres yw an gwrians',
+'actioncomplete' => 'Cowlwres yw an gwrians',
 'actionfailed' => 'An gwrians a fyllas',
 'deletedtext' => '"$1" yw dileys.
-Gwelowgh $2 rag kovadh a dhileansow a-dhiwedhes.',
-'dellogpage' => 'Kovnoten dhilea',
-'deletecomment' => 'Cheson:',
-'deleteotherreason' => 'Cheson aral/keworansel:',
-'deletereasonotherlist' => 'Cheson aral',
+Gwelowgh $2 rag covadh a dhileansow a-dhiwedhes.',
+'dellogpage' => 'Covnoten dhilea',
+'deletionlog' => 'covnoten dhilea',
+'deletecomment' => 'Acheson:',
+'deleteotherreason' => 'Acheson aral/keworansel:',
+'deletereasonotherlist' => 'Acheson aral',
 
 # Rollback
 'rollbacklink' => 'restorya',
 
 # Protect
-'protectlogpage' => 'Kovnoten difres',
+'protectlogpage' => 'Covnoten dhifres',
 'protectedarticle' => 'a dhifresas "[[$1]]"',
-'protectcomment' => 'Cheson:',
+'prot_1movedto2' => '[[$1]] gwayys dhe [[$2]]',
+'protectcomment' => 'Acheson:',
 'protectexpiry' => 'Ow tiwedha:',
-'protect_expiry_invalid' => 'Drog yw termyn an diwedh.',
-'protect_expiry_old' => "Yma'n termyn diwedh e'n termyn eus passyes.",
+'protect_expiry_invalid' => 'Drog yw an termyn diwedha.',
+'protect_expiry_old' => "Yma'n termyn diwedha y'n termyn eus passyes.",
 'protect-level-sysop' => 'Menystroryon hepken',
-'protect-summary-cascade' => 'ow froslabma',
-'protect-expiring' => 'y hwra diwedha $1 (UTC)',
-'restriction-type' => 'Kubmyas:',
+'protect-summary-cascade' => 'ow froslamma',
+'protect-expiring' => 'y whra diwedha $1 (UTC)',
+'restriction-type' => 'Cummyas:',
 'pagesize' => '(bayt)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Chanjya',
 'restriction-move' => 'Gwaya',
 'restriction-create' => 'Gwruthyl',
-'restriction-upload' => 'Ughkarga',
+'restriction-upload' => 'Ughcarga',
 
 # Undelete
-'undeletelink' => 'gweles/daswul',
+'undeletelink' => 'gweles/restorya',
 'undeleteviewlink' => 'gweles',
-'undelete-search-submit' => 'Hwilas',
+'undelete-search-submit' => 'Whilas',
 'undelete-show-file-submit' => 'Ya',
 
 # Namespace form on various pages
-'namespace' => 'Spas-hanow:',
+'namespace' => 'Spas hanow:',
 'invert' => 'Trebuchya an dowisyans',
-'blanknamespace' => '(Pedn)',
+'namespace_association' => 'Spas hanow kelmys',
+'blanknamespace' => '(Penn)',
 
 # Contributions
 'contributions' => 'Kevrohow an devnydhyer',
 'contributions-title' => 'Kevrohow $1',
-'mycontris' => 'Ow hevrohow',
+'mycontris' => 'Kevrohow',
 'contribsub2' => 'Rag $1 ($2)',
 'uctop' => '(gwartha)',
-'month' => 'A-dhia mis (ha moy a-varr):',
-'year' => 'A-dhia bledhen (ha moy a-varr):',
-
-'sp-contributions-newbies' => 'Diskwedhes hepken kevrohow akontow nowyth',
-'sp-contributions-blocklog' => 'kovnoten lettya',
-'sp-contributions-uploads' => 'ughkargansow',
-'sp-contributions-logs' => 'kovnotednow',
-'sp-contributions-talk' => 'keskows',
-'sp-contributions-search' => 'Hwilas kevrohow',
+'month' => 'Dhyworth an mis (ha moy a-varr):',
+'year' => 'Dhyworth an vledhen (ha moy a-varr):',
+
+'sp-contributions-newbies' => 'Disqwedhes yn unnik kevrohow acontow noweth',
+'sp-contributions-blocklog' => 'covnoten lettya',
+'sp-contributions-uploads' => 'ughcargansow',
+'sp-contributions-logs' => 'covnotennow',
+'sp-contributions-talk' => 'kescows',
+'sp-contributions-search' => 'Whilas kevrohow',
 'sp-contributions-username' => 'Trigva IP po hanow-usyer:',
-'sp-contributions-submit' => 'Hwilas',
+'sp-contributions-toponly' => 'Disqwedhes yn unnik chanjyow yw amendyansow diwettha',
+'sp-contributions-submit' => 'Whilas',
 
 # What links here
-'whatlinkshere' => "Pandr'eus ow kevredna obma",
-'whatlinkshere-title' => 'Folednow ow kevredna bys "$1"',
+'whatlinkshere' => "Pandr'eus ow kevrenna omma",
+'whatlinkshere-title' => 'Folennow ow kevrenna dhe "$1"',
 'whatlinkshere-page' => 'Folen:',
-'linkshere' => "Yma'n folednow a sew ow kevredna dhe '''[[:$1]]''':",
-'nolinkshere' => "Nyns eus folen ow kevredna dhe '''[[:$1]]'''.",
+'linkshere' => "Yma'n folennow a sew ow kevrenna dhe '''[[:$1]]''':",
+'nolinkshere' => "Nyns eus folen ow kevrenna dhe '''[[:$1]]'''.",
 'isredirect' => 'folen daswedyans',
-'istemplate' => 'treuskludyans',
+'istemplate' => 'treuscludyans',
 'isimage' => 'kevren an restren',
 'whatlinkshere-prev' => '{{PLURAL:$1|kens|kens $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|nessa|nessa $1}}',
-'whatlinkshere-links' => '← kevrednow',
+'whatlinkshere-links' => '← kevrennow',
 'whatlinkshere-hideredirs' => '$1 daswedyansow',
-'whatlinkshere-hidetrans' => '$1 treuskludyans',
-'whatlinkshere-hidelinks' => '$1 kevrednow',
-'whatlinkshere-hideimages' => '$1 kevrednow imach',
+'whatlinkshere-hidetrans' => '$1 treuscludyans',
+'whatlinkshere-hidelinks' => '$1 kevrennow',
+'whatlinkshere-hideimages' => '$1 kevrennow restren',
 'whatlinkshere-filters' => 'Sidhlow',
 
 # Block/unblock
 'blockip' => 'Lettya devnydhyer',
 'ipadressorusername' => 'Trigva IP po hanow-usyer:',
-'ipbreason' => 'Cheson:',
-'ipbreasonotherlist' => 'Cheson aral',
+'ipbreason' => 'Acheson:',
+'ipbreasonotherlist' => 'Acheson aral',
+'ipboptions' => '2 our:2 hours,1 dhedh:1 day,3 dedh:3 days,1 seythen:1 week,2 seythen:2 weeks,1 vis:1 month,3 mis:3 months,6 mis:6 months,1 vledhen:1 year,heb diwedh:infinite',
 'ipb-blocklist-contribs' => 'Kevrohow rag $1',
 'ipblocklist' => 'Devnydhyoryon lettyes',
-'ipblocklist-submit' => 'Hwilas',
+'ipblocklist-submit' => 'Whilas',
 'blocklink' => 'lettya',
 'unblocklink' => 'dislettya',
 'change-blocklink' => 'chanjya an lettyans',
 'contribslink' => 'kevrohow',
-'blocklogpage' => 'Kovnoten lettya',
-'blocklogentry' => 'a lettyas [[$1]], $2 $3 y/hy termyn diwedh',
+'blocklogpage' => 'Covnoten lettya',
+'blocklogentry' => 'a lettyas [[$1]], bys dhe $2 $3',
 'unblocklogentry' => 'dislettyas $1',
 'block-log-flags-anononly' => 'devnydhyoryon dihanow hepken',
-'block-log-flags-nocreate' => 'dialosegys yw formya akontow',
-'block-log-flags-hiddenname' => 'hanow-usyer kovys',
+'block-log-flags-nocreate' => 'dialosegys yw formya acontow',
+'block-log-flags-hiddenname' => 'hanow usyer cudhys',
 
 # Move page
 'move-page' => 'Gwaya $1',
 'move-page-legend' => 'Gwaya folen',
 'movearticle' => 'Gwaya an folen:',
-'newtitle' => 'Dhe ditel nowyth:',
+'newtitle' => 'Dhe ditel noweth:',
 'move-watch' => 'Golya an folen-ma',
 'movepagebtn' => 'Gwaya an folen',
 'pagemovedsub' => 'An gwarnyans a sowenas',
-'movepage-moved' => '\'\'\'Gwayes yw "$1" war-tu "$2"\'\'\'',
-'movedto' => 'gwayes war-tu',
-'movelogpage' => 'Kovnoten gwaya',
-'movereason' => 'Cheson:',
+'movepage-moved' => '\'\'\'Gwayys re beu "$1" dhe "$2"\'\'\'',
+'movedto' => 'gwayys dhe',
+'movelogpage' => 'Covnoten waya',
+'movereason' => 'Acheson:',
 'revertmove' => 'trebuchya',
 
 # Export
-'export' => 'Esperthi folednow',
+'export' => 'Esperthy folennow',
 'export-addcat' => 'Keworra',
 'export-addns' => 'Keworra',
 
 # Namespace 8 related
 'allmessagesname' => 'Hanow',
+'allmessagesdefault' => 'Text messach defowt',
 
 # Thumbnails
 'thumbnail-more' => 'Brashe',
-'thumbnail_error' => 'Gwall ow formya skeusednik: $1',
+'thumbnail_error' => 'Gwall ow formya skeusennik: $1',
 
 # Special:Import
-'import' => 'Ymperthi folednow',
-'import-interwiki-submit' => 'Ymperthi',
+'import' => 'Ymperthy folennow',
+'import-interwiki-submit' => 'Ymperthy',
 'import-upload-filename' => 'Hanow-restren:',
-'importstart' => 'Owth ymperthi folednow...',
-'import-noarticle' => 'Nyns eus folen veth dhe ymperthi!',
+'importstart' => 'Owth ymperthy folennow...',
+'import-noarticle' => 'Nyns eus folen veth dhe ymperthy!',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Agas folen dhevnydhyer',
 'tooltip-pt-mytalk' => 'Agas folen gows',
 'tooltip-pt-preferences' => 'Agas dowisyansow',
-'tooltip-pt-watchlist' => 'Rol a folednow erowgh hwi ow kolyas',
+'tooltip-pt-watchlist' => 'Rol a folennow esowgh why ow colyas rag chanjyow',
 'tooltip-pt-mycontris' => "Rol a'gas kevrohow",
-'tooltip-pt-login' => 'Gwell via dhewgh mar tewgh hag omgelmi, mes nyns yw besi',
-'tooltip-pt-logout' => 'Digelmi',
-'tooltip-ca-talk' => "Dadhelva a-dro dhe'n dalgh",
-'tooltip-ca-edit' => 'Hwi a ell chanjya an folen-ma. Gwrewgh usya an boton ragwel kens gwitha mar pleg.',
-'tooltip-ca-addsection' => 'Dalleth radn nowyth',
-'tooltip-ca-viewsource' => 'Alhwedhys yw an folen-ma.
-Y hellir gweles hy fednfenten.',
-'tooltip-ca-history' => 'Amendyansow koth an folen-ma',
+'tooltip-pt-login' => 'Gwell via dhywgh mar tewgh why hag omgelmy, mes nyns yw besy',
+'tooltip-pt-logout' => 'Digelmy',
+'tooltip-ca-talk' => "Dadhel a-dro dhe'n folen",
+'tooltip-ca-edit' => "Why a yll chanjya an folen-ma. Gwrewgh usya an boton 'ragweles' kens gwitha mar pleg.",
+'tooltip-ca-addsection' => 'Dalleth rann noweth',
+'tooltip-ca-viewsource' => 'Alwhedhys yw an folen-ma.
+Why a yll gweles hy fennfenten.',
+'tooltip-ca-history' => "Amendyansow coth a'n folen-ma",
 'tooltip-ca-protect' => 'Difres an folen-ma',
 'tooltip-ca-delete' => 'Dilea an folen-ma',
 'tooltip-ca-move' => 'Gwaya an folen-ma',
 'tooltip-ca-watch' => "Keworra an folen-ma dhe'gas rol golyas",
 'tooltip-ca-unwatch' => 'Dilea an folen-ma dhyworth agas rol golyas',
-'tooltip-search' => 'Hwilas en {{SITENAME}}',
+'tooltip-search' => 'Whilas yn {{SITENAME}}',
 'tooltip-search-go' => 'Mos dhe folen gans an keth hanow-ma, mars eus',
-'tooltip-search-fulltext' => "Hwilas an tekst-ma e'n folednow",
+'tooltip-search-fulltext' => "Whilas an text-ma y'n folennow",
 'tooltip-p-logo' => "Mos dhe'n folen dre",
 'tooltip-n-mainpage' => "Mos dhe'n folen dre",
 'tooltip-n-mainpage-description' => "Mos dhe'n folen dre",
-'tooltip-n-portal' => "A-dro dhe'n ragdres, an peth a ellowgh hwi gwul, ple kavos taklow",
-'tooltip-n-currentevents' => 'Kavos kedhlow a-dro dhe dharvosow a-lebmyn',
-'tooltip-n-recentchanges' => "Rol an chanjyow a-dhiwedhes e'n wiki",
-'tooltip-n-randompage' => 'Karga folen dre jons',
+'tooltip-n-portal' => "A-dro dhe'n ragdres, an peth a yllowgh why gwul, ple dhe gavos taclow",
+'tooltip-n-currentevents' => 'Cavos kedhlow a-dro dhe dharvosow a-lemmyn',
+'tooltip-n-recentchanges' => "Rol a janjyow a-dhiwedhes y'n wiki",
+'tooltip-n-randompage' => 'Carga folen dre jons',
 'tooltip-n-help' => 'Gweres',
-'tooltip-t-whatlinkshere' => 'Rol a bub folen wiki ow kevredna bys obma',
-'tooltip-t-recentchangeslinked' => 'Chanjyow a-dhiwedhes en folednow eus kevrednys dhyworth an folen-ma',
+'tooltip-t-whatlinkshere' => 'Rol a bub folen wiki ow kevrenna dhe omma',
+'tooltip-t-recentchangeslinked' => 'Chanjyow a-dhiwedhes yn folennow eus kevrennys dhyworth an folen-ma',
 'tooltip-feed-rss' => 'Feed RSS rag an folen-ma',
 'tooltip-feed-atom' => 'Feed Atom rag an folen-ma',
 'tooltip-t-contributions' => 'Gweles rol a gevrohow an devnydhyer-ma',
 'tooltip-t-emailuser' => "Danvon e-bost dhe'n devnydhyer-ma",
-'tooltip-t-upload' => 'Ughkarga restrednow',
-'tooltip-t-specialpages' => 'Rol a geniver folen arbednek',
+'tooltip-t-upload' => 'Ughcarga restrennow',
+'tooltip-t-specialpages' => 'Rol a geniver folen arbennek',
 'tooltip-t-print' => "Versyon pryntyadow a'n folen-ma",
 'tooltip-t-permalink' => "Kevren fast dhe'n amendyans-ma a'n folen",
 'tooltip-ca-nstab-main' => 'Gweles an folen',
 'tooltip-ca-nstab-user' => 'Gweles an folen devnydhyer',
-'tooltip-ca-nstab-special' => 'Folen arbednek yw hebma; ny ellowgh hwi chanjya an folen hy honen.',
+'tooltip-ca-nstab-special' => 'Folen arbennek yw hemma; ny yllowgh why chanjya an folen hy honen.',
 'tooltip-ca-nstab-project' => 'Gweles folen an wiki',
 'tooltip-ca-nstab-image' => 'Gweles folen an restren',
-'tooltip-ca-nstab-template' => 'Gweles an skantlyn',
-'tooltip-ca-nstab-category' => 'Gweles folen an klass',
-'tooltip-minoredit' => 'Merkya hebma avel chanj bian',
+'tooltip-ca-nstab-template' => 'Gweles an scantlyn',
+'tooltip-ca-nstab-category' => 'Gweles folen an class',
+'tooltip-minoredit' => 'Merkya hemma avel chanj bian',
 'tooltip-save' => 'Gwitha agas chanjyow',
-'tooltip-preview' => 'Ragweles agas chanjyow; gwrewgh usya hebma kens gwitha mar pleg!',
-'tooltip-diff' => "Diskwedhes an chanjyow eus gwres genowgh dhe'n tekst",
-'tooltip-compareselectedversions' => 'Gweles an dyffransow ynter dew janjyow dowisyes an folen-ma',
+'tooltip-preview' => 'Ragweles agas chanjyow; gwrewgh usya hemma kens gwitha mar pleg!',
+'tooltip-diff' => "Disqwedhes an chanjyow eus gwres genowgh dhe'n text",
+'tooltip-compareselectedversions' => "Gweles an dyffransow ynter an dhew janjyow dowisyes a'n folen-ma",
 'tooltip-watch' => "Keworra an folen-ma dhe'gas rol golyas",
-'tooltip-rollback' => '"Restorya" a wra trebuchya chanjyow gwres dhe\'n folen-ma gans an kens devnydhyer dre udn glyck',
-'tooltip-undo' => '"Diswul" a wra trebuchya an chanj-ma hag egeri an furvlen chanjya e\'n modh ragweles. Cheson a ell bos keworrys e\'n derivas kot.',
-'tooltip-summary' => 'Entrowgh derivas kot',
+'tooltip-rollback' => '"Restorya" a wra trebuchya chanjyow gwres dhe\'n folen-ma gans an diwettha devnydhyer yn unn glyck',
+'tooltip-undo' => '"Diswul" a wra trebuchya an chanj-ma hag egery an furvlen janjya y\'n modh ragweles. Y hyllir keworra acheson y\'n derivas cot.',
+'tooltip-summary' => 'Entrowgh derivas cot',
 
 # Attribution
 'siteuser' => 'devnydhyer {{SITENAME}} $1',
 'lastmodifiedatby' => 'An folen-ma a veu kens chanjys dhe $2, $1 gans $3.',
 'siteusers' => '{{PLURAL:$2|devnydhyer|devnydhyoryon}} {{SITENAME}} $1',
 
+# Info page
+'pageinfo-toolboxlink' => 'Kedhlow an folen',
+
 # Browsing diffs
-'previousdiff' => '← Chanj kottha',
-'nextdiff' => 'Chanj nowyttha →',
+'previousdiff' => '← Chanj cottha',
+'nextdiff' => 'Chanj nowettha →',
 
 # Media information
-'file-info-size' => '$1 × $2 piksel, mens an restren: $3, sort MIME : $4',
-'file-nohires' => 'Nyns eus klerder uhella kavadow.',
-'svg-long-desc' => 'Restren SVG, $1 × $2 piksel en hanow, mens an restren: $3',
-'show-big-image' => 'Klerder leun',
+'file-info-size' => '$1 × $2 pixel, mens an restren: $3, sort MIME: $4',
+'file-nohires' => 'Nyns eus clerder uhella cavadow.',
+'svg-long-desc' => 'Restren SVG, $1 × $2 pixel yn hanow, mens an restren: $3',
+'show-big-image' => 'Clerder leun',
 
 # Special:NewFiles
-'ilsubmit' => 'Hwilas',
+'ilsubmit' => 'Whilas',
 
 # Metadata
 'metadata' => 'Metadata',
-'metadata-help' => "Yma dhe'n restren-ma kedhlow keworansel, dres lycklod keworrys dhyworth an kamera besyel po an skanyer usys rag hy gwruthyl po hy besya. Mar veu an folen chanjys dhyworth hy studh gwredhek, possybyl yw na veu radn a'n manylyon-ma nowedhys.",
-'metadata-expand' => 'Diskwedhes manylyon ystydnys',
-'metadata-collapse' => 'Kudha manylyon ystydnys',
+'metadata-help' => "Yma dhe'n restren-ma kedhlow keworansel, dres lycklod keworrys dhyworth an camera besyel po an scanyer usys rag hy gwruthyl po hy besya. Mars yw chanjys an restren dhyworth hy studh gwredhek, possybyl yw na veu nebes manylyon nowedhys.",
+'metadata-expand' => 'Disqwedhes manylyon ystynnys',
+'metadata-collapse' => 'Cudha manylyon ystynnys',
 
 # EXIF tags
 'exif-imagewidth' => 'Les',
@@ -1061,8 +1217,17 @@ Y hellir gweles hy fednfenten.',
 
 'exif-meteringmode-255' => 'Aral',
 
+'exif-contrast-0' => 'Usadow',
 'exif-contrast-1' => 'Medhel',
-'exif-contrast-2' => 'Kales',
+'exif-contrast-2' => 'Cales',
+
+'exif-saturation-0' => 'Usadow',
+
+'exif-sharpness-0' => 'Usadow',
+'exif-sharpness-1' => 'Medhes',
+'exif-sharpness-2' => 'Cales',
+
+'exif-subjectdistancerange-0' => 'Ancoth',
 
 # External editor support
 'edit-externally' => 'Chanjya an restren-ma dre dowlen a-ves',
@@ -1071,24 +1236,58 @@ Y hellir gweles hy fednfenten.',
 'watchlistall2' => 'oll',
 'namespacesall' => 'oll',
 'monthsall' => 'oll',
+'limitall' => 'oll',
+
+# E-mail address confirmation
+'confirmemail' => 'Afydhya an drigva ebost',
+'confirmemail_noemail' => "Nyns eus trigva ebost da settyes y'gas [[Special:Preferences|dowisyansow devnydhyer]].",
 
 # Multipage image navigation
 'imgmultipageprev' => '← folen kens',
 'imgmultipagenext' => 'folen nessa →',
-'imgmultigo' => 'Ke!',
+'imgmultigo' => 'Mos!',
 
 # Table pager
 'table_pager_limit_submit' => 'Mos',
 
 # Auto-summaries
+'autosumm-blank' => 'Gwakhes an folen',
 'autoredircomment' => 'Daswedyas an folen war-tu [[$1]]',
 'autosumm-new' => "Folen formyes gans: '$1'",
 
+# Live preview
+'livepreview-loading' => 'Ow carga...',
+'livepreview-ready' => 'Ow carga... Parys!',
+
+# Watchlist editor
+'watchlistedit-noitems' => "Nyns eus titel veth y'gas rol golyas.",
+'watchlistedit-normal-title' => 'Chanjya an rol golyas',
+'watchlistedit-normal-legend' => 'Dilea titlys dhyworth agas rol golyas',
+'watchlistedit-normal-explain' => 'Yma disqwedhys a-woles titlys war agas rol golyas.
+Rag dilea titel, checkyowgh an gisten rebdho, ha clyckyowgh "{{int:Watchlistedit-normal-submit}}".
+Why a yll [[Special:EditWatchlist/raw|chanjya restren an rol golyas]] ynwedh.',
+'watchlistedit-normal-submit' => 'Dilea titlys',
+'watchlistedit-normal-done' => 'Diles veu {{PLURAL:$1|$1 titel}} dhyworth agas rol golyas',
+'watchlistedit-raw-title' => 'Chanjya restren an rol golyas',
+'watchlistedit-raw-legend' => 'Chanjya restren an rol golyas',
+'watchlistedit-raw-explain' => 'Yma disqwedhys a-woles titlys war agas rol golyas, hag y hyllir hy chanjya dre geworra dhedhy ha dilea dhyworty;
+unn ditel war linen.
+Pan vo diwedh dhywgh, clyckyowgh "{{int:Watchlistedit-raw-submit}}".
+Why a yll [[Special:EditWatchlist|usya an janjyel usadow]] ynwedh.',
+'watchlistedit-raw-titles' => 'Titlys:',
+'watchlistedit-raw-submit' => 'Nowedhy an rol golyas',
+'watchlistedit-raw-done' => 'Nowedhys re beu agas rol golyas.',
+'watchlistedit-raw-added' => 'Keworrys veu {{PLURAL:$1|$1 titel}}:',
+'watchlistedit-raw-removed' => 'Diles veu {{PLURAL:$1|$1 titel}}:',
+
 # Watchlist editing tools
 'watchlisttools-view' => 'Gweles chanjyow longus',
 'watchlisttools-edit' => 'Gweles ha chanjya an rol golyas',
 'watchlisttools-raw' => 'Chanjya restren an rol golyas',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|kescows]])',
+
 # Special:Version
 'version' => 'Versyon',
 'version-other' => 'Aral',
@@ -1098,17 +1297,32 @@ Y hellir gweles hy fednfenten.',
 'filepath-page' => 'Restren:',
 
 # Special:FileDuplicateSearch
-'fileduplicatesearch-filename' => 'Hanow-restren:',
-'fileduplicatesearch-submit' => 'Hwilas',
+'fileduplicatesearch-filename' => 'Hanow an restren:',
+'fileduplicatesearch-submit' => 'Whilas',
 
 # Special:SpecialPages
-'specialpages' => 'Folednow arbednek',
+'specialpages' => 'Folennow arbennek',
+'specialpages-group-login' => 'Omgelmy / formya acont',
+
+# Special:BlankPage
+'blankpage' => 'Folen wag',
 
 # Special:Tags
 'tags-edit' => 'chanjya',
 
+# Database error messages
+'dberr-header' => "Yma cudyn dhe'n wiki-ma",
+'dberr-problems' => "Drog yw genen!
+Yma caletter teknogel dhe'n wiasva-ma.",
+'dberr-again' => 'Assayowgh gortos pols ha dascarga.',
+'dberr-info' => '(Ny yllir kestava orth servyer an database: $1)',
+'dberr-usegoogle' => 'Why a yll assaya whilas dre Google.',
+
+# New logging system
+'logentry-delete-delete' => '$1 a dhileas an folen $3',
+
 # Search suggestions
-'searchsuggest-search' => 'Hwilas',
-'searchsuggest-containing' => 'ow senji...',
+'searchsuggest-search' => 'Whilas',
+'searchsuggest-containing' => 'ynno...',
 
 );
index b2ea2a7..a955942 100644 (file)
@@ -11,6 +11,7 @@
  * @author Aidabishkek
  * @author Amire80
  * @author Chorobek
+ * @author Growingup
  * @author Muratjumashev
  * @author Ztimur
  */
@@ -33,20 +34,59 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Шилтемелердин алдын сызуу:',
 'tog-justify' => 'Тексти барактын жазысы боюнча түздөө',
-'tog-hideminor' => 'Соңку өзгөрүүлөрдө, майда өзгөрүүлөрдү жашыруу',
-'tog-usenewrc' => 'Акыркы өзгөрүүлөрдүн жакшыртылган тизмесин колдонуу (JavaScript талап кылынат)',
-'tog-numberheadings' => 'Башсаптарды автоматтык түрдө номурлоо',
+'tog-hideminor' => 'Соңку өзгөрүүлөрдөгү арасындагы майда өзгөрүүлөрдү жашыр',
+'tog-hidepatrolled' => 'Акыркы өзгөрүүлөрдүн тизмесинен патрулдалган оңдоолорду жашыруу',
+'tog-newpageshidepatrolled' => 'Жаңы барактар тизмесинен патрулдалган барактарды жашыруу',
+'tog-extendwatchlist' => 'Бүт өзгөртүүлөрдү көрсөтүш үчүн көзөмөл тизмесин кеңейтүү, эң акыркыларды гана эмес эле',
+'tog-usenewrc' => 'Акыркы өзгөрүүлөрдөгү жана көзөмөл тизмедеги өзгөрүүлөрдү топтоо (JavaScript талап кылынат)',
+'tog-numberheadings' => 'Башжазууларды автоматтуу түрдө номердөө',
 'tog-showtoolbar' => 'Оңдоо учурунда аспаптар тактасын көрсөтүү (JavaScript талап кылынат)',
 'tog-editondblclick' => 'Эки басып баракты оңдоо (JavaScript талап кылынат)',
-'tog-editsection' => 'Ар бир секция үчүн «оңдоо» шилтемеси',
-
-'underline-always' => 'Дайым',
+'tog-editsection' => 'Ар бир секция үчүн «оңдоо» шилтемесин көрсөтүү',
+'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' => 'Оңдоо талаасынын арибинин стили:',
-'editfont-default' => 'Серепчинин арибин колдон',
-'editfont-monospace' => 'Моножазы ариби',
+'editfont-style' => 'Оңдолуп жаткан жердин тамга жасалгасы:',
+'editfont-default' => 'Браузер ырастоолорунун шрифти',
+'editfont-monospace' => 'Моножазы шрифт',
+'editfont-sansserif' => 'Кесүүсү жок шрифт',
+'editfont-serif' => 'Кесүүсү бар шрифт',
 
 # Dates
 'sunday' => 'Жекшемби',
@@ -56,13 +96,13 @@ $messages = array(
 'thursday' => 'Бейшемби',
 'friday' => 'Жума',
 'saturday' => 'Ишемби',
-'sun' => 'Жкшмб',
-'mon' => 'Дшмб',
-'tue' => 'Шшмб',
-'wed' => 'Шршмб',
-'thu' => 'Бшмб',
+'sun' => 'Жк',
+'mon' => 'Дш',
+'tue' => 'Ше',
+'wed' => 'Ша',
+'thu' => 'Бш',
 'fri' => 'Жм',
-'sat' => 'Ишмб',
+'sat' => 'Иш',
 'january' => 'Январь (Үчтүн айы)',
 'february' => 'Февраль (Бирдин айы)',
 'march' => 'Март (Жалган куран)',
@@ -111,7 +151,7 @@ $messages = array(
 'category-subcat-count' => '{{PLURAL:$2|Бул категория төмөнкү көмөк категорияны камтыйт.|Бул категорияда жалпы $2, {{PLURAL:$1|көмөк категория|$1 көмөк категория}} бар.}}',
 'category-subcat-count-limited' => 'Бул категорияда {{PLURAL:$1|$1|$1|$1}} ички категория бар.',
 'category-article-count' => '{{PLURAL:$2|Бул категория төмөнкү баракты камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|барак|$1 барак}} бар.}}',
-'category-article-count-limited' => 'Бул категорияда $1 барак бар.',
+'category-article-count-limited' => 'Бул категорияда {{PLURAL:$1|$1 барак}} бар.',
 'category-file-count' => '{{PLURAL:$2|Бул категория төмөнкү файлды камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|файл|$1 файл}} бар.}}',
 'category-file-count-limited' => 'Бул категорияда {{PLURAL:$1|$1|$1|$1}} файл бар.',
 'listingcontinuesabbrev' => 'уланд.',
@@ -122,133 +162,168 @@ $messages = array(
 'about' => 'Тууралуу',
 'article' => 'Макала',
 'newwindow' => '(жаңы терезеде ачылат)',
-'cancel' => 'Жокко чыгар',
-'moredotdotdot' => 'УландÑ\8bÑ\81Ñ\8b...',
-'mypage' => 'Ð\91аÑ\80агÑ\8bм',
-'mytalk' => 'ТалкÑ\83Ñ\83лаÑ\80Ñ\8bм',
-'anontalk' => 'Бул IP дарек үчүн талкуу',
-'navigation' => 'Ð\91агÑ\8bÑ\82 Ð°Ð»Ñ\83Ñ\83',
+'cancel' => 'Жокко чыгаруу',
+'moredotdotdot' => 'Ð\9aөбүÑ\80өөк...',
+'mypage' => 'Ð\91аÑ\80ак',
+'mytalk' => 'ТалкÑ\83Ñ\83лоо',
+'anontalk' => 'Бул IP-дарек үчүн талкуулоо',
+'navigation' => 'Ð\9dавигаÑ\86иÑ\8f',
 'and' => '&#32;жана',
 
 # Cologne Blue skin
-'qbfind' => 'Ð\98зде',
-'qbbrowse' => 'СеÑ\80еп Ñ\81ал',
+'qbfind' => 'ТабÑ\83Ñ\83',
+'qbbrowse' => 'Ð\9aаÑ\80ап Ñ\87Ñ\8bгÑ\83Ñ\83',
 'qbedit' => 'Оңдоо',
 'qbpageoptions' => 'Бул барак',
 'qbmyoptions' => 'Барактарым',
-'qbspecialpages' => 'Ð\90Ñ\82айÑ\8bн Ð±Ð°Ñ\80акÑ\82аÑ\80',
+'qbspecialpages' => 'Ð\9aÑ\8bзмаÑ\82 Ð±Ð°Ñ\80акÑ\82аÑ\80Ñ\8b',
 'faq' => 'КБС',
 'faqpage' => 'Project:КБС',
 
 # Vector skin
-'vector-action-addsection' => 'Тема ÐºÐ¾Ñ\88Ñ\83мÑ\87ала',
-'vector-action-delete' => 'Өчүр',
-'vector-action-move' => 'Аталышын өзгөрт',
-'vector-action-protect' => 'Корго',
+'vector-action-addsection' => 'Тема ÐºÐ¾Ñ\88Ñ\83мÑ\87алоо',
+'vector-action-delete' => 'Өчүрүү',
+'vector-action-move' => 'Атын өзгөртүү',
+'vector-action-protect' => 'Коргоо',
 'vector-action-undelete' => 'Калыбына келтирүү',
 'vector-action-unprotect' => 'Коргоону өзгөртүү',
+'vector-simplesearch-preference' => 'Жөнөкөйлөнгөн издөө сабын күйгүзүү («Вектор» темасы гана)',
 'vector-view-create' => 'Башта',
-'vector-view-edit' => 'Оңдо',
-'vector-view-history' => 'ТаÑ\80Ñ\8bÑ\85Ñ\8bн ÐºÐ°Ñ\80а',
-'vector-view-view' => 'Оку',
-'vector-view-viewsource' => 'Ð\9aайнаÑ\80Ñ\8bн ÐºÐ°Ñ\80а',
+'vector-view-edit' => 'Оңдоо',
+'vector-view-history' => 'ТаÑ\80Ñ\8bÑ\85Ñ\8bн ÐºÐ°Ñ\80оо',
+'vector-view-view' => 'Окуу',
+'vector-view-viewsource' => 'Ð\9aайнаÑ\80Ñ\8bн ÐºÐ°Ñ\80оо',
 'actions' => 'Аракеттер',
-'namespaces' => 'Аталыш топтому',
+'namespaces' => 'Аталыштар мейкиндиги',
 'variants' => 'Варианттар',
 
+'navigation-heading' => 'Навигация менюсу',
 'errorpagetitle' => 'Ката',
-'returnto' => '$1 барагына кайт.',
+'returnto' => '$1 барагына кайтуу.',
 'tagline' => '{{SITENAME}} дан',
 'help' => 'Жардам',
-'search' => 'Изде',
-'searchbutton' => 'Изде',
-'go' => 'Таап бер',
+'search' => 'Издөө',
+'searchbutton' => 'Издөө',
+'go' => 'Өтүү',
 'searcharticle' => 'Алга',
 'history' => 'Барактын тарыхы',
 'history_short' => 'Тарыхы',
+'updatedmarker' => 'менин акыркы келүүмдөн кийин жаңыртылган',
 'printableversion' => 'Басма үлгүсү',
 'permalink' => 'Туруктуу шилтеме',
 'print' => 'Басып чыгаруу',
 'view' => 'Кароо',
 'edit' => 'Оңдоо',
 'create' => 'Башта',
-'editthispage' => 'Бул баракты оңдо',
+'editthispage' => 'Бул баракты оңдоо',
 'create-this-page' => 'Бул баракты түзүү',
 'delete' => 'Өчүрүү',
-'deletethispage' => 'Бул баракты өчүрүп кой',
+'deletethispage' => 'Бул баракты өчүрүү',
+'undelete_short' => '$1 {{PLURAL:$1|оңдоону}} калыбына келтирүү',
+'viewdeleted_short' => '{{PLURAL:$1|өчүрүлгөн оңдоону}} көрүү',
 'protect' => 'Коргоо',
-'protect_change' => 'өзгөрт',
+'protect_change' => 'өзгөртүү',
 'protectthispage' => 'Бул баракты коргоо',
 'unprotect' => 'Коргоону өзгөртүү',
+'unprotectthispage' => 'Бул барактын коргоосун өзгөртүү',
 'newpage' => 'Жаңы барак',
 'talkpage' => 'Бул баракты талкууга алуу',
-'talkpagelinktext' => 'Талкуу',
-'specialpage' => 'Ð\90Ñ\82айÑ\8bн Ð±Ð°Ñ\80ак',
+'talkpagelinktext' => 'талкуулоо',
+'specialpage' => 'Ð\9aÑ\8bзмаÑ\82 Ð±Ð°Ñ\80агÑ\8b',
 'personaltools' => 'Жеке аспаптар',
 'postcomment' => 'Жаңы бөлүм',
 'articlepage' => 'Макаланы кароо',
-'talk' => 'Талкуу',
+'talk' => 'Талкуулоо',
 'views' => 'Көрсөтүүлөр',
-'toolbox' => 'Аспап кутусу',
+'toolbox' => 'Аспаптар',
 'userpage' => 'Катышуучунун барагын кароо',
 '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' => 'Айдама барак',
 'lastmodifiedat' => 'Бул барак соңку жолу $1, $2 өзгөртүлгөн.',
 'viewcount' => 'Бул барак {{PLURAL:$1|$1|$1}} жолу ачылды.',
 'protectedpage' => 'Корголгон барак',
-'jumpto' => 'Атта:',
-'jumptonavigation' => 'багÑ\8bÑ\82Ñ\82оо',
+'jumpto' => 'Өтүү:',
+'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:тууралуу',
+'aboutsite' => '{{SITENAME}} жөнүндө',
+'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ңдоо',
+'disclaimerpage' => 'Project:Жоопкерчиликтен баш тартуу',
+'edithelp' => 'Өзгөртүү боюнча жардам',
+'edithelppage' => 'Help:РедакÑ\82оÑ\80лоо',
 'helppage' => 'Help:Мазмуну',
 'mainpage' => 'Башбарак',
 'mainpage-description' => 'Башбарак',
+'policy-url' => 'Project:Эрежелер',
 'portal' => 'Жамаат порталы',
 'portal-url' => 'Project:Жамаат порталы',
-'privacy' => 'Маалыматты купуя сактоо саясаты',
-'privacypage' => 'Project:Маалыматты купуя сактоо саясаты',
+'privacy' => 'Жашырындуулук саясаты',
+'privacypage' => 'Project:Жашырындуулук саясаты',
+
+'badaccess' => 'Кирүү катасы',
+'badaccess-group0' => 'Сиз сураган аракетти аткарала албайсыз.',
+
+'versionrequired' => "MediaWiki'нин $1 версиясы керек",
 
-'retrievedfrom' => '"$1" булагындан алынды',
+'ok' => 'OK',
+'retrievedfrom' => '"$1" булагынан алынды',
 'youhavenewmessages' => 'Сизге $1 ($2) бар.',
 'newmessageslink' => 'жаңы билдирүүлөр',
 'newmessagesdifflink' => 'соңку өзгөрүү',
-'youhavenewmessagesmulti' => 'Сизге $1 жаңы кат бар.',
-'editsection' => 'оңдо',
-'editold' => 'оңдо',
-'viewsourceold' => 'байкоо',
-'editlink' => 'оңдо',
-'viewsourcelink' => 'Байкоо',
-'editsectionhint' => '$1 бөлүмүн оңдо',
+'youhavenewmessagesmanyusers' => 'Көп колдонуучулардан сиз $1 алдыңыз ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|жаңы билдирүү}}',
+'newmessagesdifflinkplural' => 'соңку {{PLURAL:$1|өзгөртүү|өзгөртүүлөр}}',
+'youhavenewmessagesmulti' => 'Сизге $1 жаңы кат бар',
+'editsection' => 'оңдоо',
+'editold' => 'оңдоо',
+'viewsourceold' => 'баштапкы кодун көрүү',
+'editlink' => 'оңдоо',
+'viewsourcelink' => 'Кайнарды кара',
+'editsectionhint' => '$1 бөлүмүн оңдоо',
 'toc' => 'Мазмуну',
-'showtoc' => 'Көрсөт',
-'hidetoc' => 'Жашыр',
+'showtoc' => 'көрсөтүү',
+'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' => 'Колдонуучунун барагы',
-'nstab-special' => 'Атайын барак',
+'nstab-user' => 'Катышуучу',
+'nstab-media' => 'Мультимедиа',
+'nstab-special' => 'Кызмат барагы',
 'nstab-project' => 'Долбоордун барагы',
 'nstab-image' => 'Файл',
 'nstab-mediawiki' => 'Билдирүү',
@@ -256,22 +331,38 @@ $messages = array(
 'nstab-help' => 'Жардам',
 'nstab-category' => 'Категория',
 
+# Main script and global functions
+'nosuchaction' => 'Мындай аракет жок',
+'nosuchspecialpage' => 'Мындай кызмат барагы жок',
+
 # General errors
-'error' => 'Жаңылыш',
+'error' => 'Ката',
+'databaseerror' => 'Маалымат базасынын катасы',
+'dberrortext' => 'Маалымат базасынын суроо синтаксисинде ката табылды.
+Бул программалык камсыздоодо ката бар болгонун билдирет.
+Акыркы маалымат базасынын суроосу:
+<blockquote><code>$1</code></blockquote>
+«<code>$2</code>» функциясынан пайда болду.
+Маалымат базасы «<samp>$3: $4</samp>» катасын кайтарды.',
+'laggedslavemode' => "'''Эскертүү:''' баракта акыркы жаңыртуулар жок болуп калышы мүмкүн.",
+'readonly' => 'Маалымат базасы камаланган',
+'enterlockreason' => 'Бөгөттөө себебин жана анын мөөнөтүн көрсөтүңүз',
 'missing-article' => 'Табылууга тийиш «$1» $2 деп аталган баракта текст маалыматтар базасында табылган жок.
 
 Бул сыяктуу абал өчүрүлгөн барактын өзгөрүүлөрдүн тарыхына эски шилтеме менен өткөндө учурайт.
 
 Эгерде башка себеби бар болсо, анда Сиз программалык жабдууда ката таптыңыз. Кичи пейилдикке, ушул URL көрсөтүп [[Special:ListUsers/sysop|администраторлордун]] бирине кабарлап коюңуз.',
 'missingarticle-rev' => '(версия#: $1)',
+'missingarticle-diff' => '(айырмачылык: $1, $2)',
 'internalerror' => 'Ички ката',
 'internalerror_info' => 'Ички ката: $1',
 'fileappenderrorread' => 'Аягына кошуу үчүн «$1» файлы ачылбады.',
 'fileappenderror' => '"$1" файлы "$2" файлынын аягына кошулбады.',
 'filecopyerror' => '"$1" файлы "$2" файлына көчүрүлбөдү.',
+'filerenameerror' => '«$1» файлын бул «$2» атка өзгөртүүгө мүмкүн эмес.',
 'filedeleteerror' => '"$1" файлын өчүрүүгө болбоду.',
 'directorycreateerror' => '"$1" каталогун түзүүгө болбоду.',
-'filenotfound' => '"$1" файлы табылбады.',
+'filenotfound' => '"$1" файлын табууга мүмкүн эмес.',
 'fileexistserror' => '"$1" файлына жазууга болбоду: Мурдатан бар.',
 'unexpected' => 'Күтүлбөгөн маани: "$1"="$2".',
 'formerror' => 'Ката: Форманы жөнөтүүгө болбоду.',
@@ -280,62 +371,136 @@ $messages = array(
 'badtitle' => 'Ыксыз аталыш',
 'badtitletext' => 'Талап кылынган барак аталышы туура эмес, бош, же тилдер-аралык же уики-аралык аталышы туура эмес шилтемеленген.
 Балким аталышта колдонулбай турган бир же андан көп белги камтылган.',
-'viewsource' => 'Кайнарын кара',
+'wrong_wfQuery_params' => 'wfQuery() функциясы үчүн жарабай турган параметрлер<br />
+Функция: $1<br />
+Суроо: $2',
+'viewsource' => 'Кароо',
+'viewsource-title' => '$1 барагынын баштапкы кодун көрүү',
+'actionthrottled' => 'Аралык боюнча чектөө',
+'viewsourcetext' => 'Сиз бул барактын баштапкы кодун көрүп жана көчүрүп алсаңыз болот:',
+'sqlhidden' => '(SQL суроо жашырылган)',
+'ns-specialprotected' => 'Кызмат барактарын оңдоого мүмкүн эмес.',
+'exception-nologin' => 'Сиз система кирген жоксуз',
+
+# Virus scanner
+'virus-badscanner' => "Ырастоо катасы. Белгисиз вирус сканери: ''$1''",
+'virus-scanfailed' => 'скандоо катасы (код $1)',
+'virus-unknownscanner' => 'белгисиз антивирус:',
 
 # Login and logout pages
-'welcomecreation' => '== Кош келиңиз, $1! ==
-
-Сиз катоодон өттүңүз. {{SITENAME}} түзөө киргизүүнү унутпаңыз.',
-'yourname' => 'Колдонуучунун аты',
-'yourpassword' => 'Сырсөз',
-'yourpasswordagain' => 'Сырсөздү кайра жазыңыз',
-'remembermypassword' => 'Бул браузерде каттоо маалыматтарымды эске тут (эң көп $1 {{PLURAL:$1|күн|күн}})',
+'welcomeuser' => 'Кош келиңиз, $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а',
-'createaccount' => 'Ð\96аңÑ\8b ÐºÐ¾Ð»Ð´Ð¾Ð½Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83 ÐºÐ°Ñ\82Ñ\82а',
-'gotaccount' => 'Катталгансызбы? $1.',
+'nologin' => 'ЭÑ\81еп Ð¶Ð°Ð·Ñ\83Ñ\83Ò£Ñ\83з Ð¶Ð¾ÐºÐ¿Ñ\83? $1.',
+'nologinlink' => 'ЭÑ\81еп Ð¶Ð°Ð·Ñ\83Ñ\83Ñ\81Ñ\83н Ð¶Ð°Ñ\80аÑ\82Ñ\83Ñ\83',
+'createaccount' => 'ЭÑ\81еп Ð¶Ð°Ð·Ñ\83Ñ\83Ñ\81Ñ\83н Ð¶Ð°Ñ\80аÑ\82Ñ\83Ñ\83',
+'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' => 'Жаңы сырсөздү электрондук дарекке жибер',
+'passwordtooshort' => 'Сырсөз {{PLURAL:$1|1 символдон}} кем эмес болуш керек.',
+'password-name-match' => 'Сиздин сырсөзүңүз катышуучу атыңыздан айырмаланыш керек.',
+'password-login-forbidden' => 'Бул катышуучунун атын жана сырсөзүн колдонууга тыюу салынган.',
+'mailmypassword' => 'Жаңы сырсөздү эл. почта аркылуу жөнөтүү',
+'passwordremindertitle' => '{{SITENAME}} үчүн жаңы убактылуу сырсөз',
+'noemailcreate' => 'Эл. почтанын анык дарегин көрсөтүшүңүз керек',
+'mailerror' => 'Почтаны жөнөтүү кезиндеги ката: $1',
+'emailauthenticated' => 'Сиздин почта дарегиңиз аныкталды $2/$3.',
 'emailconfirmlink' => 'Электрондук дарегиңизди ырастаңыз',
-'accountcreated' => 'Катталды',
+'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' => 'Убактылуу сырсөз:',
+
+# Special:PasswordReset
+'passwordreset' => 'Сырсөздү түшүрүү',
+'passwordreset-legend' => 'Сырсөздү түшүрүү',
+'passwordreset-disabled' => 'Бул уикиде сырсөздү түшүрүү мүмкүнчүлүгү өчүрүлгөн.',
+'passwordreset-username' => 'Катышуучу аты:',
+'passwordreset-domain' => 'Домен:',
+'passwordreset-capture' => 'Чыккан катты көрүү?',
+'passwordreset-email' => 'E-mail дарек:',
+'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' => 'Жокко чыгаруу',
 
 # Edit page toolbar
-'bold_sample' => 'Калың тамга',
-'bold_tip' => 'Калың тамга',
-'italic_sample' => 'Ð\96анÑ\82Ñ\8bк Ñ\82амга',
-'italic_tip' => 'Ð\96анÑ\82Ñ\8bк Ñ\82амга',
-'link_sample' => 'Шилтеменин аталышы',
+'bold_sample' => 'Кара текст',
+'bold_tip' => 'Кара текст',
+'italic_sample' => 'Ð\9aÑ\83Ñ\80Ñ\81ив Ñ\82екÑ\81Ñ\82',
+'italic_tip' => 'жанÑ\82Ñ\8bк Ñ\82екÑ\81Ñ\82',
+'link_sample' => 'Шилтеме аты',
 'link_tip' => 'Ички шилтеме',
 'extlink_sample' => 'http://www.example.com шилтеме аталышы',
 'extlink_tip' => 'Сырткы шилтемелерге (http:// префиксин койгонду унутпаңыз)',
-'headline_sample' => 'Аталыштын тексти',
+'headline_sample' => 'Ат тексти',
 'headline_tip' => '2-деңгээлдеги баш аты',
 'nowiki_sample' => 'Форматталбаган текстти бул жерге киргизиңиз',
-'nowiki_tip' => 'Уики-форматтоого көңүл бөлбө',
+'nowiki_tip' => 'Уики-форматтоого көңүл бурбоо',
 'image_tip' => 'Кыстарылган файл',
 'media_tip' => 'Файлга шилтеме',
 'sig_tip' => 'Кол тамгаңыз жана убакыт мөөрү',
@@ -343,18 +508,23 @@ $messages = array(
 
 # Edit pages
 'summary' => 'Кыска түшүндүрүү:',
+'subject' => 'Тема/баш аты:',
 'minoredit' => 'Майда оңдоо',
-'watchthis' => 'Бул баракты көзөмөлдө',
-'savearticle' => 'Ð\91аÑ\80акÑ\82Ñ\8b Ñ\81акÑ\82ап ÐºÐ¾Ð¹',
+'watchthis' => 'Бул баракты көзөмөлдөө',
+'savearticle' => 'Ð\91аÑ\80акÑ\82Ñ\8b Ñ\81акÑ\82оо',
 'preview' => 'Алдын ала көрүү',
-'showpreview' => 'Алдын ала көрсөт',
+'showpreview' => 'Алдын ала көрсөтүү',
 'showlivepreview' => 'Ылдам карап чыгуу',
-'showdiff' => 'Өзгөртүүлөрдү көрсөт',
+'showdiff' => 'Өзгөртүүлөрдү көрсөтүү',
 'anoneditwarning' => "'''Эскертүү:''' Сиз каттоодон өткөн жоксуз.
 IP дарегиңиз бул барактын оңдоо тарыхына жазылат.",
+'missingcommenttext' => 'Төмөн жакка комментарийиңизди киргизиңиз.',
+'blockedtitle' => 'Катышуучу тосмолонгон',
 'blockedtext' => 'Сиздин колдонуучу атыңыз же IP дарегиңиз тосмолонгон',
-'blockednoreason' => 'себеби көрсөтүлгөн эмес',
-'loginreqtitle' => 'Колдонуучунун аты талап кылынат',
+'blockednoreason' => 'себеби көрсөтүлгөн жок',
+'whitelistedittext' => 'Баркаты оңдоо үчүн сизге $1 керек.',
+'nosuchsectiontitle' => 'Бөлүктүү табууга мүмкүн эмес',
+'loginreqtitle' => 'Авторизация талап кылынат',
 'loginreqlink' => 'Кирүү',
 'accmailtitle' => 'Сырсөз жөнөтүлдү.',
 'accmailtext' => ' [[User talk:$1|$1]] үчүн сырсөз $2 ге жөнөтүлдү.',
@@ -367,9 +537,10 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 <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>.',
-'userpage-userdoesnotexist' => '"$1" Мындай колдонуучу катталган эмес. Ушул баракты түзүүнү же оңдогонду каалганыңыз анык болсун',
+Сиз [[Special:Search/{{PAGENAME}}|бул ат жөнүндө эскертүүлөрдү]] башка барактардан таба аласыз, же <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тийиштүү журналдардын жазууларын таба аласыз]</span>. Бул баракты жаратууга укуктарыңыз жок.',
+'userpage-userdoesnotexist' => '"$1" Мындай катышуучу катталган эмес. Ушул баракты түзүүнү же оңдогонду каалганыңыз анык болсун',
+'updated' => '(Жаңыртылды)',
+'note' => "'''Эскертүү:'''",
 'previewnote' => "'''Бул алдын ала көрүнүшү гана болгонун эсиңизге алыңыз.'''
 Өзгөртүүлөрүңүз сактала элек!",
 'continue-editing' => 'Өзгөртүүүлөрдү улантабыз',
@@ -378,12 +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 жашыруун категориялардын}} мүчөсү:',
+'nocreate-loggedin' => 'Жаңы барактарды жаратууга сизде уруксат жок.',
+'permissionserrors' => 'Кирүү укуктарынын каталары',
 'permissionserrorstext-withaction' => 'Сизге $2, төмөнкү {{PLURAL:$1|себеп|себеп}} менен уруксат жок:',
 'recreate-moveddeleted-warn' => "'''Эскертүү: Сиз мурун өчүрүлгөн баракты кайра баштап жатасыз.'''
 
@@ -391,8 +567,16 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 Ыңгайлуулук үчүн төмөндө өчүрүүлөрдүн жана өзгөртүүлөрдүн тизмеси берилген:",
 'moveddeleted-notice' => 'Бул барак өчүрүлгөн.
 Маалымат үчүн төмөндө өчүрүүлөрдүн жана өзгөртүүлөрдүн тизмеси берилген.',
+'log-fulllog' => 'Журналды бүтүн бойдон көрүү',
 'edit-conflict' => 'Өзгөртүүлөрдүн конфликти',
 'edit-already-exists' => 'Жаңы барак түзүү мүмкүн эмес. Мындай барак бар',
+'defaultmessagetext' => 'Жарыяланбасча текст',
+
+# Content models
+'content-model-wikitext' => 'уики-текст',
+'content-model-text' => 'жөнөкөй текст',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Эскертүү:''' Камтылган калыптардын өлчөмү өтө чоң.
@@ -403,8 +587,11 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'post-expand-template-argument-category' => 'Калыптардын аттатылган жүйөлөрүн камтыган барактар',
 'parser-template-loop-warning' => 'Калыптарда айланма бар:[[$1]]',
 
+# Account creation failure
+'cantcreateaccounttitle' => 'Эсеп жазуусун жаратууга мүмкүн эмес',
+
 # History pages
-'viewpagelogs' => 'Бул барак үчүн тизмелерди кара',
+'viewpagelogs' => 'Бул барак үчүн журналды көрсөтүү',
 'nohistory' => 'Бул барактын өзгөртүүлөр тарыхы жок',
 'currentrev' => 'Акыркы версиясы',
 'currentrev-asof' => '$1 -га соңку версиясы',
@@ -420,104 +607,285 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'page_last' => 'акыркы',
 'histlegend' => "Айырмаларды тандоо: Салыштырыла турган версияларлын тушундагы тегеректерди белгилеп туруп \"Enter\"-ди же астындагы баскычты бас.<br />
 Түшүндүрүү: '''({{int:cur}})''' = соңку версиясынан айырма, '''({{int:last}})''' = мурунку версиясынан айырма, '''{{int:minoreditletter}}''' = майда оңдоо.",
-'history-fieldset-title' => 'ТаÑ\80Ñ\8bÑ\85Ñ\8bн ÐºÐ°Ñ\80а',
+'history-fieldset-title' => 'ТаÑ\80Ñ\8bÑ\85Ñ\8bн ÐºÐ°Ñ\80оо',
 '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-delundel' => 'көрсөт/жашыр',
-'rev-showdeleted' => 'көрсөт',
-'revdel-restore' => 'көрүнүшүн өзгөрт',
+'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' => 'Жок',
+'revdelete-log' => 'Себеп:',
+'revdel-restore' => 'көрүнүшүн өзгөртүү',
 'revdel-restore-deleted' => 'өчүрүлгөн версиялар',
 'revdel-restore-visible' => 'көрүнүүчү версиялары',
+'pagehist' => 'Барактын тарыхы',
+'deletedhist' => 'Өчүрүүлөрдүн тарыхы',
+'revdelete-reason-dropdown' => '*Өчүрүүнүн стандарттуу себептери
+** Автордук укуктарды бузуу
+** Орунсуз комментарий же өздүк маалымат
+** Орунсуз катышуучу аты
+** Потенциалдуу ушактаган маалымат',
+'revdelete-otherreason' => 'Башка/кошумча себеп:',
+'revdelete-reasonotherlist' => 'Башка себеп',
+'revdelete-edit-reasonlist' => 'Өчүрүү себептерин оңдоо',
+'revdelete-offender' => 'Барак версиясынын автору:',
+
+# History merging
+'mergehistory' => 'Барактардын тарыхын бириктирүү',
+'mergehistory-from' => 'Баштапкы барак:',
+'mergehistory-into' => 'Максаттык барак:',
+'mergehistory-submit' => 'Версияларды бириктирүү',
+'mergehistory-invalid-source' => 'Баштапкы барагынын башжазуусуу туура бар болуш керек.',
+'mergehistory-invalid-destination' => 'Максаттык барагынын башжазуусуу туура бар болуш керек.',
+'mergehistory-same-destination' => 'Баштапкы жана максаттык барактары окшош эмес болуш керек',
+'mergehistory-reason' => 'Себеп',
 
 # Merge log
-'revertmerge' => 'Бөл',
+'mergelog' => 'Бириктирүүлөрдүн журналы',
+'revertmerge' => 'Бөлүү',
 
 # Diffs
 'history-title' => '"$1" өзгөрүүлөр тарыхы',
+'difference-multipage' => '(Барактардын арасындагы айырма)',
 'lineno' => '$1 -сап:',
-'compareselectedversions' => 'Тандалган версияларды салыштыр',
-'editundo' => 'жокко чыгар',
-'diff-multi' => '({{PLURAL:$2|колдонуучу|$2 колдонуучу}} тарабынан жасалган {{PLURAL:$1|аралык версия|$1 аралык версия}} көрсөтүлгөн жок)',
+'compareselectedversions' => 'Тандалган версияларды салыштыруу',
+'showhideselectedversions' => 'Тандалган версияларды көрсөтүү/жашыруу',
+'editundo' => 'жокко чыгаруу',
+'diff-multi' => '({{PLURAL:$2|катышуучу}} тарабынан жасалган {{PLURAL:$1|аралык версия}} көрсөтүлгөн жок)',
 
 # Search results
 'searchresults' => 'Издөө жыйынтыктары',
 'searchresults-title' => '"$1" үчүн издөө жыйынтыктары',
-'prevn' => 'мÑ\83Ñ\80Ñ\83нкÑ\83 {{PLURAL:$1|$1}}',
+'prevn' => 'абалкÑ\8b {{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) кара',
+'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:Мазмун',
 'searchprofile-articles' => 'Негизги барактар',
-'searchprofile-project' => 'Ð\96аÑ\80дам Ð¶Ð°Ð½Ð° Ð\94олбоор барактары',
+'searchprofile-project' => 'Ð\96аÑ\80дам Ð¶Ð°Ð½Ð° Ð´олбоор барактары',
 'searchprofile-images' => 'Мултимедиа',
 'searchprofile-everything' => 'Баары',
 'searchprofile-advanced' => 'Кеңейтилген',
-'searchprofile-articles-tooltip' => '$1 -де изде',
-'searchprofile-project-tooltip' => '$1 -де изде',
-'searchprofile-images-tooltip' => 'Файлдарды изде',
-'searchprofile-everything-tooltip' => 'Бардык барактарда (талкуу барактарды кошо) изде',
-'searchprofile-advanced-tooltip' => 'Белгиленген аталыш топтомдорунда изде',
+'searchprofile-articles-tooltip' => '$1 -де издөө',
+'searchprofile-project-tooltip' => '$1 -де издөө',
+'searchprofile-images-tooltip' => 'Файлдарды издөө',
+'searchprofile-everything-tooltip' => 'Баардык барактардан (талкуу барактарды кошо) издөө',
+'searchprofile-advanced-tooltip' => 'Белгиленген аталыш мейкиндиктеринде издөө',
 'search-result-size' => '$1 ({{PLURAL:$2|1 сөз|$2 сөз}})',
 'search-result-category-size' => '{{PLURAL:$1|1 мүчө|$1 мүчө}} ({{PLURAL:$2|1 көмөк категория|$2 көмөк категория}}, {{PLURAL:$3|1 файл|$3 файл}})',
+'search-result-score' => 'Релеванттуулук: $1%',
 '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' => 'Кеңейтилген издөө',
+'powersearch-legend' => 'Кеңейтилген издөө',
+'powersearch-ns' => 'Ат мейкиндиктеринен издөө:',
+'powersearch-redir' => 'Багыттоолорду чыгаруу',
+'powersearch-field' => 'Издөө',
+'powersearch-togglelabel' => 'Белги салуу:',
+'powersearch-toggleall' => 'Баары',
+'powersearch-togglenone' => 'Эчтеке',
+'search-external' => 'Тышкы издөө',
+
+# Quickbar
+'qbsettings' => 'Навигация панели',
+'qbsettings-none' => 'Көрсөтпөө',
+'qbsettings-fixedleft' => 'Жылбаган сол',
+'qbsettings-fixedright' => 'Жылбаган оң',
+'qbsettings-floatingleft' => 'Оома сол',
+'qbsettings-floatingright' => 'Оома оң',
 
 # Preferences page
-'preferences' => 'Ыңгайлаштыруу',
-'mypreferences' => 'Ырастоолорум',
+'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' => 'Байкоо тизме',
-'saveprefs' => 'Сактап кой',
-'prefs-editing' => 'Оңдоо',
+'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' => 'Сактоо',
+'resetprefs' => 'Сакталбаган өзгөртүүлөрдү тазалоо',
+'restoreprefs' => 'Жарыяланбасча ырастоолорду калыбына келтирүү',
+'prefs-editing' => 'Редакторлоо',
+'prefs-edit-boxsize' => 'Редакторлоо терезесинин өлчөмү.',
+'rows' => 'Сап:',
+'columns' => 'Тилке:',
 'searchresultshead' => 'Издөө',
-'localtime' => 'Жергиликтүү убакыт',
+'stub-threshold-disabled' => 'Өчүрүлгөн',
+'recentchangesdays-max' => 'Эң көп $1 {{PLURAL:$1|күн}}',
+'timezonelegend' => 'Сааттык алкак:',
+'localtime' => 'Жердик убакыт:',
+'timezoneuseoffset' => 'Башка (жылышты көрсөтүңүз)',
+'timezoneoffset' => 'Жылыш¹:',
+'servertime' => 'Сервер убакыты:',
+'timezoneregion-africa' => 'Африка',
+'timezoneregion-america' => 'Америка',
+'timezoneregion-antarctica' => 'Антарктика',
+'timezoneregion-arctic' => 'Арктика',
+'timezoneregion-asia' => 'Азия',
+'timezoneregion-atlantic' => 'Атлантика океаны',
+'timezoneregion-australia' => 'Австралия',
+'timezoneregion-europe' => 'Европа',
+'timezoneregion-indian' => 'Индий океаны',
+'timezoneregion-pacific' => 'Тынч океаны',
+'prefs-searchoptions' => 'Издөө',
+'prefs-namespaces' => 'Ат мейкиндиктери',
+'default' => 'жарыяланбасча',
 'prefs-files' => 'Файлдар',
+'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' => 'Такма атыңыз:',
+'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-advancedediting' => 'Кеңейтилген',
-'prefs-advancedrc' => 'Кеңейтилген',
-'prefs-advancedrendering' => 'Кеңейтилген',
-'prefs-advancedsearchoptions' => 'Кеңейтилген',
-'prefs-advancedwatchlist' => 'Кеңейтилген',
-'prefs-displayrc' => 'Көрсөтүүнү тууралоо',
+'prefs-help-email-required' => 'Эл. почтанын дарегин көрсөтүү керек.',
+'prefs-info' => 'Негизги маалыматтар',
+'prefs-i18n' => 'Интернационализация',
+'prefs-signature' => 'Кол тамга',
+'prefs-dateformat' => 'Дата форматы',
+'prefs-timeoffset' => 'Алкак убакытынын жылышы',
+'prefs-advancedediting' => 'Кеңейтилген ырастоолор',
+'prefs-advancedrc' => 'Кеңейтилген ырастоолор',
+'prefs-advancedrendering' => 'Кеңейтилген ырастоолор',
+'prefs-advancedsearchoptions' => 'Кеңейтилген ырастоолор',
+'prefs-advancedwatchlist' => 'Кеңейтилген ырастоолор',
+'prefs-displayrc' => 'Көрсөтүүнүн ырастоолору',
+'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' => 'Бүт катышуучулардын укуктарын оңдоо',
 
-'group-bureaucrat-member' => 'Бюрократ',
+# Special:Log/newusers
+'newuserlogpage' => 'Катышуучулардын каттоо журналы',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'бул баракты оңдо',
+'action-read' => 'бул баракты окуу',
+'action-edit' => 'бул баракты оңдоо',
+'action-createpage' => 'барактарды жаратуу',
+'action-createtalk' => 'талкуулоо барагын жаратуу',
+'action-createaccount' => 'бул эсеп жазуусун жаратуу',
+'action-upload' => 'бул файлды жүктөө',
+'action-delete' => 'бул баракты өчүрүү',
+'action-suppressionlog' => 'бул жеке журналды көрүү',
+'action-userrights' => 'бүт катышуучулардын укуктарын оңдоо',
+'action-sendemail' => 'электрондук каттарды жөнөтүү',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|өзгөрүү|өзгөрүү}}',
@@ -525,331 +893,573 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'recentchanges-legend' => 'Соңку өзгөртүүлөрдүн ырастоолору',
 'recentchanges-summary' => 'Уикидеги соңку өзгөрүүлөрдү ушул барактан көзөмөлдө.',
 'recentchanges-feed-description' => 'Ушул агымдагы уикидеги соңку өзгөрүүлөрдү көзөмөлдө.',
-'recentchanges-label-newpage' => 'Ð\91Ñ\83л Ð¾Ò£Ð´Ð¾Ð¾ Ð¶Ð°Ò£Ñ\8b Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð°Ñ\87ты',
+'recentchanges-label-newpage' => 'Ð\91Ñ\83л Ð¾Ò£Ð´Ð¾Ð¾ Ð¶Ð°Ò£Ñ\8b Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð¶Ð°Ñ\80аÑ\82ты',
 'recentchanges-label-minor' => 'Бул майда оңдоо',
 'recentchanges-label-bot' => 'Бул оңдоо бот тарабынан жасалды',
 'recentchanges-label-unpatrolled' => 'Бул оңдоо көзөмөлдөн өтө элек.',
 'rcnote' => "Ылдый жакта $5, $4 карата соңку {{PLURAL:$2|күндө|'''$2''' күндө}} жасалган {{PLURAL:$1| '''1''' өзгөрүү| '''$1''' өзгөрүү}}.",
 'rcnotefrom' => "'''$2''' -тан өзгөрүүлөр ылдый жакта ('''$1''' чейин көрсөтүлдү).",
-'rclistfrom' => '$1 күнүнөн баштап жаңы өзгөртүүлөрдү көрсөт',
+'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',
+'rclinks' => 'Соңку $2 күндө жасалган акыркы $1 өзгөртүүлөрдү көрсөтүү<br />$3',
 'diff' => 'айырма',
 'hist' => 'тарыхы',
-'hide' => 'Жашыр',
-'show' => 'Көрсөт',
+'hide' => 'Жашыруу',
+'show' => 'Көрсөтүү',
 'minoreditletter' => 'м',
 'newpageletter' => 'Ж',
 'boteditletter' => 'б',
-'rc-enhanced-expand' => 'Бөлүктөрүн көрсөт (JavaScript талап кылынат)',
-'rc-enhanced-hide' => 'Бөлүктөрүн жашыр',
+'rc_categories_any' => 'Каалаган',
+'rc-enhanced-expand' => 'Кошумча маалыматтарды көрсөтүү (JavaScript талап кылынат)',
+'rc-enhanced-hide' => 'Кошумча маалыматтарды жашыруу',
 
 # 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' => 'Белгиленген барактан шилтемеленген барактардын ордуна өзгөртүулөрдү көрсөт',
+'recentchangeslinked-to' => 'Белгиленген барактан шилтемеленген барактардын ордуна өзгөртүулөрдү көрсөтүү',
 
 # Upload
-'upload' => 'Файл жүктөө',
-'uploadbtn' => 'Файл жүктөө',
+'upload' => 'Файлды жүктөө',
+'uploadbtn' => 'Файлды жүктөө',
+'uploaderror' => 'Жүктөө катасы',
+'uploadlog' => 'жүктөө журналы',
 'uploadlogpage' => 'Жүктөөлөрдүн тизмеси',
+'filename' => 'Файл аты',
 'filedesc' => 'Кыска түшүндүрмө',
-'fileuploadsummary' => 'Кыска түшүндүрмө:',
+'fileuploadsummary' => 'Кыскача баяндама:',
+'filereuploadsummary' => 'Файлдагы өзгөрүүлөр:',
+'filesource' => 'Булак:',
 'uploadedfiles' => 'Жүктөлгөн файлдар',
-'savefile' => 'ФайлдÑ\8b Ñ\81акÑ\82ап ÐºÐ¾Ð¹',
+'savefile' => 'ФайлдÑ\8b Ñ\81акÑ\82оо',
 'uploadedimage' => '"[[$1]]" жүктөлдү',
+'upload-source' => 'Баштапкы файл',
+'sourcefilename' => 'Булактын файл аты:',
+'sourceurl' => 'Булактын URL-дареги:',
+'upload-description' => 'Файл баяндамасы',
 'upload-success-subj' => 'Ийгиликтүү жүктөлдү',
+'upload-failure-subj' => 'Жүктөө көйгөйү',
+
+'upload-proto-error' => 'Туура эмес протокол',
+'upload-file-error' => 'Ички ката',
+'upload-unknown-size' => 'Белгисиз өлчөм',
+
+# File backend
+'backend-fail-closetemp' => 'Убактылуу файлды жабуу оңунан чыкпай жатат.',
+
+# HTTP errors
+'http-invalid-url' => 'Туура эмес URL: $1',
 
 'license' => 'Лицензиялоо:',
-'license-header' => 'Лицензиялоо:',
+'license-header' => 'Лицензиялоо',
 
 # Special:ListFiles
+'imgfile' => 'файл',
 'listfiles' => 'Файлдар тизмеси',
+'listfiles_thumb' => 'Миниатюра',
+'listfiles_date' => 'Дата',
+'listfiles_name' => 'Ат',
+'listfiles_user' => 'Катышуучу',
+'listfiles_size' => 'Өлчөм',
+'listfiles_description' => 'Баяндама',
+'listfiles_count' => 'Версиялар',
 
 # File description page
 'file-anchor-link' => 'Файл',
 'filehist' => 'Файлдын тарыхы',
 'filehist-help' => 'Файлдын ошол учурдагы көрүнүшүн кароо үчүн күнү/сааты бөлүмүнө басыңыз',
-'filehist-revert' => 'кайтарып ал',
-'filehist-current' => 'учурдагы',
-'filehist-datetime' => 'Күн/Саат',
-'filehist-thumb' => 'Кичирейтилген сүрөт',
+'filehist-deleteall' => 'баарын өчүрүү',
+'filehist-deleteone' => 'өчүрүү',
+'filehist-revert' => 'кайтаруу',
+'filehist-current' => 'кезектеги',
+'filehist-datetime' => 'Дата/Убакыт',
+'filehist-thumb' => 'Миниатюра',
 'filehist-thumbtext' => '$1 -дагы версиясы үчүн кичирейтилген сүрөтү',
+'filehist-nothumb' => 'Миниатюра жок',
 'filehist-user' => 'Катышуучу',
-'filehist-dimensions' => 'Өлчөмдөрү',
+'filehist-dimensions' => 'Өлчөмдөр',
+'filehist-filesize' => 'Файл өлчөмү',
 'filehist-comment' => 'Эскертүү',
-'imagelinks' => 'Файл пайдалануу',
+'filehist-missing' => 'Файл жок болот',
+'imagelinks' => 'Файлды колдонуу',
 'linkstoimage' => 'Бул файлга болгон {{PLURAL:$1|шилтеме|$1 шилтеме}} :',
 'nolinkstoimage' => 'Бул файлга шилтеме берген барак жок.',
 'sharedupload-desc-here' => 'Бул файл $1 -дан  жана башка долбоорлордо пайдаланылышы мүмкүн.
 Төмөндө анын [$2 файлды сыпаттоо барагы]нан сыпаттамасы көрсөтүлгөн.',
 
+# File reversion
+'filerevert-comment' => 'Себеп:',
+
+# File deletion
+'filedelete' => '$1 — өчүрүү',
+'filedelete-legend' => 'Файлды өчүрүү',
+'filedelete-comment' => 'Себеп:',
+'filedelete-submit' => 'Өчүрүү',
+'filedelete-reason-otherlist' => 'Башка себеп',
+'filedelete-maintenance-title' => 'Файлды өчүрүү оңунан чыкпай жатат',
+
+# MIME search
+'mimesearch' => 'MIME боюнча издөө',
+'mimetype' => 'MIME-түр:',
+'download' => 'жүктөп алуу',
+
 # Unused templates
-'unusedtemplates' => 'Колдонулбаган нускалар',
-'unusedtemplateswlh' => 'Ð\91ашка шилтемелер',
+'unusedtemplates' => 'Колдонулбаган шаблондор',
+'unusedtemplateswlh' => 'башка шилтемелер',
 
 # Random page
 'randompage' => 'Тушкелди макала',
 
 # 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' => 'Колдонулбаган файлдар',
-'prefixindex' => 'Префикс менен бардык барактар',
+'popularpages' => 'Популярдуу барактар',
+'wantedcategories' => 'Керек болгон категориялар',
+'wantedpages' => 'Керек болгон барактар',
+'wantedfiles' => 'Керек болгон файлдар',
+'wantedtemplates' => 'Керек болгон шаблондор',
+'prefixindex' => 'Бардык барактар префикстери менен',
 'shortpages' => 'Кыска макалалар',
-'listusers' => 'Ð\9aолдонуучулар тизмеси',
+'listusers' => 'Ð\9aаÑ\82Ñ\8bÑ\88уучулар тизмеси',
 'usercreated' => "$1 күнү $2'да {{GENDER:$3|катталды}}.",
 'newpages' => 'Жаңы барактар',
+'newpages-username' => 'Катышуучунун аты:',
 'ancientpages' => 'Эң эски барактар',
 'move' => 'Аталышын өзгөртүү',
+'movethispage' => 'Бул барактын атын өзгөртүү',
 'pager-newer-n' => '{{PLURAL:$1|жаңыраак 1|жаңыраак $1}}',
 'pager-older-n' => '{{PLURAL:$1|эскирээк 1|эскирээк $1}}',
 
 # Book sources
 'booksources' => 'Китеп тууралуу маалыматтар',
-'booksources-search-legend' => 'Китеп тууралуу маалыматтарды изде',
-'booksources-go' => 'Ð\90лга',
+'booksources-search-legend' => 'Китеп тууралуу маалыматтарды издөө',
+'booksources-go' => 'ТабÑ\83Ñ\83',
 
 # Special:Log
-'specialloguserlabel' => 'Ð\9aолдонуучу:',
+'specialloguserlabel' => 'Ð\90Ñ\82каÑ\80уучу:',
 'speciallogtitlelabel' => 'Аталышы:',
-'log' => 'Тизмелер',
+'log' => 'Ð\96Ñ\83Ñ\80налдар',
 
 # Special:AllPages
 'allpages' => 'Бардык барактар',
 'alphaindexline' => '$1 -дан $2 чейин',
 'nextpage' => 'Кийинки барак ($1)',
-'allpagesfrom' => '-дан башталган барактарды көрсөт:',
-'allarticles' => 'Бардык макалалар',
-'allpagesprev' => 'Мурунку',
+'prevpage' => 'Мурунку барак ($1)',
+'allpagesfrom' => '-дан башталган барактарды көрсөтүү:',
+'allarticles' => 'Бүт барактар',
+'allinnamespace' => '«$1» ат мейкиндигинин бүт барактары',
+'allnotinnamespace' => 'Бүт барактар («$1» ат мейкиндигинен башка)',
+'allpagesprev' => 'Абалкы',
 'allpagesnext' => 'Кийинки',
-'allpagessubmit' => 'Алга',
-'allpagesprefix' => '- префикси менен барактарды көрсөт',
+'allpagessubmit' => 'Аткаруу',
+'allpagesprefix' => '- префикси менен барактарды көрсөтүү',
 
 # Special:Categories
 'categories' => 'Категориялар',
 
 # Special:LinkSearch
+'linksearch-ok' => 'Издөө',
 'linksearch-line' => '$1-га $2-дан шилтеме берилди',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Жаңы колдонуучулардын тизмеси',
+# Special:ListUsers
+'listusers-submit' => 'Көрсөтүү',
+'listusers-noresult' => 'Катышуучу табылган жок.',
+'listusers-blocked' => '(блокировкаланды)',
+
+# Special:ActiveUsers
+'activeusers' => 'Активдүү катышуучулардын тизмеси',
+'activeusers-hidebots' => 'Ботторду жашыруу',
+'activeusers-hidesysops' => 'Администраторлорду жашыруу',
+'activeusers-noresult' => 'Катышуучулар табылган жок.',
 
 # Special:ListGroupRights
+'listgrouprights-group' => 'Топ',
+'listgrouprights-rights' => 'Укуктар',
+'listgrouprights-helppage' => 'Help:Топтордун укуктары',
 'listgrouprights-members' => '(мүчөлөрдүн тизмеси)',
 
 # E-mail user
-'emailuser' => 'Бул колдонуучуга кат жибер',
+'emailuser' => 'Бул катышуучуга кат жиберүү',
+'emailusername' => 'Катышуучунун аты:',
+'emailusernamesubmit' => 'Жөнөтүү',
 'emailfrom' => '- дан',
-'emailmessage' => 'Кат',
+'emailto' => 'Кимге:',
+'emailsubject' => 'Тема:',
+'emailmessage' => 'Билдирүү:',
+'emailsend' => 'Жөнөтүү',
 
 # Watchlist
 'watchlist' => 'Көзөмөл тизмем',
-'mywatchlist' => 'Көзөмөл тизмем',
+'mywatchlist' => 'Көзөмөл тизмеси',
 'watchlistfor2' => '$1 үчүн $2',
 'watchnologin' => 'Катталган жок',
-'watch' => 'Көзөмөлдө',
-'unwatch' => 'Ð\9aөзөлдөбө',
+'watch' => 'Көзөмөлдөө',
+'unwatch' => 'Ð\9aөзөмөлдөбөө',
 'watchlist-details' => 'Талкуу барактарын эсепке албаганда көзөмөл тизмеңизде {{PLURAL:$1|$1 барак|$1 барак}} бар.',
-'watchlistcontains' => 'Ð\91айкоо Ñ\82измеңизде $1 {{PLURAL:$1|баÑ\80ак Ð±Ð°Ñ\80|баÑ\80ак Ð±Ð°Ñ\80}}.',
-'wlshowlast' => 'Соңку $1 саат $2 күн $3 көрсөт.',
+'watchlistcontains' => 'Сиздин ÐºÓ©Ð·Ó©Ð¼Ó©Ð» Ñ\82измеңизде $1 {{PLURAL:$1|баÑ\80ак}} Ð±Ð°Ñ\80.',
+'wlshowlast' => 'Соңку $1 саат $2 күн $3 көрсөтүү.',
 'watchlist-options' => 'Көзөмөл тизменин ырастоолору',
 
-'changed' => 'өзгөртүлдү',
 'created' => 'түзүлдү',
+'changed' => 'өзгөртүлдү',
 
 # Delete
-'deletepage' => 'Баракты өчүрүп кой',
-'confirm' => 'Ырастоо',
+'deletepage' => 'Баракты өчүрүү',
+'confirm' => 'Аныктоо',
+'delete-legend' => 'Өчүрүү',
 'actioncomplete' => 'Иш-аракет жыйынтыкталды',
 'actionfailed' => 'Аракет натыйжасыз болду',
-'dellogpage' => 'Өчүрүлгөндөрдүн тизмеси',
-'deletecomment' => 'Себеп',
+'dellogpage' => 'Өчүрүүлөрдүн журналы',
+'deletecomment' => 'Себеп:',
+'deletereasonotherlist' => 'Башка себеп',
 
 # Rollback
-'rollbacklink' => 'кайтар',
+'rollbacklink' => 'кайтаруу',
 
 # Protect
 'protectlogpage' => 'Коргоо тизмеси',
 'protectedarticle' => '"[[$1]]" корголгон',
+'protectcomment' => 'Себеп:',
+'protect-level-sysop' => 'Администраторлор гана',
+'protect-othertime' => 'Башка убакыт:',
+'protect-othertime-op' => 'башка убакыт',
+'restriction-type' => 'Укуктар:',
+'pagesize' => '(байт)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Оңдоо',
+'restriction-move' => 'Атын өзгөртүү',
+'restriction-create' => 'Жаратуу',
+'restriction-upload' => 'Жүктөө',
+
+# Restriction levels
+'restriction-level-all' => 'бүт деңгээлдер',
 
 # Undelete
-'undeletebtn' => 'Калыбына келтир',
-'undeletelink' => 'көрсөт/калыбына келтир',
-'undeleteviewlink' => 'көрсөт',
-'undeletecomment' => 'Түшүндүрмө:',
+'undeletebtn' => 'Калыбына келтирүү',
+'undeletelink' => 'кароо/калыбына келтирүү',
+'undeleteviewlink' => 'кароо',
+'undeletereset' => 'Түшүрүү',
+'undeletecomment' => 'Себеп:',
+'undelete-search-submit' => 'Издөө',
+'undelete-show-file-submit' => 'Ооба',
 
 # Namespace form on various pages
 'namespace' => 'Аталыштар мейкиндиги:',
-'invert' => 'Белгиленгенди кайтар',
+'invert' => 'Белгиленгенди текскерилетүү',
 'blanknamespace' => '(Негизги)',
 
 # Contributions
-'contributions' => 'Колдонуучунун салымдары',
-'contributions-title' => '$1 Ò¯Ñ\87үн ÐºÐ¾Ð»Ð´Ð¾Ð½уучунун салымдары',
-'mycontris' => 'Салымдарым',
+'contributions' => '{{GENDER:$1|Катышуучунун}} салымдары',
+'contributions-title' => '$1 Ò¯Ñ\87үн ÐºÐ°Ñ\82Ñ\8bÑ\88уучунун салымдары',
+'mycontris' => 'Салымдар',
 'contribsub2' => '$1 үчүн ($2)',
 'uctop' => '(соңку)',
 'month' => 'Айынан (же андан мурун):',
 'year' => 'Жылынан (жана андан мурун):',
 
-'sp-contributions-newbies' => 'Жаңы колдонуучулардын гана салымдарын көрсөт',
-'sp-contributions-blocklog' => 'тосмолордун тизмеси',
+'sp-contributions-newbies' => 'Жаңы эсеп жазуулардын гана салымдарын көрсөтүү',
+'sp-contributions-blocklog' => 'тосмолоолордун журналы',
 'sp-contributions-uploads' => 'жүктөөлөр',
-'sp-contributions-logs' => 'тизме',
-'sp-contributions-talk' => 'талкуу',
-'sp-contributions-search' => 'СалÑ\8bмдаÑ\80Ñ\8bн Ð¸Ð·Ð´Ðµ',
-'sp-contributions-username' => 'IP дареги же колдонуучунун аты:',
-'sp-contributions-toponly' => 'Соңку версиялары болгон оңдоолорду гана көрсөт',
-'sp-contributions-submit' => 'Изде',
+'sp-contributions-logs' => 'журналдар',
+'sp-contributions-talk' => 'талкуулоо',
+'sp-contributions-search' => 'СалÑ\8bмдаÑ\80Ñ\8bмдÑ\8b Ð¸Ð·Ð´Ó©Ó©',
+'sp-contributions-username' => 'IP-дарек же катышуучунун аты:',
+'sp-contributions-toponly' => 'Соңку версиялары болгон оңдоолорду гана көрсөтүү',
+'sp-contributions-submit' => 'Издөө',
 
 # What links here
-'whatlinkshere' => 'Ð\96еÑ\82елеме Ñ\88илÑ\82емелеÑ\80',
+'whatlinkshere' => 'ШилÑ\82емелеÑ\80ди Ð±Ñ\83л Ð¶Ð°ÐºÐºÐ°',
 'whatlinkshere-title' => '"$1" -га шилтеме берген барактар',
 'whatlinkshere-page' => 'Барак:',
 'linkshere' => "'''[[:$1]]''' барагына шилтеме берген барактар:",
 'nolinkshere' => "'''[[:$1]]''' барагына шилтеме берген барак жок.",
 'isredirect' => 'кайра багыттоо барагы',
-'istemplate' => 'кошкуч',
+'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',
+'whatlinkshere-hidetrans' => '$1 кошуулары',
 'whatlinkshere-hidelinks' => 'Шилтемелерди $1',
-'whatlinkshere-hideimages' => 'Сүрөт шилтемелерин $1',
-'whatlinkshere-filters' => 'ЧÑ\8bпкалар',
+'whatlinkshere-hideimages' => '$1 файл шилтемелери',
+'whatlinkshere-filters' => 'ФилÑ\8cÑ\82Ñ\80лер',
 
 # Block/unblock
-'ipbreason' => 'Себеп',
+'block' => 'Катышуучуну блокировкалоо',
+'blockip' => 'Колдонуучунуу бөгөттө',
+'blockip-title' => 'Колдонуучунуу бөгөттө',
+'blockip-legend' => 'Колдонуучуну бөгөттө',
+'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' => 'Тосмолонгон колдонуучулар',
-'blocklink' => 'тосмоло',
-'unblocklink' => 'тосмолоону алып сал',
-'change-blocklink' => 'тосмолоону өзгөрт',
+'ipblocklist' => 'Тосмолонгон катышуучулар',
+'blocklist-target' => 'Максат',
+'blocklist-reason' => 'Себеп',
+'ipblocklist-submit' => 'Издөө',
+'anononlyblock' => 'анонимдер гана',
+'emailblock' => 'кат жөнөтүүгө тыюу салынган',
+'ipblocklist-empty' => 'Бөгөт тизмеси бош.',
+'blocklink' => 'бөгөттө',
+'unblocklink' => 'бөгөттөн чыгар',
+'change-blocklink' => 'бөгөттү өзгөрт',
 'contribslink' => 'салымдары',
-'blocklogpage' => 'Тосмоолордун тизмеси',
+'emaillink' => 'кат жиберүү',
+'blocklogpage' => 'Тосмолоолордун журналы',
 'blocklogentry' => '[[$1]] тосмолонду, тосмолоо мөөнөтү: $2 $3',
-'block-log-flags-nocreate' => 'Каттоо мүмкүн эмес',
+'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' => 'Өзгөртүлгөн аталыштардын тизмеси',
-'movereason' => 'Себеп',
-'revertmove' => 'кайтарып ал',
-'delete_and_move_confirm' => 'Ооба, бул баракты өчүр',
+'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' => 'Барактарды чыгар',
+'export' => 'Барактарды экспорттоо',
+'exportall' => 'Бүт барактарды экспорттоо',
+'export-submit' => 'Экспорттоо',
+'export-addcattext' => 'Категориядан барактарды кошуу:',
+'export-addcat' => 'Кошуу',
+'export-addnstext' => 'Ат мейкиндигинен барактарды кошуу:',
+'export-addns' => 'Кошуу',
+'export-download' => 'Файлга ат коюп сактоо',
+'export-templates' => 'Калыптарды кошуу',
 
 # Namespace 8 related
-'allmessages' => 'Система билдирүүлөрү',
-'allmessagesname' => 'Аталышы',
+'allmessages' => 'Системалык билдирүүлөр',
+'allmessagesname' => 'Ат',
 'allmessagesdefault' => 'Белгиленген билдирүүнүн тексти',
 'allmessagescurrent' => 'Учурдагы текст',
-'allmessages-filter-all' => 'Бардыгы',
+'allmessages-filter-legend' => 'Фильтр',
+'allmessages-filter-unmodified' => 'Өзгөртүлбөгөндөр',
+'allmessages-filter-all' => 'Баары',
+'allmessages-filter-modified' => 'Өзгөртүлгөндөр',
+'allmessages-prefix' => 'Префикс боюнча филтрдөө:',
 'allmessages-language' => 'Тил:',
-'allmessages-filter-submit' => 'Алга',
+'allmessages-filter-submit' => 'Өтүү',
 
 # Thumbnails
-'thumbnail-more' => 'Чоңойт',
+'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-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' => 'Жаңы бөлүм башта',
+'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' => 'Жаңы бөлүмдү жаратуу',
 'tooltip-ca-viewsource' => 'Бул барак корголгон.
 Сиз анын кайнарын көрө аласыз',
 'tooltip-ca-history' => 'Бул барактын мурунку оңдоолору',
-'tooltip-ca-protect' => 'Бул баракты корго',
-'tooltip-ca-delete' => 'Бул баракты өчүр',
-'tooltip-ca-move' => 'Барак аталышын өзгөрт',
+'tooltip-ca-protect' => 'Бул баракты коргоо',
+'tooltip-ca-delete' => 'Бул баракты өчүрүү',
+'tooltip-ca-move' => 'Барактын атын өзгөртүү',
 'tooltip-ca-watch' => 'Бул баракты көзөмөл тизмеңизге кошуңуз',
 'tooltip-ca-unwatch' => 'Бул баракты көзөмөл тизмеңизден алып салыңыз',
-'tooltip-search' => '{{SITENAME}} изде',
-'tooltip-search-go' => 'Так ушундай аталыштагы баракты көрсөт',
-'tooltip-search-fulltext' => 'Ушул текст менен барактарды изде',
-'tooltip-p-logo' => 'Башбаракка кайрыл',
-'tooltip-n-mainpage' => 'Башбаракка кайрыл',
-'tooltip-n-mainpage-description' => 'Башбаракка кайрыл',
-'tooltip-n-portal' => 'Ð\94олбооÑ\80 Ñ\82Ñ\83Ñ\83Ñ\80алÑ\83Ñ\83, Ñ\8dмне Ð¶Ð°Ñ\81ай Ð°Ð»Ð°Ñ\81Ñ\8bз, ÐºÐ°Ð¹Ñ\81Ñ\8b Ð¶ÐµÑ\80де Ñ\82абÑ\8bлаÑ\82',
-'tooltip-n-currentevents' => 'УÑ\87Ñ\83Ñ\80дагÑ\8b Ð¾ÐºÑ\83Ñ\8fлаÑ\80 Ñ\82Ñ\83Ñ\83Ñ\80алÑ\83Ñ\83 ÐºÐ¾Ñ\88Ñ\83мÑ\87а Ð¼Ð°Ð°Ð»Ñ\8bмаÑ\82 Ñ\82ап',
+'tooltip-search' => '{{SITENAME}} издөө',
+'tooltip-search-go' => 'Так ушундай аталыштагы баракты көрсөтүү',
+'tooltip-search-fulltext' => 'Ушул текст менен барактарды издөө',
+'tooltip-p-logo' => 'Башбаракка өтүү',
+'tooltip-n-mainpage' => 'Башбаракка өтүү',
+'tooltip-n-mainpage-description' => 'Башбаракка өтүү',
+'tooltip-n-portal' => 'Ð\94олбооÑ\80 Ñ\82Ñ\83Ñ\83Ñ\80алÑ\83Ñ\83, Ñ\8dмне Ð¶Ð°Ñ\81ай Ð°Ð»Ð°Ñ\81Ñ\8bз, ÐºÐ°Ð¹Ñ\81Ñ\8b Ð¶ÐµÑ\80де Ñ\8dмне Ð±Ð°Ñ\80 Ð¶Ó©Ð½Ò¯Ð½Ð´Ó©',
+'tooltip-n-currentevents' => 'УÑ\87Ñ\83Ñ\80дагÑ\8b Ð¾ÐºÑ\83Ñ\8fлаÑ\80 Ñ\82Ñ\83Ñ\83Ñ\80алÑ\83Ñ\83 ÐºÐ¾Ñ\88Ñ\83мÑ\87а Ð¼Ð°Ð°Ð»Ñ\8bмаÑ\82 Ñ\82абÑ\83Ñ\83',
 'tooltip-n-recentchanges' => 'Уикидеги соңку өзгөртүүлөрдүн тизмеси',
-'tooltip-n-randompage' => 'Туш келди баракты жүктө',
+'tooltip-n-randompage' => 'Тушкелди баракты ачып кара',
 'tooltip-n-help' => 'Маалымат алуу үчүн',
 'tooltip-t-whatlinkshere' => 'Ушул жерге шилтемеси бар бардык уики барактардын тизмеси',
 'tooltip-t-recentchangeslinked' => 'Бул барактан шилтеме берилген барактардагы соңку өзгөрүүлөр',
 'tooltip-feed-atom' => 'Бул барак үчүн Atom агымы',
-'tooltip-t-contributions' => 'Ð\91Ñ\83л ÐºÐ¾Ð»Ð´Ð¾Ð½уучунун салымдарынын тизмеси',
-'tooltip-t-emailuser' => 'Ð\91Ñ\83л ÐºÐ¾Ð»Ð´Ð¾Ð½Ñ\83Ñ\83Ñ\87Ñ\83га ÐºÐ°Ñ\82 Ð¶Ð¸Ð±ÐµÑ\80',
-'tooltip-t-upload' => 'Файлдарды жүктө',
-'tooltip-t-specialpages' => 'Бардык атайын барактардын тизмеси',
+'tooltip-t-contributions' => 'Ð\91Ñ\83л ÐºÐ°Ñ\82Ñ\8bÑ\88уучунун салымдарынын тизмеси',
+'tooltip-t-emailuser' => 'Ð\91Ñ\83л ÐºÐ°Ñ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83га ÐºÐ°Ñ\82 Ð¶Ð¸Ð±ÐµÑ\80Ò¯Ò¯',
+'tooltip-t-upload' => 'Файлдарды жүктөө',
+'tooltip-t-specialpages' => 'Бүт кызмат барактарынын тизмеси',
 'tooltip-t-print' => 'Бул барактын басып чыгарууга ылайыктуу түрү',
 'tooltip-t-permalink' => 'Барактын бул версиясына туруктуу шилтеме',
-'tooltip-ca-nstab-main' => 'Барактын мазмунун кара',
-'tooltip-ca-nstab-user' => 'Колдонуучунун жеке барагын көрсөт',
-'tooltip-ca-nstab-special' => 'Бул атайын барак, аны оңдой албайсыз',
-'tooltip-ca-nstab-project' => 'Долбоор барагын кара',
-'tooltip-ca-nstab-image' => 'Файл барагын көрсөт',
-'tooltip-ca-nstab-template' => 'Калыпты көрсөт',
-'tooltip-ca-nstab-category' => 'Категория барагын көрсөт',
-'tooltip-minoredit' => 'Муну майда оңдоо деп белгиле',
-'tooltip-save' => 'Өзгөртүүлөрдү сактап кой',
+'tooltip-ca-nstab-main' => 'Барактын мазмунун кароо',
+'tooltip-ca-nstab-user' => 'Катышуучунун барагын көрсөтүү',
+'tooltip-ca-nstab-media' => 'Медиа барагын көрүү',
+'tooltip-ca-nstab-special' => 'Бул кызмат барагы, аны оңдой албайсыз',
+'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' => 'Муну майда оңдоо деп белгилөө',
+'tooltip-save' => 'Өзгөртүүлөрүңүздү сактоо',
 'tooltip-preview' => 'Кичи пейлдикке, өзгөртүүлөрдү алдын ала көрсөтүүнү сактоодон мурун колдонуңуз!',
-'tooltip-diff' => 'Тексттке киргизген өзгөртүүлөрдү көрсөт',
-'tooltip-compareselectedversions' => 'Ð\91Ñ\83л Ð±Ð°Ñ\80акÑ\82Ñ\8bн Ñ\82андалган Ñ\8dки Ð²ÐµÑ\80Ñ\81иÑ\8fÑ\81Ñ\8bнÑ\8bн Ð°Ð¹Ñ\8bÑ\80малаÑ\80Ñ\8bн ÐºÐ°Ñ\80а',
+'tooltip-diff' => 'Тексттке киргизген өзгөртүүлөрдү көрсөтүү',
+'tooltip-compareselectedversions' => 'Ð\91Ñ\83л Ð±Ð°Ñ\80акÑ\82Ñ\8bн Ñ\82андалган Ñ\8dки Ð²ÐµÑ\80Ñ\81иÑ\8fÑ\81Ñ\8bнÑ\8bн Ð°Ð¹Ñ\8bÑ\80малаÑ\80Ñ\8bн ÐºÐ°Ñ\80оо',
 'tooltip-watch' => 'Бул баракты көзөмөл тизмеңизге кошуңуз',
+'tooltip-watchlistedit-raw-submit' => 'Көзөмөл тизмесин жаңыртуу',
+'tooltip-upload' => 'Жүктөөнү баштоо',
 'tooltip-rollback' => '"Кайтар" бир баскыч менен бул барактын соңку оңдоочусунун өзгөртүүлөрүн алып салат',
 'tooltip-undo' => 'Киргизилген оңдоону алып салат жана жокко чыгаруунун себебин белгилөөгө мүмкүнчүлүк берип алдын ала көрсөтүүнү ачат',
-'tooltip-summary' => 'Кыска корутунду киргиз',
+'tooltip-preferences-save' => 'Ырастоолорду сактоо',
+'tooltip-summary' => 'Кыска баяндаманы киргизиңиз',
 
 # 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' => 'â\86\90 Ð\9cÑ\83Ñ\80Ñ\83нкÑ\83 оңдоо',
-'nextdiff' => 'Жаңы түзөтүү →',
+'previousdiff' => 'â\86\90 Ð­Ñ\81киÑ\81ин оңдоо',
+'nextdiff' => 'Жаңысын оңдоо →',
 
 # Media information
-'file-info-size' => '$1 × $2 пиксел, файлдын көлөмү: $3, MIME тиби: $4',
-'file-nohires' => 'Мындан дагы толук чечилиши жок.',
+'file-info-size' => '$1 × $2 пиксель, файлдын көлөмү: $3, MIME түрү: $4',
+'file-nohires' => 'Мындан чоңураак чечим жок.',
 'svg-long-desc' => 'SVG файл, шарттуу түрдө $1 × $2 пиксел, файлдын көлөмү: $3',
-'show-big-image' => 'Толук чечилиши',
+'svg-long-error' => 'туура эмес SVG-файл: $1',
+'show-big-image' => 'Толук чечими',
 
 # Special:NewFiles
-'newimages' => 'Жаңы файлдардын галлереясы',
+'newimages' => 'Жаңы файлдардын галереясы',
+'newimages-legend' => 'Фильтр',
+'newimages-label' => 'Файл аты (же анын жартысы):',
+'showhidebots' => '($1 бот)',
+'noimages' => 'Көрүүгө эчтеке жок.',
 'ilsubmit' => 'Издөө',
-'bydate' => 'Күнү боюнча',
+'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' => 'Төмөнкү калыпта болуш керек:
@@ -879,52 +1489,308 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 * gpsaltitude',
 
 # EXIF tags
+'exif-imagewidth' => 'Туурасы',
+'exif-imagelength' => 'Бийиктик',
+'exif-imagedescription' => 'Сүрөт аты',
 'exif-artist' => 'Автор',
-'exif-contrast' => 'Контраст',
+'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' => 'Теманын коду',
+
+# 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' => 'Белгисиз',
+'exif-lightsource-4' => 'Жарк',
+'exif-lightsource-11' => 'Көлөкө',
+'exif-lightsource-255' => 'Жарыктын башка булагы',
+
+# Flash modes
+'exif-flash-mode-3' => 'автоматтык режим',
+
 'exif-focalplaneresolutionunit-2' => 'дюйм',
 
+'exif-sensingmethod-1' => 'Аныкталбаган',
+
+'exif-scenecapturetype-0' => 'Стандарттуу',
+'exif-scenecapturetype-1' => 'Ландшафт',
+'exif-scenecapturetype-2' => 'Портрет',
+'exif-scenecapturetype-3' => 'Түнкү тартуу',
+
+'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' => 'Километр',
+'exif-gpsdestdistance-m' => 'Миля',
+
+'exif-gpsdop-excellent' => 'Мыкты ($1)',
+'exif-gpsdop-good' => 'Жакшы ($1)',
+'exif-gpsdop-moderate' => 'Орточо ($1)',
+'exif-gpsdop-poor' => 'Начар ($1)',
+
+'exif-dc-contributor' => 'Авторлоштор',
+'exif-dc-date' => 'Дата(лар)',
+'exif-dc-publisher' => 'Бастыруучу',
+'exif-dc-rights' => 'Укуктар',
+'exif-dc-source' => 'Баштапкы медиа',
+'exif-dc-type' => 'Медианын түрү',
+
+'exif-iimcategory-fin' => 'Экономика жана бизнес',
+'exif-iimcategory-edu' => 'Билим',
+'exif-iimcategory-evn' => 'Айлана чөйрө',
+'exif-iimcategory-hth' => 'Ден соолук',
+'exif-iimcategory-lab' => 'Эмгек',
+'exif-iimcategory-pol' => 'Саясат',
+'exif-iimcategory-rel' => 'Дин жана ишеним',
+'exif-iimcategory-sci' => 'Илим жана техника',
+'exif-iimcategory-soi' => 'Социалдык маселелер',
+'exif-iimcategory-spo' => 'Спорт',
+'exif-iimcategory-wea' => 'Аба ырайы',
+
 # External editor support
-'edit-externally' => 'Бул файлды сырткы программа колдонуу аркылуу оңдо',
+'edit-externally' => 'Бул файлды сырткы программа колдонуу аркылуу оңдоо',
 'edit-externally-help' => '(Толук маалымат алуу үчүн [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] барагына кайрылсаңыз болот)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'баары',
 'namespacesall' => 'баары',
 'monthsall' => 'баары',
+'limitall' => 'баары',
 
 # E-mail address confirmation
-'confirmemail' => 'Электрондук даректи ырастоо',
-'confirmemail_loggedin' => 'Электрондук дарегиңиз ырасталды.',
+'confirmemail' => 'Электрондук даректи аныктоо',
+'confirmemail_loggedin' => 'Электрондук дарегиңиз аныкталды.',
+
+# Delete conflict
+'recreate' => 'Кайтадан жаратуу',
+
+# action=purge
+'confirm_purge_button' => 'OK',
+
+# action=watch/unwatch
+'confirm-watch-button' => 'ОК',
+'confirm-unwatch-button' => 'ОК',
+
+# Multipage image navigation
+'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' => 'Тийиштүү өзгөрүүлөрдү көрсөт',
-'watchlisttools-edit' => 'Көзөмөл тизмени кара жана оңдо',
-'watchlisttools-raw' => 'Жетиле элек көзөмөл тизмени оңдо',
+'watchlisttools-view' => 'Тийиштүү өзгөрүүлөрдү көрсөтүү',
+'watchlisttools-edit' => 'Көзөмөл тизмесин кароо жана оңдоо',
+'watchlisttools-raw' => 'Жетиле элек көзөмөл тизмени оңдоо',
 
 # Core parser functions
 'duplicate-defaultsort' => '\'\'\'Эскертүү:\'\'\' "$2" белгиленген ылгоочу ачкыч "$1" мурунку белгиленген ылгоочу ачкычты жокко чыгарат.',
 
 # Special:Version
 'version' => 'Версия',
+'version-extensions' => 'Орнотулган кеңейтүүлөр',
+'version-specialpages' => 'Кызмат барактары',
+'version-variables' => 'Өзгөрмөлөр',
+'version-skins' => 'Темалар',
+'version-other' => 'Башка',
+'version-version' => '(Версия $1)',
+'version-license' => 'Лицензия',
+'version-software' => 'Орнотулган программалык камсыздоо',
+'version-software-product' => 'Продукт',
+'version-software-version' => 'Версия',
+'version-entrypoints-header-url' => 'URL',
+
+# Special:FilePath
+'filepath' => 'Файл жолу',
+'filepath-page' => 'Файл:',
+'filepath-submit' => 'Өтүү',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch-filename' => 'Файл аты:',
+'fileduplicatesearch-submit' => 'Издөө',
 
 # Special:SpecialPages
-'specialpages' => 'Атайын барактар',
+'specialpages' => 'Кызмат барактары',
+'specialpages-group-other' => 'Башка кызмат барактары',
+'specialpages-group-login' => 'Кирүү / Каттоо',
+'specialpages-group-pagetools' => 'Барак аспаптары',
+'specialpages-group-spam' => 'Спам үчүн аспаптар',
+
+# Special:BlankPage
+'blankpage' => 'Бош барак',
 
 # External image whitelist
-'external_image_whitelist' => ' #Бул сапты болгондой калтыр<pre>
-#Туруктуу айтылыштардын бөлүмдөрүн (// арасындагы бөлүмүн гана) астына жайгаштыр 
+'external_image_whitelist' => ' #Бул сапты болгондой калтыруу<pre>
+#Туруктуу айтылыштардын бөлүмдөрүн (// арасындагы бөлүмүн гана) астына жайгаштыру 
 #Алар сырткы сүрөттөрдүн URL менен байланыштырылат
 #Ылайыктуулары сүрөт болуп көрсөтүлөт, калгандары сүрөттөргө шилтеме болуп көрсөтүлөт
 ## менен башталган саптар, түшүндүрмө болуп эсептелет
 #Баш же кичине тамга айырмасыз
 
-#Туруктуу айтылыштардын бөлүмдөрүн ушул саптын үстүнө жайгаштыр. Бул сапты болгондой калтыр.</pre>',
+#Туруктуу айтылыштардын бөлүмдөрүн ушул саптын үстүнө жайгаштыр. Бул сапты болгондой калтыруу.</pre>',
 
 # Special:Tags
-'tag-filter' => '[[Special:Tags|Энбелги]] чыпкасы:',
+'tag-filter' => '[[Special:Tags|Белги]] фильтри:',
+'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' => 'Биринчи версия',
+'compare-rev2' => 'Экинчи версия',
+'compare-submit' => 'Салыштыруу',
+
+# Database error messages
+'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-summary-hid' => 'оңдоонун баяндамасы жашырылган',
+'revdelete-uname-hid' => 'катышуучу аты жашырылган',
+'revdelete-unrestricted' => 'администраторлор үчүн чектөөлөр алынды',
+'logentry-newusers-newusers' => '$1 эсеп жазуусу жаратылды',
+'logentry-newusers-create' => '$1 эсеп жазуусу жаратылды',
+'logentry-newusers-create2' => '$1 эсеп жазуусун жаратты',
+'logentry-newusers-autocreate' => 'Автоматтуу түрдө $1 эсеп жазуусу жаратылды',
+'newuserlog-byemail' => 'сырсөз эл. почта аркылуу жөнөтүлдү',
+'rightsnone' => '(жок)',
+
+# Feedback
+'feedback-subject' => 'Тема:',
+'feedback-message' => 'Билдирүү:',
+'feedback-cancel' => 'Жокко чыгаруу',
+'feedback-submit' => 'Пикир жөнөтүү',
+'feedback-adding' => 'Баракка пикирди кошуу…',
+'feedback-error1' => "Ката. API'ден белгисиз натыйжа",
+'feedback-error2' => 'Ката: Оңдоо оңунан чыккан жок',
+'feedback-error3' => "Ката: API'ден жооп жок",
+'feedback-close' => 'Даяр',
+'feedback-bugnew' => 'Мен текшердим. Жаңы ката жөнүндө маалымдоо',
+
+# Search suggestions
+'searchsuggest-search' => 'Издөө',
+'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|секунда}}',
+'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 9b37238..a5f9dd7 100644 (file)
@@ -279,8 +279,8 @@ $messages = array(
 'newwindow' => '(in fenestra nova aperietur)',
 'cancel' => 'Abrogare',
 'moredotdotdot' => 'Plus...',
-'mypage' => 'Pagina mea',
-'mytalk' => 'Disputatio mea',
+'mypage' => 'Pagina',
+'mytalk' => 'Disputatio',
 'anontalk' => 'Disputatio huius IP',
 'navigation' => 'Navigatio',
 'and' => '&#32;et',
@@ -495,9 +495,9 @@ Ratio data est "\'\'$2\'\'".',
 
 Ignote continues {{grammar:ablative|{{SITENAME}}}} uti, aut conventum novum vel sub eodem vel novo nomine <span class='plainlinks'>[$1 aperias]</span>.
 Nota bene paginas fortasse videantur quasi tuum conventum esset apertum, priusquam navigatrum purgaveris.",
-'welcomecreation' => '== Salve, $1! ==
-Ratio tua iam creata est.
-Noli oblivisci [[Special:Preferences|praeferentias tuas]] apud {{grammar:accusative|{{SITENAME}}}} mutare.',
+'welcomeuser' => 'Salve, $1!',
+'welcomecreation-msg' => 'Ratio tua creata est.
+Noli oblivisci [[Special:Preferences|praeferentias]] tuas apud {{grammar:accusative|{{SITENAME}}}} mutare.',
 'yourname' => 'Nomen usoris:',
 'yourpassword' => 'Tessera:',
 'yourpasswordagain' => 'Tesseram adfirmare:',
@@ -701,7 +701,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}}:',
@@ -878,7 +877,7 @@ Conare praefixare tua inquisitionem cum ''all:'' ut quaeras contenta omnia (pagi
 
 # Preferences page
 'preferences' => 'Praeferentiae',
-'mypreferences' => 'Praeferentiae meae',
+'mypreferences' => 'Praeferentiae',
 'prefs-edits' => 'Numerus recensionum:',
 'prefsnologin' => 'Conventum non est apertum',
 'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Conventum aperire]</span> debes ad praeferentias tuas modificandum.',
@@ -1037,10 +1036,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 +1421,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 +1467,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',
@@ -1494,11 +1491,7 @@ Si paginam ex indice paginarum custoditarum removere vis, imprime \"decustodire\
 'unwatching' => 'Decustodiens...',
 
 'enotif_reset' => 'Indicare omnes paginas visitatas',
-'enotif_newpagetext' => 'Haec pagina nova est.',
 'enotif_impersonal_salutation' => 'Usor {{grammar:genitive|{{SITENAME}}}}',
-'changed' => 'mutata',
-'created' => 'creata',
-'enotif_subject' => 'Pagina {{grammar:genitive|{{SITENAME}}}} $PAGETITLE ab $PAGEEDITOR $CHANGEDORCREATED est',
 'enotif_lastdiff' => 'Vide $1 ad hanc recensionem inspiciendum.',
 'enotif_anon_editor' => 'usor ignotus $1',
 'enotif_body' => '
@@ -1525,6 +1518,8 @@ To change your watchlist settings, visit
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creata',
+'changed' => 'mutata',
 
 # Delete
 'deletepage' => 'Delere paginam',
@@ -1588,9 +1583,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',
@@ -1657,7 +1652,7 @@ Si pagina nova cum ipso nomine post deletionem creata est, emendationes restitut
 # Contributions
 'contributions' => 'Conlationes usoris',
 'contributions-title' => 'Conlationes usoris $1',
-'mycontris' => 'Conlationes meae',
+'mycontris' => 'Conlationes',
 'contribsub2' => 'Pro $1 ($2)',
 'nocontribs' => 'Nullae mutationes inventae sunt ex his indiciis.',
 'uctop' => ' (vertex)',
@@ -1907,7 +1902,7 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Pagina usoris tua',
 'tooltip-pt-mytalk' => 'Pagina disputationis tua',
-'tooltip-pt-preferences' => 'Praeferentiae meae',
+'tooltip-pt-preferences' => 'Praeferentiae tuae',
 'tooltip-pt-watchlist' => 'Paginae quae custodis ut eorum mutationes facilius vides',
 'tooltip-pt-mycontris' => 'Index conlationum tuarum',
 'tooltip-pt-login' => 'Te conventum aperire hortamur, non autem requisitum',
@@ -2375,11 +2370,12 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'logentry-move-move-noredirect' => '$1 movit paginam $3 ad $4 sine redirectione',
 'logentry-move-move_redir' => '$1 movit paginam $3 ad $4 praeter redirectionem',
 'logentry-move-move_redir-noredirect' => '$1 movit paginam $3 ad $4 praeter redirectionem sine redirectione',
-'logentry-newusers-newusers' => '$1 creavit rationem usoris',
-'logentry-newusers-create' => '$1 creavit rationem usoris',
-'logentry-newusers-create2' => '$1 creavit rationem usoris $3',
+'logentry-newusers-newusers' => 'Ratio usoris $1 creata est',
+'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 819a02f..3b6c0df 100644 (file)
@@ -315,7 +315,7 @@ $messages = array(
 'cancel' => 'Anular',
 'moredotdotdot' => 'Más...',
 'mypage' => 'Mi hoja',
-'mytalk' => 'Mi diskusyón',
+'mytalk' => 'La mi diskusyon',
 'anontalk' => 'Diskusyón para este adresso de IP',
 'navigation' => 'Navigación',
 'and' => '&#32;y',
@@ -567,9 +567,9 @@ Si venites aquí por yerro, torna a la hoja de antes.',
 Puedes [[Special:Search/{{PAGENAME}}|buscar el títůlo de esta hoja]] en otras hojas,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rējistros relatados],
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} trocar esta hoja]</span>.',
-'noarticletext-nopermission' => 'No ay teksto oy día en esta hoja.
-Puedes [[Special:Search/{{PAGENAME}}|buscar este títůlo de hoja]] en otras hojas,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rejistros relasyonados]</span>.',
+'noarticletext-nopermission' => 'No ay teksto en esta oja.
+Puedes [[Special:Search/{{PAGENAME}}|bushkar este titolo de oja]] en otras pajinas,
+o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} bushkar en los rejistros relasyonados]</span>.',
 'userpage-userdoesnotexist-view' => 'El cuento del usador $1 no está enrejistrado.',
 'note' => "'''Nota:'''",
 'previewnote' => "¡Akórdate ke esto es sólo una previsualizasion i aínda no se enrejistró!'''
@@ -709,7 +709,7 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de
 
 # Preferences page
 'preferences' => 'Preferencias',
-'mypreferences' => 'Mis preferencias',
+'mypreferences' => 'Las mis preferensias',
 'changepassword' => 'Trocar el kóddiche',
 'prefs-skin' => 'Vista',
 'skin-preview' => 'Previstear',
@@ -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)',
 
@@ -893,7 +893,7 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 
 # Watchlist
 'watchlist' => 'Mi lista de escogidas',
-'mywatchlist' => 'Mi lista de akavidamientos',
+'mywatchlist' => 'La mi lista de akavidamientos',
 'watchlistfor2' => 'Para $1 $2',
 'addedwatchtext' => "La hoja «[[:$1]]» fue ajustada a tu [[Special:Watchlist|lista de escogidas]]. Los trocamientos venideros en esta hoja i en tu hoja de diskussión associada se van indicar aí, i la hoja va aparecer '''gordo''' en la hoja de [[Special:RecentChanges|trocamientos freskos]] para hazerla más kolay de detektar.
 
@@ -966,7 +966,7 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Ajustamientos del empleador',
+'contributions' => 'Ajustamientos {{GENDER:$1|del usador|de la usadora}}',
 'contributions-title' => 'Ajustamientos {{GENDER:$1|del usuario|de la usuaria}} $1',
 'mycontris' => 'Mis ajustamientos',
 'contribsub2' => '$1 ($2)',
index d74b3db..314f328 100644 (file)
@@ -314,8 +314,9 @@ $messages = array(
 'newwindow' => '(geet an enger neier Fënster op)',
 'cancel' => 'Zréck',
 'moredotdotdot' => 'Méi …',
-'mypage' => 'Meng Säit',
-'mytalk' => 'Meng Diskussioun',
+'morenotlisted' => 'Méi, déi hei net stinn...',
+'mypage' => 'Säit',
+'mytalk' => 'Diskussioun',
 'anontalk' => 'Diskussioun fir dës IP Adress',
 'navigation' => 'Navigatioun',
 'and' => '&#32;a(n)',
@@ -347,6 +348,7 @@ $messages = array(
 'namespaces' => 'Nummraim',
 'variants' => 'Varianten',
 
+'navigation-heading' => 'Navigatiounsmenü',
 'errorpagetitle' => 'Feeler',
 'returnto' => 'Zréck op $1.',
 'tagline' => 'Vu {{SITENAME}}',
@@ -555,7 +557,7 @@ Ufro: $2',
 'viewsource-title' => 'Quelltext vun der Säit $1 weisen',
 'actionthrottled' => 'Dës Aktioun gouf gebremst',
 'actionthrottledtext' => 'Fir géint de Spam virzegoen, ass dës Aktioun esou programméiert datt Dir se an enger kuerzer Zäit nëmme limitéiert dacks maache kënnt. Dir hutt dës Limite iwwerschratt. Versicht et w.e.g. an e puer Minutten nach eng Kéier.',
-'protectedpagetext' => 'Dës Säit ass fir Ännerunge gespaart.',
+'protectedpagetext' => 'Dës Säit ass fir Ännerungen an aner Aktioune gespaart.',
 'viewsourcetext' => 'Dir kënnt de Quelltext vun dëser Säit kucken a kopéieren:',
 'viewyourtext' => "Dir kënnt de Quelltext vun '''Ären Ännerungen''' op dëser Säit kucken a kopéieren:",
 'protectedinterface' => "Op dëser Säit fannt Dir Text fir de Sprooch-Interface vun der Software op dëser Wiki an dofir ass si gespaart fir Mëssbrauch ze verhënneren.
@@ -588,9 +590,9 @@ $2',
 Dir kënnt {{SITENAME}} elo anonym benotzen, oder Iech <span class='plainlinks'>[$1 erëm aloggen]</span>.
 
 Opgepasst: Op verschiddene Säite kann et nach esou aus gesinn, wéi wann Dir nach ageloggt wiert, bis Dir Ärem Browser säin Tëschespäicher (cache) eidel maacht.",
-'welcomecreation' => '== Wëllkomm, $1! ==
-Äre Kont gouf kreéiert.
-Denkt drun, Är [[Special:Preferences|{{SITENAME}}-Astellungen]] unzepassen.',
+'welcomeuser' => 'Wëllkomm $1!',
+'welcomecreation-msg' => "Äre Benotzerkont gouf ugeluecht.
+Vergiesst net fir Är [[Special:Preferences|{{SITENAME}} Astellungen]] z'änneren",
 'yourname' => 'Benotzernumm:',
 'yourpassword' => 'Passwuert:',
 'yourpasswordagain' => 'Passwuert nach eemol antippen:',
@@ -721,6 +723,12 @@ Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwu
 'passwordreset-capture-help' => 'Wann Dir dës Këscht ukräizt, gëtt de Mail (mam temporäre Passwuert) Iech gewisen an dem Benotzer geschéckt.',
 'passwordreset-email' => 'E-Mailadress:',
 'passwordreset-emailtitle' => 'Detailer vum Benotzerkont op{{SITENAME}}',
+'passwordreset-emailtext-ip' => "Iergendee mat der IP-Adress $1, wahrscheinlech Dir selwer, huet eng Erënnerung fir Är Benotzerkonteninformatiounen op {{SITENAME}} gefrot ($4). {{PLURAL:$3|De Benotzerkont ass|D'Benutzerkonte si}} mat dëser E-Mail-Adress verbonn:
+
+$2
+
+{{PLURAL:$3|Dëst temporärt Passwuert leeft|Dës temporär Passwierder lafe}} bannent {{PLURAL:$5|engem Dag|$5 Deeg}} of.
+Dir sollt Iech aloggen an een neit Passwuert festleeën. Wann een Aneren déi Ufro gemaach huet oder Dir Iech erëm un Äert Passwuert erënnere kënnt an et net ännere wëllt, kënnt Dir dës Noriicht ignoréieren an Äert aalt Passwuert weider benotzen.",
 'passwordreset-emailelement' => 'Benotzernumm: $1
 Temporärt Passwuert: $2',
 'passwordreset-emailsent' => 'Eng Erënnerungs-Mail gouf geschéckt.',
@@ -735,6 +743,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',
 
@@ -915,7 +924,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',
@@ -1226,7 +1234,7 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck
 
 # Preferences page
 'preferences' => 'Astellungen',
-'mypreferences' => 'Meng Astellungen',
+'mypreferences' => 'Astellungen',
 'prefs-edits' => 'Zuel vun den Ännerungen:',
 'prefsnologin' => 'Net ageloggt',
 'prefsnologintext' => 'Dir musst <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}ageloggt]</span> sinn, fir Är Astellungen änneren ze kënnen.',
@@ -1302,9 +1310,9 @@ Dëst kann net réckgängeg gemaach ginn.",
 'prefs-emailconfirm-label' => 'E-Mail Confirmatioun:',
 'prefs-textboxsize' => 'Gréisst vun der Ännerungsfënster',
 'youremail' => 'E-Mailadress:',
-'username' => 'Benotzernumm:',
-'uid' => 'Benotzer ID:',
-'prefs-memberingroups' => 'Member vun {{PLURAL:$1|der Benotzergrupp|de Benotzergruppen}}:',
+'username' => '{{GENDER:$1|Benotzernumm}}:',
+'uid' => '{{GENDER:$1|Benotzer}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Member}} vun {{PLURAL:$1|der Benotzergrupp|de Benotzergruppen}}:',
 'prefs-registration' => 'Zäitpunkt vum Opmaache vum Benotzerkont:',
 'yourrealname' => 'Richtegen Numm:',
 'yourlanguage' => 'Sprooch:',
@@ -1451,12 +1459,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',
-'rightsnone' => '(keen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'dës Säit ze liesen',
@@ -1563,7 +1572,7 @@ Fir e '''Bild''' op enger Säit zu benotzen, schreift amplaz vum Bild eng vun d
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.jpg]]</nowiki></code>''' fir déi ganz Versioun vum Fichier ze benotzen
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.png|200px|thumb|left|alt text]]</nowiki></code>''' fir eng 200 Pixel breet Versioun an enger Këscht am lénke Rand mat 'alt text' als Beschreiwung
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichier.ogg]]</nowiki></code>''' fir e Fichier direkt ze verlinken ouni de Fichier ze weisen",
-'upload-permitted' => 'Erlaabte Formater vun de Fichieren: $1.',
+'upload-permitted' => 'Erlaabt Formater vun de Fichieren: $1.',
 'upload-preferred' => 'Fichierszorten déi am beschte funktionéieren: $1.',
 'upload-prohibited' => 'Verbuede Fichiers Formater: $1.',
 'uploadlog' => 'Lëscht vun den eropgeluedene Fichieren',
@@ -1684,6 +1693,7 @@ Wann de Problem weider besteet, dann un de [[Special:ListUsers/sysop|Administrat
 'backend-fail-notsame' => 'Et gëtt schonn en net-identesche Fichier op $1.',
 'backend-fail-invalidpath' => '$1 ass keng valabel Plaz fir ze späicheren.',
 'backend-fail-delete' => 'De Fichier $1 konnt net geläscht ginn.',
+'backend-fail-describe' => 'D\'Metadate fir de Fichier "$1" konten net geännert ginn.',
 'backend-fail-alreadyexists' => 'De Fichier $1 gëtt et schonn.',
 'backend-fail-store' => 'De Fichier $1 konnt net op $2 gespäichert ginn.',
 'backend-fail-copy' => 'De Fichier $1 konnt net op $2 kopéiert ginn.',
@@ -1953,6 +1963,7 @@ An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun d
 'wantedpages-badtitle' => 'Net valabelen Titel am Resultat: $1',
 'wantedfiles' => 'Gewënschte Fichieren',
 'wantedfiletext-cat' => 'Dës Fichiere gi benotzt awer et gëtt se net. Fichiere aus frieme Repositorie kënnen hei gewise ginn och wann et se gëtt. All esou falsch Positiver ginn <del>duerchgestrach</del>. Zousätzlech gi Säiten an deene Fichieren dra sinn déi et net gëtt op [[:$1]] gewisen.',
+'wantedfiletext-nocat' => 'Dës Fichiere gi benotzt existéieren awer net. Fichieren aus frieme Repertoiren kënnen trotzdeem opgelëscht ginn. All dës positiv Fichiere ginn <del>duergestrach</del>.',
 'wantedtemplates' => 'Gewënschte Schablounen',
 'mostlinked' => 'Dacks verlinkte Säiten',
 'mostlinkedcategories' => 'Dacks benotzte Kategorien',
@@ -2059,7 +2070,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.',
 
@@ -2078,10 +2089,6 @@ Et muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. ".org".<br />
 '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.
@@ -2140,16 +2147,15 @@ D\'E-Mailadress, déi Dir an [[Special:Preferences|Ären Astellungen]] aginn hut
 
 # Watchlist
 'watchlist' => 'Meng Iwwerwaachungslëscht',
-'mywatchlist' => 'Meng Iwwerwaachungslëscht',
+'mywatchlist' => 'Iwwerwaachungslëscht',
 'watchlistfor2' => 'Vum $1 $2',
 'nowatchlist' => 'Är Iwwerwaachungslëscht ass eidel.',
 'watchlistanontext' => "Dir musst $1 fir Säiten op ärer Iwwerwaachungslëscht ze gesinn oder z'änneren.",
 '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',
@@ -2177,11 +2183,13 @@ Wann dir dës Säit net méi iwwerwaache wëllt, klickt op \"Net méi iwwerwaach
 
 'enotif_mailer' => '{{SITENAME}} E-Mail-Informatiounssystem',
 'enotif_reset' => 'All Säiten als besicht markéieren',
-'enotif_newpagetext' => 'Dëst ass eng nei Säit.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-Benotzer',
-'changed' => 'geännert',
-'created' => 'gemaach',
-'enotif_subject' => '[{{SITENAME}}] D\'Säit "$PAGETITLE" gouf vum $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_subject_deleted' => "D'{{SITENAME}}-Säit $1 gouf vum {{gender:$2|$2}} geläscht",
+'enotif_subject_created' => "D'{{SITENAME}}-Säit $1 gouf vum {{gender:$2|$2}} ugeluecht",
+'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.',
 'enotif_lastvisited' => 'All Ännerungen op ee Bléck: $1',
 'enotif_lastdiff' => 'Kuckt $1 fir dës Ännerung.',
 'enotif_anon_editor' => 'Anonyme Benotzer $1',
@@ -2218,6 +2226,8 @@ $UNWATCHURL
 
 Reaktiounen a méi Hëllef:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'gemaach',
+'changed' => 'geännert',
 
 # Delete
 'deletepage' => 'Säit läschen',
@@ -2288,6 +2298,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:',
@@ -2303,9 +2314,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',
@@ -2400,9 +2411,9 @@ $1',
 'blanknamespace' => '(Haapt)',
 
 # Contributions
-'contributions' => 'Kontributioune vum Benotzer',
+'contributions' => 'Kontributioune vum Benotzer $1',
 'contributions-title' => 'Kontributioune vum $1',
-'mycontris' => 'Meng Kontributiounen',
+'mycontris' => 'Kontributiounen',
 'contribsub2' => 'Fir $1 ($2)',
 'nocontribs' => 'Et goufe keng Ännerunge fonnt, déi dëse Kritèren entspriechen.',
 'uctop' => '(aktuell)',
@@ -2797,6 +2808,7 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 'javascripttest-title' => '$1-Tester ginn elo gemaach',
 'javascripttest-pagetext-noframework' => 'Dës Säit ass fir Java-Script-Tester reservéiert.',
 'javascripttest-pagetext-unknownframework' => 'Onbekannten Test-Framework "$1".',
+'javascripttest-pagetext-frameworks' => 'Sicht w.e.g. eng vun dësen Test-Strukturen eraus: $1',
 'javascripttest-qunit-intro' => "Kuckt d'[$1 Dokumentatioun vun den Tester] op mediawiki.org",
 
 # Tooltip help for the actions
@@ -2920,6 +2932,7 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 'pageinfo-length' => 'Gréisst vun der Säit (a Bytes)',
 'pageinfo-article-id' => 'ID (Nummer) vun der Säit',
 'pageinfo-language' => 'Sprooch vum Inhalt vun der Säit',
+'pageinfo-robot-noindex' => 'Net indexéierbar',
 'pageinfo-views' => 'Zuel vun de Kéieren déi dës Säit gekuckt gouf',
 'pageinfo-watchers' => "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
 'pageinfo-redirects-name' => 'Viruleedungen op dës Säit',
@@ -2941,7 +2954,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',
@@ -2963,6 +2982,8 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 'markedaspatrollederror' => 'Kann net als "nogekuckt" markéiert ginn.',
 'markedaspatrollederrortext' => 'Dir musst eng Säitenännerung auswielen.',
 'markedaspatrollederror-noautopatrol' => 'Dir däerft Är eegen Ännerungen net als nogekuckt markéieren.',
+'markedaspatrollednotify' => 'Dës Ännerung vu(n) $1 gouf als nogekuckt markéiert.',
+'markedaspatrollederrornotify' => 'Markéieren als kontrolléiert huet net fonctionnéiert.',
 
 # Patrol log
 'patrol-log-page' => 'Logbuch vun den iwwerkuckte Versiounen',
@@ -2996,6 +3017,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.',
@@ -3024,7 +3046,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Format:
@@ -3547,7 +3572,7 @@ Dëse Confirmatiouns-Code leeft den $4 of.',
 'autosumm-new' => "Säit ugeluecht mat: '$1'",
 
 # Live preview
-'livepreview-loading' => 'Lueden',
+'livepreview-loading' => 'Lueden...',
 'livepreview-ready' => 'Lueden … Fäerdeg!',
 'livepreview-failed' => "Live-Preview huet net fonctionéiert! Benotzt w.e.g. d'Fonctioun ''Kucken ouni ofzespäicheren''.",
 'livepreview-error' => "Verbindung net méiglech: $1 „$2“.
@@ -3610,6 +3635,7 @@ Dir kënnt och [[Special:EditWatchlist|de Standard Editeur benotzen]].",
 'version-license' => 'Lizenz',
 'version-poweredby-credits' => "Dës Wiki fonctionnéiert mat '''[//www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'anerer',
+'version-credits-summary' => "Mir soen dëse Persoune 'Merci' fir hir Mataarbecht u [[Special:Version|MediaWiki]].",
 'version-license-info' => "MediaWiki ass fräi Software; Dir kënnt se weiderginn an/oder s'änneren ënnert de Bedingungen vun der GNU-General Public License esou wéi se vun der Free Softare Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun.
 
 MediaWiki gëtt verdeelt an der Hoffnung datt se nëtzlech ass, awer OUNI IERGENDENG GARANTIE; ouni eng implizit Garantie vu Commercialisatioun oder Eegnung fir e bestëmmte Gebrauch. Kuckt d'GPU Geral Public License fir méi Informatiounen.
@@ -3746,11 +3772,13 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'logentry-move-move_redir-noredirect' => "$1 huet d'Säit $3 op $4 geréckelt an dobäi gouf eng Viruleedung iwwerschriwwen an et et gouf keng nei Viruleedung ugeluecht",
 'logentry-patrol-patrol' => "$1 huet d'Versioun $4 vun der Säit $3 als nogekuckt markéiert",
 'logentry-patrol-patrol-auto' => "$1 huet d'Versioun $4 vun der Säit $3 automatesch als nogekuckt markéiert",
-'logentry-newusers-newusers' => '$1  huet e Benotzerkont ugeluecht',
-'logentry-newusers-create' => '$1  huet e Benotzerkont ugeluecht',
-'logentry-newusers-create2' => '$1 huet ee Benotzerkont ugeluecht $3',
+'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-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)].
index 783d0f8..4863025 100644 (file)
@@ -420,9 +420,9 @@ $messages = array(
 Квевай [[Special:Search/{{PAGENAME}}| и тlвар алай ччин]] муькуь ччинра жугъуриз,
 <span class="plainlinks"> [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналрин талукь тир кхьей затIар жугъуриз],
 ва я [{{fullurl:{{FULLPAGENAME}}|action=edit}} и тlвар алай ччин туькIуьриз жеда] </span>.',
-'noarticletext-nopermission' => 'Iseatda china kxhin avach.
-Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra jaghuriz ak\'ni
-<span class="plainlinks"> [{{fullurl: {{# Special:Log}} | page = {{FULLPAGENAMEE}}}} jurnalrin taluq\' tir kxhey zathar jaghuriz] jeda.',
+'noarticletext-nopermission' => 'Исятда и  ччина са текстни авач.
+Квевай [[Special:Search/{{PAGENAME}}| и тӀвар алай ччин]] муькуь ччинра жугъуриз ва я
+<span class="plainlinks"> [{{fullurl: {{# Special:Log}} | page = {{FULLPAGENAMEE}}}} журналрин талукь тир кхьей затӀар жугъуриз] жеда.',
 'blocked-notice-logextract' => 'И уртах алайчIава блокарнава.
 Агъадихъ блокарунин журналдикай эхиримжи кхьинар къалурнава:',
 'previewnote' => "'''Рикlел хуьх хьи, им анжах сифтедин килигун я.'''  
@@ -593,7 +593,7 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 
 # Preferences page
 'preferences' => 'Туькlуьрун',
-'mypreferences' => 'Зи низамарунар',
+'mypreferences' => 'Zi tïķïrunar',
 'prefs-edits' => 'Дьузар хъувунрин кьадар',
 'prefsnologin' => 'Куьне гьахьнавач',
 'changepassword' => 'Парол дегишарун',
@@ -689,9 +689,11 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 '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 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 'listusers-noresult' => 'Иштиракчияр жагъуриз хьанвач',
 'listusers-blocked' => '(блокарнава)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Уртахар регистрация авунин журнал',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'КIеретI',
 'listgrouprights-members' => '(уьзвийрин сиягь)',
@@ -952,8 +951,8 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 'watching' => 'Килигун...',
 'unwatching' => 'Амма клигнай',
 
-'changed' => 'дегишнава',
 'created' => 'туькIуьрнава',
+'changed' => 'дегишнава',
 
 # Delete
 'deletepage' => 'Къакъудун хъувун',
@@ -1055,7 +1054,7 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 'whatlinkshere-hideredirs' => '$1 рахкъурунар',
 'whatlinkshere-hidetrans' => '$1 кутунар',
 'whatlinkshere-hidelinks' => '$1 элячlунар',
-'whatlinkshere-hideimages' => '$1 шикилриз элячIунар',
+'whatlinkshere-hideimages' => '$1 шикилриз элячӀунар',
 'whatlinkshere-filters' => 'Куьзунагар',
 
 # Block/unblock
@@ -1324,6 +1323,9 @@ Cиягьда авай анжах (* лишандихъ галаз эгечIза
 # Special:ComparePages
 'compare-page1' => 'Чар 1',
 
+# New logging system
+'rightsnone' => '(садни)',
+
 # Feedback
 'feedback-subject' => 'Тема:',
 'feedback-message' => 'Чар:',
index 03dae9f..4e0d64b 100644 (file)
@@ -687,7 +687,6 @@ Si tu vole sutrae la paje de tu lista de pajes oservada en la futur, clica a \"n
 'watching' => 'Oserva...',
 'unwatching' => 'No oserva...',
 
-'enotif_newpagetext' => 'Esta es un paje nova',
 'created' => 'Creada',
 
 # Delete
index 1a928c7..d0be172 100644 (file)
@@ -402,9 +402,6 @@ Ensonga gy\'awadde eri nti "\'\'$2\'\'".',
 
 Osobola okusigala nga okozesa {{SITENAME}} nga at'eyanjudde, ate osobola <span class='plainlinks'>[$1 n'okuddamu okuyingira]</span> nga bw'obadde oba nga okozesezza ery'obwa memba eddala.
 Wekkaanye, empapula ezimu ziyinza okukweyolekera nga bwe zibadde nga oyingidde - okutuusa lw'okunkumula eggwanika ezzibizi erya kalambula-neti yo.",
-'welcomecreation' => "== $1 tukwanirizza! == <br />
-Akawunti yo ekoledwa.<br />
-Tewerabira kwetereereza [[Special:Preferences|enteekateeka yo ey'oku {{SITENAME}}]].",
 'yourname' => "Ery'obwa memba",
 'yourpassword' => 'Ekigambo ekikuumi',
 'yourpasswordagain' => 'Ddamu ekigambo ekikuumi',
@@ -731,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',
@@ -903,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",
 
@@ -1020,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 f0c2282..0ecdb96 100644 (file)
@@ -559,9 +559,6 @@ d\'n Opgegaeve raej vanne sloetendje admin waar "\'\'$3\'\'".',
 
 De kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of <span class='plainlinks'>[$1 opnuuj aanmelde]</span> ónger dezelfde of 'ne angere naam.
 Mäögelik waert nog 'n deil pagina's getuind esofs te nog aangemeld bis pès te de cache van diene browser laeg maaks.",
-'welcomecreation' => '== Wèlkóm, $1! ==
-Diene gebroeker is noe vaerdig.
-Vergaet neet dien [[Special:Preferences|veurkäöre veur {{SITENAME}}]] aan te passe.',
 'yourname' => 'Diene gebroekersnaam',
 'yourpassword' => 'Die wachwaord',
 'yourpasswordagain' => 'Wachwaord opnuuj intype',
@@ -872,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.",
@@ -1410,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',
@@ -2040,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.
@@ -2136,11 +2129,7 @@ Toekomstige verangeringe aan dees pagina en de biebehurende euverlèkpagina weur
 
 'enotif_mailer' => '{{SITENAME}} notificatiemail',
 'enotif_reset' => "Mèrk alle bezochde pazjena's aan.",
-'enotif_newpagetext' => "DIt is 'n nuuj pazjena.",
 'enotif_impersonal_salutation' => '{{SITENAME}} gebroeker',
-'changed' => 'verangerd',
-'created' => 'aangemaak',
-'enotif_subject' => 'De {{SITENAME}}pagina $PAGETITLE is $CHANGEDORCREATED door $PAGEEDITOR',
 'enotif_lastvisited' => 'Zuug $1 veur al verangeringe saer dien lèste bezeuk.',
 'enotif_lastdiff' => 'Zuug $1 om deze wieziging te zeen.',
 'enotif_anon_editor' => 'anonieme gebroeker $1',
@@ -2169,6 +2158,8 @@ $UNWATCHURL
 
 Commentaar en wiejer assistentie:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'aangemaak',
+'changed' => 'verangerd',
 
 # Delete
 'deletepage' => 'Pagina ewegsjaffe',
@@ -3657,6 +3648,7 @@ Aafbeildinge waere in häör vollejige resolutie getoeandj. Anger bestandjstypes
 '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 b816058..6442f4a 100644 (file)
@@ -378,9 +378,6 @@ Pe favô ti peu segnalâ quello che l'é sucesso a in [[Special:ListUsers/sysop|
 'viewsourcetext' => "O l'è poscibbile vedde e copiâ o còddice sorgente de 'sta paggina:",
 
 # Login and logout pages
-'welcomecreation' => "== Benvegnûo, $1! ==
-
-O teu account o l'è stæto creòu bén. No te ascordâ de cangiâ e teu {{SITENAME}}.[[Special:Preferences|preferençe de {{SITENAME}}]].",
 'yourname' => 'Nomme',
 'yourpassword' => 'Pòula segretta:',
 'yourpasswordagain' => 'Scrivi tórna a pòula segrétta:',
@@ -654,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",
 
@@ -867,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)',
 
@@ -907,8 +904,8 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 'watching' => 'Inti osservæ speçiâli...',
 'unwatching' => 'Scassâ da-i osservæ speçiâli',
 
-'changed' => 'cangiâ',
 '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 bd0421f..bc88182 100644 (file)
@@ -421,8 +421,6 @@ Per piasè, fa raport a 'n'[[Special:ListUsers/sysop|aministradur]], cun la nota
 
 A pudé andà inanz a druvà la {{SITENAME}} in manera anònima, o a pudé <span class='plainlinks'>[$1 cunètev anmò]</span> cun l'istess suranomm o cun un suranomm diferent.
 Tegné cünt che certi paginn pödass che i seguiten a vedess tant 'me se a füdìssuv anmò cuness, fin quand che hii nò vudaa 'l ''cache'' del voster browser.",
-'welcomecreation' => "== Benvegnüü, $1! ==
-'L to cünt l'è staa pruntaa. Desmenteghet mía de mudifegà i to [[Special:Preferences|preferenz de {{SITENAME}}]].",
 'yourname' => 'El to suranóm:',
 'yourpassword' => "Parola d'urdin",
 'yourpasswordagain' => "Mett dent ammò la parola d'urdin",
@@ -725,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ì',
@@ -941,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)',
@@ -974,9 +971,6 @@ i vegnarann segnalaa chichinscì e la pagina la se vedarà cun caràter '''grev'
 'watching' => "Giuntà ai pagin da ten d'ögg...",
 'unwatching' => "Eliminà dai pagin da ten d'ögg...",
 
-'enotif_newpagetext' => "Chesta-chí l'è una pàgina növa.",
-'changed' => 'cambiaa',
-'enotif_subject' => 'La pagina $PAGETITLE de {{SITENAME}} l\'è stada $CHANGEDORCREATED da $PAGEEDITOR',
 'enotif_lastvisited' => 'Varda $1 per vedè tüt i mudifegh da la tua ültema vìsita.',
 'enotif_body' => 'Cara $WATCHINGUSERNAME,
 
@@ -1001,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 1495086..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,7 +100,8 @@ $messages = array(
 'qbfind' => 'Koluka',
 'qbbrowse' => 'Kolúka',
 'qbedit' => 'Kobɔngisa',
-'qbpageinfo' => 'Context',
+'qbpageoptions' => 'Lonkásá óyo',
+'qbmyoptions' => 'Lonkásá na ngáí',
 'qbspecialpages' => 'Nkásá gudi',
 'faq' => 'Mitúná Mizóngelaka (MM)',
 
@@ -145,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',
@@ -231,10 +237,12 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'viewsource' => 'Komɔ́nisa mosólo',
 
 # Login and logout pages
+'welcomeuser' => 'Mbɔ́tɛ na Wikipedia, $1',
 'yourname' => 'Nkómbó ya mosáleli:',
 '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',
@@ -259,6 +268,10 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'passwordreset-username' => 'Nkómbó ya mosáleli:',
 'passwordreset-email' => 'Adɛlɛ́sɛ-ímɛ́lɛ:',
 
+# Special:ChangeEmail
+'changeemail-none' => '(mɔ́kɔ́ tɛ́)',
+'changeemail-cancel' => 'Kozóngela',
+
 # Edit page toolbar
 'bold_sample' => 'Nkomá ya mbinga',
 'bold_tip' => 'Nkomá ya mbinga',
@@ -282,6 +295,7 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'preview' => 'Botáli',
 'showpreview' => 'Kotála yambo',
 'showdiff' => 'Komɔ́nisa mbóngwana',
+'loginreqlink' => 'komíkitola (log in)',
 'newarticle' => '(Sika)',
 'editing' => 'Kokoma «$1»',
 'editingsection' => 'Bobɔngisi ya «$1» (sɛksió)',
@@ -292,6 +306,10 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'template-protected' => '(na bobáteli)',
 'template-semiprotected' => '(na bobáteli ya ndámbo)',
 
+# Content models
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # History pages
 'viewpagelogs' => 'Komɔ́nisa zuluná ya lonkásá loye',
 'currentrev' => 'Lizóngeli na mosálá',
@@ -304,9 +322,17 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'last' => 'ya nsúka',
 'histfirst' => 'ya yambo',
 'histlast' => 'ya nsúka',
+'historyempty' => '(mpámba)',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 o $2',
 
 # Revision deletion
 'rev-delundel' => 'komɔ́nisa/kobomba',
+'rev-showdeleted' => 'komɔ́nisa',
+'revdelete-show-file-submit' => 'Ɛɛ',
+'revdelete-radio-set' => 'Ɛɛ',
+'revdelete-radio-unset' => 'Tɛ́',
 'revdel-restore' => 'kobóngola emɔnanela',
 
 # Merge log
@@ -348,17 +374,36 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'powersearch-ns' => 'Koluka o ntáká ya nkómbó :',
 'powersearch-redir' => 'Kotíya molɔngɔ́ mwa mayendisi',
 'powersearch-field' => 'Koluka',
+'powersearch-toggleall' => 'Nyɔ́nsɔ',
+'powersearch-togglenone' => 'Mɔ́kɔ́ tɛ́',
+
+# Quickbar
+'qbsettings-none' => 'Mɔ́kɔ́ tɛ́',
 
 # Preferences page
 'preferences' => 'Malúli',
 'mypreferences' => 'Malúli ma ngáí',
+'skin-preview' => 'Botáli',
 'prefs-datetime' => 'Mokɔlɔ mpé ntángo',
 'prefs-rc' => 'Mbóngwana ya nsúka',
 'saveprefs' => 'kobómbisa',
+'rows' => 'Mikɔlɔ́tɔ:',
+'columns' => 'Makonzí:',
 'searchresultshead' => 'Boluki',
+'timezonelegend' => 'Ndámbo ya ngonga:',
+'localtime' => "Ngonga y'epái:",
+'timezoneregion-africa' => 'Afríka',
+'timezoneregion-america' => 'Ameríka',
+'timezoneregion-antarctica' => 'Antarktíka',
+'timezoneregion-arctic' => 'Arktíka',
+'timezoneregion-asia' => 'Azía',
+'timezoneregion-atlantic' => 'Atlantíki (lombú monɛ́nɛ)',
+'timezoneregion-europe' => 'Erópa',
+'timezoneregion-indian' => 'India (lombú monɛ́nɛ)',
+'timezoneregion-pacific' => 'Pasifíki (lombú monɛ́nɛ)',
 'allowemail' => 'Enable mokánda from other users',
 'youremail' => 'Mokandá (e-mail) *',
-'username' => 'Nkómbó ya mosáleli :',
+'username' => 'Nkómbó ya mosáleli:',
 'yourrealname' => 'nkómbó ya sɔ̂lɔ́',
 'yourlanguage' => 'Lokótá',
 'email' => 'Mokánda',
@@ -368,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',
 
@@ -455,7 +503,7 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'shortpages' => 'Nkásá ya mokúsé',
 'longpages' => 'Nkásá ya molaí',
 'newpages' => 'Ekakoli ya sika',
-'newpages-username' => 'Nkómbó ya mosáleli :',
+'newpages-username' => 'Nkómbó ya mosáleli:',
 'move' => 'Kobóngola nkómbó',
 'movethispage' => 'Kobóngola nkómbó ya lonkásá loye',
 
@@ -478,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',
index a1ec10d..7e9dcd7 100644 (file)
@@ -345,9 +345,6 @@ $messages = array(
 
 ທ່ານ ສາມາດສືບຕໍ່ໃຊ້ {{SITENAME}} ແບບບໍ່ສະແດງຊື່, ຫຼື ທ່ານ ສາມາດ ເຊັນເຂົ້າ ອີກ ໂດຍ ຊື່ຜູ້ໃຊ້ ເກົ່າ ຫຼື ໃໝ່ ກໍ່ໄດ້.
 ກະລຸນາ ຮັບຊາບວ່າ ບາງໜ້າ ອາດຈະສືບຕໍ່ ສະແດງ ຄືວ່າ ທ່ານ ຍັງເຊັນເຂົ້າຢູ່ ຈົນກວ່າ ທ່ານ ຂໍ້ມູນບັນທຶກຊົ່ວຄາວ ໃນ ໂປຣແກຣມທ່ອງເວັບ ຂອງ ທ່ານ ຈະຖືກລຶບ.",
-'welcomecreation' => '== ຍິນດີຕ້ອນຮັບ, $1! ==
-
-ບັນຊີ ຂອງທ່ານ ຖືກສ້າງຂຶ້ນແລ້ວ. ຢ່າລືມ ຕັ້ງຄ່າ ທ່ານ ຢູ່ {{SITENAME}}.',
 'yourname' => 'ຊື່ຜູ້ໃຊ້',
 'yourpassword' => 'ລະຫັດຜ່ານ',
 'yourpasswordagain' => 'ພິມລະຫັດຜ່ານອີກ',
@@ -538,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' => 'ການດັດແກ້ຫຼ້າສຸດ',
@@ -686,10 +687,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListUsers
 'listusers-submit' => 'ສະແດງ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ບັນທຶກການສ້າງບັນຊີຜູ້ໃຊ້',
-'newuserlogpagetext' => 'ນີ້ແມ່ນ ບັນທຶກການສ້າງ ບັນຊີຜູ້ໃຊ້ໃໝ່',
-
 # E-mail user
 'emailuser' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້ນີ້',
 'emailpage' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້',
@@ -724,10 +721,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watching' => 'ພວມຕິດຕາມ...',
 'unwatching' => 'ພວມເຊົາຕິດຕາມ...',
 
-'enotif_newpagetext' => 'ນີ້ແມ່ນໜ້າໃໝ່.',
-'changed' => 'ປ່ຽນແລ້ວ',
-'created' => 'ສ້າງແລ້ວ',
 'enotif_lastvisited' => 'ເບິ່ງ $1 ເພື່ອ ທຸກໆການປ່ຽນແປງ ຕັ້ງແຕ່ເທື່ອສຸດທ້າຍ ທີ່ ທ່ານເຂົ້າຫາ.',
+'created' => 'ສ້າງແລ້ວ',
+'changed' => 'ປ່ຽນແລ້ວ',
 
 # Delete
 'confirm' => 'ຢືນຢັນ',
index 15e1ead..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}}',
@@ -733,10 +732,9 @@ A sa afi kulobala di zwa mukoloko di kentezi, tampi \"ngambu kentezi\".",
 'watching' => 'Kentezi...',
 'unwatching' => 'Dikentezi...',
 
-'enotif_newpagetext' => 'Bye sa nca petulo.',
 'enotif_impersonal_salutation' => '{{SITENAME}} sebelu',
-'changed' => 'petuhoni',
 'created' => 'hlolini',
+'changed' => 'petuhoni',
 
 # Delete
 'deletepage' => 'Afi kulobala petulo',
@@ -1081,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 4334317..7bdd6f2 100644 (file)
@@ -315,7 +315,7 @@ $messages = array(
 'newwindow' => '(atsidaro naujame lange)',
 'cancel' => 'Atšaukti',
 'moredotdotdot' => 'Daugiau...',
-'mypage' => 'Mano puslapis',
+'mypage' => 'Naudotojo puslapis',
 'mytalk' => 'Mano aptarimas',
 'anontalk' => 'Šio IP aptarimas',
 'navigation' => 'Naršymas',
@@ -348,6 +348,7 @@ $messages = array(
 'namespaces' => 'Vardų sritys',
 'variants' => 'Variantai',
 
+'navigation-heading' => 'Naršymo meniu',
 'errorpagetitle' => 'Klaida',
 'returnto' => 'Grįžti į $1.',
 'tagline' => 'Iš {{SITENAME}}.',
@@ -589,9 +590,9 @@ Ją užrakinęs administratorius pateikė šį paaiškinimą: "$3".',
 
 Galite toliau naudoti {{SITENAME}} anonimiškai arba <span class='plainlinks'>[$1 prisijunkite]</span> iš naujo tuo pačiu ar kitu naudotoju.
 Pastaba: kai kuriuose puslapiuose ir toliau gali rodyti, kad esate prisijungęs iki tol, kol išvalysite savo naršyklės podėlį.",
-'welcomecreation' => '== Sveiki, $1! ==
-
-Jūsų paskyra buvo sukurta. Nepamirškite pakeisti savo [[Special:Preferences|{{SITENAME}} nustatymų]].',
+'welcomeuser' => 'Sveiki,  $1 !',
+'welcomecreation-msg' => 'Jūsų paskyra buvo sukurta.
+Nepamirškite pakeisti savo [[Special:Preferences|{{SITENAME}} nustatymų]].',
 'yourname' => 'Naudotojo vardas:',
 'yourpassword' => 'Slaptažodis:',
 'yourpasswordagain' => 'Pakartokite slaptažodį:',
@@ -736,6 +737,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',
 
@@ -907,7 +909,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 +934,12 @@ Greičiausiai jis yra ištrintas.',
 Jis jau egzistuoja.',
 'defaultmessagetext' => 'Numatytasis pranešimo tekstas',
 
+# 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ų.
 
@@ -1438,12 +1445,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',
-'rightsnone' => '(jokių)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'skaityti šį puslapį',
@@ -1667,6 +1675,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.',
@@ -1799,6 +1808,7 @@ Informacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.',
 'shared-repo-from' => 'iš $1',
 'shared-repo' => 'bendrosios failų saugyklos',
 'shared-repo-name-wikimediacommons' => 'Vikiteka',
+'upload-disallowed-here' => 'Jūs negalite perrašyti šio failo.',
 
 # File reversion
 'filerevert' => 'Sugrąžinti $1',
@@ -1905,6 +1915,7 @@ Kiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, tai
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|baitas|baitai|baitų}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorijos|kategorijų}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interviki nuoroda|interviki nuorodos}}',
 'nlinks' => '$1 {{PLURAL:$1|nuoroda|nuorodos|nuorodų}}',
 'nmembers' => '$1 {{PLURAL:$1|narys|nariai|narių}}',
 'nrevisions' => '$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}',
@@ -1933,6 +1944,7 @@ Kiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, tai
 'mostlinkedtemplates' => 'Daugiausiai nurodomi šablonai',
 'mostcategories' => 'Puslapiai su daugiausiai kategorijų',
 'mostimages' => 'Daugiausiai nurodomi failai',
+'mostinterwikis' => 'Puslapiai, turintys daugiausiai tarpkalbinių nuorodų',
 'mostrevisions' => 'Puslapiai su daugiausiai keitimų',
 'prefixindex' => 'Visi puslapiai pagal pavadinimo pradžią',
 'prefixindex-namespace' => 'Visi puslapiai prasidedantys ($1 vardų sritis)',
@@ -2051,10 +2063,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.
@@ -2078,6 +2086,7 @@ 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-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.',
@@ -2148,11 +2157,7 @@ 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_newpagetext' => 'Tai naujas puslapis.',
 'enotif_impersonal_salutation' => '{{SITENAME}} naudotojau',
-'changed' => 'pakeitė',
-'created' => 'sukurė',
-'enotif_subject' => '{{SITENAME}} projekte $PAGEEDITOR $CHANGEDORCREATED $PAGETITLE',
 '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',
@@ -2186,6 +2191,8 @@ $UNWATCHURL
 
 Atsiliepimai ir pagalba:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'sukurė',
+'changed' => 'pakeitė',
 
 # Delete
 'deletepage' => 'Trinti puslapį',
@@ -2887,11 +2894,38 @@ Leidžia pridėti atmetimo priežastį komentaruose',
 
 # Info page
 'pageinfo-title' => '„$1“ informacija',
-'pageinfo-header-edits' => 'Pakeitimai',
+'pageinfo-not-current' => 'Atsiprašome, neįmanoma pateikti šios senų versijų informacijos.',
+'pageinfo-header-basic' => 'Pagrindinė informacija',
+'pageinfo-header-edits' => 'Redagavimo istorija',
+'pageinfo-header-restrictions' => 'Puslapio apsaugos lygmuo',
+'pageinfo-header-properties' => 'Puslapio savybės',
+'pageinfo-display-title' => 'Rodyti pavadinimą',
+'pageinfo-default-sort' => 'Numatytasis rūšiavimo raktas',
+'pageinfo-length' => 'Puslapio ilgis (baitais)',
+'pageinfo-article-id' => 'Puslapio ID',
+'pageinfo-language' => 'Puslapio turinio kalba',
+'pageinfo-robot-policy' => 'Paieškos variklio būsena',
+'pageinfo-robot-index' => 'Indeksuotas',
+'pageinfo-robot-noindex' => 'Neindeksuotas',
 'pageinfo-views' => 'Peržiūrų skaičius',
-'pageinfo-watchers' => 'Stebėtojų skaičius',
+'pageinfo-watchers' => 'Puslapio stebėtojų skaičius',
+'pageinfo-redirects-name' => 'Nukreipimai į šį puslapį',
+'pageinfo-subpages-name' => 'Šio puslapio papuslapiai',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|peradresavimas|peradresavimai}}; $3 {{PLURAL:$3|neperadresavimas|peradresavimai}})',
+'pageinfo-firstuser' => 'Puslapio kūrėjas',
+'pageinfo-firsttime' => 'Puslapio sukūrimo data',
+'pageinfo-lastuser' => 'Paskutinis redaktorius',
+'pageinfo-lasttime' => 'Paskutinio keitimo data',
 'pageinfo-edits' => 'Keitimų skaičius',
 'pageinfo-authors' => 'Skirtingų autorių skaičius',
+'pageinfo-recent-edits' => 'Paskutinųjų keitimų skaičius (per $1 laikotarpį)',
+'pageinfo-recent-authors' => 'Pastarųjų skirtingų redaguotojų skaičius',
+'pageinfo-toolboxlink' => 'Puslapio informacija',
+'pageinfo-redirectsto' => 'Nukreipimai į',
+'pageinfo-redirectsto-info' => 'informacija',
+'pageinfo-contentpage' => 'Priskirtas turinio puslapiams',
+'pageinfo-contentpage-yes' => 'Taip',
+'pageinfo-protect-cascading-yes' => 'Taip',
 
 # Skin names
 'skinname-standard' => 'Klasikinė',
@@ -2946,6 +2980,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 .',
@@ -2974,6 +3009,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:
@@ -3730,6 +3766,10 @@ Paveikslėliai yra rodomi pilna raiška, kiti failų tipai paleidžiami tiesiogi
 'logentry-newusers-create2' => '$1 sukūrė naudotojo paskyrą $3',
 '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ą].
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 0638a5d..57e4127 100644 (file)
@@ -395,9 +395,6 @@ $2',
 'logouttext' => "'''I chhuak fel ta.'''
 Inziaklût kher lovin {{SITENAME}} hi i hmang chhunzawm thei ang, a nih loh vëk pawhin hmangtu hming pangngai emaw, a hming dang emawin <span class='plainlinks'>[$1 lût leh]</span> thei ang.
 I fangtu cache i thenfai hma chu phêk ţhenkhat intar lang a awm reng mai thei, i la  chhuak lo emaw tih mai tùrin.",
-'welcomecreation' => '==Kan lo lawm a che, $1!==
-I siangchan siam a ni ta.
-I [[Special:Preferences|{{SITENAME}}duhdàn]] siam danglam theihnghilh suh ang che.',
 'yourname' => 'Hmangtuhming:',
 'yourpassword' => 'Thurûk:',
 'yourpasswordagain' => 'Thurûk ziak nawn leh rawh le:',
@@ -610,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.',
@@ -949,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',
@@ -1357,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>
@@ -1419,14 +1415,12 @@ Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
 'watchlist-options' => 'Ralvèn duhdàn',
 
 'enotif_reset' => 'Phêk zawng zawng tlawh tawh vek angin chhinchhiah rawh.',
-'enotif_newpagetext' => 'Hei hi phêk thar a ni.',
 'enotif_impersonal_salutation' => '{{SITENAME}} hmangtu',
-'changed' => 'tihdanglam a ni ta',
-'created' => 'siam a ni ta',
-'enotif_subject' => '{{SITENAME}} phêk $PAGETITLE tih hi $CHANGEDORCREATED,  $PAGEEDITOR bultum a ni.',
 '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',
index f8e3bc9..51f38b6 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,8 +183,8 @@ $messages = array(
 'newwindow' => '(atveras jaunā logā)',
 'cancel' => 'Atcelt',
 'moredotdotdot' => 'Vairāk...',
-'mypage' => 'Mana lapa',
-'mytalk' => 'Mana diskusiju lapa',
+'mypage' => 'Lapa',
+'mytalk' => 'Diskusijas',
 'anontalk' => 'Šīs IP adreses diskusija',
 'navigation' => 'Navigācija',
 'and' => '&#32;un',
@@ -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,9 +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.",
-'welcomecreation' => '== Laipni lūdzam, $1! ==
-
-Tavs lietotāja konts ir izveidots. Neaizmirsti, ka ir iespējams mainīt [[Special:Preferences|{{grammar:ģenitīvs|{{SITENAME}}}} izmantošanas izvēles]].',
+'welcomeuser' => 'Laipni lūgts, $1!',
 'yourname' => 'Tavs lietotājvārds',
 'yourpassword' => 'Tava parole:',
 'yourpasswordagain' => 'Atkārto paroli',
@@ -722,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.',
@@ -747,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',
@@ -964,7 +968,7 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo.
 
 # Preferences page
 'preferences' => 'Izvēles',
-'mypreferences' => 'Mani uzstādījumi',
+'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.',
@@ -1026,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',
@@ -1037,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:',
@@ -1134,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',
@@ -1179,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',
@@ -1194,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',
@@ -1436,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',
@@ -1499,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',
@@ -1572,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 />
@@ -1685,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.',
@@ -1725,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.
@@ -1780,7 +1786,7 @@ Tā e-pasta adrese, kuru tu esi norādījis [[Special:Preferences|savā izvēļu
 
 # Watchlist
 'watchlist' => 'Mani uzraugāmie raksti',
-'mywatchlist' => 'Mani uzraugāmie raksti',
+'mywatchlist' => 'Uzraugāmie raksti',
 'nowatchlist' => 'Tavā uzraugāmo rakstu sarakstā nav neviena raksta.',
 'watchlistanontext' => 'Lūdzu $1, lai apskatītu vai labotu savu uzraugāmo rakstu saraksta saturu.',
 'watchnologin' => 'Neesi iegājis',
@@ -1812,11 +1818,7 @@ Ja vēlāk pārdomāsi un nevēlēsies vairs uzraudzīt šo lapu, klikšķini uz
 
 'enotif_mailer' => '{{SITENAME}} paziņojumu izsūtīšana',
 'enotif_reset' => 'Atzīmēt visas lapas kā apskatītas',
-'enotif_newpagetext' => 'Šī ir jauna lapa.',
 'enotif_impersonal_salutation' => '{{SITENAME}} lietotājs',
-'changed' => 'izmainīja',
-'created' => 'izveidoja',
-'enotif_subject' => '{{grammar:ģenitīvs|{{SITENAME}}}} lapu $PAGETITLE $CHANGEDORCREATED lietotājs $PAGEEDITOR',
 'enotif_lastvisited' => '$1 lai apskatītos visas izmaiņas kopš tava pēdējā apmeklējuma.',
 'enotif_lastdiff' => '$1 lai apskatītos šo izmaiņu.',
 'enotif_anon_editor' => 'anonīms lietotājs $1',
@@ -1847,6 +1849,8 @@ $UNWATCHURL
 
 Papildinformācija:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'izveidoja',
+'changed' => 'izmainīja',
 
 # Delete
 'deletepage' => 'Dzēst lapu',
@@ -2010,9 +2014,9 @@ $1',
 'blanknamespace' => '(Pamatlapa)',
 
 # Contributions
-'contributions' => 'Lietotāja devums',
+'contributions' => '{{GENDER:$1|Lietotāja|Lietotājas|Lietotāja}} devums',
 'contributions-title' => 'Lietotāja $1 devums',
-'mycontris' => 'Mans devums',
+'mycontris' => 'Devums',
 'contribsub2' => 'Lietotājs: $1 ($2)',
 'nocontribs' => 'Netika atrastas izmaiņas, kas atbilstu šiem kritērijiem.',
 'uctop' => '(pēdējā izmaiņa)',
@@ -2052,7 +2056,7 @@ Pēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:',
 'whatlinkshere-hideredirs' => '$1 pāradresācijas',
 'whatlinkshere-hidetrans' => '$1 lapas, kurās šī lapa izmantota kā veidne',
 'whatlinkshere-hidelinks' => '$1 saites',
-'whatlinkshere-hideimages' => '$1 attēlu saites',
+'whatlinkshere-hideimages' => '$1 failu saites',
 'whatlinkshere-filters' => 'Filtri',
 
 # Block/unblock
@@ -2263,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.",
@@ -2348,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',
@@ -2441,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',
@@ -2486,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.',
@@ -2981,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',
@@ -3081,8 +3105,16 @@ 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:',
@@ -3102,6 +3134,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 8e80197..407a06e 100644 (file)
@@ -11,6 +11,7 @@
  * @author Justincheng12345
  * @author Omnipaedista
  * @author Shinjiman
+ * @author Simon Shek
  * @author Super Wang
  */
 
@@ -522,8 +523,6 @@ $2',
 
 子可匿名還覽{{SITENAME}},或<span class='plainlinks'>[$1 復登]</span>同簿、異簿。
 未清謄本,覽器文舊,且慎之。",
-'welcomecreation' => '== $1大駕光臨! ==
-子簿增矣,敬更[[Special:Preferences|簿註]]。',
 'yourname' => '名',
 'yourpassword' => '符節',
 'yourpasswordagain' => '復核節',
@@ -753,7 +752,6 @@ $2',
 'template-protected' => '(錮)',
 'template-semiprotected' => '(半錮)',
 'hiddencategories' => '此頁屬隱類之員有$1:',
-'nocreatetitle' => '新題謝焉',
 'nocreatetext' => '舊題可修,新題謝焉。[[Special:UserLogin|登簿、增簿]]以逮權也。',
 'nocreate-loggedin' => '子權未逮,新頁謝焉。',
 'sectioneditnotsupported-title' => '不纂持節',
@@ -954,7 +952,7 @@ $1",
 'difference-title' => '$1各本之异',
 'difference-title-multipage' => '$1、$2之异',
 'difference-multipage' => '(辨頁)',
-'lineno' => '列$1:',
+'lineno' => '第$1行:',
 'compareselectedversions' => '辨二擇',
 'showhideselectedversions' => '示/藏之擇',
 'editundo' => '悔',
@@ -1244,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' => '閱此頁',
@@ -1749,10 +1750,6 @@ $1',
 'activeusers-hidesysops' => '藏有秩',
 'activeusers-noresult' => '無簿矣。',
 
-# Special:Log/newusers
-'newuserlogpage' => '誌簿',
-'newuserlogpagetext' => '此為誌簿之記也',
-
 # Special:ListGroupRights
 'listgrouprights' => '權任一覽',
 'listgrouprights-summary' => '此所列述,諸職所司也,各有異同。欲知其詳,請閱[[{{MediaWiki:Listgrouprights-helppage}}|此文]]。',
@@ -1836,11 +1833,7 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}}報',
 'enotif_reset' => '令為盡閱',
-'enotif_newpagetext' => '新灶',
 'enotif_impersonal_salutation' => '貴客',
-'changed' => '易',
-'created' => '撰',
-'enotif_subject' => '{{SITENAME}}簿{$PAGEEDITOR}{$CHANGEDORCREATED}{$PAGETITLE}',
 'enotif_lastvisited' => '自子出簿,有易見$1。',
 'enotif_lastdiff' => '欲閱此易,見$1。',
 'enotif_anon_editor' => '過客$1',
@@ -1863,6 +1856,8 @@ $NEWPAGE
 欲刪之頁,惠訪$UNWATCHURL
 
 饋助之,惠訪{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '撰',
+'changed' => '易',
 
 # Delete
 'deletepage' => '刪頁',
@@ -2836,5 +2831,6 @@ MediaWiki乃為用之發,無擔之責也;亦無售目之默擔也。參GNU
 '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 98788e6..78181c1 100644 (file)
@@ -423,9 +423,6 @@ $2',
 
 अहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ <span class='plainlinks'>[$1 log in again]</span> वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी।
 ई मोन राखू जे किछु पन्ना एना देखा पड़ि सकैए जेना अहाँ अखनो सम्प्रवेशित होइ, जावत अहाँ अपन गवेषकक उपस्मृति मेटा नै दै छी।",
-'welcomecreation' => '== स्वागत अछि, $1! ==
-अहाँक खाता खुजि गेल अछि।
-अपन [[Special:Preferences|{{अन्तर्जाल}} preferences]] बदलब नै बिसरू।',
 'yourname' => 'प्रयोक्ता:',
 'yourpassword' => 'कूटशब्द:',
 'yourpasswordagain' => 'कूटशब्द फेरसँ टाइप करू:',
@@ -752,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' => 'अहाँकेँ नव पन्ना बनेबाक अधिकार नै अछि।',
@@ -1283,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' => 'ई पन्ना पढ़ू',
@@ -1871,10 +1868,6 @@ $1',
 'activeusers-hidesysops' => 'संचालक नुकाउ',
 'activeusers-noresult' => 'कोनो प्रयोक्ता नै भेटल',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोक्ता रचना वृत्तलेख',
-'newuserlogpagetext' => 'ई प्रयोक्ता निर्माणक वृत्तलेख अछि।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'प्रयोक्ता संवर्ग अधिकार',
 'listgrouprights-summary' => 'ई सभ प्रयोक्ता संवर्गक एकटा सूची अछि जे ऐ विकीपरपरिभाषित अछि ओकर संसर्गित प्रवेश अधिकारक संग।
@@ -1968,11 +1961,7 @@ $1',
 
 'enotif_mailer' => '{{जालस्थल}} सूचना पत्रक',
 'enotif_reset' => 'सभ पन्नाकेँ देखल चिन्हित करू',
-'enotif_newpagetext' => 'ई एकटा नव पन्ना छी।',
 'enotif_impersonal_salutation' => '{{अन्तर्जाल}} प्रयोक्ता',
-'changed' => 'बदलल गेल',
-'created' => 'बनाएल गेल',
-'enotif_subject' => '{{अन्तर्जाल}} पन्ना $PAGETITLE भेल $CHANGEDORCREATED द्वारा $PAGEEDITOR',
 'enotif_lastvisited' => 'देखू $1 अपन अन्तिम बेर अएलाक बादक परिवर्तन लेल।',
 'enotif_lastdiff' => 'ऐ परिवर्तनकेँ देखबा लेल $1 देखू।',
 'enotif_anon_editor' => 'गुप्त प्रयोक्ता $1',
@@ -2005,6 +1994,8 @@ $UNWATCHURL
 
 अपन अनुभव बतेबा वा कोनो सहायता लेल:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाएल गेल',
+'changed' => 'बदलल गेल',
 
 # Delete
 'deletepage' => 'पन्ना मेटाउ',
@@ -3537,6 +3528,7 @@ $5
 'logentry-newusers-create2' => '$1 {{लिंग:$2|बनाएल}} {{लिंग:$4|एकटा प्रयोक्ता खाता}} $3',
 'logentry-newusers-autocreate' => 'खाता $1 छल {{लिंग:$2|बनाएल}} स्वतः',
 'newuserlog-byemail' => 'कूटशब्द ई-पत्र द्वारा पठाएल गेल',
+'rightsnone' => '(कोनो नै)',
 
 # API errors
 'api-error-badaccess-groups' => 'अहि विकी सें अहां कोनो प्रारूप लोड नहि क सकब.',
index 0bb810c..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',
@@ -410,9 +415,6 @@ Alesane yakuwe "\'\'$2\'\'".',
 
 Rika teyeng terus nggunakna {{SITENAME}} kanthi anonim, utawa Rika teyeng <span class='plainlinks'>[$1 mlebu log maning]</span> nganggo jeneng panganggo sing padha utawa sejene.
 Digatekna ya, nek ana kaca sing esih terus nidokna nek rika esih mlebu log nnganti Rika mbusak singgahan nang panjelajah web-e Rika.",
-'welcomecreation' => '== Sugeng rawuh, $1! ==
-
-Akun Rika uwis digawe. Aja kelalen nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] Rika.',
 'yourname' => 'Jeneng panganggo:',
 'yourpassword' => 'Tembung sandhi:',
 'yourpasswordagain' => 'Balèni tembung sandhi:',
@@ -627,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.',
@@ -670,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.',
@@ -834,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',
@@ -919,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.',
@@ -1140,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',
@@ -1255,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',
@@ -1441,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',
@@ -1553,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é):',
@@ -1789,4 +1809,7 @@ Sing liyane bakal diumpetna sacara ''default''.
 # Special:Tags
 'tag-filter' => 'Filter [[Special:Tags|Tag]]:',
 
+# New logging system
+'rightsnone' => '(ora ana)',
+
 );
index f7b70be..bf1105e 100644 (file)
@@ -548,9 +548,6 @@ $2',
 
 Тондейть ули кода ащемс {{SITENAME}}са апак содак эли <span class='plainlinks'>[$1 сувак тага весть]</span> кода сяка эли иля тиись.
 Кой-кона лопатне илядсть стамкс кодамкс синь ульсть тонь лисемада инголе мъзярс тонь интернет полатксце изь аруяфтов эсь ванфневи файлхнень эзда.",
-'welcomecreation' => '== Сувак, $1! ==
-
-Тонь сёрматфтомаце анок. Тят юкста полафнемс эсь [[Special:Preferences|{{SITENAME}} латцематне]].',
 'yourname' => 'Тиить лемоц:',
 'yourpassword' => 'Сувама валце:',
 'yourpasswordagain' => 'Сёрматк сувама валце омбоцекс:',
@@ -821,7 +818,6 @@ $2',
 'template-protected' => '(аралаф)',
 'template-semiprotected' => '(пялес-аралаф)',
 'hiddencategories' => 'Тя лопась {{PLURAL:$1|1 кяшф катериень|$1 кяшф категориень}} полаец:',
-'nocreatetitle' => 'Лопань тиемац оторонзаф',
 'nocreatetext' => '{{SITENAME}}-са од лопатнень тиемац оторонзаф.
 Тондейть ули кода мърдамс меки ди петнемс тиф ни лопать, эли [[Special:UserLogin|сувамс эли сёрматфтомс одукс]].',
 'nocreate-loggedin' => 'Тон аф мярьговат тиемс од лопат.',
@@ -1229,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' => 'тя лопать морафтома',
@@ -1674,10 +1672,6 @@ $3 макссь туфталсь - ''$2''",
 'listusers-submit' => 'Няфтемс',
 'listusers-noresult' => 'Тиихть исть мув.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Тиинь ушедоманзон лувомасна',
-'newuserlogpagetext' => 'Тя тиинь ушедоманзон лувомасна.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Тиихнень полгаснон видексонза',
 'listgrouprights-summary' => 'Тяса тиихнень полгасна конатне сувсихть тя Викис синь сувама видексснон мархта.
@@ -1754,11 +1748,7 @@ $3 макссь туфталсь - ''$2''",
 
 'enotif_mailer' => '{{SITENAME}} Пачфнематнень Кучи',
 'enotif_reset' => 'Путомс тяшкс сембе суваф лопатнень лангс',
-'enotif_newpagetext' => 'Тя од лопа.',
 'enotif_impersonal_salutation' => '{{SITENAME}} тиись',
-'changed' => 'полафтсь',
-'created' => 'тиф',
-'enotif_subject' => '{{SITENAME}} page $PAGETITLE has been $CHANGEDORCREATED by $PAGEEDITOR',
 'enotif_lastvisited' => 'Ванк $1 тонь мекольце самдот меле сембе поланематнень няфтеманкса.',
 'enotif_lastdiff' => 'Ванк $1 тя полафнемать няфтеманкса.',
 'enotif_anon_editor' => 'лемфтома тиись $1',
@@ -1788,6 +1778,8 @@ $UNWATCHURL
 
 Азома мекпяли ди иля лезкс:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'тиф',
+'changed' => 'полафтсь',
 
 # Delete
 'deletepage' => 'Нардамс лопать',
@@ -2896,5 +2888,6 @@ $5
 'revdelete-restricted' => 'нолдаф тевс кардафксне системонь вятиксненди',
 'revdelete-unrestricted' => 'системонь вятиксненди кардафксне валхтфт',
 'newuserlog-byemail' => 'сувама валце кучф электрононь сёрмаса',
+'rightsnone' => '(аш)',
 
 );
index a92dfec..7b5450e 100644 (file)
@@ -349,8 +349,8 @@ $messages = array(
 'newwindow' => '(sokafy anaty takila hafa)',
 'cancel' => 'Aoka ihany',
 'moredotdotdot' => 'Tohiny...',
-'mypage' => 'Pejiko',
-'mytalk' => 'Ny diniko',
+'mypage' => 'Pejy',
+'mytalk' => 'Dinika',
 'anontalk' => "Resaka ho an'io adiresy IP io",
 'navigation' => 'Fikarohana',
 'and' => '&#32;sy',
@@ -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" :
 
@@ -616,10 +620,6 @@ Ny antony napetraka dia : « ''$2'' ».",
 
 Mbola afaka mampiasa ny {{SITENAME}} ianao na dia ef anivoaka aza, na afaka <span class='plainlinks'>[$1 miverina mihiditra]</span> ianao ambanin'ny anaranao na anaram-pikambana hafa.
 Fantaro fa ny endriky ny pejy sasany dia mety mitovy amin'ny endrika nahitanao azy tamin' ianao mbola niditra tato, ho toy izany ny endri-pejy raha tsy nofafanao ny cache.",
-'welcomecreation' => '== Tonga soa, $1! ==
-
-Voaforona soa aman-tsara ny kaontinao.
-Aza hadino ny manova ny [[Special:Preferences|safidinao]]',
 'yourname' => 'Solonanarana',
 'yourpassword' => 'Tenimiafina',
 'yourpasswordagain' => 'Avereno ampidirina eto ny tenimiafina',
@@ -948,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',
@@ -1125,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",
@@ -1255,7 +1255,7 @@ ihany no miseho amin'ny vokatry ny karoka).",
 
 # Preferences page
 'preferences' => 'Ny momba anao',
-'mypreferences' => 'Ny safidiko',
+'mypreferences' => 'Safidy',
 'prefs-edits' => 'isa ny fanovàna :',
 'prefsnologin' => 'Tsy tafiditra',
 'prefsnologintext' => 'Mila <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} misoratra ary tafiditra]</span> amin\'ny kaontinao ianao vao afaka manova ny safidinao.',
@@ -1331,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:',
@@ -1481,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',
@@ -1726,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".',
@@ -1800,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,11 +1915,11 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny
 'statistics-views-total' => 'Tsidika',
 'statistics-views-peredit' => 'Tsidika isaky ny fanovana',
 'statistics-users' => '[[Special:ListUsers|Mpikambana]] nisoratra anarana',
-'statistics-users-active' => 'Mpikambana manova matetika',
+'statistics-users-active' => 'Mpikambana mavitrika',
 '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',
@@ -2087,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',
@@ -2110,6 +2103,7 @@ Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'mailnologin' => 'Tsy misy adiresy handefasana ny tenimiafina',
 'mailnologintext' => "Mila [[Special:UserLogin|miditra]] ianao sady manana imailaka mandeha sy voamarina ao amin'ny [[Special:Preferences|mombamomba anao]] vao afaka mandefa imailaka amin'ny mpikambana hafa.",
 'emailuser' => 'Andefaso imailaka io mpikambana io',
+'emailuser-title-target' => "Handefa mailaka any amin'ity mpikambana ity{{GENDER:$1}}",
 'emailuser-title-notarget' => "Handefa imailaka an'ilay mpikambana",
 'emailpage' => 'Andefaso imailaka io mpikambana io',
 'emailpagetext' => "Raha nametraka adiresy tena miasa tao amin'ny [[Special:Preferences|mombamomba azy io mpikambana io]],
@@ -2147,7 +2141,7 @@ na tsy maniry handray imailaka avy amin'ny mpikambana hafa izy.",
 
 # Watchlist
 'watchlist' => 'Narahiko maso',
-'mywatchlist' => 'Pejy arahako',
+'mywatchlist' => 'Pejy arahana',
 'watchlistfor2' => "Ho an'i $1 $2",
 'nowatchlist' => 'Tsy manaraka pejy ianao.',
 'watchlistanontext' => "Andana $1 hahafahanao mijery na manova zavatra ao amin'ny pejy arahanao.",
@@ -2186,37 +2180,39 @@ Aoriana, raha irinao ny hanaisotra azy ao amin'ny pejy arahanao maso, dia tsindr
 
 'enotif_mailer' => "Fomba fampandrenesana amin'ny alalan'ny imailaka an'i {{SITENAME}}",
 'enotif_reset' => 'Marihana ho efa voavaky ny pejy rehetra',
-'enotif_newpagetext' => 'Pejy vaovao ity pejy ity.',
 'enotif_impersonal_salutation' => "Mpikamban'i {{SITENAME}}",
-'changed' => 'voaova',
-'created' => 'voaforona',
-'enotif_subject' => '$CHANGEDORCREATED $PAGEEDITOR ny pejy $PAGETITLE tao amin\'ny {{SITENAME}}',
 '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,
-
-$CHANGEDORCREATED $PAGEEDITOR tamin\'ny $PAGEEDITDATE ny pejy $PAGETITLE tao amin\'ny sehatra {{SITENAME}}. Jereo eto $PAGETITLE_URL ny votoatiny ankehitriny.
+'enotif_body' => 'Tompoko $WATCHINGUSERNAME,
 
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
-Fanazavana tsotsotra: $PAGESUMMARY $PAGEMINOREDIT
+Ambangovangon\'ny mpikambana nanova : $PAGESUMMARY $PAGEMINOREDIT
 
-Fifandraisana amin\'ny nanova ny pejy:
-imailaka: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+Ifandraisana amin\'io mpikambana io :
+mailaka : $PAGEEDITOR_EMAIL
+wiki : $PAGEEDITOR_WIKI
 
-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.
+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.
 
-             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',
@@ -2258,6 +2254,7 @@ ataovy am-pitandremana ity tao ity.",
 'rollback' => 'Foano indray ilay fanovana',
 'rollback_short' => 'Aza ovaina indray',
 'rollbacklink' => 'foano',
+'rollbacklinkcount' => 'hamoana fanovana{{PLURAL:$1}} $1',
 'rollbackfailed' => "Tsy voaverina amin'ny teo aloha",
 'cantrollback' => "Tsy afaka iverenana ny fanovana; ny mpanova farany ihany no tompon'ny pejy.",
 'alreadyrolled' => "Tsy afaka foanana ny fanovana ny pejy « [[:$1]] » nataon'i [[User:$2|$2]] ([[User talk:$2|Dinika]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])
@@ -2399,7 +2396,7 @@ $1',
 # Contributions
 'contributions' => "Fandraisan'anjaran'ny mpikambana",
 'contributions-title' => "Fandraisan'anjaran'i $1",
-'mycontris' => 'Ny nosoratako',
+'mycontris' => "Fandraisan'anjara",
 'contribsub2' => "ho an'ny $1 ($2)",
 'nocontribs' => "Tsy misy fanovana mifanaraka amin'ireo critères ireo.",
 'uctop' => ' (loha)',
@@ -2440,7 +2437,7 @@ Aseho eo ambany ny iditra farany ao amin'ny laogim-panakanana  mba hampahalala :
 'whatlinkshere-hideredirs' => '$1 ny fihodinana',
 'whatlinkshere-hidetrans' => '$1 ny tsofo-pejy',
 'whatlinkshere-hidelinks' => '$1 ny rohy',
-'whatlinkshere-hideimages' => '$1 rakitra mirohy',
+'whatlinkshere-hideimages' => '$1 ny rakitra mirohy',
 'whatlinkshere-filters' => 'sivana',
 
 # Block/unblock
@@ -2937,6 +2934,13 @@ Raha alefanao ilay izy, mety ho simban'io renifango io ny solosainao.",
 'bydate' => 'araka ny daty',
 'sp-newimages-showfrom' => "Aseho ny rakitra vaovao manomboka amin'ny $1 tamin'ny $2",
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => 'segondra{{PLURAL:$1}}',
+'minutes' => 'minitra{{PLURAL:$1}}',
+'hours' => 'ora{{PLURAL:$1}}',
+'days' => 'andro{{PLURAL:$1}}',
+'ago' => '$1 lasa izay',
+
 # Bad image list
 'bad_image_list' => "Ity ny andrefiny :
 
@@ -3298,7 +3302,15 @@ Aseho amin'ny tena habeny ny sary aseho, ny hafa dia alefa miaraka amin'ny rindr
 'logentry-suppress-delete' => "nofafan'i $1 ny pejy $3",
 'revdelete-restricted' => "nametraka fanerena ho an'ny mpandrindra",
 'revdelete-unrestricted' => "fanerena nesorina tamin'ny mpandrindra",
-'logentry-newusers-create' => 'nanokatra ny kaontiny i $1',
-'newuserlog-byemail' => 'tenimiafina nalefa imailaka',
+'logentry-move-move' => "nanova ny anaran'i $3 ho $4 i $1",
+'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-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 46b691a..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' => '(тӱшкаште улшо-влак)',
 
@@ -791,8 +791,6 @@ $messages = array(
 'watching' => 'Эскерымаш лӱмерыш ешарымаш...',
 'unwatching' => 'Эскерымаш лӱмер гыч шӧрымаш...',
 
-'enotif_newpagetext' => 'Тиде у лаштык.',
-
 # Delete
 'deletepage' => 'Лаштыкым шӧраш',
 'delete-confirm' => 'Шӧраш "$1"',
index ebda528..23a0feb 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Bennylin
+ * @author Iwan Novirion
  * @author Luthfi94
  * @author Naval Scene
  * @author Rahmatdenas
@@ -25,7 +26,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Suruakkan suntingan nan lah dijago di parubahan tabaru',
 'tog-newpageshidepatrolled' => 'Suruakkan halaman nan lah dijago dari senarai halaman baru',
 'tog-extendwatchlist' => 'Kambangkan senarai pantauan untuak malihek sado parubahan, indak nan baru se',
-'tog-usenewrc' => 'Gunoan parubahan terkini tingkek lanjut (paralu JavaScript)',
+'tog-usenewrc' => 'Kalompok parubahan dek laman dalam parubahan tabaru jo daftar pantauan (paralu JavaScript)',
 'tog-numberheadings' => 'Agiah nomor judua sacaro otomatis',
 'tog-showtoolbar' => 'Tampilkan bilah suntiang (paralu JavaScript)',
 'tog-editondblclick' => 'Suntiang laman jo klik ganda (JavaScript)',
@@ -33,20 +34,20 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Hiduikan bagian panyuntiangan jo mangklik kanan pado judul bagian (JavaScript)',
 'tog-showtoc' => 'Caliakkan dafta isi (untuak laman nan mampunyoi labiah dari 3 subbagian)',
 'tog-rememberpassword' => 'Kana log masuak denai di peramban ko (salamo $1 {{PLURAL:$1|hari|hari}})',
-'tog-watchcreations' => 'Tambahkan halaman nan den buek ka daftar pantauan',
-'tog-watchdefault' => 'Tambahkan halaman nan den suntiang ka daftar pantauan',
-'tog-watchmoves' => 'Tambahkan halaman nan den pindahkan ka daftar pantauan',
-'tog-watchdeletion' => 'Tambahkan halaman nan den hapuih ka daftar pantauan',
+'tog-watchcreations' => 'Tambahkan laman nan den buek jo gambar nan den unggah ka daftar pantauan',
+'tog-watchdefault' => 'Tambahkan laman jo gambar nan den suntiang ka daftar pantauan',
+'tog-watchmoves' => 'Tambahkan laman jo gambar nan den pindah ka daftar pantauan',
+'tog-watchdeletion' => 'Tambahkan laman jo gambar nan den hapuih ka daftar pantauan',
 'tog-minordefault' => 'Tandoi sadoalah suntiangan sabagai suntiangan ketek sacaro baku',
 'tog-previewontop' => 'Tampilkan pratonton sabalun kotak suntiang',
 'tog-previewonfirst' => 'Caliakkan pratayang pado suntiangan patamo',
 'tog-nocache' => 'Matikan panyinggahan laman peramban',
-'tog-enotifwatchlistpages' => 'Kirim e-mail kalau laman nan den pantau lah barubah',
+'tog-enotifwatchlistpages' => 'Kirimkan surel kalau laman atau gambar pado daftar pantauan lah barubah',
 'tog-enotifusertalkpages' => 'E-mail ambo jiko laman barundiang denai lah barubah',
-'tog-enotifminoredits' => 'Kirim e-mail walau hanyo ado parubahan saketek',
+'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-oldsig' => 'Pratayang tando tangan:',
+'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.].)',
 'tog-externaldiff' => 'Gunokan diff eksternal sacaro bawaan (untuak nan ahli sajo, kabutuahan pangaturan khusus pado komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.].)',
@@ -66,7 +67,7 @@ $messages = array(
 
 'underline-always' => 'Taruih',
 'underline-never' => 'Indak pernah',
-'underline-default' => 'Bawaan panjalajah web',
+'underline-default' => 'Kulik atau panjalajah web bawaan',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Gaya tulisan komputer pado kotak panyuntiangan:',
@@ -83,18 +84,18 @@ $messages = array(
 'thursday' => 'Kamih',
 'friday' => 'Jumek',
 'saturday' => 'Sabtu',
-'sun' => 'Aha',
+'sun' => 'Min',
 'mon' => 'Sin',
 'tue' => 'Sal',
 'wed' => 'Rab',
 'thu' => 'Kam',
 'fri' => 'Jum',
-'sat' => 'Sab',
+'sat' => 'Sat',
 'january' => 'Januari',
-'february' => 'Februari',
+'february' => 'Pebruari',
 'march' => 'Maret',
 'april' => 'April',
-'may_long' => 'Mei',
+'may_long' => 'Mai',
 'june' => 'Juni',
 'july' => 'Juli',
 'august' => 'Agustus',
@@ -103,10 +104,10 @@ $messages = array(
 'november' => 'November',
 'december' => 'Desember',
 'january-gen' => 'Januari',
-'february-gen' => 'Februari',
+'february-gen' => 'Pebruari',
 'march-gen' => 'Maret',
 'april-gen' => 'April',
-'may-gen' => 'Mei',
+'may-gen' => 'Mai',
 'june-gen' => 'Juni',
 'july-gen' => 'Juli',
 'august-gen' => 'Agustus',
@@ -115,10 +116,10 @@ $messages = array(
 'november-gen' => 'November',
 'december-gen' => 'Desember',
 'jan' => 'Jan',
-'feb' => 'Feb',
+'feb' => 'Peb',
 'mar' => 'Mar',
 'apr' => 'Apr',
-'may' => 'Mei',
+'may' => 'Mai',
 'jun' => 'Jun',
 'jul' => 'Jul',
 'aug' => 'Agu',
@@ -141,20 +142,20 @@ $messages = array(
 '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-limited' => 'Kategori iko mamiliki {{PLURAL:$1|laman|$1 laman}} barikuik.',
-'listingcontinuesabbrev' => 'cont.',
+'listingcontinuesabbrev' => 'lanjuik',
 'index-category' => 'Laman nan diindeks',
 'noindex-category' => 'Laman nan indak diindeks',
 'broken-file-category' => 'Laman jo gambar rusak',
 
 'about' => 'Tentang',
 'article' => 'Artikel',
-'newwindow' => '(buka di jendela baru)',
+'newwindow' => '(buka di jandela baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lainnyo...',
-'mypage' => 'Laman ambo',
-'mytalk' => 'Ota denai',
+'mypage' => 'Laman',
+'mytalk' => 'Maota',
 'anontalk' => 'Ota IP iko',
-'navigation' => 'Navigasi',
+'navigation' => 'Pinteh',
 'and' => '&#32;jo',
 
 # Cologne Blue skin
@@ -173,17 +174,18 @@ $messages = array(
 'vector-action-move' => 'Pindahkan',
 'vector-action-protect' => 'Lindungi',
 'vector-action-undelete' => 'Pambatalan panghapusan',
-'vector-action-unprotect' => 'Palinduangan',
-'vector-simplesearch-preference' => 'Aktifkan pancarian saran nan disampurnokan (hanyo kulik Vector)',
+'vector-action-unprotect' => 'Tuka palinduangan',
+'vector-simplesearch-preference' => 'Aktifkan kotak pancarian sadarano (hanyo kulik Vector)',
 'vector-view-create' => 'Buek',
 'vector-view-edit' => 'Suntiang',
-'vector-view-history' => 'Caliak riwayat nan lalu',
+'vector-view-history' => 'Caliak riwayaik nan lalu',
 'vector-view-view' => 'Baco',
 'vector-view-viewsource' => 'Caliak sumber',
 'actions' => 'Tindakan',
 'namespaces' => 'Ruang namo:',
 'variants' => 'Variasi:',
 
+'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Kesalahan',
 'returnto' => 'Baliak ka $1',
 'tagline' => 'Dari {{SITENAME}}',
@@ -192,11 +194,11 @@ $messages = array(
 'searchbutton' => 'Cari',
 'go' => 'Tuju',
 'searcharticle' => 'Tuju',
-'history' => 'Riwayat halaman',
-'history_short' => 'Riwayat',
+'history' => 'Riwayaik halaman',
+'history_short' => 'Riwayaik',
 'updatedmarker' => 'diubah sajak kunjuangan tarakhir ambo',
 'printableversion' => 'Versi cetak',
-'permalink' => 'Pranala permanen',
+'permalink' => 'Pranala parmanen',
 'print' => 'Cetak',
 'view' => 'Tampilkan',
 'edit' => 'Suntiang',
@@ -210,17 +212,17 @@ $messages = array(
 'protect' => 'Lindungi',
 'protect_change' => 'ubah',
 'protectthispage' => 'Lindungi laman iko',
-'unprotect' => 'Palinduangan',
-'unprotectthispage' => 'Bukak palindungan laman iko',
+'unprotect' => 'Tuka palinduangan',
+'unprotectthispage' => 'Tuka palindungan laman ko',
 'newpage' => 'Laman baru',
 'talkpage' => 'Musyawarahkan laman ko',
 'talkpagelinktext' => 'Maota',
 'specialpage' => 'Laman istimewa',
-'personaltools' => 'Peralatan pribadi',
+'personaltools' => 'Pakakeh paribadi',
 'postcomment' => 'Bagian baru',
 'articlepage' => 'Liek isi laman',
-'talk' => 'Ota',
-'views' => 'Tampilan',
+'talk' => 'Rundiang',
+'views' => 'Caliak',
 'toolbox' => 'Kotak pakakeh',
 'userpage' => 'Liek laman pangguno',
 'projectpage' => 'Caliak laman proyek',
@@ -230,14 +232,14 @@ $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 $1, maso $2.',
+'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' => 'navigasi',
+'jumptonavigation' => 'pinteh',
 'jumptosearch' => 'cari',
 'view-pool-error' => 'Maaf, server sadang sibuak pado kini ko.
 Talalu banyak pangguno barusaho mancaliak laman iko.
@@ -249,24 +251,24 @@ $1',
 'pool-errorunknown' => 'Kasalahan nan indak dikatahui',
 
 # 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' => 'Tentang {{SITENAME}}',
-'aboutpage' => 'Project:Perihal',
+'aboutsite' => 'Tantang {{SITENAME}}',
+'aboutpage' => 'Project:Tantang',
 'copyright' => 'Kandungan tasadio dalam $1',
 'copyrightpage' => '{{ns:project}}:Hak cipta',
-'currentevents' => 'Paristiwa takini',
-'currentevents-url' => 'Project:Paristiwa takini',
-'disclaimers' => 'Penyangkalan',
-'disclaimerpage' => 'Project:Penyangkalan umum',
-'edithelp' => 'Bantuan suntingan',
+'currentevents' => 'Kajadian kini ko',
+'currentevents-url' => 'Project:Kajadian kini ko',
+'disclaimers' => 'Sanggah',
+'disclaimerpage' => 'Project:Sanggahan umum',
+'edithelp' => 'Bantuan suntiangan',
 'edithelppage' => 'Help:Suntingan',
-'helppage' => 'Help:Kandungan',
-'mainpage' => 'Halaman Utamo',
-'mainpage-description' => 'Laman Utamo',
+'helppage' => 'Help:Takadia',
+'mainpage' => 'Laman Utamo',
+'mainpage-description' => 'Laman utamo',
 'policy-url' => 'Project:Kabijakan',
 'portal' => 'Portal komunitas',
 'portal-url' => 'Project:Portal komunitas',
-'privacy' => 'Kebijakan privasi',
-'privacypage' => 'Project:Kebijakan privasi',
+'privacy' => 'Kecipehan privasi',
+'privacypage' => 'Project:Kecipehan privasi',
 
 'badaccess' => 'Kesalahan hak akses',
 'badaccess-group0' => 'Sanak indak diizinkan untuak malakukan tindakan nan Sanak minta.',
@@ -276,20 +278,22 @@ $1',
 'versionrequiredtext' => 'MediaWiki versi $1 dibutuahkan untuak manggunokan laman ijo. Caliak [[Special:Version|laman versi]]',
 
 'ok' => 'OK',
-'retrievedfrom' => 'Diperoleh dari "$1"',
+'retrievedfrom' => 'Didapek dari "$1"',
 'youhavenewmessages' => 'Awak punyo $1 ($2).',
 'newmessageslink' => 'pasan baru',
 'newmessagesdifflink' => 'parubahan terakhir',
 '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',
 'editsection' => 'suntiang',
 'editold' => 'suntiang',
-'viewsourceold' => 'Caliak sumber',
+'viewsourceold' => 'caliak sumber',
 'editlink' => 'suntiang',
-'viewsourcelink' => 'Lihek sumber',
+'viewsourcelink' => 'caliak sumber',
 'editsectionhint' => 'Suntiang bagian: $1',
-'toc' => 'Kandungan',
+'toc' => 'Daftar isi',
 'showtoc' => 'tampilkan',
 'hidetoc' => 'suruakkan',
 'collapsible-collapse' => 'Ketekan',
@@ -301,15 +305,15 @@ $1',
 'feed-invalid' => 'Tipe pamintaan umpan indak tapek.',
 'feed-unavailable' => 'Umpan sindikasi indak tasadio',
 'site-rss-feed' => '$1 RSS Umpan',
-'site-atom-feed' => '$1 umpan Atom',
+'site-atom-feed' => 'Umpan Atom $1',
 'page-rss-feed' => 'Umpan RSS "$1"',
 'page-atom-feed' => '"$1" umpan Atom',
-'red-link-title' => '$1 (halaman alun babuek)',
+'red-link-title' => '$1 (laman indak ado)',
 'sort-descending' => 'Urutkan manurun',
 'sort-ascending' => 'Urutkan manaik',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Halaman',
+'nstab-main' => 'Laman',
 'nstab-user' => 'Laman pangguno',
 'nstab-media' => 'Laman Media',
 'nstab-special' => 'Laman istimewa',
@@ -331,12 +335,12 @@ Dafta laman istimewa nan sah dapek dicaliak di [[Special:SpecialPages|{{int:spec
 # General errors
 'error' => 'Kasalahan',
 'databaseerror' => 'Kasalahan basis data',
-'dberrortext' => 'Ado kasalahan sintaks pado pamintaan basis data.
-Kasalahan ini mungkin manandokan adonyo sabuah \'\'bug\'\' dalam parangkek lunak.
+'dberrortext' => 'Kasalahan sintaks pado pamintaan basis data lah tajadi.
+Iko mungkin manandokan adonyo bug pado parangkek lunak.
 Pamintaan basis data nan tarakhir adalah:
-<blockquote><tt>$1</tt></blockquote>
-dari dalam fungsi "<tt>$2</tt>".
-Basis data manghasilkan kasalahan "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+dari dalam fungsi "<code>$2</code>".
+Basis data manghasilkan kasalahan "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Ado kasalahan sintaks pado pamintaan basis data.
 Pamintaan basis data nan terakhir adalah:
 "$1"
@@ -346,12 +350,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 yang seharusnyo ado, namo "$1" $2.
+'missing-article' => 'Basis data indak dapek manamukan teks dari laman nan saharuihnyo ado, yaitu "$1" $2.
 
-Hal ko biasonyo disebabkan dek pranala usang ka riwayat terdahulu dari laman yang lah dihapuih.
+Hal ko biasonyo disababkan dek pranala usang ka pabaikkan tadahulu laman nan alah dihapuih.
 
-Jiko bukan iko penyebabnyo, awak mungkin lah manamukan sabuah bug dalam perangkat lunak ko.
-Sila laporkan ka [[Special:ListUsers/sysop|Pengurus]], dengan manandokan alamat URL nan dituju.',
+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.',
 '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',
@@ -371,21 +375,25 @@ Sila laporkan ka [[Special:ListUsers/sysop|Pengurus]], dengan manandokan alamat
 'cannotdelete' => 'Laman atau berkas "$1" indak dapek dihapuih.
 Mungkin alah dihapuih jo urang lain.',
 'cannotdelete-title' => 'Indak bisa mangapuih halaman "$1"',
+'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.',
-'perfcached' => 'Data barikuik iko diambiak dari singgahan dan mungkin indak data nan baharu. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Data barikut iko diambiak dari singgahan dan tarakhir dipabaharui pado $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'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.',
 'wrong_wfQuery_params' => 'Parameter salah ka wfQuery()<br />Fungsi: $1<br />Pamintaan: $2',
-'viewsource' => 'Lihek sumber',
+'viewsource' => 'Caliak sumber',
 'viewsource-title' => 'Caliak sumber untuak $1',
 'actionthrottled' => 'Tindakan dibatasi',
 'actionthrottledtext' => 'Anda dibatasi untuak malakuan tindakan iko talalu banyak dalam waktu singkek. Sila mancubo laik satalah bara menit.',
-'protectedpagetext' => 'Laman iko alah dikunci untuak manghindari panyuntiangan.',
+'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 dan alah dikunci untuak manghindari kasalahan.',
-'editinginterface' => "'''Paringatan:''' Sanak manyuntiang suatu laman nan digunoan untuak manyediakan teks antarmuko untuak parangkaik lunak situs iko. Parubahan teks iko akan mampangaruhi tampilan pado antarmuko pangguno untuak pangguno lain.
+'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.",
 'sqlhidden' => '(Pamintaan SQL disuruakkan)',
 'cascadeprotected' => 'Laman iko alah dilindungi dari panyuntiangan karano disartokan di {{PLURAL:$1|laman|laman-laman}} barikuik nan alah dilindungi jo opsi "runtun":
@@ -399,6 +407,8 @@ Alasan nan diberikan adolah ''$2''.",
 'filereadonlyerror' => 'Indak bisa mangubah berkas "$1" karano repositori berkas "$2" dalam moda baco-sajo.
 
 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.',
 
@@ -412,9 +422,8 @@ Pangurus nan manguncinyo manawarkan penjelasan: "$3"',
 
 Sanak dapek taruih manggunoan {{SITENAME}} sacaro anonim, atau Sanak dapek <span class='plainlinks'>[$1 masuak log liak]</span> sabagai pangguno nan samo atau pangguno nan lain.
 Parhatian bahawa bara laman mungkin masih taruih manunjukkan bahawa Sanak masih masuak log sampai Sanak mambarasihan singgahan panjelajah web Sanak.",
-'welcomecreation' => '== Salamaik datang, $1! ==
-
-Akun Sanak alah dibuek. Jan lupo maatur konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] Sanak.',
+'welcomeuser' => 'Salamaik datang, $1!',
+'welcomecreation-msg' => 'Akun Sanak alah dibuek. Jan lupo maatur konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] Sanak.',
 'yourname' => 'Namo pangguno:',
 'yourpassword' => 'Kato sandi:',
 'yourpasswordagain' => 'Ulang baliak kato sandi:',
@@ -440,8 +449,8 @@ Akun Sanak alah dibuek. Jan lupo maatur konfigurasi [[Special:Preferences|prefer
 'createaccountmail' => 'malalui surel',
 'createaccountreason' => 'Alasan:',
 'badretype' => 'Kato sandi nan Sanak masuakkan salah.',
-'userexists' => 'Namo pangguna nan Sanak piliah alah dipakai oleh urang lain.
-Sila piliah namo nan lain.',
+'userexists' => 'Namo pangguno nan dipiliah alah tapakai.
+Piliah namo nan lain.',
 'loginerror' => 'Kasalahan masuak log',
 'createaccounterror' => 'Indak dapek mambuek akun: $1',
 'nocookiesnew' => 'Akun pangguno alah dibuek, tapi Sanak alun masuak log.
@@ -563,6 +572,7 @@ ingin maubahnyo, Sanak dapek maabaikan pasan iko dan taruih manggunokan sandi la
 Sandi samantaro: $2',
 'passwordreset-emailsent' => 'Surel pangingek alah dikiriman.',
 'passwordreset-emailsent-capture' => 'E-mail paringatan alah dikirim, nan tacaliak 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.',
@@ -572,6 +582,7 @@ Sandi samantaro: $2',
 'changeemail-oldemail' => 'Alamat e-mail kini:',
 'changeemail-newemail' => 'Alamat e-mail baharu:',
 'changeemail-none' => '(indak ado)',
+'changeemail-password' => 'Sandi {{SITENAME}} Sanak:',
 'changeemail-submit' => 'Ganti e-mail.',
 'changeemail-cancel' => 'Batalkan',
 
@@ -596,13 +607,13 @@ Sandi samantaro: $2',
 # Edit pages
 'summary' => 'Ringkasan:',
 'subject' => 'Subjek/tajuk:',
-'minoredit' => 'Iko di suntiang saketek',
+'minoredit' => 'Iko disuntiang saketek',
 'watchthis' => 'Pantau laman ko',
 'savearticle' => 'Simpan halaman',
 'preview' => 'Pratonton',
-'showpreview' => 'Lihek pratonton',
+'showpreview' => 'Caliak pratonton',
 'showlivepreview' => 'Pratayang langsuang',
-'showdiff' => 'Lihek parubahan',
+'showdiff' => 'Caliak parubahan',
 'anoneditwarning' => "'''Peringatan:''' Awak alun masuak log.
 Alamat IP awak akan tacatat pado riwayat suntingan laman ko.",
 'anonpreviewwarning' => "''Sanak alun masuak log. Manyimpan laman akan manyababkan alamaik IP Sanak tacatat pado riwayat suntiangan laman iko.''",
@@ -657,29 +668,29 @@ 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 ado teks dalam laman ko.
-Awak dapek [[Special:Search/{{PAGENAME}}|mancari judul laman ko]] pado laman lain,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancari log nan bakaik],
-atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} suntiang laman ko]</span>.',
+'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.
-Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancaharian untuak judul laman iko]] di laman-laman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancahari log takaik], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} manyuntiang laman iko]</span>.',
-'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.
+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 laman nan banamo "{{PAGENAME}}" ko indak ado.
+
+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''.",
+'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.
@@ -692,8 +703,8 @@ 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' => "'''Iko hanyo tampilan pratonton.'''
-Parubahan yang awak lakukan alun disimpan!",
+'previewnote' => "'''Ingek bahasonyo iko 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.',
 'session_fail_preview' => "'''Maaf, kami ndak dapek mangolah suntiangan Sanak akibat tahapuihnyo data sesi.
@@ -710,7 +721,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',
@@ -727,12 +738,12 @@ 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.'''",
+'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 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.'''
 
@@ -750,7 +761,6 @@ Entri catatan tarakhir disadioan di bawah untuak referensi:",
 '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',
 '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.',
@@ -766,33 +776,65 @@ 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.',
 '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.',
 'edit-no-change' => 'Suntiangan sanak ditulak, karano indak ado parubahan nan tajadi ka teks.',
 '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',
+'content-model-text' => 'Teks kosong',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
+'expensive-parserfunction-warning' => "'''Warning:''' 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. 
 Uraian-uraian tu alah diabaikan.',
 'post-expand-template-argument-category' => 'Laman nan barisi uraian template 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',
+'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]])',
 
 # History pages
-'viewpagelogs' => 'Lihek log untuak laman ko',
+'viewpagelogs' => 'Caliak log untuak laman ko',
 'currentrev-asof' => 'Revisi terkini pado $1',
-'revisionasof' => 'Revisi per $1',
+'revisionasof' => 'Pabaikkan per $1',
 'revision-info' => 'Revisi sajak $1 dek $2',
-'previousrevision' => '← Revisi sabalunnyo',
+'previousrevision' => '← Pabaikkan sabalunnyo',
 'nextrevision' => 'Revisi selanjutnyo →',
 'currentrevisionlink' => 'Revisi terkini',
 'cur' => 'kini',
 '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',
+'histlegend' => "Membandingkan pilihan: Tandoi antaro duo versi nan ingin dibandingan dangan mamilih kotak radionyo, dan takan tombol ''Bandiangan versi tapiliah''.<br />
+Legend: '''({{int:kini}})''' = perbedaan jo versi taakhia, '''({{int:dulu}})''' = pabedoan jo versi sabalunnyo, '''{{int:k}}''' = suntiangan ketek, '''{{int:b}}''' = suntiangan bot.",
+'history-fieldset-title' => 'Talusuri riwayaik',
 'history-show-deleted' => 'Hanyo nan dihapuih',
 'histfirst' => 'Nan lamo',
 'histlast' => 'Nan baru',
@@ -802,56 +844,58 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 
 # Revision deletion
 'rev-delundel' => 'tampilkan/suruakkan',
-'revdel-restore' => 'Ganti tampilan',
-'revdel-restore-deleted' => 'revisi nan lah tahapuih',
+'revdel-restore' => 'ganti tampilan',
+'revdel-restore-deleted' => 'suntiangan nan alah dihapuih',
 'revdel-restore-visible' => 'tampilan revisi',
 
 # Merge log
-'revertmerge' => 'Batal bergabung',
+'revertmerge' => 'Bata bagabuang',
 
 # Diffs
-'history-title' => 'Riwayat revisi dari "$1"',
+'history-title' => 'Riwayaik pabaiakkan dari "$1"',
 'lineno' => 'Barih $1:',
-'compareselectedversions' => 'Bandingkan revisi pilihan',
-'editundo' => 'batalkan',
+'compareselectedversions' => 'Bandiangan versi tapiliah',
+'editundo' => 'batalan',
 'diff-multi' => '({{PLURAL:$1|ciek |$1 revisi antaro}} oleh {{PLURAL:$2|ciek|$2 pangguno}} indak ditampilkan)',
 
 # Search results
-'searchresults' => 'Hasil pencarian',
+'searchresults' => 'Asia 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' => 'sabalunnyo {{PLURAL:$1|$1}}',
-'nextn' => 'salanjuiknyo {{PLURAL:$1|$1}}',
-'prevn-title' => 'Sabalunnyo $1 {{PLURAL:$1|hasil|hasil}}',
-'nextn-title' => 'Barikuiknyo $1 {{PLURAL:$1|hasil|hasil}}',
-'shown-title' => '↓ Tampilkan $1 {{PLURAL:$1|hasil|hasil}} per lama',
-'viewprevnext' => 'Tampilkan ($1 {{int:pipe-separator}} $2) ($3)',
+'prevn' => '{{PLURAL:$1|$1}} sabalunnyo',
+'nextn' => '{{PLURAL:$1|$1}} salanjuiknyo',
+'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',
+'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!'''",
-'searchprofile-articles' => 'Artikel',
-'searchprofile-project' => '↓ Laman Bantuan dan Proyek',
-'searchprofile-images' => '↓ Multimedia',
-'searchprofile-everything' => '↓ Sadonyo',
-'searchprofile-advanced' => 'Lanjuikan',
-'searchprofile-articles-tooltip' => '↓ Cari di $1',
+'searchprofile-articles' => 'Laman isi',
+'searchprofile-project' => 'Laman Bantuan jo Proyek',
+'searchprofile-images' => 'Multimedia',
+'searchprofile-everything' => 'Sadonyo',
+'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' => 'Pacaharian di ruang namo tatantu',
+'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-redirect' => '(pengalihan $1)',
+'search-redirect' => '(pangaliahan $1)',
 'search-section' => '(bagian $1)',
 'search-suggest' => 'Mungkin maksud awak: $1',
 'search-interwiki-caption' => 'Proyek badunsanak',
 'search-interwiki-default' => 'Hasil $1:',
 'search-interwiki-more' => '(selanjutnyo)',
 'searchrelated' => 'bakaitan',
-'searchall' => 'Sadonyo',
+'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.",
@@ -859,12 +903,12 @@ 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',
 
 # Preferences page
 'preferences' => 'Preferensi',
-'mypreferences' => 'Preferensi denai',
+'mypreferences' => 'Preferensi',
 'prefs-beta' => 'Corak Beta',
 'prefs-labs' => 'Corak Uji',
 'youremail' => 'Surek Elektronik:',
@@ -878,6 +922,9 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 
 'grouppage-sysop' => '{{ns:project}}:Pengurus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pangguno baru',
+
 # User rights log
 'rightslog' => 'Log parubahan hak akses',
 
@@ -891,7 +938,7 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 '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-minor' => 'Iko disuntiang saketek',
 '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.",
@@ -904,8 +951,8 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 'rcshowhidepatr' => '$1 suntiangan nan tajago',
 'rcshowhidemine' => '$1 suntingan denai',
 'rclinks' => 'Tampilkan $1 parubahan baru dalam $2 hari terakhir<br />$3',
-'diff' => 'beda',
-'hist' => 'versi',
+'diff' => 'bedo',
+'hist' => 'sijarah',
 'hide' => 'Suruakkan',
 'show' => 'Tampilkan',
 'minoreditletter' => 'k',
@@ -916,16 +963,16 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 
 # Recent changes linked
 'recentchangeslinked' => 'Parubahan takaik',
-'recentchangeslinked-toolbox' => '↓ Parubahan takaik',
+'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 senarai parubahan terakhir pado laman yang takaik jo laman tartantu (atau pado kalompok kategori tartantu).
-Laman pado [[Special:Watchlist|Senarai pantauan]] ditandoi '''cetak taba'''.",
+'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-page' => 'Namo laman:',
 'recentchangeslinked-to' => 'Tampilkan parubahan dari laman yang takaik jo laman yang disajikan',
 
 # Upload
-'upload' => 'Unggah berkas',
+'upload' => 'Muek berkas',
 'uploadlogpage' => 'Log unggah',
 'filedesc' => 'Ringkasan',
 'uploadedimage' => 'unggah "[[$1]]"',
@@ -935,7 +982,7 @@ Laman pado [[Special:Watchlist|Senarai pantauan]] ditandoi '''cetak taba'''.",
 
 # File description page
 'file-anchor-link' => 'Berkas',
-'filehist' => 'Riwayat berkas',
+'filehist' => 'Riwayaik berkas',
 'filehist-help' => 'Klik pado tanggal/waktu untuak malihek berkas pado maso tu',
 'filehist-revert' => 'kembalikan',
 'filehist-current' => 'kini ko',
@@ -945,7 +992,7 @@ Laman pado [[Special:Watchlist|Senarai pantauan]] ditandoi '''cetak taba'''.",
 'filehist-user' => 'Pangguno',
 'filehist-dimensions' => 'Dimensi',
 'filehist-comment' => 'Ulasan',
-'imagelinks' => 'Pranala berkas',
+'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.',
 'sharedupload' => 'Berkas ko barasal dari $1 dan mungkin digunoan oleh berbagai proyek lain.',
@@ -954,7 +1001,7 @@ Deskripsi dari [$2 laman deskripsi berkas] ditampilkan di bawah.',
 'uploadnewversion-linktext' => 'Unggah versi baru dari berkas ko',
 
 # Random page
-'randompage' => '↓ Laman sumbarang',
+'randompage' => 'Laman sambarangan',
 
 # Statistics
 'statistics' => 'Statistik',
@@ -965,10 +1012,10 @@ Deskripsi dari [$2 laman deskripsi berkas] ditampilkan di bawah.',
 'nbytes' => '$1 {{PLURAL:$1|bait|bait}}',
 'nmembers' => '$1 {{PLURAL:$1|anggota|anggota}}',
 'prefixindex' => 'Semua laman jo awalan',
-'usercreated' => 'Dibuek pado $1 waktu $2',
+'usercreated' => '{{GENDER:$3|Dibuek}} pado $1 pukua $2',
 'newpages' => 'Laman baru',
-'move' => 'Pindahkan',
-'movethispage' => 'Pindahkan laman ko',
+'move' => 'Pindahan',
+'movethispage' => 'Pindahan laman ko',
 'pager-newer-n' => '{{PLURAL:$1|labiah baru 1|labiah baru $1}}',
 'pager-older-n' => '{{PLURAL:$1|labiah lamo 1|labiah lamo $1}}',
 
@@ -996,9 +1043,6 @@ 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)',
 
@@ -1007,7 +1051,7 @@ Deskripsi dari [$2 laman deskripsi berkas] ditampilkan di bawah.',
 
 # Watchlist
 'watchlist' => 'Senarai pantauan denai',
-'mywatchlist' => 'Senarai pantauan den',
+'mywatchlist' => 'Dafta pantauan denai',
 '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.",
@@ -1030,7 +1074,7 @@ Pastikan awak mainginkannyo, dan awak lah tahu sagalo akibatnyo dan sasuai jo [[
 'actioncomplete' => 'Proses selesai',
 'actionfailed' => 'Aksi gagal',
 'deletedtext' => '"$1" lah dihapuih.
-Lihek $2 untuak rekam jejak laman yang lah dihapuih.',
+Caliak $2 untuak rakam jajak laman nan lah dihapuih.',
 'dellogpage' => 'Log penghapusan',
 'deletecomment' => 'Alasan:',
 'deleteotherreason' => 'Alasan lain/tambahan:',
@@ -1063,9 +1107,12 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'restriction-type' => 'Perlindungan:',
 'restriction-level' => 'Tingkek larangan:',
 
+# Restrictions (nouns)
+'restriction-move' => 'Pindahan',
+
 # Undelete
-'undeletelink' => 'tampilkan/pulihkan',
-'undeleteviewlink' => 'liek',
+'undeletelink' => 'caliak/cegakkan',
+'undeleteviewlink' => 'caliak',
 
 # Namespace form on various pages
 'namespace' => 'Ruangnamo:',
@@ -1073,22 +1120,23 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'blanknamespace' => '(Utamo)',
 
 # Contributions
-'contributions' => 'Jariah pangguno',
+'contributions' => 'Kontribusi {{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):',
+'month' => 'Sajak bulan (dan sabalunnyo):',
+'year' => 'Sajak taun (dan sabalunnyo):',
 
 'sp-contributions-newbies' => 'Tampilkan jariah pangguno baru',
-'sp-contributions-blocklog' => 'log pemblokiran',
+'sp-contributions-blocklog' => 'log pambalokiran',
+'sp-contributions-deleted' => 'kontribusi pangguno nan lah batiadoan',
 'sp-contributions-uploads' => 'muek',
 'sp-contributions-logs' => 'log',
 'sp-contributions-talk' => 'kecek',
 '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 taakhia',
 'sp-contributions-submit' => 'Cari',
 
 # What links here
@@ -1106,18 +1154,18 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'whatlinkshere-hideredirs' => '$1 pengalihan',
 'whatlinkshere-hidetrans' => '$1 transklusi',
 'whatlinkshere-hidelinks' => '$1 pranala',
-'whatlinkshere-hideimages' => '$1 pahubuang gambar',
+'whatlinkshere-hideimages' => '$1 pahubuang berkas',
 'whatlinkshere-filters' => 'Penapis',
 
 # 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',
 'ipblocklist' => 'Pangguno tablokir',
-'blocklink' => 'blokir',
-'unblocklink' => 'hilangkan blokir',
-'change-blocklink' => 'ubah blokir',
-'contribslink' => 'kontrib',
-'blocklogpage' => 'Log pemblokiran',
+'blocklink' => 'balokir',
+'unblocklink' => 'hilangkan balokir',
+'change-blocklink' => 'ubah balokir',
+'contribslink' => 'jariah',
+'blocklogpage' => 'Log pambalokiran',
 'blocklogentry' => 'memblokir [[$1]] dalam maso berlaku $2 $3',
 'unblocklogentry' => 'mahilangkan blokir $1',
 'block-log-flags-nocreate' => 'cipta akun dimatikan',
@@ -1146,7 +1194,7 @@ Dalam kasus tu, apobilo diinginkan, awak dapek mamindahkan atau manggabuangkan l
 'movetalk' => 'Pindahkan laman ota yang takaik',
 'movelogpage' => 'Log pemindahan',
 'movereason' => 'Alasan:',
-'revertmove' => 'kembalikan',
+'revertmove' => 'baliakkan',
 
 # Export
 'export' => 'Ekspor laman',
@@ -1160,63 +1208,63 @@ Dalam kasus tu, apobilo diinginkan, awak dapek mamindahkan atau manggabuangkan l
 'thumbnail_error' => 'Gagal mambuek thumbnail : $1',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Halaman pangguno awak',
-'tooltip-pt-mytalk' => 'Halaman ota awak',
+'tooltip-pt-userpage' => 'Laman pangguno sanak',
+'tooltip-pt-mytalk' => 'Laman ota sanak',
 'tooltip-pt-preferences' => 'Preferensi denai',
-'tooltip-pt-watchlist' => 'Senarai laman nan denai pantau',
-'tooltip-pt-mycontris' => 'Senarai jariah denai',
-'tooltip-pt-login' => 'Awak disarankan untuak masuak log; meskipun, hal tu indak diwajibkan',
+'tooltip-pt-watchlist' => 'Daftar laman nan denai pantau.',
+'tooltip-pt-mycontris' => 'Daftar jariah Sanak',
+'tooltip-pt-login' => 'Sanak disarankan untuak masuak log; musiki, hal tu indak diwajibkan',
 'tooltip-pt-logout' => 'Kalua log',
-'tooltip-ca-talk' => 'Pembicaraan tentang isi halaman',
-'tooltip-ca-edit' => 'Awak buliah suntiang laman ko. Gunokan tombol pratonton sabalun manyimpan',
+'tooltip-ca-talk' => 'Parudiangan tantang isi laman',
+'tooltip-ca-edit' => 'Sanak dapek manyuntiang laman iko. Silakan gunokan tombol pratonton sabalun manyimpan',
 'tooltip-ca-addsection' => 'Mulai bagian baru',
 'tooltip-ca-viewsource' => 'Laman ko dilinduangi.
-Awak hanyo buliah lihek sumber se',
-'tooltip-ca-history' => 'Revisi sabalunnyo laman ko',
+Sanak hanyo buliah caliak 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 senarai pantauan awak',
+'tooltip-ca-move' => 'Pindahan laman ko',
+'tooltip-ca-watch' => 'Tambahkan laman ko ka daftar pantauan sanak',
 'tooltip-ca-unwatch' => 'Kaluaan laman ko dari senarai pantauan awak',
 'tooltip-search' => 'Cari {{SITENAME}}',
 'tooltip-search-go' => 'Cari suatu laman dengan namo yang samo jiko tasadio',
-'tooltip-search-fulltext' => 'Cari halaman nan mamuek teks ko',
-'tooltip-p-logo' => '↓ Kunjungi laman utamo',
-'tooltip-n-mainpage' => 'Kunjungi Halaman Utamo',
-'tooltip-n-mainpage-description' => 'Kunjungi halaman utamo',
-'tooltip-n-portal' => 'Tentang proyek, apo yang dapek awak lakukan, di mano mancari sasuatu',
-'tooltip-n-currentevents' => 'Temukan informasi latar dari peristiwa kini ko',
+'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' => 'Tampilkan sembarang halaman',
+'tooltip-n-randompage' => 'Muek sambarang laman',
 'tooltip-n-help' => 'Tampek mancari bantuan',
-'tooltip-t-whatlinkshere' => 'Senarai sado halaman wiki yang punyo pranala ka halaman ko',
+'tooltip-t-whatlinkshere' => 'Daftar dari kasado laman wiki nan tahubuang kasiko',
 'tooltip-t-recentchangeslinked' => 'Parubahan baru halaman 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-contributions' => 'Caliak dafta jariah pangguno ko',
 'tooltip-t-emailuser' => 'Kirimkan e-mail ka pangguno ko',
-'tooltip-t-upload' => 'Unggah berkas',
-'tooltip-t-specialpages' => 'Sadoalah halaman istimewa',
-'tooltip-t-print' => 'Versi cetak halaman ko',
-'tooltip-t-permalink' => 'Pranala permanen untuak revisi laman ko',
-'tooltip-ca-nstab-main' => 'Lihek isi laman',
+'tooltip-t-upload' => 'Muek berkas',
+'tooltip-t-specialpages' => 'Daftar dari kasado laman istimewa',
+'tooltip-t-print' => 'Versi cetak dari laman ko',
+'tooltip-t-permalink' => 'Pranala parmanen untuak pabaiakkan 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-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-ca-nstab-category' => 'Caliak 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-diff' => 'Caliak parubahan nan alah awak buek tu',
+'tooltip-compareselectedversions' => 'Caliak pabedoan antaro duo revisi pilihan laman ko',
 'tooltip-watch' => 'Tambahkan laman ko ka senarai pantauan awak',
 'tooltip-recreate' => 'Buek baliak laman walaupun sabananyo pernah dihapuih',
 'tooltip-upload' => 'Mulai mamuek',
-'tooltip-rollback' => '"Baliakkan" baraliah suntiang laman ko pado kontribusi tarakhir dalam sakali klik',
-'tooltip-undo' => '"Indak jadi" suntiangan ko dibaliakkan dan mambuka kotak suntiang dalam mode pratonton. Alasan dapek ditambah pado kotak ringkasan.',
+'tooltip-rollback' => '"Baliakkan" uruangkan suntiang laman ko pado kontribusi tarakhir dalam sakali klik',
+'tooltip-undo' => '"Batalan" uruangkan panyuntiangan iko jo mambukak bantuak suntiang dalam bantuak pratonton. Hal ko mamungkinkan manambahkan alasan pado kotak ringkasan.',
 'tooltip-preferences-save' => 'Simpan preferensi',
 'tooltip-summary' => 'Masuakan sabuah ringkasan pendek',
 
@@ -1234,11 +1282,11 @@ Awak hanyo buliah lihek sumber se',
 'show-big-image' => 'Resolusi penuh',
 
 # Bad image list
-'bad_image_list' => 'Formatnyo sabagai berikut:
+'bad_image_list' => 'Ukurannyo adolah sabagai barikuik:
 
-Hanyo butir senarai (barih diawali jo tando *) yang dihituang.
-Pranala partamo pado barih tu mesti bakaik ka berkas nan buruak.
-Pranala-pranala salanjuiknyo pado barih nan samo dianggap sabagai pengecualian, yaitu laman nan dapek manampilkan berkas tu.',
+Hanyo daftar butia (barih nan dimulai jo tando *) nan dianggap.
+Pranala patamo pado barih musiti pranala ka berkas buruak.
+Satiok pranala salanjuiknyo pado barih nan samo dianggap pangacualian, yaitu laman dima berkas tasabuik bisa tajadi sajajar.',
 
 # Metadata
 'metadata' => 'Metadata',
@@ -1263,12 +1311,12 @@ 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' => 'semua',
+'monthsall' => 'sado',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Tampilkan parubahan takaik',
@@ -1301,4 +1349,7 @@ Nan lainnyo akan tasuruak sacaro default.
 'searchsuggest-search' => 'Cari',
 'searchsuggest-containing' => 'Barisi...',
 
+# Durations
+'duration-millennia' => '$1 {{PLURAL:$1|millennium|millenia}}',
+
 );
index 2e4b7a2..d82796b 100644 (file)
@@ -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,8 +482,9 @@ $messages = array(
 'newwindow' => '(се отвора во нов прозорец)',
 'cancel' => 'Откажи',
 'moredotdotdot' => 'Повеќе...',
-'mypage' => 'Моја страница',
-'mytalk' => 'мои разговори',
+'morenotlisted' => 'Повеќе (вон списокот)...',
+'mypage' => 'Страница',
+'mytalk' => 'Разговор',
 'anontalk' => 'Разговор за оваа IP-адреса',
 'navigation' => 'Навигација',
 'and' => '&#32;и',
@@ -515,6 +516,7 @@ $messages = array(
 'namespaces' => 'Именски простори',
 'variants' => 'Варијанти',
 
+'navigation-heading' => 'Навигационо мени',
 'errorpagetitle' => 'Грешка',
 'returnto' => 'Назад на $1.',
 'tagline' => 'Од {{SITENAME}}',
@@ -729,7 +731,7 @@ $1',
 'actionthrottled' => 'Дејството е успорено',
 'actionthrottledtext' => 'Како анти-спам мерка, ограничени сте од вршење на ова дејство премногу пати во краток временски период, а го преминавте ограничувањето.
 Ве молиме обидете се повторно за неколку минути.',
-'protectedpagetext' => 'Оваа страница е заклучена за уредувања.',
+'protectedpagetext' => 'Оваа страница е заклучена за уредувања и други дејства.',
 'viewsourcetext' => 'Можете да го погледнете и копирате кодот на оваа страница:',
 'viewyourtext' => "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
 'protectedinterface' => 'Оваа страница содржи текст од посредникот на софтверот на ова вики и е превентивно заштитена поради можна злоупотреба.
@@ -764,9 +766,9 @@ $2',
 
 Можете да продолжите со користење на {{SITENAME}} анонимно или можете <span class='plainlinks'>[$1 повторно да се најавите]</span> под исто или различно корисничко име.
 Да напоменеме дека некои страници може да продолжат да се прикажуваат како да сте најавени, се додека не го исчистите кешот на вашиот прелистувач.",
-'welcomecreation' => '== Добредојдовте, $1! ==
-Вашата корисничка сметка е создадена.
-Не заборавајте да ги [[Special:Preferences|наместите вашите нагодувања]].',
+'welcomeuser' => 'Добр едојдовте, $1!',
+'welcomecreation-msg' => 'Вашата корисничка сметка е создадена.
+Не заборавајте да ги измените вашите [[Special:Preferences|{{SITENAME}} нагодувања]].',
 'yourname' => 'Корисничко име:',
 'yourpassword' => 'Лозинка:',
 'yourpasswordagain' => 'Повторете ја лозинката:',
@@ -867,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' => 'Промена на лозинка',
@@ -932,6 +935,7 @@ $2
 'changeemail-oldemail' => 'Тековна е-пошта:',
 'changeemail-newemail' => 'Нова е-пошта:',
 'changeemail-none' => '(нема)',
+'changeemail-password' => 'Вашата лозинка на {{SITENAME}}:',
 'changeemail-submit' => 'Смени е-пошта',
 'changeemail-cancel' => 'Откажи',
 
@@ -971,7 +975,7 @@ $2
 'missingsummary' => "'''Потсетник:''' Не внесовте опис на измените. Ако притиснете Зачувај повторно, вашите измени ќе се зачуваат без опис.",
 'missingcommenttext' => 'Ве молиме внесете коментар подолу.',
 'missingcommentheader' => "'''Потсетување:''' Не внесовте наслов за овој коментар.
-Ако повторно кликнете на „{{int:savearticle}}“, уредувањето ќе биде зачувано без наслов.",
+Ако повторно стиснете на „{{int:savearticle}}“, уредувањето ќе биде зачувано без наслов.",
 'summary-preview' => 'Изглед на описот:',
 'subject-preview' => 'Преглед на предметот/насловот:',
 'blockedtitle' => 'Корисникот е блокиран',
@@ -1118,7 +1122,6 @@ $2
 'template-semiprotected' => '(полузаштитен)',
 'hiddencategories' => 'Оваа страница припаѓа на {{PLURAL:$1|1 скриена категорија|$1 скриени категории}}:',
 'edittools' => '<!-- Овој текст ќе се прикаже под обрасците за уредување и подигање. -->',
-'nocreatetitle' => 'Создавањето на нови страници е ограничено',
 'nocreatetext' => '{{SITENAME}} ја има ограничено можноста за создавање нови страници.
 Можете да се вратите назад и да уредувате постоечка страница или [[Special:UserLogin|најавете се или создајте нова корисничка сметка]].',
 'nocreate-loggedin' => 'Немате дозвола да создавате нови страници.',
@@ -1203,7 +1206,7 @@ $2
 'last' => 'посл',
 'page_first' => 'прв',
 'page_last' => 'последен',
-'histlegend' => "Разлика Ð¿Ð¾Ð¼ÐµÑ\93Ñ\83 Ñ\80евизии: Ð¾Ð·Ð½Ð°Ñ\87еÑ\82е Ð³Ð¸ Ñ\80евизииÑ\82е ÐºÐ¾Ð¸ Ñ\81акаÑ\82е Ð´Ð° Ð³Ð¸ Ñ\81поÑ\80едиÑ\82е Ð¸ Ð¿Ñ\80иÑ\82иÑ\81неÑ\82е Enter или копчето на дното од страницата.<br />
+'histlegend' => "Разлика Ð¿Ð¾Ð¼ÐµÑ\93Ñ\83 Ñ\80евизии: Ð\9eзнаÑ\87еÑ\82е Ð³Ð¸ Ñ\80евизииÑ\82е Ñ\88Ñ\82о Ñ\81акаÑ\82е Ð´Ð° Ð³Ð¸ Ñ\81поÑ\80едиÑ\82е Ð¸ Ð¿Ñ\80иÑ\82иÑ\81неÑ\82е Ð½Ð° Enter или копчето на дното од страницата.<br />
 Легенда: '''({{int:cur}})''' = разлика со последна ревизија, '''({{int:last}})''' = разлика со претходна ревизија, '''{{int:minoreditletter}}''' = ситна промена.",
 'history-fieldset-title' => 'Прелистување на историја',
 'history-show-deleted' => 'Само избришани',
@@ -1230,12 +1233,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}}}} дневникот на бришења].",
@@ -1243,12 +1246,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' => 'прикажи',
@@ -1280,7 +1283,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|ревизија|ревизии}}',
@@ -1440,7 +1443,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Нагодувања',
-'mypreferences' => 'мои Ð½Ð°Ð³Ð¾Ð´Ñ\83ваÑ\9aа',
+'mypreferences' => 'нагодувања',
 'prefs-edits' => 'Број на уредувања:',
 'prefsnologin' => 'Не сте најавени',
 'prefsnologintext' => 'Мора да бидете <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} најавени]</span> за да ги менувате вашите кориснички нагодувања.',
@@ -1454,7 +1457,7 @@ $1",
 'prefs-user-pages' => 'Кориснички страници',
 'prefs-personal' => 'Кориснички профил',
 'prefs-rc' => 'Скорешни промени',
-'prefs-watchlist' => 'СпиÑ\81ок Ð½Ð° Ð½абљудувања',
+'prefs-watchlist' => 'Ð\9dабљудувања',
 'prefs-watchlist-days' => 'Број на денови за приказ во списокот на набљудувања:',
 'prefs-watchlist-days-max' => 'Највеќе $1 {{PLURAL:$1|ден|дена}}',
 'prefs-watchlist-edits' => 'Максимален број на прикажани промени во проширениот список на набљудувања:',
@@ -1515,9 +1518,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' => 'Јазик:',
@@ -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 го смени групното членство за $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' => 'читање на оваа страница',
@@ -1924,6 +1925,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.',
@@ -2038,7 +2040,7 @@ $1',
 # File description page
 'file-anchor-link' => 'Податотека',
 'filehist' => 'Историја на податотеката',
-'filehist-help' => 'Ð\9aликнете на датум/време за да ја видите податотеката како изгледала тогаш.',
+'filehist-help' => 'СÑ\82иÑ\81нете на датум/време за да ја видите податотеката како изгледала тогаш.',
 'filehist-deleteall' => 'избриши ги сите',
 'filehist-deleteone' => 'избриши',
 'filehist-revert' => 'врати',
@@ -2318,12 +2320,12 @@ $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' => 'Џокер-знаците може да се користат само на почетокот во името на домаќинот.',
 
 # Special:ListUsers
-'listusersfrom' => 'Ð\9fÑ\80икажни ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ð¿Ð¾Ñ\87нÑ\83ваÑ\98Ñ\9cи Ð¾Ð´:',
+'listusersfrom' => 'Прикажи корисници почнувајќи од:',
 'listusers-submit' => 'Прикажи',
 'listusers-noresult' => 'Не е пронајден корисник.',
 'listusers-blocked' => '(блокиран)',
@@ -2332,15 +2334,11 @@ $1',
 'activeusers' => 'Список на активни корисници',
 'activeusers-intro' => 'Ова е список на корисници кои биле на некој начин активни во последните $1 {{PLURAL:$1|ден|дена}}.',
 'activeusers-count' => '$1 {{PLURAL:$1|уредување|уредувања}} {{PLURAL:$3|денес|во последните $3 дена}}',
-'activeusers-from' => 'Прикажува корисници кои почнуваат на:',
+'activeusers-from' => 'Прикажи корисници почнувајќи од:',
 'activeusers-hidebots' => 'Скриј ботови',
 'activeusers-hidesysops' => 'Скриј администратори',
 'activeusers-noresult' => 'Нема пронајдено корисници.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник на регистрирања на корисници',
-'newuserlogpagetext' => 'Ова е дневник на регистрирани корисници.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права на кориснички групи',
 'listgrouprights-summary' => 'Следи список на кориснички групи утврдени на ова вики, заедно со нивните придружни права на пристап.
@@ -2398,16 +2396,16 @@ $1',
 'usermessage-editor' => 'Системски гласник',
 
 # Watchlist
-'watchlist' => 'мои Ð½Ð°Ð±Ñ\99Ñ\83дÑ\83ваÑ\9aа',
-'mywatchlist' => 'мои Ð½абљудувања',
+'watchlist' => 'набљудувања',
+'mywatchlist' => 'Ð\9dабљудувања',
 'watchlistfor2' => 'За $1 $2',
 'nowatchlist' => 'Немате ништо во списокот на набљудувања.',
 'watchlistanontext' => 'Се бара $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' => 'Набљудувај',
@@ -2435,18 +2433,23 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} Систем за известување',
 'enotif_reset' => 'Означи ги сите страници како посетени',
-'enotif_newpagetext' => 'Ова е нова страница.',
 'enotif_impersonal_salutation' => 'Википедија корисник',
-'changed' => 'изменета',
-'created' => 'создадена',
-'enotif_subject' => 'Страницата $PAGETITLE на {{SITENAME}} беше $CHANGEDORCREATED од $PAGEEDITOR',
+'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' => 'Почитуван(а) $WATCHINGUSERNAME,
 
-
-На $PAGEEDITDATE е $CHANGEDORCREATED страницата „$PAGETITLE“ на проектот {{SITENAME}}. Измената ја изврши $PAGEEDITOR. Погледајте ја тековната верзија на $PAGETITLE_URL.
+$PAGEINTRO $NEWPAGE
 
 $NEWPAGE
 
@@ -2459,7 +2462,7 @@ $NEWPAGE
 Повеќе нема да добивате известувања во случај на други понатамошни промени, освен ако не ја посетите оваа страница.
 Можете и да ги поништите ознаките за известување за сите набљудувани страници на вашиот список на набљудувања.
 
-             Системот за известување на {{SITENAME}}
+Известителниот систем на {{SITENAME}}
 
 --
 Ако сакате да ги измените нагодувањата за известување по е-пошта, посетете ја страницата
@@ -2471,8 +2474,10 @@ $NEWPAGE
 За да ја избришете страницата од списокот на набљудувања, посетете ја страницата
 $UNWATCHURL
 
\9fовÑ\80аÑ\82ни Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¸ помош:
\92аÑ\88и Ð¼Ð¸Ñ\81леÑ\9aа, Ð¿Ñ\80аÑ\88аÑ\9aа Ð¸ Ð¿Ð¾Ð²ÐµÑ\9cе помош:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'создадена',
+'changed' => 'изменета',
 
 # Delete
 'deletepage' => 'Избриши страница',
@@ -2544,6 +2549,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] преместена како [[$2]]',
 'protect-badnamespace-title' => 'Незаштитлив именски простор',
 'protect-badnamespace-text' => 'Страниците во овој именски простор не можат да се заштитуваат.',
+'protect-norestrictiontypes-text' => 'Страницава не може да се заштити бидејќи нема расположиви типови на ограничување.',
+'protect-norestrictiontypes-title' => 'Незаштитливи страници',
 'protect-legend' => 'Потврдете ја заштитата',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Истекува:',
@@ -2560,9 +2567,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',
@@ -2663,9 +2670,9 @@ $1',
 'blanknamespace' => '(Главен)',
 
 # Contributions
-'contributions' => 'Кориснички придонеси',
+'contributions' => '{{GENDER:$1|Кориснички}} придонеси',
 'contributions-title' => 'Придонеси на корисникот $1',
-'mycontris' => 'мои Ð¿Ñ\80идонеÑ\81и',
+'mycontris' => 'придонеси',
 'contribsub2' => 'За $1 ($2)',
 'nocontribs' => 'Не се пронајдени промени што одговараат на овој критериум.',
 'uctop' => ' (врв)',
@@ -2871,9 +2878,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' => "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.
@@ -3056,6 +3063,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“ на основната страница не допушта потстраници.',
@@ -3239,6 +3247,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' => 'инфо',
@@ -3247,6 +3256,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' => 'Класично',
@@ -3269,6 +3282,8 @@ $1',
 'markedaspatrollederror' => 'Не можам да означам како проверена',
 'markedaspatrollederrortext' => 'Морате да внесете верзија за да ја означите како проверена.',
 'markedaspatrollederror-noautopatrol' => 'Не можете да ги означите своите промени како проверени.',
+'markedaspatrollednotify' => 'Оваа измена на $1 е означена како испатролирана.',
+'markedaspatrollederrornotify' => 'Означувањето како испатролирано не успеа.',
 
 # Patrol log
 'patrol-log-page' => 'Дневник на патролирања',
@@ -3303,6 +3318,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.',
@@ -3337,7 +3353,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' => 'Форматот е следниот:
@@ -4221,7 +4240,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',
@@ -4240,11 +4259,15 @@ $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' => 'испратена лозинка по е-пошта',
+'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 997d30b..42bee52 100644 (file)
@@ -365,7 +365,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 +449,7 @@ $messages = array(
 'category-empty' => "''ഈ വർഗ്ഗത്തിൽ താളുകളോ പ്രമാണങ്ങളോ ഇല്ല.''",
 'hidden-categories' => '{{PLURAL:$1|മറഞ്ഞിരിക്കുന്ന വർഗ്ഗം|മറഞ്ഞിരിക്കുന്ന വർഗ്ഗങ്ങൾ}}',
 'hidden-category-category' => 'മറഞ്ഞിരിക്കുന്ന വർഗ്ഗങ്ങൾ',
-'category-subcat-count' => '{{PLURAL:$2|à´\88 à´µàµ¼à´\97àµ\8dà´\97à´¤àµ\8dതിനàµ\81àµ\8dâ\80\8c à´¤à´¾à´´àµ\86 à´¨àµ½à´\95ിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´\92à´°àµ\81 à´\89പവർà´\97àµ\8dà´\97à´\82 à´®à´¾à´¤àµ\8dരമാണàµ\81à´³àµ\8dളതàµ\8d.|à´\88 à´µàµ¼à´\97àµ\8dà´\97à´¤àµ\8dതിനàµ\81àµ\8dâ\80\8c $2 ഉപവർഗ്ഗങ്ങളുള്ളതിൽ {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}} താഴെ നൽകിയിരിക്കുന്നു.}}',
+'category-subcat-count' => '{{PLURAL:$2|à´\88 à´µàµ¼à´\97àµ\8dà´\97à´¤àµ\8dതിനàµ\8d, à´¤à´¾à´´àµ\86 à´¨àµ½à´\95ിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´\92à´°àµ\81 à´\89പവർà´\97àµ\8dà´\97à´\82 à´®à´¾à´¤àµ\8dരമാണàµ\81à´³àµ\8dളതàµ\8d.|à´\88 à´µàµ¼à´\97àµ\8dà´\97à´¤àµ\8dതിനàµ\8d $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,8 +465,9 @@ $messages = array(
 'newwindow' => '(പുതിയ ജാലകത്തിൽ തുറന്നു വരും)',
 'cancel' => 'റദ്ദാക്കുക',
 'moredotdotdot' => 'കൂടുതൽ...',
-'mypage' => 'എന്റെ താൾ',
-'mytalk' => 'എന്റെ സംവാദത്താൾ',
+'morenotlisted' => 'ബാക്കി പട്ടികയിൽ ഉൾപ്പെടുത്തിയിട്ടില്ല...',
+'mypage' => 'താൾ',
+'mytalk' => 'സംവാദത്താൾ',
 'anontalk' => 'ഈ ഐ.പി.യുടെ സം‌വാദം താൾ',
 'navigation' => 'ഉള്ളടക്കം',
 'and' => '&#32;ഒപ്പം',
@@ -498,6 +499,7 @@ $messages = array(
 'namespaces' => 'നാമമേഖല',
 'variants' => 'രൂപഭേദങ്ങൾ',
 
+'navigation-heading' => 'ഗമന വഴികാട്ടി',
 'errorpagetitle' => 'പിഴവ്',
 'returnto' => '$1 എന്ന താളിലേക്ക് തിരിച്ചുപോവുക.',
 'tagline' => '{{SITENAME}} സംരംഭത്തിൽ നിന്ന്',
@@ -594,7 +596,7 @@ $1',
 'youhavenewmessages' => 'താങ്കൾക്ക് $1 ഉണ്ട് ($2).',
 'newmessageslink' => 'പുതിയ സന്ദേശങ്ങൾ',
 'newmessagesdifflink' => 'അവസാന മാറ്റം',
-'youhavenewmessagesfromusers' => 'താà´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d {{PLURAL:$3|മറàµ\8dà´±àµ\8aà´°àµ\81 à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d|മറàµ\8dà´±àµ\8d $3 ഉപയോക്താക്കൾ}} $1 ചേർത്തിട്ടുണ്ട് ($2).',
+'youhavenewmessagesfromusers' => 'താà´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d {{PLURAL:$3|à´\92à´°àµ\81 à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d|$3 ഉപയോക്താക്കൾ}} $1 ചേർത്തിട്ടുണ്ട് ($2).',
 'youhavenewmessagesmanyusers' => 'താങ്കൾക്ക് പലർ $1 ചേർത്തിട്ടുണ്ട് ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|പുതിയ സന്ദേശം|പുതിയ സന്ദേശങ്ങൾ}}',
 'newmessagesdifflinkplural' => 'അവസാന {{PLURAL:$1|മാറ്റം|മാറ്റങ്ങൾ}}',
@@ -706,7 +708,7 @@ $1',
 'viewsource-title' => '$1 എന്ന താളിന്റെ മൂലരൂപം കാണുക',
 'actionthrottled' => 'പ്രവൃത്തി നടത്തിയിരിക്കുന്നു',
 'actionthrottledtext' => 'പാഴെഴുത്തിനെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ ഒരേ പ്രവൃത്തി കുറഞ്ഞ സമയത്തിനുള്ളിൽ നിരവധി തവണ ആവർത്തിക്കുന്നതു പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾ ആ പരിധി ലംഘിച്ചിരിക്കുന്നു. കുറച്ച് മിനിറ്റുകൾക്കു ശേഷം വീണ്ടും ശ്രമിക്കുക.',
-'protectedpagetext' => 'à´\88 à´¤à´¾àµ¾ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81വാൻ à´¸à´¾à´§à´¿à´\95àµ\8dà´\95ാതàµ\8dà´¤ വിധം സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്.',
+'protectedpagetext' => 'à´\88 à´¤à´¾àµ¾ à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\8b à´®à´±àµ\8dà´±àµ\81 à´ªàµ\8dà´°à´µàµ\83à´¤àµ\8dതിà´\95à´³àµ\8b à´¤à´\9fയാനാà´\95àµ\81à´\82 വിധം സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്.',
 'viewsourcetext' => 'താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:',
 'viewyourtext' => "താങ്കൾക്ക് ഈ താളിലെ '''താങ്കളുടെ തിരുത്തലുകളുടെ''' മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
 'protectedinterface' => 'ഈ താൾ ഈ വിക്കിയുടെ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു. എല്ലാ വിക്കികൾക്കുമായി പരിഭാഷ കൂട്ടിച്ചേർക്കാനോ, പരിഭാഷയിൽ മാറ്റം വരുത്താനോ, ദയവായി മീഡിയവിക്കി പ്രാദേശീകരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുക.',
@@ -741,9 +743,9 @@ $2',
 അജ്ഞാതമായിരുന്നു കൊണ്ട് {{SITENAME}} സം‌രംഭം താങ്കൾക്കു തുടർന്നും ഉപയോഗിക്കാവുന്നതാണ്‌.
 അല്ലെങ്കിൽ  <span class='plainlinks'>[$1 ലോഗിൻ സൗകര്യം ഉപയോഗിച്ച്]</span> വീണ്ടും ലോഗിൻ ചെയ്യാവുന്നതും ആണ്‌.
 താങ്കൾ വെബ് ബ്രൌസറിന്റെ ക്യാഷെ ശൂന്യമാക്കിയിട്ടില്ലെങ്കിൽ ചില താളുകളിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതായി കാണിക്കാൻ സാധ്യതയുണ്ട്.",
-'welcomecreation' => '== സ്വാഗതം, $1! ==
-താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
-താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 [[Special:Preferences|{{SITENAME}} à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´£à´\99àµ\8dà´\99ളിൽ]] à´\86വശàµ\8dയമായ à´®à´¾à´±àµ\8dà´±à´\82 à´µà´°àµ\81à´¤àµ\8dà´¤àµ\81വാൻ à´®à´±à´\95àµ\8dà´\95à´°àµ\81à´¤àµ\87.',
+'welcomeuser' => 'സ്വാഗതം, $1!',
+'welcomecreation-msg' => 'താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
+താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 [[Special:Preferences|{{SITENAME}} à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´£à´\99àµ\8dà´\99ളിൽ]] à´®à´¾à´±àµ\8dà´±à´\82 à´µà´°àµ\81à´¤àµ\8dതാൻ à´®à´±à´\95àµ\8dà´\95à´°àµ\81à´¤àµ\8d.',
 'yourname' => 'ഉപയോക്തൃനാമം:',
 'yourpassword' => 'രഹസ്യവാക്ക്:',
 'yourpasswordagain' => 'രഹസ്യവാക്ക് ഒരിക്കൽക്കൂടി:',
@@ -830,6 +832,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'പി.എച്ച്.പി.യുടെ main() ഫങ്ഷനിൽ അപരിചിതമായ പിഴവ്',
 'user-mail-no-addy' => 'ഇമെയിൽ വിലാസം ഇല്ലാതെയാണ് ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചത്',
+'user-mail-no-body' => 'ശൂന്യമായതോ അസാമാന്യമായി ചെറുതോ ആയ ഉള്ളടക്കമുള്ള ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചു.',
 
 # Change password dialog
 'resetpass' => 'രഹസ്യവാക്ക് മാറ്റുക',
@@ -889,6 +892,7 @@ $2
 'changeemail-oldemail' => 'ഇപ്പോഴത്തെ ഇമെയിൽ വിലാസം:',
 'changeemail-newemail' => 'പുതിയ ഇമെയിൽ വിലാസം:',
 'changeemail-none' => '(ഒന്നുമില്ല)',
+'changeemail-password' => 'താങ്കളുടെ {{SITENAME}} രഹസ്യവാക്ക്:',
 'changeemail-submit' => 'ഇമെയിലിൽ മാറ്റംവരുത്തുക',
 'changeemail-cancel' => 'റദ്ദാക്കുക',
 
@@ -1055,7 +1059,6 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'template-semiprotected' => '(അർദ്ധസം‌രക്ഷിതം)',
 'hiddencategories' => 'ഈ താൾ {{PLURAL:$1|മറഞ്ഞിരിക്കുന്ന ഒരു വർഗ്ഗത്തിൽ|മറഞ്ഞിരിക്കുന്ന $1 വർഗ്ഗങ്ങളിൽ}} അംഗമാണു്‌:',
 'edittools' => '<!-- തിരുത്തുവാനുള്ളതിനും അപ്‌‌ലോഡ് ചെയ്യുന്നതിനുമുള്ള ഫോമുകൾക്കടിയിൽ ഇവിടെ നൽകുന്ന എഴുത്തുകൾ വരുന്നതാണ്. -->',
-'nocreatetitle' => 'താളുകൾ സൃഷ്ടിക്കുന്നത് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു',
 'nocreatetext' => '{{SITENAME}} സംരംഭത്തിൽ പുതിയ താളുകൾ സൃഷ്ടിക്കുവാനുള്ള അവകാശം നിയന്ത്രിതമാണ്‌.
 താങ്കൾ ദയവായി തിരിച്ചുചെന്ന് നിലവിലുള്ള ഒരു താൾ തിരുത്തുകയോ, അഥവാ [[Special:UserLogin|ലോഗിൻ ചെയ്യുകയോ ഒരു അംഗത്വം സൃഷ്ടിക്കുകയോ]] ചെയ്യാൻ അഭ്യർത്ഥിക്കുന്നു.',
 'nocreate-loggedin' => 'പുതിയ താളുകൾ സൃഷ്ടിക്കുവാനുള്ള അനുവാദം താങ്കൾക്കില്ല.',
@@ -1085,7 +1088,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 
 # Content models
 'content-model-wikitext' => 'വിക്കിഎഴുത്ത്',
-'content-model-text' => 'à´¶àµ\81à´¦àµ\8dà´§ എഴുത്ത്',
+'content-model-text' => 'à´µàµ\86à´±àµ\81à´\82 എഴുത്ത്',
 'content-model-javascript' => 'ജാവാസ്ക്രിപ്റ്റ്',
 'content-model-css' => 'സി.എസ്.എസ്.',
 
@@ -1239,7 +1242,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 തീയതിയിലെ ഇനം മറയ്ക്കുന്നതിൽ പിഴവ്: ഒതുക്കലിനുള്ള മറ്റ് ഐച്ഛികങ്ങളിലൊന്ന് തിരഞ്ഞെടുക്കാതെ ഇനങ്ങൾ കാര്യനിർവാഹകരുടെ ദൃഷ്ടിയിൽ നിന്നും ഒതുക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
@@ -1376,7 +1379,7 @@ $1",
 
 # Preferences page
 'preferences' => 'ക്രമീകരണങ്ങൾ',
-'mypreferences' => 'à´\8eà´¨àµ\8dà´±àµ\86 à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´£à´\99àµ\8dà´\99ൾ',
+'mypreferences' => 'ക്രമീകരണങ്ങൾ',
 'prefs-edits' => 'ആകെ തിരുത്തലുകൾ:',
 'prefsnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
 'prefsnologintext' => 'ഉപയോക്തൃക്രമീകരണങ്ങൾ മാറ്റാൻ താങ്കൾ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ലോഗിൻ]</span> ചെയ്തിരിക്കണം.',
@@ -1452,9 +1455,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' => 'ഭാഷ:',
@@ -1604,15 +1607,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' => 'ഈ താൾ വായിക്കുക',
@@ -1840,6 +1841,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 എന്നതിലേയ്ക്ക് പകർത്താൻ കഴിഞ്ഞില്ല.',
@@ -2229,7 +2231,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' => 'ഹോസ്റ്റ്നെയിമിന്റെ തുടക്കത്തിൽ മാത്രമേ വൈൽഡ് കാർഡുകൾ വരാവൂ.',
 
@@ -2248,10 +2250,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'activeusers-hidesysops' => 'കാര്യനിർവാഹകരെ മറയ്ക്കുക',
 'activeusers-noresult' => 'ഉപയോക്താക്കളില്ല',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ഉപയോക്തൃ സൃഷ്ടിയുടെ രേഖ',
-'newuserlogpagetext' => 'പുതിയതായി അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ പട്ടിക താഴെ കാണാം.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ഉപയോക്തൃവിഭാഗത്തിന്റെ അവകാശങ്ങൾ',
 'listgrouprights-summary' => 'ഈ വിക്കിയിൽ നിർവ്വചിക്കപ്പെട്ടിരിക്കുന്ന ഉപയോക്തൃസംഘങ്ങളെയും, ആ സംഘങ്ങൾക്ക് പ്രാപ്തമായിട്ടുള്ള അവകാശങ്ങളേയും താഴെ കുറിച്ചിരിക്കുന്നു.
@@ -2310,14 +2308,14 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 
 # Watchlist
 'watchlist' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക',
-'mywatchlist' => 'à´\9eാൻ à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനവ',
+'mywatchlist' => 'ശ്രദ്ധിക്കുന്നവ',
 'watchlistfor2' => 'ഉപയോക്താവ്:$1 $2',
 'nowatchlist' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ഇനങ്ങളൊന്നുമില്ല.',
 'watchlistanontext' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക കാണുവാനോ തിരുത്തുവാനോ $1.',
 'watchnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
 'watchnologintext' => 'ശ്രദ്ധിക്കുന്ന താളിന്റെ പട്ടിക തിരുത്തുവാൻ താങ്കൾ [[Special:UserLogin|ലോഗിൻ]] ചെയ്തിരിക്കണം.',
 'addwatch' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്കു ചേർക്കുക',
-'addedwatchtext' => "താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്ക്]] \"[[:\$1]]\" എന്ന ഈ താൾ ചേർത്തിരിക്കുന്നു. ഇനി മുതൽ ഈ താളിലും ബന്ധപ്പെട്ട സം‌വാദം താളിലും ഉണ്ടാകുന്ന മാറ്റങ്ങൾ ആ പട്ടികയിൽ ദൃശ്യമാവും. കൂടാതെ താങ്കൾക്ക് എളുപ്പത്തിൽ തിരിച്ചറിയാൻ [[Special:RecentChanges|പുതിയ മാറ്റങ്ങൾ]] താളിൽ ഈ താളിലെ മാറ്റങ്ങൾ '''കടുപ്പത്തിൽ''' കാണിക്കുകയും ചെയ്യും.",
+'addedwatchtext' => 'താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്ക്]] "[[:$1]]" എന്ന ഈ താൾ ചേർത്തിരിക്കുന്നു. ഇനി മുതൽ ഈ താളിലും ബന്ധപ്പെട്ട സം‌വാദം താളിലും ഉണ്ടാകുന്ന മാറ്റങ്ങൾ ആ പട്ടികയിൽ ദൃശ്യമാവും.',
 'removewatch' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ നിന്നും ഒഴിവാക്കുക',
 'removedwatchtext' => 'താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ]] നിന്നും "[[:$1]]" എന്ന താൾ നീക്കം ചെയ്തിരിക്കുന്നു.',
 'watch' => 'മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക',
@@ -2345,16 +2343,23 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 
 'enotif_mailer' => '{{SITENAME}} വിജ്ഞാപന മെയിലർ',
 'enotif_reset' => 'എല്ലാ താളുകളും സന്ദർശിച്ചതായി രേഖപ്പെടുത്തുക',
-'enotif_newpagetext' => 'ഇതൊരു പുതിയ താളാണ്‌',
 'enotif_impersonal_salutation' => '{{SITENAME}} ഉപയോക്താവ്',
-'changed' => 'മാറ്റിയിരിക്കുന്നു',
-'created' => 'സൃഷ്ടിച്ചു',
-'enotif_subject' => '{{SITENAME}} സംരംഭത്തിലെ $PAGETITLE എന്ന താൾ $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_subject_deleted' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ {{gender:$2|$2}} മായ്ച്ചിരിക്കുന്നു',
+'enotif_subject_created' => '{{SITENAME}} സംരംഭത്തിl $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,
 
+$PAGEINTRO $NEWPAGE
 
 {{SITENAME}} സം‌രംഭത്തിലെ $PAGETITLE എന്ന താൾ $PAGEEDITDATE-ൽ $PAGEEDITOR എന്ന ഉപയോക്താവ് $CHANGEDORCREATED, ഇപ്പോഴുള്ള പതിപ്പിനായി $PAGETITLE_URL കാണുക.
 
@@ -2366,8 +2371,7 @@ $NEWPAGE
 മെയിൽ: $PAGEEDITOR_EMAIL
 വിക്കി: $PAGEEDITOR_WIKI
 
-താങ്കൾ ഈ താൾ സന്ദർശിക്കുന്നില്ലങ്കിൽ മറ്റ് അറിയിപ്പുകൾ ഒന്നുമുണ്ടാകുന്നതല്ല.
-ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക സന്ദർശിച്ചും ഉൾപ്പെട്ട താളുകളിലെ അറിയിപ്പ് മുദ്രകൾ താങ്കൾക്ക് പുനഃക്രമീകരിക്കാവുന്നതാണ്‌.
+താങ്കൾ ഈ താൾ സന്ദർശിക്കുന്നില്ലങ്കിൽ മറ്റ് അറിയിപ്പുകൾ ഒന്നുമുണ്ടാകുന്നതല്ല. ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക സന്ദർശിച്ചും ഉൾപ്പെട്ട താളുകളിലെ അറിയിപ്പ് മുദ്രകൾ താങ്കൾക്ക് പുനഃക്രമീകരിക്കാവുന്നതാണ്‌.
              താങ്കളുടെ {{SITENAME}} സുഹൃദ് അറിയിപ്പ് സജ്ജീകരണം
 
 --
@@ -2382,6 +2386,8 @@ $UNWATCHURL
 
 അഭിപ്രായം അറിയിക്കാനും മറ്റു സഹായങ്ങൾക്കും:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'സൃഷ്ടിച്ചു',
+'changed' => 'മാറ്റിയിരിക്കുന്നു',
 
 # Delete
 'deletepage' => 'താൾ മായ്ക്കുക',
@@ -2447,6 +2453,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] എന്ന താളിന്റെ പേർ [[$2]] എന്നാക്കിയിരിക്കുന്നു',
 'protect-badnamespace-title' => 'സംരക്ഷിക്കാനാവാത്ത നാമമേഖല',
 'protect-badnamespace-text' => 'ഈ നാമമേഖലയിലെ താളുകൾ സംരക്ഷിക്കാനാവില്ല.',
+'protect-norestrictiontypes-text' => 'പരിധി നിർണ്ണയിക്കാനുള്ള വിധം ഇല്ലാത്തതിനാൽ ഈ താൾ സംരക്ഷിക്കാനാവില്ല.',
+'protect-norestrictiontypes-title' => 'സംരക്ഷിക്കാനാവാത്ത താൾ',
 'protect-legend' => 'സം‌രക്ഷണം സ്ഥിരീകരിക്കുക',
 'protectcomment' => 'കാരണം:',
 'protectexpiry' => 'സംരക്ഷണ കാലാവധി:',
@@ -2462,9 +2470,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-നു കാലഹരണപ്പെടുന്നു',
@@ -2562,9 +2570,9 @@ $1',
 'blanknamespace' => '(മുഖ്യം)',
 
 # Contributions
-'contributions' => 'ഉപയോക്താവിന്റെ സംഭാവനകൾ',
+'contributions' => '{{GENDER:$1|ഉപയോക്താവിന്റെ}} സംഭാവനകൾ',
 'contributions-title' => '$1 എന്ന ഉപയോക്താവിന്റെ സംഭാവനകൾ',
-'mycontris' => 'à´\8eà´¨àµ\8dà´±àµ\86 à´¸à´\82ഭാവനà´\95ൾ',
+'mycontris' => 'സംഭാവനകൾ',
 'contribsub2' => '$1 എന്ന ഉപയോക്താവിന്റെ $2.',
 'nocontribs' => 'ഈ മാനദണ്ഡങ്ങളുമായി യോജിക്കുന്ന മാറ്റങ്ങൾ ഒന്നും കണ്ടില്ല.',
 'uctop' => '(അവസാനത്തെ തിരുത്തൽ)',
@@ -3131,6 +3139,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' => 'സാർവത്രികം',
@@ -3153,6 +3165,8 @@ $1',
 'markedaspatrollederror' => 'റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക സാധ്യമല്ല',
 'markedaspatrollederrortext' => 'റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തേണ്ട നാൾപ്പതിപ്പ താങ്കൾ വ്യക്തമാക്കേണ്ടതാണ്.',
 'markedaspatrollederror-noautopatrol' => 'സ്വന്തം മാറ്റങ്ങൾ റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക അനുവദനീയമല്ല.',
+'markedaspatrollednotify' => '$1 എന്ന താളിൽ നടത്തിയ ഈ മാറ്റം റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തിയിരിക്കുന്നു.',
+'markedaspatrollederrornotify' => 'റോന്തുചുറ്റിയതെന്ന് അടയാളപ്പെടുത്തൽ പരാജയപ്പെട്ടു.',
 
 # Patrol log
 'patrol-log-page' => 'റോന്തുചുറ്റൽ പ്രവർത്തനരേഖ',
@@ -3185,6 +3199,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.',
@@ -3218,7 +3233,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' => 'എഴുത്ത് രീതി താഴെ കൊടുത്തിരിക്കുന്നു:
@@ -3833,9 +3851,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 സ്ക്രിപ്റ്റ് പഥം]',
 
@@ -3967,11 +3985,15 @@ $5
 'logentry-move-move_redir-noredirect' => '$1, $3 എന്ന താൾ $4 എന്ന താളിനുമുകളിലേയ്ക്ക്, തിരിച്ചുവിടൽ ഇല്ലാതെ മാറ്റിയിരിക്കുന്നു',
 'logentry-patrol-patrol' => '$3 എന്ന താളിന്റെ $4 എന്ന നാൾപ്പതിപ്പ് റോന്തുചുറ്റിയതായി $1 അടയാളപ്പെടുത്തിയിരിക്കുന്നു',
 'logentry-patrol-patrol-auto' => '$3 എന്ന താളിന്റെ $4 എന്ന നാൾപ്പതിപ്പ് റോന്തുചുറ്റിയതായി $1 സ്വതേ അടയാളപ്പെടുത്തിയിരിക്കുന്നു',
-'logentry-newusers-newusers' => '$1 à´\92à´°àµ\81 à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\85à´\82à´\97à´¤àµ\8dà´µà´\82 à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\9aàµ\8dà´\9aിരിക്കുന്നു',
-'logentry-newusers-create' => '$1 à´\92à´°àµ\81 à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\85à´\82à´\97à´¤àµ\8dà´µà´\82 à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\9aàµ\8dà´\9aിരിക്കുന്നു',
+'logentry-newusers-newusers' => '$1 à´\8eà´¨àµ\8dà´¨ à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\85à´\82à´\97à´¤àµ\8dà´µà´\82 à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fിരിക്കുന്നു',
+'logentry-newusers-create' => '$1 à´\8eà´¨àµ\8dà´¨ à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\85à´\82à´\97à´¤àµ\8dà´µà´\82 à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fിരിക്കുന്നു',
 'logentry-newusers-create2' => '$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 ബഗ് അറിയിക്കുക].
index ab2a010..79cfce4 100644 (file)
@@ -67,7 +67,7 @@ $messages = array(
 'tog-nocache' => 'Вэб хөтөчийн хуудасны кешингийг болиулах',
 'tog-enotifwatchlistpages' => 'Миний хянах жагсаалт дахь хуудас өөрчлөгдсөн бол и-мэйл явуулах',
 'tog-enotifusertalkpages' => 'Миний хэлэлцүүлгийн хуудас өөрчлөгдөхөд и-мэйл явуулах',
-'tog-enotifminoredits' => 'Хуудсууд бага зэргээр засварлагдахад ч и-мэйл явуулах',
+'tog-enotifminoredits' => 'Хуудасны өнгөц өөрчлөлтийг мөн и-мейлээр явуул.',
 'tog-enotifrevealaddr' => 'Мэдэгдлийн и-мэйлд миний мэйл хаягийг илчлэх',
 'tog-shownumberswatching' => 'Харж буй хэрэглэгчдийн тоог үзүүлэх',
 'tog-oldsig' => 'Одоогийн гарын үсэг:',
@@ -90,7 +90,7 @@ $messages = array(
 
 'underline-always' => 'Байнга',
 'underline-never' => 'Хэзээ ч үгүй',
-'underline-default' => 'Вэб хөтөчийн анхны тохиргоо',
+'underline-default' => 'Вэб хөтөчийн үндсэн тохиргоо',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Засварлах талбарын фонт хэв маяг:',
@@ -175,8 +175,8 @@ $messages = array(
 'newwindow' => '(шинэ цонх нээгдэнэ)',
 'cancel' => 'Цуцлах',
 'moredotdotdot' => 'Дэлгэрэнгүй...',
-'mypage' => 'Ð\9cиний хуудас',
-'mytalk' => 'Ð\9cиний Ñ\8fÑ\80иа',
+'mypage' => 'Ð¥Ñ\8dÑ\80Ñ\8dглÑ\8dгÑ\87ийн хуудас',
+'mytalk' => 'Ð\9cиний Ñ\85Ñ\8dлÑ\8dлÑ\86үүлÑ\8dг',
 'anontalk' => 'Энэ IP-н яриа',
 'navigation' => 'Залуурдлага',
 'and' => '&#32;ба',
@@ -198,7 +198,7 @@ $messages = array(
 'vector-action-protect' => 'Хамгаалах',
 'vector-action-undelete' => 'Үл устгах',
 'vector-action-unprotect' => 'Хамгаалалтаа солих',
-'vector-simplesearch-preference' => 'Хайлтын сайжруулсан саналыг идэвхижүүлэх (зөвхөн Вектор скин)',
+'vector-simplesearch-preference' => 'Хялбарчилсан хайлтын талбарыг идэвхижүүлэх (зөвхөн Вектор скин)',
 'vector-view-create' => 'Үүсгэх',
 'vector-view-edit' => 'Засварлах',
 'vector-view-history' => 'Түүхийг үзэх',
@@ -208,6 +208,7 @@ $messages = array(
 'namespaces' => 'Нэрний зайнууд',
 'variants' => 'Хувилбарууд',
 
+'navigation-heading' => 'Хажуугийн цэс',
 'errorpagetitle' => 'Aлдаа',
 'returnto' => '$1 руу буцах.',
 'tagline' => '{{SITENAME}}-с',
@@ -305,6 +306,10 @@ $1',
 'youhavenewmessages' => 'Таньд $1 ($2) байна.',
 'newmessageslink' => 'шинэ мессеж',
 'newmessagesdifflink' => 'сүүлийн өөрчлөлт',
+'youhavenewmessagesfromusers' => 'Танд {{PLURAL:$3|өөр нэгэн хэрэглэгчээс |$3 хэрэглэгчээс}} $1 ирсэн байна ($2).',
+'youhavenewmessagesmanyusers' => 'Танд ($2) олон хэрэглэгчидээс $1.',
+'newmessageslinkplural' => '{{PLURAL:$1|нэг шинэ меммеж| шинэ мессеж}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|сүүлд хийсэн өөрчлөлт|сүүлд хийсэн өөрчлөлт}}',
 'youhavenewmessagesmulti' => 'Таньд $1 дээр шинэ мессеж ирсэн байна',
 'editsection' => 'засварлах',
 'editold' => 'засварлах',
@@ -399,6 +404,8 @@ $1',
 'cannotdelete' => '"$1" гэсэн хуудас буюу файлыг устгаж чадсангүй.
 Өөр хэрэглэгч өрсөж устгасан байж магадгүй.',
 'cannotdelete-title' => '"$1" хуудсыг устгаж чадсангүй',
+'delete-hook-aborted' => 'Хүк устгалыг зогсоолоо.
+Шалтгаан өгөгдсөнгүй.',
 'badtitle' => 'Болохгүй гарчиг',
 'badtitletext' => 'Оруулсан хуудасны нэр тань хүчингүй, хоосон, эсвэл буруу холбосон интер-хэл буюу интер-викигийн нэр байна. Нэрэнд хэрэглэгдэж болохгүй тэмдэгт орсон байж болзошгүй.',
 'perfcached' => 'Дараах тоо баримт нь нөөц хуулбар учраас хуучирсан мэдээлэлтэй байж магадгүй. Дээд тал нь {{PLURAL:$1|нэг илэрц|$1 илэрцүүд}} нөөцөд бэлэн байна.',
@@ -411,7 +418,7 @@ $1',
 'viewsource-title' => '$1 хуудсын эх сурвалжийг харах',
 'actionthrottled' => 'Үйлдэл хязгаарлагдлаа',
 'actionthrottledtext' => 'Бид спамаас хамгаалахын тулд энэ үйлдлийг богино хугацаанд хэт олон удаа давтахыг хязгаарладаг. Та энэхүү хязгаарт хүрсэн тул түр хүлээгээд дахин оролдоно уу.',
-'protectedpagetext' => 'Ð\97аÑ\81ваÑ\80лаÑ\85 Ñ\8fвдлÑ\8bг Ñ\81ааÑ\82Ñ\83Ñ\83лаÑ\85Ñ\8bн Ñ\82Ñ\83лд Ñ\8dнÑ\8d Ñ\85Ñ\83Ñ\83даÑ\81 Ñ\82үгжигдÑ\81Ñ\8dн байна.',
+'protectedpagetext' => 'ЭнÑ\8d Ñ\85Ñ\83Ñ\83дÑ\81Ñ\8bг Ð·Ð°Ñ\81ваÑ\80 Ñ\85ийÑ\85Ñ\8dÑ\8dÑ\81 Ñ\85амгаалÑ\81ан байна.',
 'viewsourcetext' => 'Та энэ хуудасны кодыг харах болон хуулж авах үйлдлийг хийх боломжтой:',
 'viewyourtext' => "Та энэ хуудсан дахь '''өөрийн өөрчлөлтөө''' хуулбарлаж, харж болно",
 'protectedinterface' => 'Энэ хуудас программын харагдах байдалд ашиглагддаг текстийг агуулдаг тул түгжигдсэн байна.',
@@ -427,6 +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''",
@@ -438,15 +452,16 @@ $2',
 
 Та ямар нэг хэрэглэгчийн бүртгэлгүйгээр {{SITENAME}}-г ашиглах боломжтой, эсвэл саяынхаа болон өөр хэрэглэгчийн бүртгэлээ ашиглан <span class='plainlinks'>[$1 дахин нэвтэрч]</span> болно.
 Броузерийнхаа хийсвэр санах ойг цэвэрлэх хүртэл зарим нэг хуудсууд нь таны холбогдсон байдлаар харагдаж болзошгүйг анхааруулъя.",
-'welcomecreation' => '= $1, тавтай морилно уу! ==
-Та амжилттай бүртгэгдлээ.
-[[Special:Preferences|{{SITENAME}}-н тохиргоогоо]] өөрчлөхөө мартуузай.',
+'welcomeuser' => '$1, та тавтай морил!',
+'welcomecreation-msg' => 'Таны бүртгэл хийгдсэн байна.
+Та өөрийн [[Special:Preferences|{{SITENAME}}-н тохиргоогоо]]  өөрчлөхөө бүү мартаарай.',
 'yourname' => 'Хэрэглэгчийн нэр:',
 'yourpassword' => 'Нууц үг:',
 'yourpasswordagain' => 'Нууц үгээ дахин оруулах:',
 'remembermypassword' => 'Энэ компьютер дээрх миний нэвтрэлтийг сана (хамгийн дээд талдаа $1 {{PLURAL:$1|өдрийн|өдрийн}} туршид)',
 'securelogin-stick-https' => 'Нэвтэрсний дараа HTTPS -д нэвтэрсэн хэвээр байх',
 'yourdomainname' => 'Таны домэйн:',
+'password-change-forbidden' => 'Та энэ вики дээрх нууц үгээ сольж болохгүй.',
 'externaldberror' => 'Нэг бол гадны баталгаажуулах мэдээллийн сангийн алдаа гарсан, эсвэл та өөрийн гадны бүртгэлээ шинэчлэх эрхгүй байна.',
 'login' => 'Нэвтрэх',
 'nav-login-createaccount' => 'Нэвтрэх / Бүртгүүлэх',
@@ -520,6 +535,7 @@ $2',
 'invalidemailaddress' => 'Таны мэйл хаяг нь хүчингүй форматтай байгаа тул зөвшөөрөгдөхгүй.
 Зөв форматтай хаяг оруул, эсвэл талбарыг хоослоно уу.',
 'cannotchangeemail' => 'Энэ вики-н бүртгэлийн цахим шуудангийн хаяг солигдож болохгүй.',
+'emaildisabled' => 'Та энэ сайт дээрээс и-мэйл явуулж болохгүй.',
 'accountcreated' => 'Бүртгэл үүсгэгдлээ',
 'accountcreatedtext' => '$1 хэрэглэгчийн бүртгэл үүсгэгдлээ.',
 'createaccount-title' => '{{SITENAME}}-н бүртгэлийн үүсгэл',
@@ -569,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' => 'Танд санамж болгон нэг имайл явууллаа',
@@ -583,6 +616,7 @@ $2',
 'changeemail-oldemail' => 'Одоогийн цахим шуудан:',
 'changeemail-newemail' => 'Шинэ цахим шуудангийн хаяг:',
 'changeemail-none' => '(байхгүй)',
+'changeemail-password' => '{{SITENAME}} дахь таны нууц үг:',
 'changeemail-submit' => 'Цахим шуудан солих',
 'changeemail-cancel' => 'Цуцал',
 
@@ -678,8 +712,8 @@ $2',
 'noarticletext' => 'Одоогийн байдлаар энэ хуудсанд текст алга.
 Та нэг бол энэ хуудасны нэрээр бусад хуудсуудад [[Special:Search/{{PAGENAME}}|хайлт хийх]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} холбоотой логуудад хайлт хийх],
 эсвэл [{{fullurl:{{FULLPAGENAME}}|action=edit}} энэ хуудсыг засварлаж болно]</span>.',
-'noarticletext-nopermission' => 'Ð\9eдоогийн Ð±Ð°Ð¹Ð´Ð»Ð°Ð°Ñ\80 Ñ\8dнÑ\8d хуудсанд текст алга.
-Та энэхүү [[Special:Search/{{PAGENAME}}|гарчигийг бусад хуудсуудаас хайх]],  эсвэл <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} холбогдох логуудаас хайж болно]</span>.',
+'noarticletext-nopermission' => 'Яг Ð¾Ð´Ð¾Ð¾Ð³Ð¾Ð¾Ñ\80 Ñ\83г хуудсанд текст алга.
+Та бусад хуудсан уг хуудасны [[Special:Search/{{PAGENAME}}| гарчигаар хайлт хийх]], эсвэл <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} холбоотой логоор хайлт]</span> хийж болно, гэхдээ танд уг хуудсыг үүсгэх зөвшөөрөл алга.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" хэрэглэгчийн бүртгэл бүртгэгдээгүй байна. Та энэ хуудсыг үүсгэх/засварлах тухайгаа дахин тунгааж бодно уу.',
 'userpage-userdoesnotexist-view' => '"$1" гэсэн хэрэглэгч бүртгэгдээгүй байна.',
 'blocked-notice-logextract' => 'Энэхүү хэрэглэгч одоогоор түгжигдсэн байна.
@@ -705,7 +739,7 @@ $2',
 'note' => "'''Анхааруулга:'''",
 'previewnote' => "'''Энэ бол зөвхөн урьдчилж харсан байдал.'''
 Таны хийсэн өөрчлөлтүүдийг одоохондоо хадгалаагүй байгаа!",
-'continue-editing' => 'Үргэлжлүүлэн янзлах',
+'continue-editing' => 'Засвар талбарт очих',
 'previewconflict' => 'Энэ урьдчилж харсан байдал нь дээд талын засварлах талбарын текстийг хадгалахад харагдах байдлыг харуулна.',
 'session_fail_preview' => "'''Уучлаарай! Мэдээлэл алдагдснаас болж таны засварыг боловсруулж чадсангүй. Дахин оролдож үзнэ үү. Ингээд ч болохгүй байвал сайтаас гарч дахин нэвтэрч орж үзнэ үү.'''",
 'session_fail_preview_html' => "'''Уучлаарай! Мэдээлэл алдагдснаас болж таны засварыг боловсруулж чадсангүй.'''
@@ -761,7 +795,6 @@ $2',
 'template-semiprotected' => '(хагас-хамгаалагдсан)',
 'hiddencategories' => 'Энэ хуудас нь $1 нуугдсан ангилалд багтаж байна:',
 'edittools' => '<!-- Энд бичсэн текст засварлах болоод аплоудын тавцангийн доор гарна. -->',
-'nocreatetitle' => 'Хуудасны үүсгэл хязгаарлагдсан байна',
 'nocreatetext' => '{{SITENAME}} нь шинэ хуудас үүсгэх явдлыг хаасан байна.
 Та буцаад хуучин байсан хуудсыг засварлах, эсвэл [[Special:UserLogin|нэвтэрч орох буюу бүртгүүлж болно]].',
 'nocreate-loggedin' => 'Таньд шинэ хуудас үүсгэх эрх байхгүй байна.',
@@ -785,6 +818,14 @@ $2',
 'edit-no-change' => 'Текстэд өөрчлөлт хийгдээгүй тул таны засварыг үл тоов.',
 'edit-already-exists' => 'Шинэ хуудас үүсгэж чадсангүй.
 Өмнө үүсгэгдсэн байна.',
+'defaultmessagetext' => 'Үндсэн мессеж текст',
+'content-failed-to-parse' => '$2 гэсэн агуулгыг $1 модел дээр авч чадсангүй: $3',
+
+# Content models
+'content-model-wikitext' => 'вики бичвэр',
+'content-model-text' => 'энгийн бичвэр',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Анхаар:''' Энэ хуудсанд хэт олон парсер функцийн дуудлагууд байна.
@@ -981,6 +1022,8 @@ $1",
 
 # Diffs
 'history-title' => '"$1"-н хянасан түүх',
+'difference-title' => '"$1"-ны өөр хувилбарууд',
+'difference-title-multipage' => '"$1", "$2" хоёр хуудасны ялгаа',
 'difference-multipage' => '(Хуудсууд хоорондын ялгаа)',
 'lineno' => '$1-р мөр:',
 'compareselectedversions' => 'Сонгосон хувилбаруудыг харьцуулах',
@@ -1061,6 +1104,7 @@ $1",
 'qbsettings-fixedright' => 'Баруун талд бэхжүүлсэн',
 'qbsettings-floatingleft' => 'Зүүн талд хөвсөн',
 'qbsettings-floatingright' => 'Баруун талд хөвсөн',
+'qbsettings-directionality' => 'Тухай хэлний барилаас хамаарч хэлбэрийг бий болгох',
 
 # Preferences page
 'preferences' => 'Хэрэглэгчийн тохиргоо',
@@ -1074,6 +1118,8 @@ $1",
 'datedefault' => 'Анхны байдал',
 'prefs-beta' => 'Туршилтын бета хэрэгсүүрүүд',
 'prefs-datetime' => 'Огноо ба цаг',
+'prefs-labs' => 'Labs -ын функцүүд',
+'prefs-user-pages' => 'Хэрэглэгчийн хуудсууд',
 'prefs-personal' => 'Хувийн тохируулга',
 'prefs-rc' => 'Сүүлийн засварууд',
 'prefs-watchlist' => 'Хянах жагсаалт',
@@ -1125,7 +1171,7 @@ $1",
 'timezoneregion-indian' => 'Энэтхэгийн далай',
 'timezoneregion-pacific' => 'Номхон далай',
 'allowemail' => 'Бусад хэрэглэгчдээс ирэх мэйлийг зөвшөөрөх',
-'prefs-searchoptions' => 'Хайх сонголтууд',
+'prefs-searchoptions' => 'Хайлт',
 'prefs-namespaces' => 'Нэрний зайнууд',
 'defaultns' => 'Үгүй бол эдгээр нэрний зайнуудад хайх:',
 'default' => 'анхны байдал',
@@ -1138,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' => 'Хэл:',
@@ -1252,6 +1298,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'right-writeapi' => 'Засварын API-н хэрэглээ',
 'right-delete' => 'Хуудас устгах',
 'right-bigdelete' => 'Том хэмжээний түүхтэй хуудсуудыг устгах',
+'right-deletelogentry' => 'Тухайн логуудыг устгах, сэргээх',
 'right-deleterevision' => 'Хуудсуудын тодорхой засваруудыг устгах буюу үл устгах',
 'right-deletedhistory' => 'Устгагдсан түүхийн бүртгэлийг холбогдох бичиггүй нь үзэх',
 'right-deletedtext' => 'Устгагдсан засварууд хоорондын устгагсдан текст, өөрчлөлтүүдийг харах',
@@ -1288,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' => 'энэ хуудсыг унших',
@@ -1320,6 +1368,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'action-suppressionlog' => 'энэ хувийн логийг үзэх',
 'action-block' => 'энэ хэрэглэгчийг засвар хийхээс түгжих',
 'action-protect' => 'энэ хуудасны хамгаалалтын түвшингүүдийг өөрчлөх',
+'action-rollback' => 'сүүлд хийгдсэн тодорхой хэрэглэгчдийн өөрчлөлтүүдийг буцаах',
 'action-import' => 'энэ хуудсыг өөр викигээс оруулах',
 'action-importupload' => 'энэ хуудсыг файл оруулалтаас оруулах',
 'action-patrol' => 'бусдын хийсэн засварыг манагдсан гэж тэмдэглэх',
@@ -1365,6 +1414,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'newsectionsummary' => '/* $1 */ шинэ хэсэг',
 'rc-enhanced-expand' => 'Дэлгэрэнгүй мэдээллийг үзүүлэх (ЖаваСкрипт хэрэглэгдэнэ)',
 'rc-enhanced-hide' => 'Дэлгэрэнгүй мэдээллийг нуух (ЖаваСкрипт хэрэглэгдэнэ)',
+'rc-old-title' => 'Анх өгсөн гарчиг нь "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Холбогдох өөрчлөлтүүд',
@@ -1535,9 +1585,11 @@ URL нь хүчинтэй, мөн түүн руу орж болж байгаа 
 'backend-fail-stream' => '$1 файлыг дамжуулж чадсангүй.',
 'backend-fail-backup' => '$1 файлыг нөөцөлж чадсангүй.',
 'backend-fail-notexists' => '$1 файл байхгүй байна.',
+'backend-fail-hashes' => 'Харьцуулалт хийх хаш файл олдсонгүй.',
 '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-руу хуулж чадсангүй.',
@@ -1555,6 +1607,33 @@ URL нь хүчинтэй, мөн түүн руу орж болж байгаа 
 'backend-fail-contenttype' => '"$1" дахь файлын агуулгын төрлийг таньж чадсангүй.',
 'backend-fail-usable' => '$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-release' => '$1 сервер дээрх түгжээг авч чадсангүй.',
+
+# ZipDirectoryReader
+'zip-file-open-error' => 'Файлыг зип шалгалт хийхэд алдаа гарлаа.',
+'zip-wrong-format' => 'Өгсөн файл зип файл биш байна.',
+'zip-bad' => 'Зип файлыг уншиж чадсангүй. Эвдэрсэн эсвэл унших боломжгүй файл байна.
+Аюулгүй байлыг хангасангүй.',
+'zip-unsupported' => 'MediaWiki -н дэмжигдсэн Зип файл биш тул уншиж болохгүй байна.
+Аюулгүй байдлыг хангасангүй.',
+
+# Special:UploadStash
+'uploadstash' => 'stash файл илгээх',
+'uploadstash-summary' => 'Уг хуудсанд вики-д нийтлээгүй боловч байршуулсан эсвэл байршуулж буй файлд нэвтрэх боломж олгож байна. Эдгээр байршуулсан эзнээс бусад хүнд харагдахгүй болно.',
+'uploadstash-clear' => 'Нууцалсан файлыг цэвэрлэх',
+'uploadstash-nofiles' => 'Танд нууцалсан файл алга.',
+'uploadstash-errclear' => 'Файлыг цэвэрлэхэд саад учирлаа.',
+'uploadstash-refresh' => 'Харагдаж буй файлуудыг сэргээн харах',
+
 # img_auth script messages
 'img-auth-accessdenied' => 'Хандах эрхгүй байна',
 'img-auth-nopathinfo' => 'PATH_INFO байхгүй байна.
@@ -1648,6 +1727,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'uploadnewversion-linktext' => 'Энэ файлын шинэ хувилбарыг оруулах',
 'shared-repo-from' => '$1-с',
 'shared-repo' => 'хамтаар хэрэглэх агуулах',
+'upload-disallowed-here' => 'Та энэ хуудсыг давхардуулж болохгүй.',
 
 # File reversion
 'filerevert' => '$1-г хуучин төлөвт шилжүүлэх',
@@ -1756,6 +1836,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'nmembers' => '$1 гишүүн',
 'nrevisions' => '$1 засвар',
 'nviews' => '$1 удаа үзсэн',
+'nimagelinks' => '$1 {{PLURAL:$1|хуудсанд|хуудсанд}} ашигласан',
 'specialpage-empty' => 'Энэ мэдүүлэгт үр дүн гарсангүй.',
 'lonelypages' => 'Өнчин хуудсууд',
 'lonelypagestext' => 'Энэ хуудсууд {{SITENAME}}-дахь бусад хуудсуудтай холбогдоогүй эсвэл заагаас хэтэрсэн байна.',
@@ -1827,6 +1908,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 Та логийн төрөл, хэрэглэгчийн нэр (оруулсан үгнийхээ том ба жижиг үсгийг яг зөв оруулахгүй бол болохгүй), эсвэл нөлөөлөгдсөн хуудсаа сонгож (мөн оруулсан үгнийхээ том ба жижиг үсгийг яг зөв оруулах ёстой) үзэгдэх зйүлсийг багасгаж болно.',
 'logempty' => 'Логт тохирох зүйл алга.',
 'log-title-wildcard' => 'Энэ текстээр эхлэсэн гарчигуудыг хайх',
+'showhideselectedlogentries' => 'Сонгосон логуудыг харагдуулах/нуух',
 
 # Special:AllPages
 'allpages' => 'Бүх хуудас',
@@ -1845,6 +1927,9 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'allpagesbadtitle' => 'Хуудасны нэр нь хүчингүй эсвэл интер-хэл буюу интер-викид байгаа нэр байна. Нэрэнд хэрэглэж болохгүй тэмдэгт агуулагдаж байж болзошгүй юм.',
 'allpages-bad-ns' => '{{SITENAME}} нь "$1"-г агуулаагүй байна.',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Саяханы хуудсыг харах',
+
 # Special:Categories
 'categories' => 'Ангиллууд',
 'categoriespagetext' => 'Дараах {{PLURAL:$1|ангилалд|ангиллуудад}} хуудас эсвэл медиа файл агуулагдаж байна.
@@ -1885,10 +1970,6 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'activeusers-hidesysops' => 'Администраторуудыг нуух',
 'activeusers-noresult' => 'Хэрэглэгч олдсонгүй.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Хэрэглэгч үүсгэлтийн лог',
-'newuserlogpagetext' => 'Энэ нь хэрэглэгч үүсгэлтийн лог юм.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Хэрэглэгчийн бүлгийн эрхүүд',
 'listgrouprights-summary' => 'Дараах нь энэ вики дээрх хэрэглэгчийн бүлгүүд болон тэдгээрийн эрх, зөвшөөрлүүдийн жагсаалт юм.
@@ -1912,6 +1993,8 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'mailnologin' => 'илгээх хаяг байхгүй',
 'mailnologintext' => 'Та бусад хэрэглэгчдэд мэйл явуулахын тулд өөрийн [[Special:Preferences|хувийн тохируулгадаа]] мэйлээ оруулсан, мөн [[Special:UserLogin|нэвтэрсэн]] байх шаардлагатай.',
 'emailuser' => 'Энэ хэрэглэгчид мэйл илгээх',
+'emailuser-title-target' => 'Энэ {{GENDER:$1|хэрэглэгчийг}} и-мейлээр явуулах',
+'emailuser-title-notarget' => 'И-мейл хэрэглэгч',
 'emailpage' => 'Хэрэглэгчид мэйл илгээх',
 'emailpagetext' => 'Энэ хэрэглэгч рүү мэйл илгээхэд доорхийг бөглөнө.
 Таны өөрийн [[Special:Preferences|хэрэглэгчийн тохиргоонд]] оруулсан мэйл хаяг нь "Хэнээс" гэсэн хэсэгт гарах тул хүлээн авагч хариугаа тань руу шууд илгээх боломжтой.',
@@ -1923,6 +2006,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'noemailtext' => 'Энэ хэрэглэгч хүчинтэй и-мэйл хаяг тохируулаагүй байна.',
 'nowikiemailtitle' => 'Мэйл зөвшөөрөгдөхгүй',
 'nowikiemailtext' => 'Энэ хэрэглэгч бусад хэрэглэгчдээс мэйл хүлээж авахгүй гэсэн байна.',
+'emailtarget' => 'Хүлээн авагчийн хэрэглэгчийн нэрийг оруулах',
 'emailusername' => 'Хэрэглэгчийн нэр:',
 'emailusernamesubmit' => 'Явуулах',
 'email-legend' => '{{SITENAME}}-н өөр хэрэглэгч руу мэйл явуулах',
@@ -1944,14 +2028,16 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 
 # Watchlist
 'watchlist' => 'Миний хянаж буй хуудсууд',
-'mywatchlist' => 'Ð\9cиний Ñ\85Ñ\8fнаж Ð±Ñ\83й Ñ\85Ñ\83Ñ\83дÑ\81Ñ\83Ñ\83дын жагсаалт',
+'mywatchlist' => 'Ð¥Ñ\8fналÑ\82Ñ\8bн Ñ\85Ñ\83Ñ\83дÑ\81ын жагсаалт',
 'watchlistfor2' => 'Хэрэглэгч: $1 $2',
 'nowatchlist' => 'Танд хянаж буй зүйл байхгүй.',
 'watchlistanontext' => 'Та өөрийн хянах листийг өөрчлөх буюу үзэхийг хүсвэл $1 хэрэгтэй.',
 'watchnologin' => 'Нэвтрээгүй байна.',
 'watchnologintext' => 'Та өөрийн хянаж буй хуудаснуудын жагсаалтыг өөрчлөхийн тулд [[Special:UserLogin|нэвтэрсэн байх]] шаардлагатай.',
+'addwatch' => 'Хяналтын жагсаалтад нэмэх',
 'addedwatchtext' => "\"[[:\$1]]\" гэсэн хуудас таны [[Special:Watchlist|хянах жагсаалтанд]] нэмэгдлээ.
 Энэ хуудас эсвэл түүний хэлэлцүүлгийн хуудас засварлагдахад тэдгээр нь [[Special:RecentChanges|сүүлийн засваруудын жагсаалтад]] '''тодруулалттай''' харагдах болно.",
+'removewatch' => 'Хяналтын жагсаалтаас хасах',
 'removedwatchtext' => '"[[:$1]]" хуудас таны [[Special:Watchlist|хяналтын жагсаалтаас]] хасагдлаа.',
 'watch' => 'Хянах',
 'watchthispage' => 'Энэ хуудсыг хяна',
@@ -1977,11 +2063,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 
 'enotif_mailer' => '{{SITENAME}}-н мэйл сонордуулга',
 'enotif_reset' => 'Бүх хуудсыг үзсэн гэж тэмдэглэх',
-'enotif_newpagetext' => 'Энэ бол шинэ хуудас.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-н хэрэглэгч',
-'changed' => 'өөрчлөгдсөн',
-'created' => 'үүсгэсэн',
-'enotif_subject' => '{{SITENAME}}-н $PAGETITLE хуудсыг $PAGEEDITOR нь $CHANGEDORCREATED',
 'enotif_lastvisited' => '$1-н хамгийн сүүлд зочилсноос хойших өөрчлөлтүүдийг харуул.',
 'enotif_lastdiff' => '$1-г харж энэ өөрчлөлтийг үзнэ үү.',
 'enotif_anon_editor' => '$1 бүртгэлгүй хэрэглэгч',
@@ -2017,6 +2099,8 @@ $UNWATCHURL
 
 Санал сэтгэгдэл болон тулгарсан бэрхшээлээ :
 {{canonicalurl:{{MediaWiki:Helppage}}}} хаягаар орж бичнэ үү',
+'created' => 'үүсгэсэн',
+'changed' => 'өөрчлөгдсөн',
 
 # Delete
 'deletepage' => 'Хуудсыг устга',
@@ -2167,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|устгалын бүртгэл]] дээрээс харна уу.",
@@ -2182,6 +2267,7 @@ $UNWATCHURL
 'undelete-cleanup-error' => 'Хэрэглэгддэггүй архивийн "$1" файлыг устгахад алдаа гарлаа.',
 'undelete-missing-filearchive' => 'Файлын архивийн ID $1 нь мэдээллийн санд байхгүй тул сэргээх боломжгүй байна.
 Аль хэдийнээ сэргээгдсэн байж магадгүй.',
+'undelete-error' => 'Хуудсыг сэргээхэд алдаа гарлаа',
 'undelete-error-short' => 'Файлыг сэргээхэд алдаа гарлаа: $1',
 'undelete-error-long' => 'Дараах файлыг сэргээхэд алдаа гарлаа:
 
@@ -2195,9 +2281,9 @@ $1',
 'blanknamespace' => '(Гол)',
 
 # Contributions
-'contributions' => 'Хэрэглэгчийн хувь нэмэр',
+'contributions' => '{{GENDER:$1|Хэрэглэгчийн }} оруулсан хувь нэмэр',
 'contributions-title' => '$1 хэрэглэгчийн хувь нэмэр',
-'mycontris' => 'Ð\9cиний Ð¾руулсан хувь нэмэр',
+'mycontris' => 'Ð\9eруулсан хувь нэмэр',
 'contribsub2' => 'Хэрэглэгч: $1 ($2)',
 'nocontribs' => 'Энэ шалгуурт тохирох өөрчилсөн зүйлүүд олдсонгүй.',
 'uctop' => '(дээд)',
@@ -2238,7 +2324,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 чиглүүлэгч',
 'whatlinkshere-hidetrans' => '$1 оруулалт',
 'whatlinkshere-hidelinks' => 'Линкүүдийг $1',
-'whatlinkshere-hideimages' => 'зургийн холбоосыг $1',
+'whatlinkshere-hideimages' => '$1 файлын холбоос',
 'whatlinkshere-filters' => 'Шүүлтүүрүүд',
 
 # Block/unblock
@@ -2275,10 +2361,12 @@ $1',
 'ipbwatchuser' => 'Энэ хэрэглэгчийн хэрэглэгчийн ба ярианы хуудсуудыг хянах',
 'ipb-disableusertalk' => 'Энэ хэрэглэгчийг блоклогдсон үедээ өөрийн ярианы хуудсыг янзлахаас зайлс хийлгэх',
 'ipb-change-block' => 'Эдгээр тохиргоотойгоор энэ хэрэглэгчийг дахин түгжих',
+'ipb-confirm' => 'Блоклоход бэлэн',
 'badipaddress' => 'Хүчингүй IP хаяг',
 'blockipsuccesssub' => 'Түгжээ амжилттай боллоо.',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] түгжигдсэн байна.
 <br />Түгжсэн тоймыг [[Special:BlockList|түгжигдсэн IP-ийн жагсаалт]] аас харна уу.',
+'ipb-blockingself' => 'Та өөрийгөө блоклох гэж байна. Тэгэх үү?',
 'ipb-edit-dropdown' => 'Түгжих шалтгаануудыг засварлах',
 'ipb-unblock-addr' => '$1-н түгжээг тайлах',
 'ipb-unblock' => 'Хэрэглэгчийн нэр эсвэл IP хаягийн түгжээг тайлах',
@@ -2288,10 +2376,20 @@ $1',
 'unblockiptext' => 'Өмнө нь хориг тавьсан интернет хаяг юм уу хэрэглэгчийн бичих эрхийг сэргээхийн тулд дорх маягтыг ашигла.',
 'ipusubmit' => 'Энэ түгжээг цуцлах',
 'unblocked' => '[[User:$1|$1]]-ийн хориг цуцлагдсан (идэвхижсэн) байна.',
+'unblocked-range' => '$1 -г блоклогдсон байдлаас гаргасан',
 'unblocked-id' => '$1 түгжээг авч хаялаа',
+'blocklist' => 'Блоклогдсон хэрэглэгчид',
 'ipblocklist' => 'Түгжигдсэн хэрэглэгчид',
 'ipblocklist-legend' => 'Түгжигдсэн хэрэглэгчийг хайх',
+'blocklist-userblocks' => 'бүртгэгдсэн блок-г нуух',
+'blocklist-tempblocks' => 'Түр зуурын блокыг нуух',
+'blocklist-addressblocks' => 'Ганц IP блокыг нуух',
+'blocklist-rangeblocks' => 'Блокуудыг нуух',
+'blocklist-timestamp' => 'Цагийн зааг',
+'blocklist-target' => 'Бай',
 'blocklist-expiry' => 'Цуцлагдана',
+'blocklist-by' => 'Админыг блоклох',
+'blocklist-params' => 'Блоклох параметрүүд',
 'blocklist-reason' => 'Шалтгаан',
 'ipblocklist-submit' => 'Хайх',
 'ipblocklist-localblock' => 'Дотоодын түгжилт',
@@ -2337,6 +2435,7 @@ $1',
 'ipb-needreblock' => '$1 нь аль хэдийнээ түгжигдсэн байна.
 Та тохиргоог өөрчилмөөр байна уу?',
 'ipb-otherblocks-header' => ' Бусад {{PLURAL:$1|түгжээ|түгжээ}}',
+'unblock-hideuser' => 'Энэ хэрэглэгчийн нэрийг нуусан учир, блоклолоос гаргаж болохгүй.',
 'ipb_cant_unblock' => 'Алдаа: Түгжигдсэн ID $1 нь олдохгүй байна. Түгжээ нь аль хэдийн тайлагдсан байж болзошгүй.',
 'ipb_blocked_as_range' => 'Алдаа: $1 гэсэн IP хаяг нь шууд түгжигдээгүй бөгөөд тайлах боломжгүй байна.
 Харин энэ нь $2 хэсгийн хэсэг болж түгжигдсэн байгаа бөгөөд үүнийг тайлах боломжтой.',
@@ -2374,6 +2473,7 @@ $1',
 'unlockdbsuccesstext' => 'Мэдээллийн сангийн цоожийг тайллаа.',
 'lockfilenotwritable' => 'Мэдээллийн сан цоожлоход файл бичигдэхгүй болно. Мэдээллийн санг цоожлох болон тайлах нь файл хуулж болох вэб сервер тусламжтай хийгдэнэ.',
 'databasenotlocked' => 'Өгөгдлийн сан хаагдаагүй байна.',
+'lockedbyandtime' => '($2-ны $3 цагт {{GENDER:$1|$1}}-ын)',
 
 # Move page
 'move-page' => '$1-г зөөх',
@@ -2440,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' => 'Шинэ файлын өргөтгөл төрөлтэй нь таарахгүй байна',
@@ -2463,9 +2564,11 @@ $1',
 Хуудсыг гаргахын тулд доорх бичих талбарын мөр бүрт нэг гарчигийг оруулан, одоогийн болон хуучин бүх засварууд ба хуудасны түүхийн мөрүүд, эсвэл одоогийн засвар болон сүүлийн засварын талаарх мэдээллийн алиныг авах тухай сонголт хийнэ.
 
 Хоёр дахь сонголтын хувьд мөн холбоос ашиглах боломжтой; жишээ нь "[[{{MediaWiki:Mainpage}}]]" хуудаст [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] гэх холбоосыг ашиглаж болно.',
+'exportall' => 'Бүх хуудсыг экпортлох',
 'exportcuronly' => 'Бүх түүхийг биш, зөвхөн одоогийн өөрчлөлтийг багтаа',
 'exportnohistory' => "----
 '''Анхаар:''' Энэ маягтын дагуу хуудсуудын бүтэн түүхийг экспортлох үйлдэл гүйцэтгэлийн шалтгаануудын улмаас зогсоогдсон байна.",
+'exportlistauthors' => 'Хуудас бүрт хувь нэмэр оруулэгчдийг харуулах',
 'export-submit' => 'Экспортлох',
 'export-addcattext' => 'Дараах ангиллаас хуудсуудыг нэмэх:',
 'export-addcat' => 'Нэмэх',
@@ -2551,6 +2654,12 @@ $1',
 'import-logentry-interwiki' => '$1-г транс-викидлээ',
 'import-logentry-interwiki-detail' => '$2-с авсан $1 засвар',
 
+# JavaScriptTest
+'javascripttest' => 'JavaScript туршилт',
+'javascripttest-title' => '$1 теёт хийж байна',
+'javascripttest-pagetext-noframework' => 'Уг хуудсыг JavaScript тест хийхэд ашиглана.',
+'javascripttest-pagetext-unknownframework' => '"$1" мэдэхгүй тест фреймворк байна.',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Таны хэрэглэгчийн хуудас',
 'tooltip-pt-anonuserpage' => 'Таны хэрэглэж буй IP хаягийн хэрэглэгчийн хуудас',
@@ -2612,6 +2721,7 @@ $1',
 'tooltip-compareselectedversions' => 'Энэ хуудасны сонгосон хоёр хувилбарын ялгааг харна уу.',
 'tooltip-watch' => 'Энэ хуудсыг өөрийн хянах жагсаалтандаа нэмэх',
 'tooltip-watchlistedit-normal-submit' => 'Гарчигийг устгах',
+'tooltip-watchlistedit-raw-submit' => 'Хянаж буй хуудсуудын жагсаалтыг шинэчлэх',
 'tooltip-recreate' => 'Арилгагдсан хуудсыг дахин эхлүүлэх',
 'tooltip-upload' => 'Аплоудоо эхлэх',
 'tooltip-rollback' => '"Буцаах" функцээр энэ хуудаст хийсэн засвар(ууд)ыг хамгийн сүүлийн засвар хийсэн хүний хувилбар руу ганц товшилтоор шилжүүлнэ',
@@ -2652,11 +2762,29 @@ $1',
 
 # Info page
 'pageinfo-title' => '"$1" - хуудасны мэдээлэл',
-'pageinfo-header-edits' => 'Өөрчлөлтүүд',
+'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-views' => 'Харагдацуудын тоо',
-'pageinfo-watchers' => 'Хянагчдын тоо',
-'pageinfo-edits' => 'Засваруудын тоо',
-'pageinfo-authors' => 'Тус тусын зохиогчидын тоо',
+'pageinfo-watchers' => 'Хуудас хянагчдын тоо',
+'pageinfo-subpages-name' => 'Үүний дэд хуудас',
+'pageinfo-firstuser' => 'Хуудас үүсгэсэн',
+'pageinfo-firsttime' => 'Хуудас үүсгэсэн огноо',
+'pageinfo-lastuser' => 'Сүүлд зассан хэрэглэгч',
+'pageinfo-lasttime' => 'Сүүлд зассан огноо',
+'pageinfo-edits' => 'Нийт засварын тоо',
+'pageinfo-authors' => 'Нийт зохиогчидын тоо',
+'pageinfo-recent-edits' => 'Сүүлд хийсэн нийт засварууд (сүүлийн $1 -т)',
+'pageinfo-hidden-categories' => '($1) {{PLURAL:$1|ангиллыг|ангилалуудыг}} нуусан',
+'pageinfo-toolboxlink' => 'Хуудасны мэдээлэл',
+'pageinfo-redirectsto-info' => 'мэдээлэл',
+'pageinfo-contentpage-yes' => 'Тийм',
+'pageinfo-protect-cascading-yes' => 'Тийм',
 
 # Patrolling
 'markaspatrolleddiff' => 'Хяналтанд авъя',
@@ -2698,7 +2826,11 @@ $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.',
+'show-big-image-size' => '$1 × $2 пиксел',
 'file-info-gif-looped' => 'эргэлдсэн',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|фрэйм}}',
 'file-info-png-looped' => 'эргэлдсэн',
@@ -2718,7 +2850,12 @@ $1',
 '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' => 'дөнгөж сая',
 
 # Bad image list
 'bad_image_list' => 'Формат дараах байдлаар байна:
@@ -2861,15 +2998,47 @@ $1',
 'exif-gpsareainformation' => 'GPS бүсийн нэр',
 'exif-gpsdatestamp' => 'GPS огноо',
 'exif-gpsdifferential' => 'GPS дифференциал засвар',
+'exif-jpegfilecomment' => 'JPEG файлын тэмдэглэгээ',
+'exif-keywords' => 'Түлхүүр үгс',
+'exif-worldregioncreated' => 'Зураг авсан тив',
+'exif-countrycreated' => 'Зураг авсан улс',
+'exif-countrycodecreated' => 'Зураг авсан улсын код',
+'exif-provinceorstatecreated' => 'Зураг авсан аймаг, хот',
+'exif-citycreated' => 'Зураг авсан хот',
+'exif-sublocationcreated' => 'Зураг авсан хотын хэсэг',
+'exif-worldregiondest' => 'Харагдаж буй тив',
+'exif-countrydest' => 'Харагдаж буй улс',
+'exif-countrycodedest' => 'Харагдаж буй хотын код',
+'exif-provinceorstatedest' => 'Харагдаж буй аймаг, хот.',
+'exif-citydest' => 'Харагдаж буй хотууд',
+'exif-sublocationdest' => 'Харагдаж буй хотын хэсэг',
+'exif-objectname' => 'Жижиг гарчиг',
+'exif-specialinstructions' => 'Тусгай заавар',
+'exif-headline' => 'Толгой хэсэг',
 'exif-source' => 'Эх сурвалж',
+'exif-contact' => 'Холбогдох мэдээлэл',
+'exif-writer' => 'Бичсэн',
 'exif-languagecode' => 'Хэл',
+'exif-iimversion' => 'IIM хувилбар',
 'exif-iimcategory' => 'Ангилал',
+'exif-datetimeexpires' => 'түүний дараа бүү хэрэглэ',
+'exif-datetimereleased' => 'Гарсан өдөр',
+'exif-originaltransmissionref' => '',
+'exif-identifier' => 'Дэлгэрүүлэгч',
+'exif-lens' => 'Ашигласан линз',
+'exif-serialnumber' => 'Камерны серын дугаар',
 'exif-cameraownername' => 'Камерын эзэн',
 'exif-label' => 'Шошго',
 'exif-datetimemetadata' => 'метадатаг хамгийн сүүлд өөрчилсөн огноо',
+'exif-nickname' => 'Зурганд өгсөн албан бус нэр',
+'exif-rating' => 'Зэрэглэл (5 хүртэл)',
 'exif-copyrighted' => 'Зохиогчийн эрхийн байдал',
 'exif-copyrightowner' => 'Зохиогчийн эрх эзэмшигч',
+'exif-usageterms' => 'Хэрэглээний нөхцөл, шаардлага',
 'exif-originaldocumentid' => 'Ориг баримтын ID',
+'exif-pngfilecomment' => 'PNG файлын тэмдэглэгээ',
+'exif-giffilecomment' => 'GIF файлын тэмдэглэгээ',
+'exif-intellectualgenre' => 'Зүйлийн төрөл',
 
 # EXIF attributes
 'exif-compression-1' => 'Шахагдаагүй',
@@ -2992,6 +3161,11 @@ $1',
 'exif-gpsdestdistance-m' => 'Милл',
 'exif-gpsdestdistance-n' => 'бээр',
 
+'exif-gpsdop-excellent' => 'Маш сайн ($1)',
+'exif-gpsdop-good' => 'Сайн ($1)',
+'exif-gpsdop-moderate' => 'Дундаж ($1)',
+'exif-gpsdop-poor' => 'Муу ($1)',
+
 'exif-objectcycle-a' => 'Зөвхөн өглөө',
 'exif-objectcycle-p' => 'Зөвхөн орой',
 'exif-objectcycle-b' => 'Өдөр ч шөнө ч',
@@ -3005,6 +3179,7 @@ $1',
 'exif-dc-contributor' => 'Хувь нэмэр оруулагчид',
 'exif-dc-date' => 'Огноо',
 'exif-dc-relation' => 'Холбогдох мэдээллийн эх сурвалж',
+'exif-dc-rights' => 'Эрхүүд',
 'exif-dc-source' => 'Тулгууласан эх сурвалж',
 'exif-dc-type' => 'Эх сурвалжийн төрөл',
 
@@ -3018,6 +3193,7 @@ $1',
 'exif-iimcategory-edu' => 'Боловсрол',
 'exif-iimcategory-evn' => 'Байгал орчин',
 'exif-iimcategory-hth' => 'Эрүүл Мэнд',
+'exif-iimcategory-hum' => 'Хүний сонирхол',
 'exif-iimcategory-lif' => 'Амьдралын хэв маяг болон чөлөөт уран бүтээл',
 'exif-iimcategory-pol' => 'Улс төр',
 'exif-iimcategory-rel' => 'Шашин шүтлэг болон итгэл үнэмшил',
@@ -3274,6 +3450,8 @@ $5
 'compare-rev1' => 'Нэгдүгээр засвар',
 'compare-rev2' => 'Хоёрдугаар засвар',
 'compare-submit' => 'Харьцуулах',
+'compare-invalid-title' => 'Өгсөн гарчиг буруу байна.',
+'compare-title-not-exists' => 'Өгсөн гарчиг байхгүй байна.',
 
 # Database error messages
 'dberr-header' => 'Энэхүү викид асуудал үүсэв',
@@ -3302,11 +3480,36 @@ $5
 'sqlite-no-fts' => '$1 (бүх текстээрх хайлтыг дэмждэггүй)',
 
 # New logging system
+'logentry-delete-delete' => '$3 хуудсыг $1 устгасан',
+'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' => 'Болих',
+'feedback-close' => 'Болсон',
 
 # Search suggestions
 'searchsuggest-search' => 'Хайх',
 
+# API errors
+'api-error-filename-tooshort' => 'Файлын нэр хэтэрхий урт байна.',
+'api-error-filetype-banned' => 'Ийм төрлийн файлыг хорьсон байна.',
+
+# 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 df26a3d..a42c163 100644 (file)
  * @author Tusharpawar1982
  * @author V.narsikar
  * @author Vpnagarkar
+ * @author Ydyashad
  * @author Ynwala
  * @author अभय नातू
  * @author कोलࣿहापࣿरी
  * @author कोल्हापुरी
  * @author प्रणव कुलकर्णी
  * @author शࣿरीहरि
+ * @author संतोष दहिवळ
  */
 
 $namespaceNames = array(
@@ -452,6 +454,7 @@ $messages = array(
 'newwindow' => '(नवीन खिडकीत उघडते.)',
 'cancel' => 'खोडा',
 'moredotdotdot' => 'अजून...',
+'morenotlisted' => 'आणखी यादीत नाही...',
 'mypage' => 'माझे पान',
 'mytalk' => 'माझ्या चर्चा',
 'anontalk' => 'या अंकपत्त्याचे चर्चा पान उघडा',
@@ -578,6 +581,7 @@ $1',
 'youhavenewmessages' => 'तुमच्यासाठी $1 ($2).',
 'newmessageslink' => 'नवीन संदेश',
 'newmessagesdifflink' => 'ताजा बदल',
+'newmessagesdifflinkplural' => 'मागिल {{PLURAL:$1|बदल}}',
 'youhavenewmessagesmulti' => '$1 वर तुमच्यासाठी नवीन संदेश आहेत.',
 'editsection' => 'संपादन',
 'editold' => 'संपादन',
@@ -697,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''",
@@ -708,16 +715,16 @@ $2',
 
 तुम्ही अनामिकपणे {{SITENAME}}चा उपयोग करत राहू शकता, किंवा त्याच अथवा वेगळ्या सदस्य नावाने <span class='plainlinks'>[$1  पुन्हा दाखल होऊ शकता]</span>.
 आपण स्वत:च्या न्याहाळकाची सय (cache) रिकामी करत नाही तो पर्यंत काही पाने आपण अजून दाखल आहात, असे नुसतेच दाखवत राहू शकतील.",
-'welcomecreation' => '== सुस्वागतम, $1! ==
-
-तुमचे खाते उघडण्यात आले आहे.
+'welcomeuser' => 'स्वागत, $1!',
+'welcomecreation-msg' => 'तुमचे खाते उघडण्यात आले आहे.
 आपल्या [[Special:Preferences|{{SITENAME}} पसंती]] बदलण्यास विसरू नका.',
 'yourname' => 'तुमचे नाव',
 'yourpassword' => 'तुमचा परवलीचा शब्द',
 'yourpasswordagain' => 'तुमचा परवलीचा शब्द पुन्हा लिहा',
-'remembermypassword' => 'माझा प्रवेश या संगणकावर लक्षात ठेवा (जास्तीत जास्त $1 {{PLURAL:$1|दिवसासाठी|दिवसांसाठी}})',
+'remembermypassword' => 'माझा प्रवेश या संगणकावर लक्षात ठेवा (जास्तीत जास्त $1 {{PLURAL:$1|दिवस|दिवसांसाठी}})',
 'securelogin-stick-https' => 'प्रवेशानंतर एचटीटीपीएसच्या संपर्कात रहा',
 'yourdomainname' => 'तुमचे क्षेत्र (डॉमेन) :',
+'password-change-forbidden' => 'तुम्ही या विकिवर तुमचा संकेतशब्द बदलू शकत नाही.',
 'externaldberror' => 'विदागार ’खातरजमा’ (प्रमाणितीकरण) त्रुटी होती अथवा तुम्हाला तुमचे बाह्य खाते अद्ययावत  करण्याची परवानगी नाही.',
 'login' => 'प्रवेश करा',
 'nav-login-createaccount' => 'सदस्य प्रवेश',
@@ -779,6 +786,7 @@ $2',
 'emailconfirmlink' => 'आपला ई-मेल पत्ता तपासून पहा.',
 'invalidemailaddress' => 'तुम्ही दिलेला ई-मेल पत्ता चुकीचा आहे, कारण तो योग्यप्रकारे लिहिलेला नाही. कृपया योग्यप्रकारे ई-मेल पत्ता लिहा अथवा ती जागा मोकळी सोडा.',
 'cannotchangeemail' => 'या विकीवर खात्याचा ईमेल बदलता येत नाही',
+'emaildisabled' => 'हे संकेतस्थळ विपत्र पाठवू शकत नाही.',
 'accountcreated' => 'खाते उघडले.',
 'accountcreatedtext' => '$1 चे सदस्यखाते उघडले.',
 'createaccount-title' => '{{SITENAME}} साठीची सदस्य नोंदणी',
@@ -850,6 +858,7 @@ $2',
 'changeemail-oldemail' => 'सध्याचा ईमेल पत्ता :',
 'changeemail-newemail' => 'नवा ईमेल पत्ता:',
 'changeemail-none' => '(दिलेला नाही)',
+'changeemail-password' => 'तुमचा {{SITENAME}} संकेतांक:',
 'changeemail-submit' => 'ईमेल बदला',
 'changeemail-cancel' => 'रद्द करा',
 
@@ -1001,7 +1010,6 @@ $2',
 'template-protected' => '(सुरक्षित)',
 'template-semiprotected' => '(अर्ध-सुरक्षीत)',
 'hiddencategories' => 'हे पान खालील {{PLURAL:$1|एका लपविलेल्या वर्गामध्ये|$1 लपविलेल्या वर्गांमध्ये}} आहे:',
-'nocreatetitle' => 'पान निर्मीतीस मर्यादा',
 'nocreatetext' => '{{SITENAME}}वर नवीन लेख लिहिण्यास मज्जाव करण्यात आलेला आहे. आपण परत जाऊन अस्तित्वात असलेल्या लेखांचे संपादन करू शकता अथवा [[Special:UserLogin|नवीन सदस्यत्व घ्या/ प्रवेश करा]].',
 'nocreate-loggedin' => 'येथे तुम्हाला नवीन पाने बनवण्याची परवानगी नाही.',
 'sectioneditnotsupported-title' => 'विभाग संपादन समर्थित नाही.',
@@ -1024,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' => '”’इशारा:”’ या पानावर खूप सारे खर्चिक पृथक्करण क्रिया कॉल्स आहेत.
 
@@ -1527,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' => 'हे पान वाचा',
@@ -1749,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" ही प्रत करता आली नाही.',
@@ -1889,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 पूर्वपद',
@@ -1993,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|आवर्तन|आवर्तने}}',
@@ -2021,6 +2039,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mostlinkedtemplates' => 'सर्वाधिक जोडलेले साचे',
 'mostcategories' => 'सर्वाधिक वर्गीकृत पाने',
 'mostimages' => 'सर्वाधिक जोडलेली चित्रे',
+'mostinterwikis' => 'सर्वाधिक आंतरविकि दुवे असणारी पाने',
 'mostrevisions' => 'सर्वाधिक बदललेले लेख',
 'prefixindex' => 'उपसर्ग असणाऱ्या लेखांची यादी',
 'prefixindex-namespace' => '($1 नामविश्व) हा  उपसर्ग असणारी सर्व पाने',
@@ -2089,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' => 'आखेरचे दृश्य',
@@ -2133,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}}|इथे]] दिलेली आहे.',
@@ -2159,6 +2175,8 @@ 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|सदस्य पसंतीत]] नमुद केलेला विपत्र पत्ता "कडून" पत्त्यात येईल म्हणजे  प्राप्तकरता आपल्याला उत्तर देऊ शकेल.',
 'usermailererror' => 'पत्र बाब त्रुटी वापस पाठवली:',
@@ -2228,11 +2246,12 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 
 'enotif_mailer' => '{{SITENAME}} सूचना विपत्र',
 'enotif_reset' => 'सर्व पानास भेट दिल्याचे नमुद करा',
-'enotif_newpagetext' => 'हे नवीन पान आहे.',
 'enotif_impersonal_salutation' => '{{SITENAME}} सदस्य',
-'changed' => 'बदलले',
-'created' => 'तयार केले',
-'enotif_subject' => '{{SITENAME}} पान $PAGETITLE $PAGEEDITOR ने $CHANGEDORCREATED आहे',
+'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',
@@ -2262,6 +2281,8 @@ $UNWATCHURL
 
 पुढील साहाय्य आणि प्रतिक्रिया:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'तयार केले',
+'changed' => 'बदलले',
 
 # Delete
 'deletepage' => 'पान वगळा',
@@ -2299,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]]वे संपादन माघारी परतवता येत नाही; पान आधीच कुणी माघारी परतवले आहे किंवा संपादीत केले आहे.
@@ -2325,6 +2348,8 @@ $UNWATCHURL
 'prot_1movedto2' => '"[[$1]]" हे पान "[[$2]]" मथळ्याखाली स्थानांतरित केले.',
 'protect-badnamespace-title' => 'असुरक्षणीय नामविश्व',
 'protect-badnamespace-text' => 'या नामविश्वातील पाने सुरक्षीत करता येत नाहीत',
+'protect-norestrictiontypes-text' => 'हे पान सुरक्षित होऊ शकत नाही कारण कोणताही सुरक्षापातळी प्रकार उपलब्ध नाही.',
+'protect-norestrictiontypes-title' => 'सुरक्षापातळी नसलेले पान',
 'protect-legend' => 'सुरक्षापातळीतील बदल निर्धारित करा',
 'protectcomment' => 'कारण:',
 'protectexpiry' => 'संपण्याचा कालावधी:',
@@ -2930,11 +2955,30 @@ $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-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' => 'अभिजात',
@@ -2988,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.',
@@ -3019,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' => 'रूपरेषा खालीलप्रमाणे आहे:
@@ -3729,7 +3777,7 @@ $5
 'sqlite-no-fts' => 'पूर्ण-मजकूर शोध समर्थनाविरहित $1',
 
 # New logging system
-'logentry-delete-delete' => '$1 वगळले पान $3',
+'logentry-delete-delete' => '$1 वगळलेले पान $3',
 'logentry-delete-restore' => '$1 restored पृष्ठ  $3',
 'logentry-delete-event' => ' $3: $4 वरील  {{PLURAL:$5|एका नोंद घटने |$5 lनोंद घटनां}} ची दृष्यता $1 बदलली',
 'logentry-delete-revision' => '$3: $4 पानावरील  {{PLURAL:$5|एका आवृत्ती |$5 lआवृत्यां}} ची दृष्यता $1 बदलली',
@@ -3759,6 +3807,8 @@ $5
 '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 b4fde5e..243b3b2 100644 (file)
@@ -326,8 +326,9 @@ $messages = array(
 'newwindow' => '(dibuka di tetingkap baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lagi...',
-'mypage' => 'Laman saya',
-'mytalk' => 'Perbualan saya',
+'morenotlisted' => 'Lain-lain yang tidak tersenarai...',
+'mypage' => 'Halaman',
+'mytalk' => 'Perbualan',
 'anontalk' => 'Perbualan bagi IP ini',
 'navigation' => 'Pandu arah',
 'and' => '&#32;dan',
@@ -359,6 +360,7 @@ $messages = array(
 'namespaces' => 'Ruang nama',
 'variants' => 'Kelainan',
 
+'navigation-heading' => 'Menu pandu arah',
 'errorpagetitle' => 'Ralat',
 'returnto' => 'Kembali ke $1.',
 'tagline' => 'Daripada {{SITENAME}}.',
@@ -571,7 +573,7 @@ Pertanyaan: $2',
 'viewsource-title' => 'Lihat sumber bagi $1',
 'actionthrottled' => 'Tindakan didikitkan',
 'actionthrottledtext' => 'Untuk mencegah spam, anda dihadkan daripada melakukan tindakan ini berulang kali dalam ruang waktu yang singkat, dan anda telah melebihi had tersebut. Sila cuba lagi selepas beberapa minit.',
-'protectedpagetext' => 'Laman ini telah dikunci untuk menghalang penyuntingan.',
+'protectedpagetext' => 'Laman ini telah dikunci untuk melarang penyuntingan atau sebarang tindakan yang lain.',
 'viewsourcetext' => 'Anda boleh melihat dan menyalin sumber bagi laman ini:',
 'viewyourtext' => "Anda boleh melihat dan menyalin sumber '''suntingan anda''' kepada laman ini:",
 'protectedinterface' => 'Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.
@@ -602,9 +604,9 @@ Pentadbir yang menguncinya memberikan penjelasan yang berikut: "$3".',
 'logouttext' => "'''Anda telah log keluar.'''
 
 Anda boleh terus menggunakan {{SITENAME}} sebagai pengguna tanpa nama, atau anda boleh <span class='plainlinks'>[$1 log masuk sekali lagi]</span> sebagai pengguna lain. Anda boleh membersihkan cache pelayar web anda sekiranya terdapat laman yang memaparkan seolah-olah anda masih log masuk.",
-'welcomecreation' => '== Selamat datang, $1! ==
-
-Akaun anda telah dibuka. Jangan lupa untuk mengubah [[Special:Preferences|keutamaan {{SITENAME}}]] anda.',
+'welcomeuser' => 'Selamat datang, $1!',
+'welcomecreation-msg' => 'Akaun anda telah dibuka.
+Jangan lupa untuk mengubah [[Special:Preferences|keutamaan anda di {{SITENAME}}]].',
 'yourname' => 'Nama pengguna:',
 'yourpassword' => 'Kata laluan:',
 'yourpasswordagain' => 'Ulangi kata laluan:',
@@ -698,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',
@@ -753,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',
 
@@ -929,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.',
@@ -1250,7 +1253,7 @@ Cuba berikan awalan ''all:'' untuk mencari semua kandungan (termasuk laman perbi
 
 # Preferences page
 'preferences' => 'Keutamaan',
-'mypreferences' => 'Keutamaan saya',
+'mypreferences' => 'Keutamaan',
 'prefs-edits' => 'Jumlah suntingan:',
 'prefsnologin' => 'Belum log masuk',
 'prefsnologintext' => 'Anda hendaklah <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} log masuk]</span> terlebih dahulu untuk menetapkan keutamaan.',
@@ -1326,9 +1329,9 @@ Tindakan ini tidak boleh dibatalkan.',
 'prefs-emailconfirm-label' => 'Pengesahan e-mel:',
 'prefs-textboxsize' => 'Saiz tetingkap penyuntingan',
 'youremail' => 'E-mel:',
-'username' => 'Nama pengguna:',
-'uid' => 'ID pengguna:',
-'prefs-memberingroups' => 'Ahli {{PLURAL:$1|kumpulan|kumpulan}}:',
+'username' => '{{GENDER:$1|Nama pengguna}}:',
+'uid' => 'ID {{GENDER:$1|Pengguna}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Ahli}} {{PLURAL:$1|kumpulan|kumpulan-kumpulan}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Waktu pendaftaran:',
 'prefs-registration-date-time' => '$1',
@@ -1360,9 +1363,9 @@ Tindakan ini tidak boleh dibatalkan.',
 'prefs-advancedrendering' => 'Pilihan lanjutan',
 'prefs-advancedsearchoptions' => 'Pilihan lanjutan',
 'prefs-advancedwatchlist' => 'Pilihan lanjutan',
-'prefs-displayrc' => 'Papar pilihan',
-'prefs-displaysearchoptions' => 'Papar pilihan',
-'prefs-displaywatchlist' => 'Papar pilihan',
+'prefs-displayrc' => 'Pilihan paparan',
+'prefs-displaysearchoptions' => 'Pilihan paparan',
+'prefs-displaywatchlist' => 'Pilihan paparan',
 'prefs-diffs' => 'Beza',
 
 # User preference: e-mail validation using jQuery
@@ -1478,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',
@@ -1721,6 +1722,7 @@ Sila hubungi [[Special:ListUsers/sysop|pentadbir sistem]].',
 'backend-fail-notsame' => 'Satu fail yang tidak seiras sudah wujud di $1.',
 'backend-fail-invalidpath' => '$1 bukan laluan storan yang sah.',
 'backend-fail-delete' => 'Fail $1 tidak dapat dihapuskan.',
+'backend-fail-describe' => 'Metadata untuk fail "$1" tidak dapat diubah.',
 'backend-fail-alreadyexists' => 'Fail $1 sudah wujud.',
 'backend-fail-store' => 'Fail $1 tidak dapat distorkan di $2.',
 'backend-fail-copy' => 'Fail $1 tidak dapat disalin ke $2.',
@@ -1930,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',
@@ -2106,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> (jangan bubuh sebarang protokol ini dalam carian anda)',
+{{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.',
 
@@ -2125,10 +2127,6 @@ Protokol yang disokong: <code>$1</code> (jangan bubuh sebarang protokol ini dala
 '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.
@@ -2190,19 +2188,15 @@ Alamat e-mel yang ditetapkan dalam [[Special:Preferences|keutamaan anda]] akan d
 
 # Watchlist
 'watchlist' => 'Senarai pantau',
-'mywatchlist' => 'Senarai pantau saya',
+'mywatchlist' => 'Senarai pantau',
 'watchlistfor2' => 'Bagi $1 $2',
 'nowatchlist' => 'Tiada item dalam senarai pantau anda.',
 'watchlistanontext' => 'Sila $1 terlebih dahulu untuk melihat atau menyunting senarai pantau anda.',
 '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',
@@ -2230,44 +2224,48 @@ Jika anda mahu membuang laman tersebut daripada senarai pantau, klik \"Nyahpanta
 
 'enotif_mailer' => 'Sistem Pemberitahuan {{SITENAME}}',
 'enotif_reset' => 'Tandakan semua laman sebagai telah dikunjungi',
-'enotif_newpagetext' => 'Ini adalah sebuah laman baru.',
 'enotif_impersonal_salutation' => 'Pengguna {{SITENAME}}',
-'changed' => 'diubah',
-'created' => 'dicipta',
-'enotif_subject' => 'Laman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED oleh $PAGEEDITOR',
+'enotif_subject_deleted' => 'Halaman $1 di {{SITENAME}} telah dihapuskan oleh {{gender:$2|$2}}',
+'enotif_subject_created' => 'Halaman $1 di {{SITENAME}} telah diwujudkan 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 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.',
+'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.',
+'enotif_body_intro_changed' => 'Halaman $1 di {{SITENAME}} telah disunting oleh {{gender:$2|$2}} pada $PAGEEDITDATE, sila rujuk $3 untuk semakan terkini.',
 'enotif_lastvisited' => 'Lihat $1 untuk semua perubahan sejak kunjungan terakhir anda.',
 'enotif_lastdiff' => 'Rujuk $1 untuk melihat perubahan ini.',
 'enotif_anon_editor' => 'pengguna tanpa nama $1',
 'enotif_body' => '$WATCHINGUSERNAME,
 
-
-Laman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED pada $PAGEEDITDATE oleh $PAGEEDITOR; sila lihat $PAGETITLE_URL untuk semakan terkini.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Ringkasan penyunting: $PAGESUMMARY $PAGEMINOREDIT
 
-Hubungi penyunting tersebut:
+Hubungi penyunting:
 mel: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Tiada pemberitahuan lain akan dikirim berkaitan perubahan selanjutnya melainkan anda mengunjungi laman tersebut.
-Anda juga boleh menetapkan semula penanda pemberitahuan bagi semua laman dalam senarai pantau anda.
+Tiada lagi pemberitahuan lanjut sekiranya terdapat suntingan selanjutnya melainkan anda mengunjungi halaman berkenaan. Anda juga boleh menetapkan semula tanda-tanda pemberitahuan untuk kesemua halaman dalam senarai pantau anda.
 
-         Sistem pemberitahuan {{SITENAME}} anda yang ramah mesra
+                        Sistem pemberitahuan {{SITENAME}} yang mesra
 
 --
-Untuk mengubah tetapan pemberitahuan e-mel anda, lawati
+Untuk mengubah tetapan pemberitahuan melalui e-mel anda, kunjungi
 {{canonicalurl:{{#special:Preferences}}}}
 
-Untuk mengubah tetapan senarai pantau anda, lawati
+Untuk mengubah tetapan senarai pantau anda, kunjungi
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Untuk menghapuskan laman ini dari senarai pantau anda, lawati
+Untuk menggugurkan halaman ini daripada senarai pantau anda, kunjungi
 $UNWATCHURL
 
-Maklum balas dan bantuan:
+Maklum balas dan bantuan selanjutnya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dicipta',
+'changed' => 'diubah',
 
 # Delete
 'deletepage' => 'Hapus laman',
@@ -2336,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:',
@@ -2449,9 +2449,9 @@ $1',
 'blanknamespace' => '(Utama)',
 
 # Contributions
-'contributions' => 'Sumbangan pengguna',
+'contributions' => 'Sumbangan {{GENDER:$1|pengguna}}',
 'contributions-title' => 'Sumbangan oleh $1',
-'mycontris' => 'Sumbangan saya',
+'mycontris' => 'Sumbangan',
 'contribsub2' => 'Oleh $1 ($2)',
 'nocontribs' => 'Tiada sebarang perubahan yang sepadan dengan kriteria-kriteria ini.',
 'uctop' => '(puncak)',
@@ -2490,7 +2490,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 pelencongan',
 'whatlinkshere-hidetrans' => '$1 penyertaan',
 'whatlinkshere-hidelinks' => '$1 pautan',
-'whatlinkshere-hideimages' => '$1 pautan imej',
+'whatlinkshere-hideimages' => '$1 pautan fail',
 'whatlinkshere-filters' => 'Penapis',
 
 # Block/unblock
@@ -2834,6 +2834,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.',
@@ -2992,6 +2993,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',
@@ -3000,6 +3002,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',
@@ -3022,6 +3028,8 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'markedaspatrollederror' => 'Tidak boleh menanda ronda',
 'markedaspatrollederrortext' => 'Anda perlu menyatakan semakan untuk ditanda ronda.',
 'markedaspatrollederror-noautopatrol' => 'Anda tidak dibenarkan menanda ronda perubahan anda sendiri.',
+'markedaspatrollednotify' => 'Perubahan pada $1 ini telah ditandai sebagai dironda.',
+'markedaspatrollederrornotify' => 'Penandaan sebagai dironda gagal.',
 
 # Patrol log
 'patrol-log-page' => 'Log pemeriksaan',
@@ -3056,6 +3064,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.',
@@ -3088,7 +3097,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Berikut adalah format yang digunakan:
@@ -3844,11 +3856,15 @@ Imej ditunjuk dalam leraian penuh, jenis fail yang lain dibuka dengan atur cara
 'logentry-move-move_redir-noredirect' => '$1 mengalihkan laman $3 ke $4 pada satu lencongan tanpa meninggalkan lencongan',
 'logentry-patrol-patrol' => '$1 menandakan semakan $4 daripada laman $3 sebagai dironda',
 'logentry-patrol-patrol-auto' => '$1 menandakan semakan $4 daripada laman $3 sebagai dironda secara automatik',
-'logentry-newusers-newusers' => '$1 membuka akaun pengguna',
-'logentry-newusers-create' => '$1 membuka akaun pengguna',
-'logentry-newusers-create2' => '$1 membuka akaun pengguna $3',
+'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-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]. 
index 432c871..1845e5d 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}}',
@@ -665,9 +666,6 @@ Ir-raġuni li ġiet mogħtija kienet ''$2''.",
 
 Tista' tkompli tuża' {{SITENAME}} bħala utent anonimu, jew tista' terġa <span class='plainlinks'>[$1 tidħol]</span> bħala l-istess utent jew wieħed differenti.
 Kun af li ċerti paġni jistgħu jkomplu jidhru bħallikieku l-illogjar 'l barra mill-kont qatt ma seħħ, sakemm ma tħassarx il-cache tal-browser.",
-'welcomecreation' => "== Merħba, $1! ==
-Il-kont tiegħek ġie maħluq.<br />
-Tinsiex tippersonalizza l-[[Special:Preferences|preferenzi]] ta' {{SITENAME}}.",
 'yourname' => 'Isem tal-utent:',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => "Erġa' ikteb il-password:",
@@ -910,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.',
@@ -919,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.",
@@ -933,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.'''",
@@ -972,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",
@@ -989,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.",
@@ -1013,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.
 
@@ -1287,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>.',
@@ -1349,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',
@@ -1361,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:',
@@ -1511,12 +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 mill-grupp $2 għall-grupp $3",
-'rightslogentry-autopromote' => 'ġie awtomatikament promoss minn $2 għal $3',
-'rightsnone' => '(xejn)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'aqra din il-paġna',
@@ -1588,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',
@@ -1746,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.',
@@ -1768,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.',
@@ -1853,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',
@@ -1938,18 +1951,20 @@ 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]]",
-
-'doubleredirects' => 'Riindirizzi doppji',
-'doubleredirectstext' => 'Din il-paġna telenka dawk il-paġni li jindirizzaw lejn paġna oħra ta\' riindirizzament.
-Kull filliera għandha ħolqa għall-ewwel u t-tieni riindirizz, kif ukoll fejn tirrindirizza t-tieni paġna, is-soltu magħrufa bħalha l-paġna "reali" fejn se twassal, fejn suppost l-ewwel riindirizz għandu jipponta.',
+'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.
+Kull filliera għandha ħolqa għall-ewwel u t-tieni rindirizz, kif ukoll fejn tirrindirizza t-tieni paġna, is-soltu magħrufa bħalha l-paġna "reali" fejn se twassal, fejn suppost l-ewwel rindirizz għandu jipponta.
+Daħliet <del>maqtugħa</del> saritilhom it-tiswija.',
 'double-redirect-fixed-move' => '[[$1]] ġie mmexxi awtomatikament, issa hu rindirizz għal [[$2]]',
 'double-redirect-fixed-maintenance' => "Tiswija ta' rindirizz doppju minn [[$1]] għal [[$2]].",
 'double-redirect-fixer' => "Tiswija ta' rindirizz",
 
-'brokenredirects' => 'Riindirizzi ħżiena',
-'brokenredirectstext' => 'Ir-riindirizzi segwenti għandhom ħoloq għal paġni ineżistenti:',
+'brokenredirects' => 'Rindirizzi ħżiena',
+'brokenredirectstext' => 'Ir-rindirizzi segwenti għandhom ħoloq lejn paġni li ma jeżistux:',
 'brokenredirects-edit' => 'editja',
 'brokenredirects-delete' => 'ħassar',
 
@@ -1961,8 +1976,9 @@ Kull filliera għandha ħolqa għall-ewwel u t-tieni riindirizz, kif ukoll fejn
 '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}}',
@@ -1983,14 +1999,17 @@ Kull filliera għandha ħolqa għall-ewwel u t-tieni riindirizz, kif ukoll fejn
 '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ġ',
@@ -2063,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
@@ -2084,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.',
 
@@ -2104,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.
@@ -2131,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',
@@ -2163,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,42 +2218,48 @@ 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_newpagetext' => 'Din hija paġna ġdida.',
 'enotif_impersonal_salutation' => "Utent ta' {{SITENAME}}",
-'changed' => 'modifikata',
-'created' => 'inħolqot',
-'enotif_subject' => 'Il-Paġna $PAGETITLE ta\' {{SITENAME}} ġiet $CHANGEDORCREATED minn $PAGEEDITOR',
+'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',
@@ -2299,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:',
@@ -2378,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.",
@@ -2411,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)',
@@ -2453,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
@@ -2495,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',
@@ -2696,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.",
@@ -2846,7 +2871,7 @@ Kull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special
 'tooltip-ca-nstab-project' => 'Uri l-paġna tal-proġett',
 'tooltip-ca-nstab-image' => 'Uri l-paġna tal-fajl',
 'tooltip-ca-nstab-mediawiki' => 'Uri l-messaġġ tas-sistema',
-'tooltip-ca-nstab-template' => 'Uri t-template',
+'tooltip-ca-nstab-template' => 'Ara l-mudell',
 'tooltip-ca-nstab-help' => 'Uri l-paġna tal-għajnuna',
 'tooltip-ca-nstab-category' => 'Uri l-paġna kategorika',
 'tooltip-minoredit' => 'Immarka din bħala modifika minuri',
@@ -2912,11 +2937,41 @@ Kull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special
 
 # Info page
 'pageinfo-title' => 'Informazzjoni għal "$1"',
-'pageinfo-header-edits' => 'Modifiki',
+'pageinfo-not-current' => 'Jiddispjaċina, imma huwa impossibbli li tingħata informazzjoni fuq reviżjonijiet qodma.',
+'pageinfo-header-basic' => 'Informazzjoni bażika',
+'pageinfo-header-edits' => 'Kronoloġija tal-modifiki',
+'pageinfo-header-restrictions' => 'Protezzjoni tal-paġna',
+'pageinfo-display-title' => 'Titlu muri',
+'pageinfo-length' => "Daqs tal-paġna (f'bytes)",
+'pageinfo-article-id' => 'ID tal-paġna',
+'pageinfo-language' => 'Lingwa tal-kontenut tal-paġna',
+'pageinfo-robot-policy' => 'Stat għall-muturi tat-tfittxija',
+'pageinfo-robot-index' => 'Indiċjabbli',
+'pageinfo-robot-noindex' => 'Mhux indiċjabbli',
 'pageinfo-views' => "Numru ta' viżti",
-'pageinfo-watchers' => "Numru ta' osservaturi",
-'pageinfo-edits' => "Numru ta' modifiki",
-'pageinfo-authors' => "Numru ta' awturi distinti",
+'pageinfo-watchers' => "Numru ta' osservaturi tal-paġna",
+'pageinfo-redirects-name' => 'Rindirizzi lejn din il-paġna',
+'pageinfo-subpages-name' => "Sottopaġni ta' din il-paġna",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|rindirizz|rindirizzi}}; $3 {{PLURAL:$3|mhumiex rindirizzi}})',
+'pageinfo-firstuser' => 'Kreatur tal-paġna',
+'pageinfo-firsttime' => 'Data tal-ħolqien tal-paġna',
+'pageinfo-lastuser' => 'L-aħħar editur',
+'pageinfo-lasttime' => 'Data tal-aħħar modifika',
+'pageinfo-edits' => "Numru totali ta' modifiki",
+'pageinfo-authors' => "Numru totali ta' awturi distinti",
+'pageinfo-recent-edits' => "Numru ta' modifiki riċenti (f'dawn l-aħħar $1)",
+'pageinfo-recent-authors' => "Numru riċenti ta' awturi distinti",
+'pageinfo-magic-words' => '{{PLURAL:$1|Kelma maġika|Kliem maġiku}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Kategorija|Kategoriji}} moħbija ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Mudell inkluż|Mudelli inklużi}} ($1)',
+'pageinfo-toolboxlink' => 'Informazzjoni fuq il-paġna',
+'pageinfo-redirectsto' => 'Tirrindirizza lejn',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => "Magħduda bħala paġna ta' kontenut",
+'pageinfo-contentpage-yes' => 'Iva',
+'pageinfo-protect-cascading' => 'Protezzjoni li tintiret minn hawnhekk',
+'pageinfo-protect-cascading-yes' => 'Iva',
+'pageinfo-protect-cascading-from' => 'Protezzjoni li tintiret minn',
 
 # Skin names
 'skinname-standard' => 'Classic',
@@ -2938,6 +2993,8 @@ Kull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special
 'markedaspatrollederror' => 'Ma jistax jiġi markat bħalha verifikat',
 'markedaspatrollederrortext' => 'Int trid tispeċifika r-reviżjoni li trida tkun verifikata.',
 'markedaspatrollederror-noautopatrol' => "Int m'għandhekx id-drittijiet neċessarji biex timmarka l-modifiki tiegħek bħala verifikati.",
+'markedaspatrollednotify' => 'Din il-bidla fuq $1 ġiet immarkata bħala verifikata.',
+'markedaspatrollederrornotify' => 'L-ivverifikar tal-modifika falla.',
 
 # Patrol log
 'patrol-log-page' => 'Modifiki verifikati',
@@ -3653,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',
@@ -3700,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
@@ -3732,17 +3789,27 @@ 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:',
@@ -3769,6 +3836,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 df7e6c1..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,8 +874,8 @@ Altaraçones feturas na tal páigina i páiginas de çcusson a eilha associadas
 'watching' => 'A begiar...',
 'unwatching' => 'A deixar de begiar...',
 
-'changed' => 'demudada',
 'created' => 'criada',
+'changed' => 'demudada',
 
 # Delete
 'deletepage' => 'Botar fuora páigina',
@@ -1233,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 310099f..421949f 100644 (file)
@@ -378,9 +378,6 @@ $1',
 'logouttext' => "သင်သည် လော့ဂ်အောက် လုပ်လိုက်ပြီဖြစ်သည်။
 သင့်အနေနှင့် ဤ {{SITENAME}} ဝက်ဘ်ဆိုက်ဒ်ကို အမည်မသိ အသုံးပြုသူ အနေနှင့် ဆက်လက် အသုံးပြုနိုင်သည်။ သို့မဟုတ် ယခင် အသုံးပြုသူ အမည် သို့ အသုံးပြုသူ အခြားအမည်တစ်ခုဖြင့် <span class='plainlinks'>[$1 နောက်တစ်ကြိမ် လော့ဂ်အင်ပြန်ဝင်]</span> နိုင်သည်။
 သင်၏ ဘရောက်ဆာမှ cache ကို ရှင်းလင်းသည့် အချိန် အထိ အချို့သော စာမျက်နှာ များသည် သင် လော့ဂ်အင် ဝင်ထားစဉ်က အတိုင်းပင် ဆက်လက် ပြသနေမည်ဖြစ်သည်။",
-'welcomecreation' => '== မင်္ဂလာပါ $1! ==
-သင့်အကောင့်ကို ဖန်တီးပြီးပါပြီ။
-[[Special:Preferences|{{SITENAME}} စိတ်​ကြိုက်​ရွေးချယ်စရာတို့]]ကို ပြောင်းရန် မမေ့ပါနှင့်။',
 'yourname' => 'အသုံးပြုသူအမည် -',
 'yourpassword' => 'စကားဝှက် -',
 'yourpasswordagain' => 'စကားဝှက် ပြန်​ရိုက်​ပါ -',
@@ -897,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' => 'ဤစာမျက်နှာကို ဖတ်ရန်',
@@ -1264,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' => 'အုပ်စု',
@@ -1321,11 +1316,10 @@ Your e-mail address is not revealed when other users contact you.
 'watching' => 'စောင့်ကြည့်လျက်ရှိ...',
 'unwatching' => 'စောင့်မကြည့်တော့...',
 
-'enotif_newpagetext' => 'ဤသည်မှာ စာမျက်နှာအသစ်ဖြစ်သည်။',
 'enotif_impersonal_salutation' => '{{SITENAME}} အသုံးပြုသူ',
-'changed' => 'ပြောင်းလဲလိုက်သည်',
-'created' => 'ဖန်တီးလိုက်သည်',
 'enotif_anon_editor' => 'အမည်မသိ အသုံးပြုသူ $1',
+'created' => 'ဖန်တီးလိုက်သည်',
+'changed' => 'ပြောင်းလဲလိုက်သည်',
 
 # Delete
 'deletepage' => 'စာမျက်နှာကိုဖျက်ပါ',
@@ -1915,6 +1909,7 @@ Your e-mail address is not revealed when other users contact you.
 'revdelete-restricted' => 'အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်',
 'revdelete-unrestricted' => 'အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်',
 'newuserlog-byemail' => 'စကားဝှက်ကို အီးမေးဖြင့် ပို့လိုက်ပါပြီ။',
+'rightsnone' => '(ဘာမှမရှိ)',
 
 # API errors
 'api-error-filename-tooshort' => 'ဖိုင်အမည်သည် တိုလွန်းသည်။',
index 76d388b..a368246 100644 (file)
@@ -202,16 +202,16 @@ $messages = array(
 'tog-showtoc' => 'Невтемс сёрмадовкс потмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)',
 'tog-rememberpassword' => 'Ледстемс совамо валом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
 'tog-watchcreations' => 'Совавтомс ванома лемрисьмезэнь монь теевть лопатнень ды сень, мезе йовкстан',
-'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лем рисьмезэнь',
-'tog-watchmoves' => 'Ð\9bопанÑ\82Ñ\8c Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82Ñ\81а, Ñ\81овавÑ\82Ñ\8bк Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼ рисьмезэнь',
-'tog-watchdeletion' => 'Ð\9bопанÑ\82Ñ\8c Ð½Ð°Ñ\80даÑ\81а, Ñ\81овавÑ\82Ñ\8bк Ñ\81онзÑ\8d Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼ рисьмезэнь',
+'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лемрисьмезэнь',
+'tog-watchmoves' => 'СовавÑ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ð¾Ð´Ð¾Ð² Ð»ÐµÐ¼Ð´Ñ\8fвÑ\82 Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c-кеÑ\80Ñ\8cмазÑ\82нÑ\8dнÑ\8c Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼рисьмезэнь',
+'tog-watchdeletion' => 'СовавÑ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ð½Ð°Ñ\80давÑ\82 Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c-кеÑ\80Ñ\8cмазÑ\82нÑ\8dнÑ\8c Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼рисьмезэнь',
 'tog-minordefault' => 'Тешкстамс витевкстнэнь апокшкэкс, бути лиякс апак ёвта',
 'tog-previewontop' => 'Невтемс сёрмадовксонть васнянь невтевксэнь вальманть витеманьседенть икеле',
 'tog-previewonfirst' => 'Васнянь невтевкс васенцеде витнемстэ-петнемстэ',
 'tog-nocache' => 'Лоткавтомс браузерэнь лопань кешировамонть',
-'tog-enotifwatchlistpages' => 'Ð\9fаÑ\87Ñ\82Ñ\8fмÑ\81 Ðµ-Ñ\81Ñ\91Ñ\80ма, Ð·Ñ\8fÑ\80до Ð²Ð°Ð½Ñ\81Ñ\82нема Ð»Ð¾Ð¿Ð°Ð·Ð¾Ð½ теевить лиякстомтомат',
+'tog-enotifwatchlistpages' => 'Ð\9aÑ\83Ñ\87омÑ\81 Ñ\82енÑ\8c Ñ\91ндол-Ñ\81Ñ\91Ñ\80мине, Ð·Ñ\8fÑ\80до Ð²Ð°Ð½Ñ\81Ñ\82нема Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cменÑ\8c Ð»Ð¾Ð¿Ð°Ñ\82неÑ\81-кеÑ\80Ñ\8cмазÑ\82нÑ\8dÑ\81 теевить лиякстомтомат',
 'tog-enotifusertalkpages' => 'Пачтямс е-сёрма теицянь ванома лемрисьмесэнь теезь лиякстомтоматнеде',
-'tog-enotifminoredits' => 'Ð\9fаÑ\87Ñ\82Ñ\8fмÑ\81 Ðµ-Ñ\81Ñ\91Ñ\80маÑ\81о Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82омаÑ\82неде, Ñ\81еÑ\81Ñ\82Ñ\8dÑ\8fк Ð·Ñ\8fÑ\80до Ð°Ð¿Ð¾ÐºÑ\88кÑ\8bнеÑ\82Ñ\8c',
+'tog-enotifminoredits' => 'Ð\9aÑ\83Ñ\87омÑ\81 Ñ\82енÑ\8c Ñ\91ндол-Ñ\81Ñ\91Ñ\80мине Ñ\81еÑ\81Ñ\82Ñ\8dÑ\8fк, Ð·Ñ\8fÑ\80до Ð°Ð¿Ð¾ÐºÑ\88кÑ\8bне Ð²Ð¸Ñ\82немаÑ\82-пеÑ\82немаÑ\82 Ñ\82еевиÑ\82Ñ\8c Ð¼Ð¾Ð½Ñ\8c Ð²Ð°Ð½Ñ\81Ñ\82евÑ\82Ñ\8c Ð»Ð¾Ð¿Ð°Ñ\82неÑ\81Ñ\8d-кеÑ\80Ñ\8cмазÑ\82нÑ\8dÑ\81Ñ\8d',
 'tog-enotifrevealaddr' => 'Штавтомс е-сёрмань адресэм яволявтомань сёрмадовкстнэсэ',
 'tog-shownumberswatching' => 'Невтемс зяро теицятнеде, конат аравтызь лопанть эсест ванома лемрисьментень',
 'tog-oldsig' => 'Уликс кедьпутовксось:',
@@ -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' => 'Витнема-петнема уминенть фонт стилезэ',
@@ -319,7 +319,7 @@ $messages = array(
 'cancel' => 'Саемс мекев',
 'moredotdotdot' => 'Седе ламо...',
 'mypage' => 'Монь лопам',
-'mytalk' => 'Ð\9cонÑ\8c ÐºÐ¾Ñ\80Ñ\82амом',
+'mytalk' => 'Ð\9aоÑ\80Ñ\82немам',
 'anontalk' => 'Кортамс те IP-нть марто',
 'navigation' => 'Навигация',
 'and' => '&#32;ды',
@@ -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,30 +504,34 @@ $messages = array(
 'unexpected' => 'Апак учонь вейкетстямо: "$1"="$2".',
 'formerror' => 'Ильведевкс: Формась а кучови',
 'badarticleerror' => 'Те лопасонть вешезь тевесь а тееви.',
+'cannotdelete-title' => '"$1" лопась а нардави',
 'badtitle' => 'Амаштовикс конякс',
 'badtitletext' => 'Вешезь лопанть лемезэ аволь виде, чаво, эли аволь видестэ сюлмазь келеньйутковань эли интервикинь лем. Паряк, лемсэнть тевс нолдазь анолдавикс тешкст.',
 'viewsource' => 'Ванномс лисьмапрянть',
+'viewsource-title' => 'Ваномс "$1" лопанть лисьмапрянзо',
 'actionthrottled' => 'Тев тееманть курокксчизэ киртязь',
-'protectedpagetext' => 'Те лопась панжома экшсэ, илязо понго витнемс - петнемс киненьгак.',
+'protectedpagetext' => 'Те лопась панжома экшсэ, илязо понго витнемс-петнемс эли лия тевс.',
 'viewsourcetext' => 'Те лопанть лисьмапрясь маштови ваномскак, лангстонзо саемс копияяк:',
 'sqlhidden' => '(SQL вешнемась кекшезь)',
+'namespaceprotected' => "'''$1''' лемпотмосонть арась видечить витнемс-петнемс лопатнесэ.",
 'ns-specialprotected' => '{{ns:special}} лем марто лопатне а витневить-петневить.',
 'titleprotected' => "Те коняксонть ванстызе [[Теиця:$1|$1]], кияк иляссо тее.
 Тувталось вана ''$2''.",
+'exception-nologin' => 'Эзить сова',
 
 # Virus scanner
 'virus-scanfailed' => 'сканнось эзь лисе (код $1)',
 'virus-unknownscanner' => 'апак содань антивирус:',
 
 # Login and logout pages
-'welcomecreation' => '== Совак, инеськеть, $1! ==
-Совамотаркат теезь.
-Иля стувто полавтнемс эсеть [[Special:Preferences|{{SITENAME}} ладсематнень]].',
+'welcomeuser' => 'Совак, $1, инеськеть!',
 'yourname' => 'Теицянь лем:',
 'yourpassword' => 'Салава валот:',
 'yourpasswordagain' => 'Омбоцеде сёрмадык кирдицянь леметь:',
 'remembermypassword' => 'Ледстемс совамом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
+'securelogin-stick-https' => 'Кирдемс "HTTPS" сюлмавкс совамодо мейлеяк',
 'yourdomainname' => 'Эсеть доменэть:',
+'password-change-forbidden' => 'Те викисэнть а полавтсак салававалот.',
 'login' => 'Совамо',
 'nav-login-createaccount' => 'Совамо / тейть совамотарка',
 'loginprompt' => '{{SITENAME}} сайтэнтень совамга эряви нолдамс тевс cookies.',
@@ -594,6 +598,7 @@ $messages = array(
 
 # Change password dialog
 'resetpass' => 'Полавтомс совамо валот',
+'resetpass_announce' => 'Совавить нурька шкань салававалсо, кона кучозель куляпаргозот. Совамот прядомга эряви путомс од салававал вана тезэень:',
 'resetpass_header' => 'Полавтомс совамо валот',
 'oldpassword' => 'Ташто совамо валот:',
 'newpassword' => 'Од совамо валот:',
@@ -617,6 +622,7 @@ $messages = array(
 'changeemail-oldemail' => 'Неень е-сёрмапаргот:',
 'changeemail-newemail' => 'Од е-сёрмапаргот:',
 'changeemail-none' => '(арась мезе невтемс)',
+'changeemail-password' => '«{{SITENAME}}» проектэнь салававалот:',
 'changeemail-submit' => 'Полавтомс е-сёрмапаргот',
 'changeemail-cancel' => 'Саемс мекев',
 
@@ -688,11 +694,16 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} вешнемс малавикс журналтнэстэ],
 эли [{{fullurl:
 {{FULLPAGENAME}}|action=edit}} витнемс-петнемс те лопанть]</span>.',
+'noarticletext-nopermission' => 'Те лопасонть сёрмадовкс арась.
+Мусак [[Special:Search/{{PAGENAME}}|вешнемс  файлань те коняксонть]] лия сёрмадовкстнэстэ эли
+<span class="plainlinks">
+[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} вешнемс малавикс журналтнэстэ]</span>. Ялатеке тонеть а мерить шкамс те лопанть.',
 'updated' => '(Одолгавтозь)',
 'note' => "'''Явт мель:'''",
 'previewnote' => "'''Кирдтяя мельсэ, те ансяк васнянь невтевкс.'''
 Полавтоматне зярс апак вансто!",
 'editing' => 'Витнят-петнят $1',
+'creating' => 'Шки-теи «$1»',
 'editingsection' => 'Витнеме-петнеме $1 (секциянть)',
 'editingcomment' => 'Витнят-петнят $1 (од явкс)',
 'editconflict' => 'Витнемадо-петнемадо аладямо: $1',
@@ -710,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|тувталось|тувталтнэ}}:',
@@ -773,6 +783,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'rev-showdeleted' => 'невтемс',
 'revisiondelete' => 'Нардамс/вельмевтемс лиякстомтоматнень',
 'revdelete-nologtype-title' => 'Журнал типесь апак максо',
+'revdelete-show-file-confirm' => 'Алкукс ули мелеть ваномс «<nowiki>$1</nowiki>» керьмазонть нардазь ревизиянзо, конась саезь $2-нть эйстэ ды ашти тесэ $3?',
+'revdelete-show-file-submit' => 'Ули',
 'revdelete-selected' => "'''[[:$1]]-нь {{PLURAL:$2|Кочкань лиякстомтомась|Кочкань лиякстомтоматне}}:'''",
 'revdelete-legend' => 'Аравтомс неявомачынь петне',
 'revdelete-hide-text' => 'Кекшемс лиякстомтомань текстэнть',
@@ -814,6 +826,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 
 # Diffs
 'history-title' => '"$1"-нь полавтнемань историязо',
+'difference-multipage' => '(Мейсэ лопатне явовить)',
 'lineno' => 'Киксэсь $1:',
 'compareselectedversions' => 'Кочказь версиятнень аравтомс карадо-каршо',
 'editundo' => 'Велявтомс мекев мезе витнинь-петнинь',
@@ -850,6 +863,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 '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-redirect' => '(йутавтт $1-с)',
 'search-section' => '(пелькс $1)',
 'search-suggest' => 'Истя мерикскелить: $1',
@@ -857,10 +871,11 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'search-interwiki-default' => '$1 савкс:',
 'search-interwiki-more' => '(седе ламо)',
 'search-relatedarticle' => 'Малавикс',
+'mwsuggest-disable' => 'Лоткавтомс "AJAX" превспутыенть',
 'searcheverything-enable' => 'Вешнемс весе лем потмотнестэ',
 'searchrelated' => 'малавикс',
 'searchall' => 'весе',
-'showingresultsheader' => '',
+'showingresultsheader' => "{{PLURAL:$5|муевсь '''$1''' вана '''$3'''-тнень эйстэ|муевсть '''$1 - $2''' '''$3'''-тнень эйстэ}} '''$4''' вешнеманть лангс",
 'nonefound' => "'''Ванта''': Башка лем потмонь апак аравто ансяк кона-кона лем потмот понгить вешнэма таркакс.
 Аравтта вешнэма икельксэкс ''all:'', зярдо мель саят вешнэмс эрьва кодамо таркасто (сайсынек: кортнема лопатнень, лопа парцунтнэнь, ды седе тов), лиякс аравтыка эрявикс лем потмонть вешнэма икельксэкс.",
 'search-nonefound' => 'Те вешнема лангс мезеяк эзь муеве.',
@@ -883,7 +898,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 
 # Preferences page
 'preferences' => 'Лия ютксто явома',
-'mypreferences' => 'Ð\9cейÑ\81Ñ\8d Ñ\8fвован Ð»Ð¸Ñ\8fÑ\82ненÑ\8c Ñ\8dйÑ\81Ñ\82Ñ\8d',
+'mypreferences' => 'Ð\90Ñ\80авÑ\82омаÑ\82',
 'prefs-edits' => 'Зяроксть витнезь-петнезь:',
 'prefsnologin' => 'Эзить сова',
 'changepassword' => 'Салавань валонь полавтома',
@@ -892,6 +907,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'datedefault' => 'Икелькс вешема арась',
 'prefs-beta' => 'Бета ёнкст-мезть',
 'prefs-datetime' => 'Чи ды шка',
+'prefs-user-pages' => 'Теицянть лопанзо',
 'prefs-personal' => 'Теицядо',
 'prefs-rc' => 'Чиень полавтнемат',
 'prefs-watchlist' => 'Ванома лемрисьме',
@@ -905,6 +921,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'prefs-rendering' => 'Тюсозо-лангозо',
 'saveprefs' => 'Ванстомс',
 'resetprefs' => 'Нардамс апак вансто полавтнемат',
+'restoreprefs' => 'Велявтомс мекев весе ушодкс ладсематнень',
 'prefs-editing' => 'Витнема-петнема',
 'prefs-edit-boxsize' => 'Витнема-петнема вальманть сэрензэ-келензэ.',
 'rows' => 'Вал чилькстнэ (строкатне):',
@@ -926,7 +943,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'timezoneregion-europe' => 'Эвропа',
 'timezoneregion-indian' => 'Индиянь иневедь',
 'timezoneregion-pacific' => 'Сэтьме иневедь',
-'prefs-searchoptions' => 'Вешнемань аравтомкат',
+'prefs-searchoptions' => 'Вешнем',
 'prefs-namespaces' => 'Лем потмот',
 'default' => 'зярдо лиякс апак йовта',
 'prefs-files' => 'Файлат',
@@ -973,11 +990,13 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'group-bureaucrat' => 'Бюрократт',
 'group-all' => '(весе)',
 
-'group-user-member' => 'cовиця',
-'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|Бюрократ}}',
 
 'grouppage-user' => '{{ns:project}}:Совицятне',
 'grouppage-bot' => '{{ns:project}}:Ботт',
@@ -1014,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' => 'те лопань ловномо',
@@ -1077,6 +1099,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'newsectionsummary' => '/* $1 */ од пелькс',
 'rc-enhanced-expand' => 'Невтемс седе ламо тень ланга (JavaScript эряви)',
 'rc-enhanced-hide' => 'Кекшемс келейстэ ёвтазенть',
+'rc-old-title' => 'васня сёрмадозель «$1» лем марто',
 
 # Recent changes linked
 'recentchangeslinked' => 'Сюлмавозь лиякстоматне',
@@ -1105,6 +1128,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'filestatus' => 'Авторонь видечинь статусозо:',
 'filesource' => 'Лисьмапрязо:',
 'uploadedfiles' => 'Ёвкстань файлат',
+'ignorewarnings' => 'А явомс мель «Ванок» серьгедематненень',
 'minlength1' => 'Файлалемесь аштезэ вейке эли седе ламо тешксттнэстэ.',
 'badfilename' => 'Файланть лемесь полавтозь "$1"-кс.',
 'filetype-missing' => 'Файланть арась поладкс пезэ (саемга «.jpg»).',
@@ -1147,7 +1171,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'backend-fail-store' => '$1 файлась эзь ванстово $2 янонтень.',
 'backend-fail-move' => '$1 файлась эзь печтевтеве $2 файлакс.',
 'backend-fail-read' => '"$1" файлась эзь ловново.',
-'backend-fail-create' => '"$1" файлась эзь шкаво.',
+'backend-fail-create' => '"$1" керьмазось эзь шкаво.',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Совамось кардазь',
@@ -1196,7 +1220,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'linkstoimage' => 'Те файланть марто сюлмавозь вана {{PLURAL:$1|истямо сюлмавома пене|$1 истят сюлмавома пенеть}}:',
 'nolinkstoimage' => 'Арась вейкеяк лопа, кона сюлмавови те файланть марто.',
 'sharedupload' => 'Те файлась саезь "$1" файлань пусмосто, сон нолдави тевс лия проектсэяк.',
-'sharedupload-desc-here' => '',
+'sharedupload-desc-here' => 'Те файлась сась истямо $1 таркасто, паряк сон нолдави тевс лия проектсэ.
+Кувалманзо сёрмадовксось [$2 файладонть ёвтнема лопазо] невтезь ало.',
 'filepage-nofile' => 'Истямо лем марто файла арась.',
 'uploadnewversion-linktext' => 'Йовкстак од версия те файластонть',
 'shared-repo-from' => 'вана теньстэ $1',
@@ -1301,6 +1326,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'mostimages' => 'Весемеде ламо сюлмавкс марто файлат',
 'mostrevisions' => 'Лопат конатнесэ теезь сехте ламо лиякстомтомат',
 'prefixindex' => 'Весе лопатне, конат саевить истямо икелькс пене марто',
+'prefixindex-namespace' => 'Весе лопат, косо лемушодксось ($1 лемпотмо)',
 'shortpages' => 'Нурькине лопат',
 'longpages' => 'Кувака лопат',
 'deadendpages' => 'Поладкстомо-лисемавтомо лопат',
@@ -1377,14 +1403,11 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'listusers-blocked' => '(саймас саезь)',
 
 # Special:ActiveUsers
+'activeusers' => 'Активной теицятнеде списка',
 'activeusers-hidebots' => 'Кекшемс ботатнень',
 'activeusers-hidesysops' => 'Кекшемс администратортнэнь',
 'activeusers-noresult' => 'Якинзэ-пакинзэ арасть',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Теицянь шкамодо-теемадо конёв',
-'newuserlogpagetext' => 'Те теицянь шкавксто журнал',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Теиця куронть видечинзэ',
 'listgrouprights-group' => 'Куро',
@@ -1433,12 +1456,11 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'watching' => 'Ванома...',
 'unwatching' => 'Аванома...',
 
-'enotif_newpagetext' => 'Те од лопа.',
 'enotif_impersonal_salutation' => '{{SITENAME}} теицясь',
-'changed' => 'полавтозь',
-'created' => 'теезь-шказь',
 'enotif_lastdiff' => 'Те полавтоманть ваномга вант $1.',
 'enotif_anon_editor' => 'лемтеме теиця $1',
+'created' => 'теезь-шказь',
+'changed' => 'полавтозь',
 
 # Delete
 'deletepage' => 'Нардамс лопанть',
@@ -1543,9 +1565,9 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'blanknamespace' => '(Прявкс)',
 
 # Contributions
-'contributions' => 'Теицянть-кирдицянть путовксозо',
+'contributions' => '{{GENDER:$1|Теицянть}} путовксонзо',
 'contributions-title' => 'Теицянть путовксонзо $1 таркантень',
-'mycontris' => 'Монь путовкст',
+'mycontris' => 'Монь путовкстнэ',
 'contribsub2' => '$1 ($2) туртов',
 'uctop' => '(меельцесь)',
 'month' => 'Ковстонть (ды седе икеле):',
@@ -1577,7 +1599,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'whatlinkshere-hideredirs' => '$1 {{PLURAL:$1|тарка йутавты|таркат йутавтыть}} тей',
 'whatlinkshere-hidetrans' => '$1 сюлмавозь пелькстнэнь',
 'whatlinkshere-hidelinks' => '$1 сюлмавома петь',
-'whatlinkshere-hideimages' => '$1 артовксонь сюлмавома пензэ',
+'whatlinkshere-hideimages' => '$1 файланть сюлмавомапензэ',
 'whatlinkshere-filters' => 'Фильтрат',
 
 # Block/unblock
@@ -1796,6 +1818,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'tooltip-rollback' => '"Мекев кевердема" повнэнть весть лепштямось велявтсынзе те лопасонть меельсекс теезь витнематнень-петнематнень',
 'tooltip-undo' => '"Велявтомс мекев" велявтсы витнемань-петнемань тевенть ды панжсы васнянь невтемань формасо.
 Сонзэ вельде маштови поладомс полавтомадо тувтал.',
+'tooltip-preferences-save' => 'Ванстомс эсень аравтоматнень',
 'tooltip-summary' => 'Сёрмадт нурькинестэ совавтозденть',
 
 # Attribution
@@ -1812,9 +1835,14 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'spambot_username' => 'MediaWiki-нь шукшто ванькскавтома',
 
 # Info page
+'pageinfo-header-basic' => 'Васень информациязо',
+'pageinfo-header-edits' => 'Витнемс-петнемс юронзо-путовксонзо',
+'pageinfo-header-properties' => 'Лопанть уликсчинзэ',
+'pageinfo-display-title' => 'Коняксонть таргамс лангс',
 'pageinfo-views' => 'Зяро ванома потмонзо',
+'pageinfo-subpages-name' => 'Те лопанть явкслопанзо',
 'pageinfo-edits' => 'Зяроксть витнезь-петнезь',
-'pageinfo-authors' => 'Ð\97яро авторонзо',
+'pageinfo-authors' => 'Ð\92еÑ\81емезÑ\8d Ð·яро авторонзо',
 
 # Skin names
 'skinname-standard' => 'Классикань',
@@ -1834,6 +1862,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 
 # Image deletion
 'deletedrevision' => 'Нардань ташто лиякстомтома $1',
+'filedeleteerror-short' => '"$1" керьмазонть нардамсто лиссь ильведевкс',
 
 # Browsing diffs
 'previousdiff' => '← Седе икелень верзиязо',
@@ -1859,6 +1888,9 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'ilsubmit' => 'Вешнэмс',
 'bydate' => 'чинь коряс',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'ago' => '$1-до икеле',
+
 # Bad image list
 'bad_image_list' => 'Лувось-форматось вана истямо:
 
@@ -1907,6 +1939,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'exif-exposuretime' => 'Валдомтомань (Экспозициянь) шка',
 'exif-fnumber' => 'Диафрагмань числась',
 'exif-brightnessvalue' => 'APEX-нть валдоксчизэ',
+'exif-subjectdistance' => 'Объектэнтень зяро тарка',
 'exif-lightsource' => 'Валдонь лисьмапрязо',
 'exif-flash' => 'Кивчкадема',
 'exif-subjectarea' => 'Субъектонть саема тарказо',
@@ -2126,6 +2159,9 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'watchlisttools-edit' => 'Ваномс ды витнемс-петнемс мезе мельга ванстнят',
 'watchlisttools-raw' => 'Витнеме-петнеме верек ваномалопанть',
 
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'Ванок!\'\'\' Рядс аравтомань те "$2" панжомась саеви те "$1" панжомадо икеле.',
+
 # Special:Version
 'version' => 'Версия',
 'version-specialpages' => 'Башка тевень лопат',
@@ -2155,7 +2191,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 # Special:SpecialPages
 'specialpages' => 'Башка тевень лопат',
 'specialpages-group-other' => 'Лия башка тевень лопат',
-'specialpages-group-login' => 'Совамо / прянь сёрмадстомо',
+'specialpages-group-login' => 'Совамс / шкамс совамотарка',
 'specialpages-group-users' => 'Теицятне ды видечыст',
 'specialpages-group-highuse' => 'Пек тевс нолдазь лопат',
 'specialpages-group-pages' => 'Лопа керькст',
@@ -2190,6 +2226,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 
 # New logging system
 'newuserlog-byemail' => 'салава валот кучозь е-сёрмасо',
+'rightsnone' => '(арасть)',
 
 # Feedback
 'feedback-subject' => 'Мезде:',
@@ -2197,7 +2234,23 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'feedback-cancel' => 'А теемс',
 'feedback-close' => 'Анок',
 
+# Search suggestions
+'searchsuggest-search' => 'Вешнемс',
+
 # API errors
+'api-error-filename-tooshort' => 'Керьмазлементь а саты кувалмозо',
+'api-error-illegal-filename' => 'Керьмазлемесь а маштови.',
 'api-error-unknownerror' => 'Апак содань ильведевкс: «$1».',
 
+# 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 c5e80be..48d2e38 100644 (file)
@@ -209,7 +209,7 @@ $messages = array(
 'september' => 'سـه‌پـتـه‌مـبـر',
 'october' => 'اکتبر',
 'november' => 'نـووه‌مـبـر',
-'december' => 'ده‌سـه‌مـبـر',
+'december' => 'دسامبر',
 'january-gen' => 'جـانـویـه',
 'february-gen' => 'فوریه',
 'march-gen' => 'مـارس',
@@ -221,7 +221,7 @@ $messages = array(
 'september-gen' => 'سـه‌پـتـه‌مـبـر',
 'october-gen' => 'اکتبر',
 'november-gen' => 'نـووه‌مـبـر',
-'december-gen' => 'ده‌سـه‌مـبـر',
+'december-gen' => 'دسامبر',
 'jan' => 'جانویه',
 'feb' => 'فه‌وریه',
 'mar' => 'مارچ',
@@ -233,7 +233,7 @@ $messages = array(
 'sep' => 'سه‌پته‌مبر',
 'oct' => 'ئوکتوبر',
 'nov' => 'نووه‌مبر',
-'dec' => 'ده‌سه‌مبر',
+'dec' => 'دسامبر',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|رج|رج‌ئون}}',
@@ -504,9 +504,6 @@ $2، $1',
 'sqlhidden' => '(دستور اس‌کیوال دپوشنی‌یه بیّه)',
 
 # Login and logout pages
-'welcomecreation' => '==$1، خِش بمونی!==
-شِمه حساب بساته بیّه.
-فراموش نکانین که [[Special:Preferences|شه ترجیحات {{SITENAME}}]] ره تنظیم هاکنین.',
 'yourname' => 'شمه کاروری‌نوم:',
 'yourpassword' => 'شمه پسورد',
 'yourpasswordagain' => 'پسورد ره دِباره بنویس',
@@ -714,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,12 +860,10 @@ $2، $1',
 'watching' => 'ده‌مـبـال هـه‌کـارده‌ن...',
 'unwatching' => 'ده‌مـبـال نـه‌کـارده‌ن...',
 
-'enotif_newpagetext' => 'این صفحه نوبساته هسته',
-'created' => 'بساته بیّه',
-'enotif_subject' => 'صفحه‌ی «$PAGETITLE» {{SITENAME}} به‌دست $PAGEEDITOR $CHANGEDORCREATED‌هسته.',
 'enotif_lastvisited' => 'بدی‌ین همه‌ی تغییرات از آخرین باری که سر بزونی وسّه $1 ره هارشین.',
 'enotif_lastdiff' => 'هارشائن این تغییر وسّه $1 ره بزنین.',
 'enotif_anon_editor' => 'نشناسی‌یه کارور $1',
+'created' => 'بساته بیّه',
 
 # Delete
 'deletepage' => 'صفحه پاک هاکردن',
@@ -1092,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 8de89e8..e464a70 100644 (file)
@@ -192,7 +192,7 @@ $messages = array(
 'newwindow' => '(Motlapoāz cē yancuīc tlanexillōtl)',
 'cancel' => 'Ticcuepāz',
 'moredotdotdot' => 'Huehca ōmpa...',
-'mypage' => 'Nozāzanil',
+'mypage' => 'Noāmauh',
 'mytalk' => 'Notēixnāmiquiliz',
 'anontalk' => 'Inīn IP ītēixnāmiquiliz',
 'navigation' => 'Nènemòwalistli',
@@ -376,11 +376,6 @@ Hueliz quimpiya tlahtōl tlein ahmo mohuelītih motequitiltia tōcāpan.',
 'virus-unknownscanner' => 'ahmatic antivirus:',
 
 # Login and logout pages
-'welcomecreation' => '== ¡Ximopanōlti, $1! ==
-
-Mocuentah ōmochīuh.
-
-Ye tihuelīti titēchihtoa [[Special:Preferences|motlaēlēhuiliz]].',
 'yourname' => 'Motlatequitiltilīltōca:',
 'yourpassword' => 'Motlahtōlichtacāyo',
 'yourpasswordagain' => 'Motlahtōlichtacāyo occeppa',
@@ -571,6 +566,8 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'revdelete-radio-set' => 'Quēmah',
 'revdelete-radio-unset' => 'Ahmo',
 'revdel-restore' => 'Ticpatlāz tlattaliztli',
+'revdel-restore-deleted' => 'tlapohpolōlli tlaceppahuilīztli',
+'revdel-restore-visible' => 'ittaloni tlaceppahuilīztli',
 'pagehist' => 'Zāzanilli tlahcuilōlloh',
 'deletedhist' => 'Ōtlapolo tlahcuilōlloh',
 'revdelete-edit-reasonlist' => 'Tiquimpatlāz īxtlamatiliztli tlapoloaliztechcopa',
@@ -594,10 +591,12 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 
 # Search results
 'searchresults' => 'Tlatēmoliztli',
+'searchresults-title' => '«$1» tlatēmōliztli īmochīhualiz',
 'searchsubtitle' => 'Ōtictēmōz \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|mochīntīn zāzaniltin mopēhua īca "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|mochīntīn zāzaniltin tzonhuilia "$1" īhuīc]])',
 'searchsubtitleinvalid' => "Ōtictēmo '''$1'''",
 'prevn' => '{{PLURAL:$1|$1}} achtopa',
 'nextn' => 'niman {{PLURAL:$1|$1}}',
+'shown-title' => 'Quinēxiltīz $1 {{PLURAL:$|mochīhualiztli}} cece āmac',
 'viewprevnext' => 'Xiquintta ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Ye ia zāzanilli ītōca \"[[\$1]]\" inīn huiquipan'''",
 'searchmenu-new' => "'''Tihuelīti ticchīhuāz zāzanilli ītōca \"[[:\$1]]\" inīn huiquipan'''",
@@ -740,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',
@@ -766,6 +764,8 @@ Intlā ticnequi, tlācah quimatīzqueh motequi.',
 'recentchanges' => 'Yancuīc tlapatlaliztli',
 'recentchanges-legend' => 'Yancuīc tlapatlaliztechcopa tlanequiliztli',
 'recentchanges-summary' => 'Xiquinttāz in achi yancuīc ahmo occequīntīn tlapatlaliztli huiquipan inīn zāzanilpan.',
+'recentchanges-label-newpage' => 'Inīn tlapatlaliztli ōquiyōcox cē yancuīc āmatl',
+'recentchanges-label-minor' => 'Inīn tlapatlaliztli tepitōn',
 'rcnote' => "Nicān {{PLURAL:$1|cah '''1''' tlapatlaliaztli|cateh in xōcoyōc '''$1''' tlapatlaliztli}} īpan xōcoyōc {{PLURAL:$2|tōnalli|'''$2''' tōnaltin}} īhuīcpa $5, $4.",
 'rclistfrom' => 'Xiquinttāz yancuīc tlapatlaliztli īhuīcpa $1',
 'rcshowhideminor' => '$1 tlapatlalitzintli',
@@ -995,6 +995,7 @@ Nò mà mỏta in tlèn [[Special:WantedCategories|ìpan kineki tlaìxmatkàtlà
 'linksearch' => 'Calān tzonhuiliztli tlatemoliztli',
 'linksearch-ns' => 'Tōcātzin:',
 'linksearch-ok' => 'Tictēmōz',
+'linksearch-line' => '$1 tzonhuīlo īxquichca $2',
 
 # Special:ListUsers
 'listusers-submit' => 'Tiquittāz',
@@ -1027,10 +1028,7 @@ Nò mà mỏta in tlèn [[Special:WantedCategories|ìpan kineki tlaìxmatkàtlà
 'watching' => 'Tlachiyacah...',
 'unwatching' => 'Ahtlachiyacah...',
 
-'enotif_newpagetext' => 'Inīn cah yancuīc zāzanilli.',
 'enotif_impersonal_salutation' => 'tlatequitiltilīlli īpan {{SITENAME}}',
-'changed' => 'ōmotlacuep',
-'created' => 'ōmochīuh',
 'enotif_anon_editor' => 'ahtōcātlatequitiltilīlli $1',
 'enotif_body' => 'Māhuizzoh $WATCHINGUSERNAME,
 
@@ -1059,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',
@@ -1172,12 +1172,14 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'ipb-unblock-addr' => 'Ahtiquitzacuilīz $1',
 'ipb-unblock' => 'Ahtiquitzacuilīz IP nozo tlatequitiltilīlli',
 'unblockip' => 'Ahtiquitzacuilīz tlatequitiltilīlli',
+'ipblocklist' => 'Tlatequitiltilīltzacualli',
 'ipblocklist-submit' => 'Tlatēmōz',
 'infiniteblock' => 'ahtlamic',
 'expiringblock' => 'tlami īpan $1 īpan $2',
 'anononlyblock' => 'zan ahtōcā',
 'blocklink' => 'tiquitzacuilīz',
 'unblocklink' => 'ahtiquitzacuilīz',
+'change-blocklink' => 'Ticpatlaz tlatzacualli',
 'contribslink' => 'tlapatlaliztli',
 'blocklogpage' => 'Tlatequitiltilīlli ōmotzacuili',
 'blockme' => 'Timitzcuilīz',
@@ -1274,6 +1276,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 'tooltip-ca-unwatch' => 'Ahtictlachiyāz inīn zāzanilli',
 'tooltip-search' => 'Tlatēmōz īpan {{SITENAME}}',
 'tooltip-search-go' => 'Tiyaz in zāzanilhuīc īca inīn huel melāhuac tōcaitl intlā yez',
+'tooltip-search-fulltext' => 'Tictemōz inīn tlahcuilōlli in āmac',
 'tooltip-p-logo' => 'Calīxatl',
 'tooltip-n-mainpage' => 'Tiquittaz in calīxatl',
 'tooltip-n-mainpage-description' => 'Tiquittaz in calīxatl',
@@ -1306,6 +1309,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 'tooltip-compareselectedversions' => 'Tiquinttāz ahneneuhquiliztli ōme zāzanilli tlapatlaliznepantlah.',
 'tooltip-watch' => 'Ticcēntilīz inīn zāzanilli motlachiyalizhuīc',
 'tooltip-upload' => 'Ticpēhua quetzaliztli',
+'tooltip-summary' => 'Xicaquilia tepitōn tlahcuilōltōntli',
 
 # Attribution
 'anonymous' => 'Ahtōcāitl {{PLURAL:$1|tlatequitiltilīlli|tlatequitiltilīlli}} īpan {{SITENAME}}',
@@ -1500,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 c65f0b8..0e97218 100644 (file)
@@ -18,8 +18,8 @@ $datePreferences = array(
 $defaultDateFormat = 'nan';
 $dateFormats = array(
        'nan time' => 'H:i',
-       'nan date' => 'Y-"nî" n-"goe̍h" j-"jt" (l)',
-       'nan both' => 'Y-"nî" n-"goe̍h" j-"jt" (D) H:i',
+       'nan date' => 'Y-"nî" n-"goe̍h" j-"jt" (l)',
+       'nan both' => 'Y-"nî" n-"goe̍h" j-"jt" (D) H:i',
 );
 
 $messages = array(
@@ -395,8 +395,6 @@ $2',
 
 Lí ē-sái mài kì-miâ kè-siok sú-iōng {{SITENAME}}, mā ē-sái iōng kāng-ê a̍h-sī pa̍t-ê sin-hūn têng teng-ji̍p.
 Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-goân teng-ji̍p tiong; che chi-iàu piàⁿ tiāu lí ê browser ê cache chiū ē chèng-siông.",
-'welcomecreation' => '==Hoan-gêng $1!==
-Í-keng khui hó lí ê kháu-chō.  M̄-hó bē-kì-tit chhiâu lí ê iōng-chiá siat-tēng.',
 'yourname' => 'Lí ê iōng-chiá miâ-chheng:',
 'yourpassword' => 'Lí ê bi̍t-bé:',
 'yourpasswordagain' => 'Têng phah bi̍t-bé:',
index 8974aed..89ca035 100644 (file)
@@ -33,6 +33,7 @@
  * @author Nghtwlkr
  * @author Njardarlogar
  * @author Nsaa
+ * @author Pladask
  * @author Purodha
  * @author Qaqqalik
  * @author Samuelsen
@@ -40,6 +41,7 @@
  * @author Sjurhamre
  * @author Stigmj
  * @author Teak
+ * @author Wouterkoch
  * @author לערי ריינהארט
  */
 
@@ -362,7 +364,7 @@ $messages = array(
 
 'underline-always' => 'Alltid',
 'underline-never' => 'Aldri',
-'underline-default' => 'Bruk nettleserstandard',
+'underline-default' => 'Nettleserens standardinnstillinger',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Skrifttype i redigeringsboksen:',
@@ -447,7 +449,8 @@ $messages = array(
 'newwindow' => '(åpnes i et nytt vindu)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Mer …',
-'mypage' => 'Min side',
+'morenotlisted' => 'Mer som ikke er oppført&nbsp;…',
+'mypage' => 'Min brukerside',
 'mytalk' => 'Min diskusjonsside',
 'anontalk' => 'Brukerdiskusjon for denne IP-adressen',
 'navigation' => 'Navigasjon',
@@ -480,6 +483,7 @@ $messages = array(
 'namespaces' => 'Navnerom',
 'variants' => 'Varianter',
 
+'navigation-heading' => 'Navigasjonsmeny',
 'errorpagetitle' => 'Feil',
 'returnto' => 'Tilbake til $1.',
 'tagline' => 'Fra {{SITENAME}}',
@@ -510,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',
@@ -688,7 +692,7 @@ Spørring: $2',
 'viewsource-title' => 'Vis kilden til $1',
 '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.',
+'protectedpagetext' => 'Denne siden har blitt låst for endringer.',
 'viewsourcetext' => 'Du kan se og kopiere kilden til denne siden:',
 'viewyourtext' => "Du kan se og kopiere kilden til '''dine endringer''' på denne siden:",
 'protectedinterface' => 'Denne siden fremskaffer brukergrensesnittekst for programvaren, og er låst for å hindre misbruk.',
@@ -722,9 +726,9 @@ Administrators nærmere begrunnelse: «$3».',
 
 Du kan fortsette å bruke {{SITENAME}} anonymt, eller <span class='plainlinks'>[$1 logge inn igjen]</span> som samme eller en 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.',
+'welcomeuser' => 'Velkommen, $1!',
+'welcomecreation-msg' => 'Kontoen din har blitt opprettet.
+Ikke glem å endre [[Special:Preferences|innstillingene dine]] på {{SITENAME}}.',
 'yourname' => 'Brukernavn:',
 'yourpassword' => 'Passord:',
 'yourpasswordagain' => 'Gjenta passord',
@@ -816,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',
@@ -882,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',
 
@@ -1066,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',
@@ -1459,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:',
@@ -1610,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',
@@ -1770,7 +1773,7 @@ Se [[Special:NewFiles|galleriet over nye filer]] for en mer visuell visning',
 'fileexists' => 'Ei fil med dette navnet finnes allerede.
 Sjekk <strong>[[:$1]]</strong> hvis du ikke er sikker på at du vil forandre den.
 [[$1|thumb]]',
-'filepageexists' => 'Beskrivelsessiden for denne filen finnes allerede på <strong>[[:$1]]</strong>, 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.
+'filepageexists' => 'Beskrivelsessiden for denne filen finnes allerede på <strong>[[:$1]]</strong>, men ingen filer med dette navnet finnes. Sammendraget du skriver inn vil ikke vises på beskrivelsessiden. For at det skal dukke opp der må du skrive det inn manuelt etter å ha lastet opp filen.
 [[$1|thumb]]',
 'fileexists-extension' => 'En fil med et lignende navn finnes: [[$2|thumb]]
 * Navnet på din fil: <strong>[[:$1]]</strong>
@@ -1856,6 +1859,7 @@ Om problemet fortsetter, kontakt en [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-notsame' => 'En ikke-identisk fil finnes allerede på $1.',
 'backend-fail-invalidpath' => '$1 er ikke en gyldig lagringsbane.',
 'backend-fail-delete' => 'Kunne ikke slette filen $1.',
+'backend-fail-describe' => 'Kunne ikke endre metadata for filen «$1».',
 'backend-fail-alreadyexists' => 'Filen $1 finnes allerede.',
 'backend-fail-store' => 'Kunne ikke lagre filen $1 på $2.',
 'backend-fail-copy' => 'Kunne ikke kopiere filen $1 til $2.',
@@ -2238,9 +2242,9 @@ Se også [[Special:WantedCategories|ønskede kategorier]].',
 'linksearch-pat' => 'Søkemønster:',
 'linksearch-ns' => 'Navnerom:',
 'linksearch-ok' => 'Søk',
-'linksearch-text' => 'Jokertegn som «*.wikipedia.org» kan brukes.
+'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.',
 
@@ -2259,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.
@@ -2328,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',
@@ -2357,20 +2357,23 @@ Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir lis
 
 '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_subject_deleted' => '{{SITENAME}}-siden $1 har blitt slettet av {{gender:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}}-siden $1 har blitt opprettet av {{gender:$2|$2}}',
+'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.',
+'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.',
+'enotif_body_intro_changed' => '{{SITENAME}}-siden $1 ble endret $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
 '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
+$PAGEINTRO $NEWPAGE
 
 Redigeringssammendrag: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2395,6 +2398,8 @@ $UNWATCHURL
 
 Tilbakemelding og videre assistanse:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'opprettet',
+'changed' => 'endret',
 
 # Delete
 'deletepage' => 'Slett side',
@@ -2460,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:',
@@ -2474,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',
@@ -2570,9 +2577,9 @@ $1',
 'blanknamespace' => '(Hoved)',
 
 # Contributions
-'contributions' => 'Brukerbidrag',
+'contributions' => '{{GENDER:$1|Brukerbidrag}}',
 'contributions-title' => 'Brukerbidrag av $1',
-'mycontris' => 'Mine bidrag',
+'mycontris' => 'Bidrag',
 'contribsub2' => 'For $1 ($2)',
 'nocontribs' => 'Ingen endringer er funnet som passer disse kriteriene.',
 'uctop' => '(siste)',
@@ -2787,7 +2794,7 @@ Merk at sider '''ikke''' blir flyttet om det allerede finnes en side med den tit
 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;
+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.",
 '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
@@ -2951,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.',
@@ -3120,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',
@@ -3129,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',
@@ -3149,6 +3162,8 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 '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.',
+'markedaspatrollednotify' => 'Denne endringen av $1 har blitt patruljert.',
+'markedaspatrollederrornotify' => 'Patruljering feilet.',
 
 # Patrol log
 'patrol-log-page' => 'Godkjenningslogg',
@@ -3182,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.',
@@ -3212,7 +3228,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Formatet er som følger:
@@ -3982,11 +4001,15 @@ Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom s
 'logentry-move-move_redir-noredirect' => '$1 flyttet siden $3 til $4 over en omdirigering uten å etterlate en omdirigering',
 'logentry-patrol-patrol' => '$1 markerte revisjon $4 av siden $3 som patruljert',
 'logentry-patrol-patrol-auto' => '$1 markerte automatisk revisjon $4 av siden $3 som patruljert',
-'logentry-newusers-newusers' => '$1 opprettet en brukerkonto',
-'logentry-newusers-create' => '$1 opprettet en brukerkonto',
-'logentry-newusers-create2' => '$1 opprettet en brukerkonto $3',
+'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-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].
index 289b68b..be27a74 100644 (file)
@@ -607,9 +607,6 @@ As Grund is angeven: ''$2''.",
 
 Du kannst {{SITENAME}} nu anonym wiederbruken oder di ünner dissen oder en annern Brukernaam wedder <span class='plainlinks'>[$1 anmellen]</span>.
 Denk dor an, dat welk Sieden ünner Ümstänn noch jümmer so wiest warrn köönt, as wenn du anmellt weerst. Dat ännert sik, wenn du den Cache vun dien Browser leddig maakst.",
-'welcomecreation' => '== Willkamen, $1! ==
-Dien Brukerkonto is nu inricht.
-Vergeet nich, de Sied för di persönlich [[Special:Preferences|intostellen]].',
 'yourname' => 'Dien Brukernaam',
 'yourpassword' => 'Dien Passwoort',
 'yourpasswordagain' => 'Passwoort nochmal ingeven',
@@ -877,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',
@@ -1345,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',
@@ -1810,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.
@@ -1897,11 +1891,7 @@ Mehr Informatschonen över enkelte Rechten staht ünner [[{{MediaWiki:Listgroupr
 
 'enotif_mailer' => '{{SITENAME}} E-Mail-Bescheedgeevdeenst',
 'enotif_reset' => 'All Sieden as besöcht marken',
-'enotif_newpagetext' => 'Dit is en ne’e Siet.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-Bruker',
-'changed' => 'ännert',
-'created' => 'opstellt',
-'enotif_subject' => '[{{SITENAME}}] De Siet „$PAGETITLE“ is vun $PAGEEDITOR $CHANGEDORCREATED worrn',
 'enotif_lastvisited' => 'All Ännern siet dien letzten Besöök op een Blick: $1',
 'enotif_lastdiff' => 'Kiek bi $1 för dit Ännern.',
 'enotif_anon_editor' => 'Anonymen Bruker $1',
@@ -1925,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',
@@ -3097,5 +3089,6 @@ Geev den Dateinaam ahn den Tosatz „{{ns:file}}:“ an.',
 '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 8ec9d62..fe35dac 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Nedersaksisch (Nedersaksisch)
+/** Nedersaksies (Nedersaksies)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -713,9 +713,6 @@ De beheerder gaf hierveur de volgende reden: "$3".',
 
 Je kunnen {{SITENAME}} noen anoniem gebruken of je eigen <span class='plainlinks'>[$1 opniej anmelden]</span> onder disse of n aandere gebrukersnaam.
 t Kan ween dat der wat ziejen bin die weeregeven wörden asof je an-emeld bin totda'j t tussengeheugen van joew webkieker leegmaken.",
-'welcomecreation' => '== Welkom, $1! ==
-Joew gebrukersnaam is an-emaakt.
-Vergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] in te stellen.',
 'yourname' => 'Gebrukersnaam',
 'yourpassword' => 'Wachtwoord',
 'yourpasswordagain' => 'Opniej invoeren',
@@ -1050,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',
@@ -1582,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',
@@ -2221,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.
@@ -2320,11 +2313,7 @@ Toekomstige wiezigingen op disse zied en de overlegzied zullen hier vermeld wör
 
 'enotif_mailer' => '{{SITENAME}}-berichgevingssysteem',
 'enotif_reset' => 'Markeer alle ziejen as bezöcht.',
-'enotif_newpagetext' => 'Dit is n nieje zied.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-gebruker',
-'changed' => 'ewiezigd',
-'created' => 'an-emaakt',
-'enotif_subject' => '{{SITENAME}}-zied $PAGETITLE is $CHANGEDORCREATED deur $PAGEEDITOR',
 'enotif_lastvisited' => 'Zie $1 veur alle wiezigingen sinds joew leste bezeuk.',
 'enotif_lastdiff' => 'Zie $1 um disse wieziging te bekieken.',
 'enotif_anon_editor' => 'anonieme gebruker $1',
@@ -2357,6 +2346,8 @@ $UNWATCHURL
 
 Opmarkingen en veerdere hulpe:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'an-emaakt',
+'changed' => 'ewiezigd',
 
 # Delete
 'deletepage' => 'Vortdoon',
@@ -3893,6 +3884,7 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 '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 9d06fc6..05f60a9 100644 (file)
@@ -60,7 +60,7 @@ $messages = array(
 'tog-hidepatrolled' => 'गस्ती(patrolled)सम्पादनहरु हालका परिवर्तनहरुमा लुकाउने',
 'tog-newpageshidepatrolled' => 'गस्ती(patrolled) पृष्ठहरु नयाँ पृष्ठ सूचीबाट लुकाउने',
 'tog-extendwatchlist' => 'निगरानी सूचीलाई सबै परिवर्तनहरू देखाउने गरी बढाउने , हालैको  बाहेक',
-'tog-usenewrc' => 'विà¤\95सित à¤¹à¤¾à¤²à¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनà¥\87 ( जाभास्क्रिप्ट चाहिन्छ)',
+'tog-usenewrc' => 'पà¥\83षà¥\8dठà¤\95ा à¤­à¤°à¥\8dà¤\96रà¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤° à¤\85वलà¥\8bà¤\95न à¤¸à¥\82à¤\9aà¥\80à¤\95à¥\8b à¤\86धारमा à¤¸à¤¾à¤®à¥\82हिà¤\95 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 ( जाभास्क्रिप्ट चाहिन्छ)',
 'tog-numberheadings' => 'शीर्षकहरुलाई स्वत:अङ्कित गर्नुहोस्',
 'tog-showtoolbar' => 'सम्पादन औजारबट्टा देखाउने( जाभा स्क्रिप्ट चाहिन्छ)',
 'tog-editondblclick' => 'दोहोरो क्लिकमा पृष्ठ सम्पादन गर्ने (जाभा स्क्रिप्ट चाहिन्छ)',
@@ -68,17 +68,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'शीर्षकमा दाहिने क्लिकद्वारा खण्ड सम्पादन सक्षम पार्ने ( जाभा स्क्रिप्ट चाहिने )',
 'tog-showtoc' => 'सामग्री तालिका हेर्ने (तीन भन्दा बढी शीर्षक भएमा)',
 'tog-rememberpassword' => 'यस ब्राउजरमा मेरो प्रवेशलाई सम्झनुहोस् (अधिकतम $1 {{PLURAL:$1|दिन|दिनहरु}} सम्म)',
-'tog-watchcreations' => 'मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤®à¥\88लà¥\87 à¤¸à¥\83à¤\9cना à¤\97रà¥\87à¤\95à¥\8b à¤ªà¥\83षà¥\8dठ à¤¥à¤ª्ने',
-'tog-watchdefault' => 'मैले सम्पादन गरेको पृष्ठ निगरानी सूचीमा थप्ने',
-'tog-watchmoves' => 'मैले सारेको पृष्ठहरुलाई निगरानी सूचीमा थप्ने',
-'tog-watchdeletion' => 'मैले हटाएको पृष्ठहरुलाई निगरानी सूचीमा थप्ने',
+'tog-watchcreations' => 'मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤®à¥\88लà¥\87 à¤¸à¥\83à¤\9cना à¤\97रà¥\87à¤\95à¥\8b à¤ªà¥\83षà¥\8dठ à¤° à¤\85पलà¥\8bड à¤\9cà¥\8bड्ने',
+'tog-watchdefault' => 'मà¥\88लà¥\87 à¤¸à¤®à¥\8dपादन à¤\97रà¥\87à¤\95à¥\8b à¤ªà¥\83षà¥\8dठ à¤° à¤«à¤¾à¤\87ल à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤¥à¤ªà¥\8dनà¥\87',
+'tog-watchmoves' => 'मैले सारेको पृष्ठहरु र फाइलहरुलाई निगरानी सूचीमा थप्ने',
+'tog-watchdeletion' => 'मैले हटाएको पृष्ठहरु र फाइलहरुलाई निगरानी सूचीमा थप्ने',
 'tog-minordefault' => 'सबै सम्पादनहरुलाई पूर्वनिर्धारित रुपमा सामान्य चिनो लगाउने',
 'tog-previewontop' => 'सम्पादन सन्दुक अगि पूर्वरुप देखाउने',
 'tog-previewonfirst' => 'पहिलो सम्पादनमा पूर्वरुप देखाउने',
 'tog-nocache' => 'ब्राउजर पृष्ठ क्यासिङ्ग निस्क्रिय पार्ने',
-'tog-enotifwatchlistpages' => 'मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95à¥\8b à¤ªà¥\83षà¥\8dठ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रिà¤\8f à¤®à¤²à¤¾à¤\88 à¤\88-मà¥\87ल à¤\97रà¥\8dनà¥\87',
+'tog-enotifwatchlistpages' => 'मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठ à¤\85थवा à¤«à¤¾à¤\87लहरà¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रिà¤\8f à¤®à¤²à¤¾à¤\88 à¤\88-मà¥\87ल à¤\97रियà¥\8bसà¥\8d',
 'tog-enotifusertalkpages' => 'मेरो प्रयोगकर्ता वार्ता पृष्ठ परिवर्तन गरिए मलाई ई-मेल गर्ने',
-'tog-enotifminoredits' => 'पृष्ठहरुको सामान्य सम्पादनको लागि पनि मलाई ई-मेल गर्ने',
+'tog-enotifminoredits' => 'पृष्ठहरु र फाइलहरुको सामान्य सम्पादन भएमा पनि मलाई ई-मेल गरियोस्',
 'tog-enotifrevealaddr' => 'जानकारी इ-मेलहरुमा मेरो इ-मेल खुलाउने',
 'tog-shownumberswatching' => 'निगरानी गरिरहेका प्रयोगकर्ताहरुको संख्या देखाउने',
 'tog-oldsig' => 'वर्तमान हस्ताक्षर:',
@@ -102,7 +102,7 @@ $messages = array(
 
 'underline-always' => 'सधैँ',
 'underline-never' => 'कहिल्यै',
-'underline-default' => 'ब्राउजर पूर्वस्थिति',
+'underline-default' => 'सà¥\8dà¤\95à¥\80न à¤\85थवा à¤¬à¥\8dराà¤\89à¤\9cर à¤ªà¥\82रà¥\8dवसà¥\8dथिति',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'फन्ट प्रकार क्षेत्र सम्पादन गर्नुहोस् :',
@@ -189,8 +189,8 @@ $messages = array(
 'newwindow' => '(नयाँ विन्डोमा खुल्छ)',
 'cancel' => 'रद्द',
 'moredotdotdot' => 'थप...',
-'mypage' => 'मà¥\87रà¥\8b à¤ªà¥\83षà¥\8dठ',
-'mytalk' => 'मà¥\87रà¥\8b à¤\95à¥\81रा',
+'mypage' => 'पृष्ठ',
+'mytalk' => 'वारà¥\8dता',
 'anontalk' => 'यस IP को वारेमा वार्तालाप गर्नुहोस्',
 'navigation' => 'अन्वेषण',
 'and' => '&#32;र',
@@ -212,7 +212,7 @@ $messages = array(
 'vector-action-protect' => 'सुरक्षित गर्ने',
 'vector-action-undelete' => 'हटाएको रद्द गर्ने',
 'vector-action-unprotect' => 'सुरक्षा परिवर्तन गर्ने',
-'vector-simplesearch-preference' => 'विशिषà¥\8dठ खोज सुझावहरु सक्रिय पार्ने (भेक्टर त्वचाको लागि मात्र)',
+'vector-simplesearch-preference' => 'साधारण खोज सुझावहरु सक्रिय पार्ने (भेक्टर त्वचाको लागि मात्र)',
 'vector-view-create' => 'सृजना गर्ने',
 'vector-view-edit' => 'सम्पादन',
 'vector-view-history' => 'इतिहास हेर्ने',
@@ -222,6 +222,7 @@ $messages = array(
 'namespaces' => 'नेमस्पेस',
 'variants' => 'बहुरुपहरु',
 
+'navigation-heading' => 'नेविगेशन मेनू',
 'errorpagetitle' => 'त्रुटि',
 'returnto' => '$1 मा फर्कनुहोस् ।',
 'tagline' => '{{SITENAME}}बाट',
@@ -322,6 +323,7 @@ $1',
 'youhavenewmessages' => 'तपाईंको लागि ($2) मा  $1 छ ।',
 'newmessageslink' => 'नयाँ सन्देशहरू',
 'newmessagesdifflink' => 'आखिरी परिवर्तन',
+'youhavenewmessagesfromusers' => 'तपाईंको लागि  {{PLURAL:$3|प्रयोगकर्ता|$3 प्रयोगकर्ताहरु}} ($2) बाट $1',
 'youhavenewmessagesmulti' => 'तपाईंको लागि $1 मा  नयाँ सन्देशहरू छन्',
 'editsection' => 'सम्पादन',
 'editsection-brackets' => '[$1]',
@@ -434,8 +436,8 @@ $1',
 'viewyourtext' => "यस पृष्ठमा रहेका '''तपाईँका सम्पादनहरु''' हेर्न या प्रतिलिपी गर्न सक्नुहुन्छ :",
 'protectedinterface' => 'यो पृष्ठले सफ्टवेयरको लागि अन्तरमोहडा पाठ प्रदान गर्दछ , र यसलाई दुरुपयोग हुनबाट बचाउन ताल्चा मारिएको छ।',
 'editinginterface' => "'''चेतावनी:''' तपाईं यस्तो पृष्ठलाई सम्पादन गर्नुहुँदैछ, जसले सफ्टवेयरको लागि अन्तरमोहोड़ा (interface) पाठ प्रदान गर्दछ।
-यसको परिवर्तनले अरु प्रयोगकर्ताको अन्तरमोहोड़ाको प्रदर्शनमा प्रभाव पार्छ।
-मà¥\80डियाविà¤\95िà¤\95à¥\8b à¤¸à¥\8dथानà¥\80यà¤\95रण à¤ªà¤°à¤¿à¤¯à¥\8bà¤\9cना à¤¨à¤¿à¤®à¥\8dति à¤\85नà¥\81वाद à¤\97रà¥\8dन à¤\95à¥\83पया à¤¯à¤¹à¤¾à¤\81 à¤\9cानà¥\81हà¥\8bसà¥\8d [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]",
+यसà¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनलà¥\87 à¤¯à¤¸ à¤µà¤¿à¤\95िमा à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤\85नà¥\8dतरमà¥\8bहà¥\8bड़ाà¤\95à¥\8b à¤ªà¥\8dरदरà¥\8dशनमा à¤ªà¥\8dरभाव à¤ªà¤¾à¤°à¥\8dà¤\9b।
+सबà¥\88 à¤µà¤¿à¤\95िà¤\95ा à¤¨à¤¿à¤®à¥\8dति à¤\85नà¥\81वाद à¤\9cà¥\8bडà¥\8dन à¤\85थवा à¤ªà¤°à¤¿à¤¬à¤°à¥\8dतन à¤\97रà¥\8dन à¤\95à¥\83पया à¤¯à¤¹à¤¾à¤\81 à¤\9cानà¥\81हà¥\8bसà¥\8d [//translatewiki.net/ translatewiki.net], à¤®à¥\80डियाविà¤\95ि à¤¸à¥\8dथानà¥\80यà¤\95रण à¤ªà¤¾à¤°à¤¿à¤¯à¥\8bà¤\9cना।",
 'sqlhidden' => '(SQL क्वेरी लुकाएको)',
 'cascadeprotected' => 'यो पृष्ठ सम्पादन गर्नबाट सुरक्षित गरिएकोछ किनभनें   {{PLURAL:$1|पृष्ठ |पृष्ठहरु}}मा  सुरक्षित गर्नुका साथै प्रपात ("cascading") विकल्प खुल्ला राखिएकोछ:
 $2',
@@ -448,6 +450,7 @@ $2',
 'filereadonlyerror' => 'फाइल "$1" लाई परिवर्तन गर्न सकिंदैन किन भनें फाइल भण्डार  "$2" केवल पढ्ने स्थिति (read-only mode)मा छ।
 
 कारण यो दिएकोछ: "\'\'$3\'\'"।',
+'exception-nologin' => 'प्रवेश (लग ईन) नगरिएको',
 
 # Virus scanner
 'virus-badscanner' => "खराव मिलान: अज्ञात भाइरस स्क्यानर :''$1''",
@@ -458,8 +461,7 @@ $2',
 'logouttext' => "'''तपाईं अहिले बाहिर निस्कनु भएको छ।'''
 तपाईंले नाम/खाताविनै पनि {{SITENAME}}मा प्रयोग गर्न सक्नुहुन्छ, अथवा अघिकै वा अर्कै कुनै नामको खाताबाट <span class='plainlinks'>[$1 फेरि प्रवेश गर्न]</span> पनि सक्नुहुन्छ।
 याद राख्नुहोस् तपाईंले ब्राउजरको स्मरण भण्डार खालि नगर्दासम्म कुनै पृष्ठहरूमा तपाईं अझै प्रवेश गरिराखेको देखाउन सक्छ।",
-'welcomecreation' => '== स्वागतम् , $1! ==
-तपाँईको खाता खोलिएको छ। [[Special:Preferences|{{SITENAME}} preferences]]मा आफ्ना अभिरुचिहरू परिवर्तन गर्न नबिर्सिनुहोला।',
+'welcomeuser' => '$1जी स्वागत छ!',
 'yourname' => 'प्रयोगकर्ता नाम:',
 'yourpassword' => 'पासवर्ड',
 'yourpasswordagain' => 'पासवर्ड फेरि टाईप गर्नुहोस्',
@@ -786,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' => 'नयाँ पृष्ठ सृजनागर्नको लागि तपाईँलाई अनुमति छैन ।',
@@ -877,9 +878,9 @@ $2
 'rev-deleted-user-contribs' => '[प्रयोगकर्ताको नाम अथवा IP ठेगाना हटाइयो - योगदानहरुबाट सम्पादन लुकाइयो]',
 'rev-deleted-text-permission' => "यस पृष्ठको पुनरावलोकन '''मेटिएकोछ'''।
 यसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटिएको लगमा पाउन सकिन्छ]।",
-'rev-deleted-text-unhide' => "यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95न '''मेटिएकोछ'''।
-यसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटिएको लगमा पाउन सकिन्छ]।
-यदि चाहनु भयो भनें प्रबन्धकको हैसियतमा [यो पुनरावलोकन $1] हेर्न सक्नुहुन्छ।",
+'rev-deleted-text-unhide' => "यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤\82शà¥\8bधन '''मेटिएकोछ'''।
+यसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} को मेटिएको लगमा पाउन सकिन्छ].
+यदि चाहनु भयो भनें [$1 संशोधन हेर्न] सक्नुहुन्छ।",
 'rev-suppressed-text-unhide' => "यस पृष्ठको पुनरावलोकन '''दबाइएकोछ'''।
 यसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को दबाइएको लगमा पाउन सकिन्छ]।
 यदि चाहनु भयो भनें प्रबन्धकको हैसियतमा [यो पुनरावलोकन $1] हेर्न सक्नुहुन्छ।",
@@ -949,9 +950,10 @@ $1",
 'revdelete-concurrent-change' => ' $2, $1 मिति गरिएको वस्तु परिवर्तन गर्न सकिएन: यसको स्थितीले तपाईले परिवर्तन गर्नलाग्नुहुँदा कोहीअरुले न परिवर्तन गरेजस्तो देखाउँछ
 कृपया लगहरु हेर्नुहोला ।',
 'revdelete-only-restricted' => '$2, $1 मिति भएको वस्तु लुकाउदा त्रुटी भएको छ:तपाईले वस्तुहरुलाई प्रवन्धकहरुको दृष्टीबाट दमन गर्न सक्नुहुन्न अझ कुनै पनि अरु दृष्टी विकल्पहरु नछानीकन।',
-'revdelete-reason-dropdown' => '*मेटाउनुका सामान्य कारणहरु
+'revdelete-reason-dropdown' => 'मेटाउनका सामान्य कारणहरु
 ** कपीराइट उल्लंघन
 ** अनुचित व्यक्तिगत जानकारी
+** अनुचित प्रयोगकर्ता नाम
 ** संभावित अपमानजनक जानकारी',
 'revdelete-otherreason' => 'अन्य/थप कारण:',
 'revdelete-reasonotherlist' => 'अरु कारण',
@@ -990,7 +992,7 @@ $1",
 'mergelogpagetext' => 'एउटा पृष्ठको इतिहास अर्कोमा भर्खरै मिलाइएको सूची तल दिइन्छ।',
 
 # Diffs
-'history-title' => '"$1" à¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95न इतिहास',
+'history-title' => '"$1" à¤\95à¥\8b à¤ªà¥\81नरावà¥\83तà¥\8dति इतिहास',
 'difference-multipage' => '(पृष्ठहरुमा भिन्नता)',
 'lineno' => 'पंक्ति $1:',
 'compareselectedversions' => 'छानिएका संस्करणहरू दाँज्नुहोस्',
@@ -1075,7 +1077,7 @@ $1",
 
 # Preferences page
 'preferences' => 'रोजाईहरू',
-'mypreferences' => 'मà¥\87रा à¤\85भिरà¥\81à¤\9aिहरà¥\82',
+'mypreferences' => 'पà¥\8dराथमिà¤\95ताहरà¥\81',
 'prefs-edits' => 'सम्पादन संख्या:',
 'prefsnologin' => 'प्रवेश (लग ईन) नगरिएको',
 'prefsnologintext' => 'प्रयोगकर्ता अभिरूचि निर्धारण गर्न <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ]</span>तपाईंले प्रवेश गरेको हुनुपर्छ।',
@@ -1137,7 +1139,7 @@ $1",
 'timezoneregion-indian' => 'हिन्द महासागर',
 'timezoneregion-pacific' => 'प्राशान्त महासागर',
 'allowemail' => 'अरु प्रयोगकर्ताहरुबाट प्राप्त हुने ईमेल enable गर्नुहोस् ।',
-'prefs-searchoptions' => 'खोज विकल्पहरु',
+'prefs-searchoptions' => 'खोज्ने',
 'prefs-namespaces' => 'नेमस्पेसेज',
 'defaultns' => 'अन्यथा यी नेमस्पेसेजमा खोज्ने :',
 'default' => 'पूर्वनिर्धारित',
@@ -1303,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' => 'यो पृष्ठ पढ्ने',
@@ -1513,7 +1515,7 @@ $1',
 'backend-fail-writetemp' => 'अस्थाइ फाइलमा लेख्न सकिएन',
 'backend-fail-closetemp' => 'अस्थाइ फाइल बन्द गर्न सकिएन',
 'backend-fail-read' => 'फाइल $1 खोल्न सकिएन ।',
-'backend-fail-create' => 'फाà¤\87ल $1 à¤¸à¤¿à¤°à¥\8dà¤\9cना गर्न सकिएन',
+'backend-fail-create' => 'फाà¤\87ल $1 à¤²à¥\87à¤\96à¥\8dन गर्न सकिएन',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'ZIP परीक्षणको लागि फाइल खोल्दा एक त्रुटी भेटीयो ।',
@@ -1810,9 +1812,6 @@ $1',
 'activeusers-hidesysops' => 'प्रबन्धकहरु लुकाउने',
 'activeusers-noresult' => 'प्रयोगकर्ताहरु भेटिएनन्।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोगकर्ता श्रृजना लग',
-
 # Special:ListGroupRights
 'listgrouprights' => 'प्रयोगकर्ता समूह अधिकार',
 'listgrouprights-summary' => 'निम्न सूची यस विकिमा परिभाषित समूहहरु र तिनीहरुले प्रयोगगर्न सक्ने संबद्ध  अधिकारहरुको हो।
@@ -1903,11 +1902,7 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} जानकारी प्रेषक',
 'enotif_reset' => 'सबै पृष्ठहरु भनी दाग दिने',
-'enotif_newpagetext' => 'यो नयाँ पृष्ठ हो।',
 'enotif_impersonal_salutation' => '{{SITENAME}} प्रयोगकर्ता',
-'changed' => 'परिवर्तन भइसकेको',
-'created' => 'बनाइएको',
-'enotif_subject' => '$PAGEEDITORद्वारा {{SITENAME}} पृष्ठ $PAGETITLE $CHANGEDORCREATED गरिएको',
 'enotif_lastvisited' => 'अघिल्लो हेराइपछिका सबै परिवर्तनहरुको निम्ति हेर्नुहोस्: $1',
 'enotif_lastdiff' => 'यस परिवर्तनको निम्ति यो $1 हेर्नुहोस्',
 'enotif_anon_editor' => 'अज्ञात  प्रयोगकर्ता  $1',
@@ -1941,6 +1936,8 @@ $UNWATCHURL
 
 प्रतिक्रिया र अन्य सहयोगको निम्ति:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाइएको',
+'changed' => 'परिवर्तन भइसकेको',
 
 # Delete
 'deletepage' => 'पृष्ठ मेट्नुहोस्',
@@ -3436,6 +3433,7 @@ $5
 'revdelete-unrestricted' => 'प्रवन्धककोलागि निषेधहरु हटाइयो ।',
 'logentry-move-move' => '$1 द्वारा $3 पृष्ठलाई $4 मा सारियो',
 'newuserlog-byemail' => 'इ मेलबाट पठाइएको प्रवेशशव्द',
+'rightsnone' => '(कुनैपनि होइन)',
 
 # Feedback
 'feedback-subject' => 'विषय:',
index 72994b6..cbb1938 100644 (file)
@@ -21,6 +21,7 @@
  * @author Hamaryns
  * @author Jens Liebenau
  * @author Kaganer
+ * @author Kippenvlees1
  * @author Krinkle
  * @author MarkvA
  * @author McDutchie
@@ -353,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',
@@ -381,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',
@@ -479,15 +480,16 @@ $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…',
-'mypage' => 'Mijn gebruikerspagina',
-'mytalk' => 'Mijn overleg',
+'morenotlisted' => 'Meer niet in de lijst...',
+'mypage' => 'Gebruikerspagina',
+'mytalk' => 'Overleg',
 'anontalk' => 'Overlegpagina voor dit IP-adres',
 'navigation' => 'Navigatie',
 'and' => '&#32;en',
@@ -519,6 +521,7 @@ $messages = array(
 'namespaces' => 'Naamruimten',
 'variants' => 'Varianten',
 
+'navigation-heading' => 'Navigatiemenu',
 'errorpagetitle' => 'Fout',
 'returnto' => 'Terug naar $1.',
 'tagline' => 'Uit {{SITENAME}}',
@@ -531,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',
@@ -574,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.
 
@@ -661,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>
@@ -690,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.',
@@ -716,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.',
@@ -731,15 +734,14 @@ Zoekopdracht: $2',
 'actionthrottledtext' => 'Als maatregel tegen spam is het aantal keren per tijdseenheid dat u deze handeling kunt verrichten beperkt.
 De limiet is overschreden.
 Probeer het over een aantal minuten opnieuw.',
-'protectedpagetext' => 'Deze pagina is beveiligd.
-Bewerken is niet mogelijk.',
+'protectedpagetext' => 'Deze pagina is beveiligd. Bewerken of andere handelingen zijn niet mogelijk.',
 'viewsourcetext' => 'U kunt de brontekst van deze pagina bekijken en kopiëren:',
 'viewyourtext' => "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
 'protectedinterface' => "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.
 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",
@@ -767,8 +769,8 @@ De opgegeven reden is "\'\'$3\'\'".',
 
 U kunt {{SITENAME}} nu anoniem gebruiken of weer <span class='plainlinks'>[$1 aanmelden]</span> als dezelfde of een andere gebruiker.
 Mogelijk worden nog een aantal pagina's weergegeven alsof u aangemeld bent totdat u de cache van uw browser leegt.",
-'welcomecreation' => '== Welkom, $1! ==
-Uw gebruiker is geregistreerd.
+'welcomeuser' => 'Welkom, $1!',
+'welcomecreation-msg' => 'Uw gebruiker is aangemaakt.
 Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.',
 'yourname' => 'Gebruikersnaam:',
 'yourpassword' => 'Wachtwoord:',
@@ -815,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.
@@ -849,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.',
@@ -878,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',
@@ -939,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',
 
@@ -948,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',
@@ -958,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)',
 
@@ -976,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:',
@@ -1015,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.',
@@ -1030,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.
@@ -1042,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.
@@ -1130,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.",
@@ -1161,7 +1164,7 @@ Deze bestaat al.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
-'content-model-text' => 'platte tekst',
+'content-model-text' => 'tekst zonder opmaak',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
 
@@ -1310,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
@@ -1344,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.',
@@ -1378,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
@@ -1431,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.',
@@ -1459,7 +1462,7 @@ De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.',
 
 # Preferences page
 'preferences' => 'Voorkeuren',
-'mypreferences' => 'Mijn voorkeuren',
+'mypreferences' => 'Voorkeuren',
 'prefs-edits' => 'Aantal bewerkingen:',
 'prefsnologin' => 'Niet aangemeld',
 'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aangemeld]</span> zijn om uw voorkeuren te kunnen instellen.',
@@ -1535,9 +1538,9 @@ Deze handeling kan niet ongedaan gemaakt worden.',
 'prefs-emailconfirm-label' => 'E-mailbevestiging:',
 'prefs-textboxsize' => 'Afmetingen bewerkingsscherm',
 'youremail' => 'Uw e-mailadres:',
-'username' => 'Gebruikersnaam:',
-'uid' => 'Gebruikersnummer:',
-'prefs-memberingroups' => 'Lid van {{PLURAL:$1|groep|groepen}}:',
+'username' => '{{GENDER:$1|Gebruikersnaam}}:',
+'uid' => '{{GENDER:$1|Gebruikersnummer}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepen}}:',
 'prefs-registration' => 'Registratiedatum:',
 'yourrealname' => 'Uw echte naam:',
 'yourlanguage' => 'Taal:',
@@ -1548,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',
@@ -1559,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',
@@ -1688,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',
@@ -1780,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',
@@ -1854,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>
@@ -1949,6 +1951,7 @@ Als het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop
 'backend-fail-notsame' => 'Er staat al een niet-identiek bestand op de plaats $1.',
 'backend-fail-invalidpath' => '$1 is geen geldig opslagpad.',
 'backend-fail-delete' => 'Het bestand $1 kon niet verwijderd worden.',
+'backend-fail-describe' => 'Het was niet mogelijk de metadata aan te passen voor het bestand "$1".',
 'backend-fail-alreadyexists' => 'Het bestand $1 bestaat al.',
 'backend-fail-store' => 'Het was niet mogelijk het bestand $1 op te slaan op locatie $2.',
 'backend-fail-copy' => 'Het was niet mogelijk het bestand $1 te kopiëren naar $2.',
@@ -2079,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.',
@@ -2150,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 dit 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',
@@ -2184,13 +2187,13 @@ Vergeet niet de "Verwijzingen naar deze pagina" te controleren alvorens dit sjab
 
 '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]]',
@@ -2202,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',
@@ -2212,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',
@@ -2230,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',
@@ -2328,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',
@@ -2339,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
@@ -2364,10 +2367,6 @@ Ondersteunde protocollen: <code>$1</code> (wordt "http://"als er geen protocol w
 '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.
@@ -2427,15 +2426,15 @@ De ontvanger kan dus direct naar u reageren.',
 
 # Watchlist
 'watchlist' => 'Volglijst',
-'mywatchlist' => 'Mijn volglijst',
+'mywatchlist' => 'Volglijst',
 'watchlistfor2' => 'Voor $1 $2',
 'nowatchlist' => 'Uw volglijst is leeg.',
 'watchlistanontext' => 'Om uw volglijst te bekijken of te bewerken moet u zich $1.',
 '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',
@@ -2450,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)',
@@ -2463,19 +2462,23 @@ Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden
 
 'enotif_mailer' => '{{SITENAME}}-berichtensysteem',
 'enotif_reset' => "Alle pagina's markeren als bezocht",
-'enotif_newpagetext' => 'Dit is een nieuwe pagina.',
 'enotif_impersonal_salutation' => 'gebruiker van {{SITENAME}}',
-'changed' => 'gewijzigd',
-'created' => 'aangemaakt',
-'enotif_subject' => 'Pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED door $PAGEEDITOR',
+'enotif_subject_deleted' => '{{SITENAME}}: pagina $1 is verwijderd door {{GENDER:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}}: pagina $1 is aangemaakt door {{GENDER:$2|$2}}',
+'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_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.',
+'enotif_body_intro_changed' => 'De pagina $1 op {{SITENAME}} is bewerkt door {{GENDER:$2|$2}} op $PAGEEDITDATE. Zie $3 voor de huidige versie.',
 'enotif_lastvisited' => 'Zie $1 voor alle wijzigingen sinds uw laatste bezoek.',
 'enotif_lastdiff' => 'Ga naar $1 om deze wijziging te bekijken.',
 'enotif_anon_editor' => 'anonieme gebruiker $1',
 'enotif_body' => 'Beste $WATCHINGUSERNAME,
 
-De pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE door $PAGEEDITOR. Zie $PAGETITLE_URL voor de huidige versie.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Samenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2494,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',
@@ -2571,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:',
@@ -2587,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',
@@ -2644,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',
@@ -2688,9 +2695,9 @@ $1',
 'blanknamespace' => '(Hoofdnaamruimte)',
 
 # Contributions
-'contributions' => 'Gebruikersbijdragen',
+'contributions' => '{{GENDER:$1|Gebruikersbijdragen}}',
 'contributions-title' => 'Bijdragen van $1',
-'mycontris' => 'Mijn bijdragen',
+'mycontris' => 'Bijdragen',
 'contribsub2' => 'Voor $1 ($2)',
 'nocontribs' => 'Geen wijzigingen gevonden die aan de gestelde criteria voldoen.',
 'uctop' => '(laatste wijziging)',
@@ -2716,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]]''':",
@@ -2724,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
@@ -2751,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
@@ -2844,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.
@@ -2855,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',
 
@@ -2872,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.',
@@ -2895,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.
@@ -2909,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',
@@ -2962,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.',
@@ -2989,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' => "----
@@ -3058,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)',
@@ -3079,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.',
@@ -3148,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',
@@ -3160,7 +3169,7 @@ U kunt wel de broncode bekijken.',
 'tooltip-ca-nstab-help' => 'Hulppagina bekijken',
 'tooltip-ca-nstab-category' => 'Categoriepagina bekijken',
 'tooltip-minoredit' => 'Deze wijziging als een kleine wijziging markeren',
-'tooltip-save' => 'Uw wijzigingen opslaan',
+'tooltip-save' => 'Wijzigingen opslaan',
 'tooltip-preview' => 'Een voorvertoning maken. Gebruik dit voordat u opslaat!',
 'tooltip-diff' => 'Gemaakte wijzigingen bekijken (zoals het in de geschiedenis zal te zien zijn)',
 'tooltip-compareselectedversions' => 'De verschillen tussen de geselecteerde versies van deze pagina bekijken.',
@@ -3227,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"',
@@ -3245,7 +3254,7 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'pageinfo-default-sort' => 'Standaard sorteerwijze',
 'pageinfo-length' => 'Paginalengte (in bytes)',
 'pageinfo-article-id' => 'Paginanummer',
-'pageinfo-language' => 'Pagina-inhoudstaal',
+'pageinfo-language' => 'Taal voor de pagina',
 'pageinfo-robot-policy' => 'Status voor de zoekmachine',
 'pageinfo-robot-index' => 'Indexeerbaar',
 'pageinfo-robot-noindex' => 'Niet indexeerbaar',
@@ -3265,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',
@@ -3273,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',
@@ -3295,6 +3309,8 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'markedaspatrollederror' => 'Kan niet als gecontroleerd worden aangemerkt',
 'markedaspatrollederrortext' => 'Selecteer een versie om als gecontroleerd aan te merken.',
 'markedaspatrollederror-noautopatrol' => 'U kunt uw eigen wijzigingen niet als gecontroleerd markeren.',
+'markedaspatrollednotify' => 'Deze bewerking op $1 is gemarkeerd als gecontroleerd.',
+'markedaspatrollederrornotify' => 'Markeren als gecontroleerd mislukt.',
 
 # Patrol log
 'patrol-log-page' => 'Markeerlogboek',
@@ -3328,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.',
@@ -3337,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',
@@ -3358,14 +3375,17 @@ $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',
 
 # Bad image list
 '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',
@@ -3552,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',
@@ -3793,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',
@@ -3816,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
 
@@ -3828,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
 
@@ -3840,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
 
@@ -3854,8 +3874,8 @@ De bevestigingscode vervalt op $4.',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-invoeging van sjablonen is uitgeschakeld]',
-'scarytranscludefailed' => '[Het sjabloon $1 kon niet opgehaald worden]',
-'scarytranscludefailed-httpstatus' => '[Het sjabloon $1 kon niet opgehaald worden: HTTP $2]',
+'scarytranscludefailed' => '[De sjabloon $1 kon niet opgehaald worden]',
+'scarytranscludefailed-httpstatus' => '[De sjabloon $1 kon niet opgehaald worden: HTTP $2]',
 'scarytranscludetoolong' => '[De URL is te lang]',
 
 # Delete conflict
@@ -3926,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.
@@ -3986,7 +4006,7 @@ U kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].',
 'version-license' => 'Licentie',
 'version-poweredby-credits' => "Deze wiki wordt aangedreven door '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'anderen',
-'version-credits-summary' => 'We zouden graag de volgende personen erkennen voor hun bijdrage aan [[Special:Version|MediaWiki]].',
+'version-credits-summary' => 'We erkennen graag de volgende personen voor hun bijdrage aan [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki is vrije software; u kunt MediaWiki verspreiden en/of aanpassen onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation; ofwel versie 2 van de Licentie, of - naar uw wens - enige latere versie.
 
 MediaWiki wordt verspreid in de hoop dat het nuttig is, maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van VERKOOPBAARHEID of GESCHIKTHEID VOOR ENIG DOEL IN HET BIJZONDER. Zie de GNU General Public License voor meer informatie.
@@ -4047,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.
 
@@ -4074,7 +4094,7 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'compare-rev1' => 'Versie 1',
 'compare-rev2' => 'Versie 2',
 'compare-submit' => 'Vergelijken',
-'compare-invalid-title' => 'De titel die u hebt opgegeven is ongeldig.',
+'compare-invalid-title' => 'De opgegeven pagina is ongeldig.',
 'compare-title-not-exists' => 'De titel die u hebt opgegeven bestaat niet.',
 'compare-revision-not-exists' => 'De versie die u hebt opgegeven bestaat niet.',
 
@@ -4129,11 +4149,15 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'logentry-move-move_redir-noredirect' => '$1 heeft pagina $3 naar $4 hernoemd over een doorverwijzing zonder een doorverwijzing achter te laten',
 'logentry-patrol-patrol' => '$1 heeft versie $4 van pagina $3 als gecontroleerd gemarkeerd',
 'logentry-patrol-patrol-auto' => '$1 heeft versie $4 van pagina $3 automatisch als gecontroleerd gemarkeerd',
-'logentry-newusers-newusers' => '$1 heeft een gebruiker aangemaakt',
-'logentry-newusers-create' => '$1 is als gebruiker aangemaakt',
-'logentry-newusers-create2' => '$1 heeft een gebruiker $3 aangemaakt',
+'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-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].
index ec1086b..588a70c 100644 (file)
@@ -449,8 +449,9 @@ $messages = array(
 'newwindow' => '(vert opna i eit nytt vindauge)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Meir …',
+'morenotlisted' => 'Meir som ikkje er lista opp …',
 'mypage' => 'Sida mi',
-'mytalk' => 'Diskusjonssida mi',
+'mytalk' => 'Diskusjon',
 'anontalk' => 'Diskusjonside for denne IP-adressa',
 'navigation' => 'Navigering',
 'and' => '&#32;og',
@@ -482,6 +483,7 @@ $messages = array(
 'namespaces' => 'Namnerom',
 'variants' => 'Variantar',
 
+'navigation-heading' => 'Navigasjonsmeny',
 'errorpagetitle' => 'Feil',
 'returnto' => 'Attende til $1.',
 'tagline' => 'Frå {{SITENAME}}',
@@ -678,7 +680,7 @@ Funksjonen oppgav inga årsak.',
 'viewsource-title' => 'Sjå kjelda til $1',
 'actionthrottled' => 'Handlinga vart stoppa',
 'actionthrottledtext' => 'For å hindre spamming kan du ikkje utføre denne handlinga for mange gonger på kort tid. Ver venleg og prøv igjen litt seinare.',
-'protectedpagetext' => 'Denne sida er verna for å hindre endring.',
+'protectedpagetext' => 'Sida har vorte verna for å hindra endring eller andre handlingar.',
 'viewsourcetext' => 'Du kan sjå og kopiere kjeldekoden til denne sida:',
 'viewyourtext' => "Du kan sjå og kopiera kjelda til '''endringane dine''' på sida:",
 'protectedinterface' => 'Denne sida inneheld tekst nytta av brukargrensesnittet for programvara på wikien, og er låst for å hindra hærverk.
@@ -713,9 +715,9 @@ Administratoren som låste filsamlinga oppgav den fylgjande årsaka: «$3».',
 
 Du kan no halde fram å bruke {{SITENAME}} anonymt, eller du kan <span class='plainlinks'>[$1 logge inn att]</span>  med same kontoen eller ein annan brukar kan logge inn.
 Ver merksam på at nokre sider framleis kan visast fram som om du er innlogga fram til du slettar mellomlageret til nettlesaren din.",
-'welcomecreation' => '== Hjarteleg velkommen til {{SITENAME}}, $1! ==
-Brukarkontoen din er oppretta.
-Hugs at du kan endre på [[Special:Preferences|innstillingane]] dine.',
+'welcomeuser' => 'Velkomen, $1!',
+'welcomecreation-msg' => 'Brukarkontoen din er oppretta.
+Gløym ikkje å endra [[Special:Preferences|innstillingane dine for {{SITENAME}}]].',
 'yourname' => 'Brukarnamn:',
 'yourpassword' => 'Passord:',
 'yourpasswordagain' => 'Skriv opp att passordet',
@@ -801,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',
@@ -858,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',
 
@@ -937,11 +941,9 @@ Han kan ha vorten flytta eller sletta medan du såg på sida.',
 
 Passordet for den nye kontoen kan verta endra på ''[[Special:ChangePassword|endra passord]]''-sida etter innlogging.",
 'newarticle' => '(Ny)',
-'newarticletext' => "'''{{SITENAME}} har ikkje noka side med namnet {{PAGENAME}} enno.'''
-* For å opprette ei slik side kan du skrive i boksen under og klikke på «Lagre». Endringane vil vere synlege med det same.
-* Om du er ny her er det tilrådd å sjå på [[{{MediaWiki:Helppage}}|hjelpesida]] først.
-* Om du lagrar ei testside, vil du ikkje kunne slette henne sjølv.
-* Dersom du ikkje ønskjer å endre sida, kan du utan risiko klikke på '''attende'''-knappen i nettlesaren din.",
+'newarticletext' => "Du har følgt ei lenkje til ei side som ikkje finst enno.
+For å opprette sida, kan du skrive i boksen under (sjå [[{{MediaWiki:Helppage}}|hjelpesida]] for meir informasjon).
+Hamna du her ved ein feil, klikk på '''attende'''-knappen i nettlesaren din.",
 'anontalkpagetext' => "----''Dette er ei diskusjonsside for ein anonym brukar som ikkje har oppretta konto eller ikkje har logga inn.
 Vi er difor nøydde til å bruke den numeriske IP-adressa til å identifisere brukaren. Same IP-adresse kan vere knytt til fleire brukarar. Om du er ein anonym brukar og meiner at du har fått irrelevante kommentarar på ei slik side, [[Special:UserLogin/signup|opprett ein brukarkonto]] eller [[Special:UserLogin|logg inn]] slik at vi unngår framtidige forvekslingar med andre anonyme brukarar.''",
 'noarticletext' => 'Det er nett no ikkje noko tekst på denne sida.
@@ -974,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',
@@ -1017,7 +1019,7 @@ Teksten må du ha skrive sjølv eller ha kopiert frå ein ressurs som er kompati
 Systemadministratoren som låste databasen gav følgjande årsak: $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 endra henne.
+'semiprotectedpagewarning' => "'''Merk:''' Denne sida er verna slik at berre registrerte brukarar kan endre henne.
 Det siste loggelementet er oppgjeve under som referanse:",
 'cascadeprotectedwarning' => "'''Åtvaring:''' Denne sida er verna så berre brukarar med administratortilgang kan endre henne. Dette er fordi ho er inkludert i {{PLURAL:$1|denne djupverna sida|desse djupverna sidene}}:",
 'titleprotectedwarning' => "'''Åtvaring: Denne sida er verna, så berre [[Special:ListGroupRights|nokre brukarar]] kan opprette henne.'''
@@ -1029,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.',
@@ -1327,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',
@@ -1346,7 +1347,7 @@ Ver merksam på at registra deira kan vera utdaterte.',
 
 # Preferences page
 'preferences' => 'Innstillingar',
-'mypreferences' => 'Innstillingane mine',
+'mypreferences' => 'Innstillingar',
 'prefs-edits' => 'Tal på endringar:',
 'prefsnologin' => 'Ikkje innlogga',
 'prefsnologintext' => 'Du må vere <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logga inn]</span> for å endre brukarinnstillingane.',
@@ -1422,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:',
@@ -1571,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',
@@ -1625,7 +1624,7 @@ Dette kan ikkje tilbakestillast.',
 'recentchanges-summary' => 'På denne sida ser du dei sist endra sidene i {{SITENAME}}.',
 'recentchanges-feed-description' => 'Fylg med på dei siste endringane på denne wikien med dette abonnementet.',
 'recentchanges-label-newpage' => 'Endringa oppretta ei ny side',
-'recentchanges-label-minor' => 'Dette er ei mindre endring',
+'recentchanges-label-minor' => 'Endringa er småplukk',
 'recentchanges-label-bot' => 'Denne endringa vart gjort av ein bot',
 'recentchanges-label-unpatrolled' => 'Endringa er ikkje patruljert enno',
 'rcnote' => "Nedanfor er {{PLURAL:$1|den siste endringa gjord|dei siste '''$1''' endringane gjorde}} {{PLURAL:$2|den siste dagen|dei siste '''$2''' dagane}}, for $4, kl. $5.",
@@ -1812,6 +1811,7 @@ $1',
 'backend-fail-notsame' => 'Ein ikkje-identisk fil finst alt på «$1».',
 'backend-fail-invalidpath' => '$1 er ikkje ein gyldig lagringsstig.',
 'backend-fail-delete' => 'Kunne ikkje sletta fila «$1».',
+'backend-fail-describe' => 'Kunne ikkje endra metadataa for fila «$1».',
 'backend-fail-alreadyexists' => 'Fila $1 finst frå før.',
 'backend-fail-store' => 'Kunne ikkje lagra fila «$1» på «$2».',
 'backend-fail-copy' => 'Kunne ikkje kopiera fila «$1» til «$2».',
@@ -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:',
@@ -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.',
 
@@ -2212,10 +2212,6 @@ Støtta protokollar: <code>$1</code> (nyttar http:// som standard om ingen proto
 '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]].',
@@ -2273,16 +2269,14 @@ E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukk
 
 # Watchlist
 'watchlist' => 'Overvakingsliste',
-'mywatchlist' => 'Overvakingslista mi',
+'mywatchlist' => 'Overvakingsliste',
 'watchlistfor2' => 'For $1 $2',
 'nowatchlist' => 'Du har ikkje noko i overvakingslista di.',
 'watchlistanontext' => 'Du lyt $1 for å vise eller endre sider på overvakingslista di.',
 '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',
@@ -2310,29 +2304,31 @@ Om du seinare vil fjerne sida frå overvakingslista, klikk på «Fjern overvakin
 
 'enotif_mailer' => '{{SITENAME}}-endringsmeldingssendar',
 'enotif_reset' => 'Merk alle sidene som vitja',
-'enotif_newpagetext' => 'Dette er ei ny side.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-brukar',
-'changed' => 'endra',
-'created' => 'oppretta',
-'enotif_subject' => '{{SITENAME}}-sida $PAGETITLE har vorte $CHANGEDORCREATED av $PAGEEDITOR',
+'enotif_subject_deleted' => '{{SITENAME}}-sida $1 har vorte sletta av {{gender:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}}-sida $1 har vorte oppretta av {{gender:$2|$2}}',
+'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.',
+'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.',
+'enotif_body_intro_changed' => '{{SITENAME}}-sida $1 vart endra $PAGEEDITDATE av {{gender:$2|$2}}, sjå $3 for den gjeldande versjonen.',
 'enotif_lastvisited' => 'Sjå $1 for alle endringane sidan siste vitjing.',
 'enotif_lastdiff' => 'Sjå $1 for å sjå denne endringa.',
 'enotif_anon_editor' => 'anonym brukar $1',
 'enotif_body' => 'Kjære $WATCHINGUSERNAME,
 
-
-{{SITENAME}}-sida $PAGETITLE er vorten $CHANGEDORCREATED $PAGEEDITDATE av $PAGEEDITOR, sjå $PAGETITLE_URL for den gjeldande versjonen.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Endringssamandraget var: $PAGESUMMARY $PAGEMINOREDIT
 
-Kontakta brukaren:
+Kontakt brukaren:
 e-post: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Du får ikkje fleire endringsvarsel minder du vitjar sida på nytt.
-Du kan dessutan nullstilla varselflagga for alle sidene på overvakingslista di.
+Du får ikkje fleire endringsvarsel før du vitjar sida på nytt. Du kan dessutan nullstilla varselflagga for alle sidene på overvakingslista di.
 
 Helsing det venlege meldingssystemet ditt for {{SITENAME}}
 
@@ -2343,11 +2339,13 @@ For å endra innstillingane dine for e-postvarsling, vitja
 For å endra innstillingane for overvakingslista di, vitja
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-For å fjerna sita frå overvakingslista di, vitja
+For å fjerna sida frå overvakingslista di, vitja
 $UNWATCHURL
 
 Attendemelding og hjelp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oppretta',
+'changed' => 'endra',
 
 # Delete
 'deletepage' => 'Slett sida',
@@ -2380,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.
@@ -2411,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:',
@@ -2424,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',
@@ -2469,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.',
@@ -2515,15 +2515,15 @@ $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
-'contributions' => 'Brukarbidrag',
+'contributions' => '{{GENDER:$1|Brukarbidrag}}',
 'contributions-title' => 'Bidrag av $1',
-'mycontris' => 'Eigne bidrag',
+'mycontris' => 'Bidrag',
 'contribsub2' => 'For $1 ($2)',
 'nocontribs' => 'Det vart ikkje funne nokon endringar gjorde av denne brukaren.',
 'uctop' => ' (øvst)',
@@ -2708,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. 
@@ -2728,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',
@@ -2765,7 +2769,7 @@ I desse falla lyt du flytta eller fletta sida manuelt, om ynskeleg.",
 'delete_and_move' => 'Slett og flytt',
 'delete_and_move_text' => '== Sletting påkravd ==
 
-Målsida «[[:$1]]» finst alt. Vil du sletta henne for å gjeva rom for flytting?',
+Målsida «[[:$1]]» finst allereie. Vil du slette ho for å gje rom for flytting?',
 'delete_and_move_confirm' => 'Ja, slett sida',
 'delete_and_move_reason' => 'Sletta for å gje rom for flytting frå «[[$1]]»',
 'selfmove' => 'Kjelde- og måltitlane er like; kan ikkje flytte sida over seg sjølv.',
@@ -2884,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.',
@@ -3025,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',
@@ -3054,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',
@@ -3062,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',
@@ -3083,6 +3093,8 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'markedaspatrollederror' => 'Kan ikkje merke sida som patruljert',
 'markedaspatrollederrortext' => 'Du må markere ein versjon for å kunne godkjenne.',
 'markedaspatrollederror-noautopatrol' => 'Ein har ikkje høve til å merkje sine eigne endringar som godkjende.',
+'markedaspatrollednotify' => 'Denne endringa på $1 har vorte merkt som patruljert.',
+'markedaspatrollederrornotify' => 'Det gjekk ikkje å merkja endringa som patruljert.',
 
 # Patrol log
 'patrol-log-page' => 'Patruljeringslogg',
@@ -3115,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.',
@@ -3144,7 +3157,10 @@ $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',
 
 # Bad image list
 'bad_image_list' => 'Formatet er slik:
@@ -3747,9 +3763,14 @@ Du kan òg [[Special:EditWatchlist|nytte standardverktøyet]].',
 'version-hook-subscribedby' => 'Brukt av',
 'version-version' => '(versjon $1)',
 'version-license' => 'Lisens',
-'version-poweredby-credits' => "Denne wikien er dreven av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Denne wikien er driven av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andre',
 'version-credits-summary' => 'Me ynskjer godskriva desse personane for tilskotet deira til [[Special:Version|MediaWiki]].',
+'version-license-info' => 'MediaWiki er fri programvare; du kan redistribuera det og/eller modifisera det under krava i GNU General Public License som publisert av Free Software Foundation; anten versjon 2 av lisensen, eller (om du ynskjer det) ein kvar seinare versjon.
+
+MediaWiki er distribuert i håp om at det vil vera nyttig, men UTAN NOKON GARANTI; ikkje eingong ein implisitt garanti for at det KAN SELJAST eller at det EIGNAR SEG TIL EIT VISST FØREMÅL. Sjå GNU General Public License for fleire detaljar.
+
+Du skal ha motteke [{{SERVER}}{{SCRIPTPATH}}/COPYING ein kopi av GNU General Public License] saman med dette programmet; om ikkje, 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',
@@ -3883,11 +3904,15 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'logentry-move-move_redir-noredirect' => '$1 flytte sida $3 til $4 over ei omdirigering utan å lata etter ei omdirigering',
 'logentry-patrol-patrol' => '$1 merkte versjon $4 av sida $3 som patruljert',
 'logentry-patrol-patrol-auto' => '$1 merkte automatisk versjon $4 av sida $3 som patruljert',
-'logentry-newusers-newusers' => '$1 oppretta ein brukarkonto',
-'logentry-newusers-create' => '$1 oppretta ein brukarkonto',
-'logentry-newusers-create2' => '$1 oppretta brukarkontoen $3',
+'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-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].
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 edc5210..9c73019 100644 (file)
@@ -319,9 +319,6 @@ Bega se go  [[Special:ListUsers/sysop|administrator]], o fana ka URL.',
 'namespaceprotected' => "Ga ona tokelo ya go fetola matlakala  go  '''$1''' .",
 
 # Login and logout pages
-'welcomecreation' => "Oa amogelwa, $1! ==
-
-Tšhupaleloko (''account'') ya gago e tlhodilwe. O seke wa lebala go fetola [[Special:Preferences|{{SITENAME}} dikgetho/thato tša gago]].",
 'yourname' => 'Leina la mošomiši:',
 'yourpassword' => 'Ditlhaka-tša-siphiri:',
 'yourpasswordagain' => 'Tlanya ditlhaka-tša-siphiri gape:',
@@ -650,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",
 
@@ -866,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,13 +903,11 @@ Ga eba o nyaka go hloša letlaka le go lenano la ditlhapetšo tša gago, šomiš
 'unwatching' => 'Tlhapetšo eya tlošwa ...',
 
 'enotif_reset' => 'Swaya matlakala kamoka awe oa etetšego',
-'enotif_newpagetext' => 'Le, ke letlakala le lempsha.',
 'enotif_impersonal_salutation' => '{{SITENAME}} mošumiši',
-'changed' => 'fetotšwe',
-'created' => 'tlhodilwe',
-'enotif_subject' => '{{SITENAME}} letkalala $PAGETITLE le $CHANGEDORCREATED ke $PAGEEDITOR',
 '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 b29de60..68f7974 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,14 +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.",
-'welcomecreation' => "== Benvenguda, $1 ! ==
-Vòstre compte d'utilizaire es estat creat.
-Doblidetz pas de personalizar vòstras [[Special:Preferences|{{SITENAME}} preferéncias]].",
-'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',
@@ -702,7 +717,7 @@ Doblidetz pas de personalizar vòstras [[Special:Preferences|{{SITENAME}} prefer
 '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.",
@@ -754,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}}",
@@ -763,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í :',
@@ -912,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.
@@ -959,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.',
@@ -985,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.
 
@@ -1171,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',
@@ -1246,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',
@@ -1255,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.',
@@ -1266,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 :',
@@ -1329,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 :",
@@ -1350,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',
@@ -1477,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',
@@ -1701,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.
@@ -1940,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',
@@ -1966,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}}.
@@ -2007,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',
@@ -2030,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.
@@ -2059,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",
@@ -2126,11 +2175,12 @@ 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_newpagetext' => 'Aquò es una pagina novèla.',
 'enotif_impersonal_salutation' => 'Utilizaire de {{SITENAME}}',
-'changed' => 'modificada',
-'created' => 'creada',
-'enotif_subject' => 'La pagina $PAGETITLE de {{SITENAME}} es estada $CHANGEDORCREATED per $PAGEEDITOR',
+'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',
@@ -2160,6 +2210,8 @@ $UNWATCHURL
 
 Retorn e assisténcia :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Suprimir la pagina',
@@ -2199,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}}]]) ;
@@ -2218,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 :',
@@ -2237,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',
@@ -2331,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)',
@@ -2373,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',
@@ -2429,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}}',
@@ -2510,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
@@ -2641,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.",
@@ -2794,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',
@@ -2847,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',
@@ -2865,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 :
 
@@ -2931,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',
@@ -2946,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',
@@ -3010,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',
 
@@ -3021,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',
@@ -3094,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',
 
@@ -3144,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',
 
@@ -3160,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',
@@ -3377,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',
@@ -3416,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',
@@ -3442,12 +3653,51 @@ 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',
+'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',
 'newuserlog-byemail' => 'senhal mandat per corrièr electronic',
+'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 cd36ce1..6e9b9cb 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,8 +389,9 @@ $messages = array(
 'newwindow' => '(ଏହା ନୂଆ ଉଇଣ୍ଡୋରେ ଖୋଲିବ)',
 'cancel' => 'ନାକଚ',
 'moredotdotdot' => 'ଅଧିକ...',
-'mypage' => 'ମୋ ପୃଷ୍ଠା',
-'mytalk' => 'ମୋ ଆଲୋଚନା',
+'morenotlisted' => 'ଆଉ ଅଧିକ ତାଲିକାଭୁକ୍ତ ହୋଇନାହିଁ...',
+'mypage' => 'ପୃଷ୍ଠା',
+'mytalk' => 'ଆଲୋଚନା',
 'anontalk' => 'ଏହି ଆଇ.ପି. ଠିକଣା ଉପରେ ଆଲୋଚନା',
 'navigation' => 'ଦିଗବାରେଣି',
 'and' => '&#32;ଓ',
@@ -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',
@@ -664,8 +666,9 @@ $2',
 
 ଆପଣ ଅଜଣା ଭାବରେ {{SITENAME}}କୁ ଯାଇପାରିବେ, କିମ୍ବା <span class='plainlinks'>[$1 ଆଉଥରେ]</span> ଆଗର ଇଉଜର ନାଆଁରେ/ଅଲଗା ନାଆଁରେ ଲଗଇନ କରିପାରିବେ ।
 ଜାଣିରଖନ୍ତୁ, କିଛି ପୃଷ୍ଠା ଲଗାଆଉଟ କଲାପରେ ବି ଆଗପରି ଦେଖାଯାଇପାରେ, ଆପଣ ବ୍ରାଉଜର କାସକୁ ହଟାଇଲା ଯାଏଁ ଏହା ଏମିତି ରହିବ ।",
-'welcomecreation' => '== $1!, ଆପଣଙ୍କ ଖାତାଟି ତିଆରି ହୋଇଗଲା==
-ତେବେ, ନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।',
+'welcomeuser' => 'ସ୍ଵାଗତ, $1!',
+'welcomecreation-msg' => 'ଆପଣଙ୍କ ଖାତାଟି ଖୋଲାଗଲା
+ନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।',
 'yourname' => 'ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:',
 'yourpassword' => 'ପାସୱାର୍ଡ଼',
 'yourpasswordagain' => 'ପାସୱାର୍ଡ଼ ଆଉଥରେ:',
@@ -769,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' => 'ପାସୱାର୍ଡ଼ ବଦଳାନ୍ତୁ',
@@ -832,6 +836,7 @@ $2
 'changeemail-oldemail' => 'ଏବେକାର ଇ-ମେଲ ଠିକଣା:',
 'changeemail-newemail' => 'ନୂଆ ଇ-ମେଲ ଠିକଣା:',
 'changeemail-none' => '(କିଛି ନାହିଁ)',
+'changeemail-password' => 'ଆପଣଙ୍କ {{SITENAME}} ପାସୱାର୍ଡ',
 'changeemail-submit' => 'ଇ-ମେଲ ପରିର୍ବତ୍ତନ କରନ୍ତୁ',
 'changeemail-cancel' => 'ନାକଚ',
 
@@ -962,7 +967,7 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'note' => "'''ଟୀକା:'''",
 'previewnote' => "'''ଜାଣିରଖନ୍ତୁ ଯେ, ଏହା କେବଳ ଏକ ଦେଖଣା ।'''
 ଆପଣ କରିଥିବା ବଦଳସବୁ ଏଯାଏଁ ସାଇତା ଯାଇନାହିଁ!",
-'continue-editing' => 'ବଦଳାà¬\87ବା à¬\9cାରି à¬°à¬\96ନ୍ତୁ',
+'continue-editing' => 'ବଦଳାà¬\87ବା à¬\9cାà¬\97ାà¬\95à­\81 à¬¯à¬¾à¬\85ନ୍ତୁ',
 'previewconflict' => 'ଉପରେ ଦିଶୁଥିବା ଏହି ଦେଖଣାକୁ ସାଇତିଲେ ଏହା ଏକାପରି ଦେଖାଯିବ ।',
 'session_fail_preview' => "'''କ୍ଷମା କରିବେ! ଅବଧି ତଥ୍ୟ ନଷ୍ଟ ହୋଇଯାଇଥିବାରୁ ଆମେ ଆପଣଙ୍କ ବଦଳସବୁକୁ ଗ୍ରହଣ କରିପାରିଲୁ ନାହିଁ ।'''
 ଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।
@@ -1021,7 +1026,6 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'template-protected' => '(କିଳାଯାଇଥିବା)',
 'template-semiprotected' => '(ଅଧା କିଳାଯାଇଥିବା)',
 'hiddencategories' => 'ଏହି ପୃଷ୍ଠାଟି {{PLURAL:$1|ଲୁଚାଯାଇଥିବା ଶ୍ରେଣୀ|$1ଟି ଲୁଚାଯାଇଥିବା ଶ୍ରେଣୀସମୂହ}} ଭିତରୁ ଗୋଟିଏ:',
-'nocreatetitle' => 'ପୃଷ୍ଠା ଗଢ଼ିବାକୁ ସୀମିତ କରାଯାଇଅଛି',
 'nocreatetext' => '{{SITENAME}} ନୂଆ ପୃଷ୍ଠା ତିଆରି କରିବାକୁ ବାରଣ କରିଅଛନ୍ତି ।
 ଆପଣ ପଛକୁ ଫେରି ଆଗରୁ ଥିବା ପୃଷ୍ଠାଟିଏର ସମ୍ପାଦନା କରିପାରିବେ କିମ୍ବା [[Special:UserLogin|ଲଗ ଇନ କରିପାରିବେ ବା ନୂଆ ଖାତାଟିଏ ତିଆରି କରିପାରିବେ]] ।',
 'nocreate-loggedin' => 'ଆପଣଙ୍କୁ ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରିବା ନିମନ୍ତେ ଅନୁମତି ମିଳି ନାହିଁ ।',
@@ -1046,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' => "'''ଚେତାବନୀ:''' ଏହି ପୃଷ୍ଠାରେ ଅନେକ ଗୁଡ଼ିଏ ମୂଲ୍ୟବାନ ପାର୍ସର ଫଙ୍କସନ କଲ ଅଛି ।
@@ -1206,10 +1216,9 @@ $1",
 'revdelete-only-restricted' => '$2 ଦିନ, $1 ବେଳେ ବସ୍ତୁଟି ଲୁଚାଇବା ବେଳେ ଅସୁବିଧାଟିଏ ଘଟିଲା: ଆପଣ ଦେଖଣା ବିକଳ୍ପମାନ ବ୍ୟବହାର ନକରି ବସ୍ତୁସବୁ ପରିଛାମାନଙ୍କ ଦେଇ ଦେଖାଯିବାରୁ ଅଟକାଇପାରିବେ ନାହିଁ ।',
 'revdelete-reason-dropdown' => '*ସାଧାରଣ ଲିଭାଇବା କାରଣମାନ
 ** ସତ୍ଵାଧିକାର ଉଲ୍ଲଙ୍ଘନ
-** ଭୁଲ ଆତ୍ମ ବିବରଣୀ
-** ସମ୍ଭାବିତ ଅପମାନଜନକ ବିବରଣୀ
-** ଭୁଲ ନାମ
-** ଆବଶ୍ୟକ ନାହିଁ',
+** ଭୁଲ ଆତ୍ମ ବିବରଣୀ କିମ୍ବା ଖରାପ ମନ୍ତବ୍ୟ
+** ଭୁଲ ବ୍ୟବହାରକାରୀ ନାମ
+** ପ୍ରାୟ ଭୁଲ ତଥ୍ୟ',
 'revdelete-otherreason' => 'ବାକି/ଅଧିକ କାରଣ:',
 'revdelete-reasonotherlist' => 'ଅଲଗା କାରଣ',
 'revdelete-edit-reasonlist' => 'ଲିଭାଇବା କାରଣମାନ ବଦଳାଇବେ',
@@ -1252,6 +1261,8 @@ $1",
 
 # Diffs
 'history-title' => '"$1" ର ପୁନରାବୃତି ଇତିହାସ',
+'difference-title' => '"$1"ର ପୁନରାବୃତିଗୁଡିକରେ ପାର୍ଥକ୍ୟ',
+'difference-title-multipage' => 'ପୃଷ୍ଠା "$1" ଏବଂ "$2" ମଧ୍ୟରେ ଥିବା ପାର୍ଥକ୍ୟ',
 'difference-multipage' => '(ପୃଷ୍ଠା ଭିତରେ ଥିବା ତଫାତ)‌',
 'lineno' => '$1 କ ଧାଡ଼ି:',
 'compareselectedversions' => 'ବଛାହୋଇଥିବା ସଙ୍କଳନ ଗୁଡ଼ିକୁ ତଉଲିବେ',
@@ -1259,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' => 'ଖୋଜା ଫଳାଫଳ',
@@ -1336,7 +1351,7 @@ $1",
 
 # Preferences page
 'preferences' => 'ପସନ୍ଦ',
-'mypreferences' => 'ମà­\8b à¬ªà¬¸à¬¨à­\8dଦ',
+'mypreferences' => 'ପସନ୍ଦ',
 'prefs-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
 'prefsnologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'prefsnologintext' => 'ବ୍ୟବହାରକାରୀଙ୍କ ପସନ୍ଦସବୁ ବଦଳାଇବା ପାଇଁ ଆପଣଙ୍କୁ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ଲଗ ଇନ]</span> କରିବାକୁ ପଡ଼ିବ ।',
@@ -1399,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' => 'ପୂର୍ବ ନିର୍ଦ୍ଧାରିତ',
@@ -1412,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' => 'ଭାଷା:',
@@ -1529,6 +1544,7 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'right-writeapi' => 'API ଲେଖାର ବ୍ୟବହାର',
 'right-delete' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ',
 'right-bigdelete' => 'ବଡ଼ ଇତିହାସ ନଥିବା ପୃଷ୍ଠାସବୁକୁ ଲିଭାଇଦେବେ',
+'right-deletelogentry' => 'କୌଣସି ଏକ ତାଲିକା ବିବରଣୀକୁ ଲିଭାଇବେ ଏବଂ ଏବଂ ଲିଭାଇବାରୁ ବାରଣ କରିବେ',
 'right-deleterevision' => 'ଏକ ପୃଷ୍ଠାର ନିର୍ଦ୍ଦିଷ୍ଟ ସଙ୍କଳନମାନ ଲିଭାଇବେ ଓ ଲିଭାଇବାରୁ ରୋକିବେ',
 'right-deletedhistory' => 'ଯୋଡ଼ାଯାଇଥିବା ଲେଖାକୁ ବାଦ ଦେଇ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାର ଇତିହାସ ଦେଖିବେ',
 'right-deletedtext' => 'ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଓ ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଭିତରର ସଙ୍କଳନର ବଦଳ ଦେଖିବେ',
@@ -1565,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' => 'ଏହି ପୃଷ୍ଠାଟି ପଢ଼ିବେ',
@@ -1639,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' => 'ଏଇମାତ୍ର ବଦଳାଯାଇଥିବା ପୃଷ୍ଠାର ଲିଙ୍କ',
@@ -1795,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ଟି ମିଳିଲା ନାହିଁ ।',
@@ -1804,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 କୁ ଫାଇଲ ନକଲ କରାଯାଇପାରିବ ନାହିଁ ।',
@@ -1813,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"କୁ ଖୋଲିପାରିଲୁ ନାହିଁ; ଏହା ପ୍ରକୃତରେ କିଳାଯାଇନାହିଁ ।',
@@ -1823,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
@@ -1933,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କୁ ଫେରାଇଦେବା',
@@ -2047,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|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}',
@@ -2067,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 ଗୋଟି ନେମସ୍ପେସ)',
@@ -2126,6 +2169,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 ଆପଣ ଲଗର ପ୍ରକାର ଅନୁସାରେ ବି ସେସବୁକୁ ବାଛି ପାରିବେ । ଇଉଜରନାଆଁଟି ଛୋଟ ଓ ବଡ଼ ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ, ପୃଷ୍ଠାର ନାଆଁ ସବୁ ବି ଛୋଟ ଓ ବଡ଼ ଇଂରାଜି ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ ।',
 'logempty' => 'ଲଗରେ ଥିବା ଲେଖା ସହ ମେଳଖାଉ ନାହିଁ ।',
 'log-title-wildcard' => 'ଏହି ଲେଖାରେ ଆରମ୍ଭ ହୋଇଥିବା ଶିରୋନାମାସବୁ ଖୋଜିବେ',
+'showhideselectedlogentries' => 'ବାଛିଥିବା ତାଲିକାକୁ ଦେଖାଇବେ/ଲୁଚାଇବେ',
 
 # Special:AllPages
 'allpages' => 'ସବୁ ପୃଷ୍ଠା',
@@ -2147,6 +2191,8 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'allpages-hide-redirects' => 'ପୁନଃପ୍ରେରଣସମୂହକୁ ଲୁଚାଇବେ',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'ଆପଣ ଏହି ପୃଷ୍ଠାର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ଦେଖୁଛନ୍ତି, ଯାହାକି $1 ପୁରୁଣା ହୋଇଥାଇପାରେ ।',
+'cachedspecial-viewing-cached-ts' => 'ଆପଣ ଏହି ପୃଷ୍ଠାର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ଦେଖୁଛନ୍ତି, ଯାହାକି ପ୍ରକୃତରେ ସଂପୂର୍ଣ ନ ହୋଇଥାଇପାରେ ।',
 'cachedspecial-refresh-now' => 'ନୂତନତମ ଦେଖନ୍ତୁ ।',
 
 # Special:Categories
@@ -2170,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' => 'କେବଳ ହୋଷ୍ଟ ନାମର ଆରମ୍ଭରେ ୱାଇଲ୍ଡକାର୍ଡ଼ ଦେଖାଯିବ ।',
 
@@ -2189,10 +2235,6 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'activeusers-hidesysops' => 'ପରିଚାଳକମାନଙ୍କୁ ଲୁଚାଇବେ',
 'activeusers-noresult' => 'ଜଣେ ବି ସଭ୍ୟ ମିଳିଲେ ନାହିଁ ।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ବ୍ୟବହାରକାରୀ ତିଆରି ଲଗ',
-'newuserlogpagetext' => 'ସଭ୍ୟଙ୍କର ଖାତା ଗଠନ ପାଇଁ ଏକ ଇତିହାସ ଅଛି ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ସଭ୍ୟ ଗୋଠ ଅଧିକାରସମୂହ',
 'listgrouprights-summary' => 'ତଳେ ଉଇକି ସ୍ଥିର କରାଯାଇଥିବା ଏକ ଏକ ବ୍ୟବହାରକାରୀ ଗୋଠର ତାଲିକା ଦିଆଯାଇଛି, ସେଥିରେ ସେମାନଙ୍କ ବ୍ୟବହାର ଅଧିକାର ବାବଦରେ ମଧ୍ୟ ଦିଆଯାଇଛି ।
@@ -2216,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" ସଭ୍ୟଙ୍କ ଠାରୁ ଇ-ମେଲ କରିବେ',
@@ -2250,15 +2293,15 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 
 # Watchlist
 'watchlist' => 'ଦେଖାତାଲିକା',
-'mywatchlist' => 'ମà­\8bର à¬¦à­\87à¬\96ାତାଲିକା',
+'mywatchlist' => 'ଦà­\87à¬\96ଣାତାଲିକା',
 'watchlistfor2' => '$1 $2 ପାଇଁ',
 'nowatchlist' => 'ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ କିଛି ବି ଜିନିଷ ନାହିଁ ।',
 'watchlistanontext' => 'ଆପଣା ଦେଖଣାତାଲିକାରେ କିଛି ସମ୍ପାଦନା କରିବା ନିମନ୍ତେ ଦୟାକରି  $1 କରନ୍ତୁ ।',
 '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,16 +2329,23 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 
 'enotif_mailer' => '{{SITENAME}} ସୂଚନା ମେଲ ପ୍ରେରକ',
 'enotif_reset' => 'ସବୁଯାକ ଦେଖାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଚିହ୍ନିତ କରିବେ',
-'enotif_newpagetext' => 'ଏହା ଏକ ନୂଆ ପୃଷ୍ଠା ।',
 'enotif_impersonal_salutation' => '{{SITENAME}} ବ୍ୟବହାରକାରୀ',
-'changed' => 'ବଦଳାଗଲା',
-'created' => 'ତିଆରି କରାଗଲା',
-'enotif_subject' => ' $PAGEEDITORଙ୍କ ଦେଇ {{SITENAME}} ପୃଷ୍ଠାଟି $PAGETITLE  $CHANGEDORCREATED',
+'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  ଦେଖନ୍ତୁ ।
 
@@ -2307,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' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ',
@@ -2363,6 +2405,8 @@ $UNWATCHURL ଦେଖନ୍ତୁ
 'rollback' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବଦଳ',
 'rollback_short' => 'ପୁରାପୁରି ପଛକୁ ଫେରିଯିବେ',
 'rollbacklink' => 'ପୁରାପୁରି ପଛକୁ ଫେରିଯିବେ',
+'rollbacklinkcount' => '{{PLURAL:$1|edit|edits}} $1 ପଛକୁ ଫେରାଇବେ',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|edit|edits}} $1ରୁ ଅଧିକ ପଛକୁ ଫେରାଇବେ',
 'rollbackfailed' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବିଫଳ ହେଲା',
 'cantrollback' => 'ବଦଳକୁ ପଛକୁ ଫେରାଇ ପାରିବେ ନାହିଁ;
 ଶେଷ ଦାତାଜଣଙ୍କ ଏହି ପୃଷ୍ଠାର ଜଣେମାତ୍ର ଦାତା ।',
@@ -2395,6 +2439,8 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'prot_1movedto2' => '[[$1]] ପୃଷ୍ଠାଟି [[$2]] କୁ ଘୁଞ୍ଚାଇ ଦିଆଗଲା',
 'protect-badnamespace-title' => 'କିଳାହୋଇନଥିବା ନେମସ୍ପେସ',
 'protect-badnamespace-text' => 'ଏହି ନେମସ୍ପେସଥିବା ପୃଷ୍ଠାସବୁକୁ ସାଇତାଯାଇପାରିବ ନାହିଁ ।',
+'protect-norestrictiontypes-text' => 'ଏହି ପୃଷ୍ଠାଟିକୁ କିଳାଯାଇପାରିବ ନାହିଁ କାରଣ ଏହାର କୌଣସି ସୁରକ୍ଷା ପ୍ରକାର ନାହିଁ ।',
+'protect-norestrictiontypes-title' => 'କିଳାଯାଇପାରୁନଥିବା ପୃଷ୍ଠା',
 'protect-legend' => 'କିଳଣାକୁ ଥୟ କରିବେ',
 'protectcomment' => 'କାରଣ:',
 'protectexpiry' => 'ଅଚଳ ହେବ:',
@@ -2481,7 +2527,7 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'undeletedrevisions-files' => '{{PLURAL:$1|ଗୋଟିଏ ସଂସ୍କରଣ|$1 ଗୋଟି ସଂସ୍କରଣ}} ଓ {{PLURAL:$2|ଗୋଟିଏ ଫାଇଲ|$2 ଗୋଟି ଫାଇଲ}} ପୁନସ୍ଥାପନ କରାଗଲା',
 'undeletedfiles' => '{{PLURAL:$1|ଗୋଟିଏ ଫାଇଲ|$1 ଗୋଟି ଫାଇଲ}} ପୁନସ୍ଥାପନ କରାଗଲା',
 'cannotundelete' => 'ଲିଭାଇବାରୁ ରୋକିବା ବିଫଳ ହେଲା;
-ଏହାକୁ ଆଗରୁ କେହି ଜଣେ ଲିଭାଇବାରୁ ରୋକି ସାରିଅଛି ।',
+$1',
 'undeletedpage' => "'''$1ର ପୁନସ୍ଥାପନ କରାଗଲା'''
 
 ନଗଦ ଲିଭାଇବା ଓ ପୁନସ୍ଥାପନ ପାଇଁ [[Special:Log/delete|ଲିଭାଇବା ଇତିହାସ]] ଦେଖନ୍ତୁ ।",
@@ -2513,9 +2559,9 @@ $1',
 'blanknamespace' => '(ମୂଳ)',
 
 # Contributions
-'contributions' => 'ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ',
+'contributions' => '{{GENDER:$1|User}}ଙ୍କ ଅବଦାନ',
 'contributions-title' => '$1 ପାଇଁ ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ',
-'mycontris' => 'ମà­\8b à¬\85ବଦାନ',
+'mycontris' => 'ଅବଦାନ',
 'contribsub2' => '$1 ($2) ପାଇଁ',
 'nocontribs' => 'ଏହି ନିର୍ଣ୍ଣାୟକବଳୀ ନିମନ୍ତେ କିଛି ବି ବଦଳ ମେଳ ଖାଇଲା ନାହିଁ ।',
 'uctop' => '(ଉପର)',
@@ -2653,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' => 'ନୂଆ ଖାତା ଖୋଲିବା ଅଚଳ କରାଯାଇଅଛି',
@@ -2792,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' => 'ନୂଆ ଫାଇଲ ଏକ୍ସଟେନସନ ଏହାର ପ୍ରକାର ସାଙ୍ଗରେ ମେଳ ଖାଉନାହିଁ',
@@ -2815,6 +2862,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 ପୃଷ୍ଠା ରପ୍ତାନି କରିବା ନିମନ୍ତେ ତଳେ ଥିବା ଟେକ୍ସଟ ଘରେ ନାମ ଦିଅନ୍ତୁ, ଧାଡ଼ିପ୍ରତି ଗୋଟିଏ ଲେଖାଏଁ ନାମ, ଆଉ ଆପଣ ଏବେକାର ସଂସ୍କରଣ ଚାହୁଁଛନ୍ତି ବା ପୁରୁଣା ସଂସ୍କରଣମାନ ଚାହୁଁଛନ୍ତି, ପୃଷ୍ଠାର ଇତିହାସ ସହ, କିମ୍ବା ଶେଷ ବଦଳ ବାବଦରେ ଏକ ବିବରଣୀ ସହ ଏବେକାର ସଂସ୍କରଣ ଦିଅନ୍ତୁ ।
 
 ଶେଷ କ୍ଷେତ୍ରରେ ଆପଣ ଏକ ଲିଙ୍କ ବ୍ୟବହାର କରିପାରିବେ, ଯଥା ଏକ ପୃଷ୍ଠା ପାଇଁ [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] "[[{{MediaWiki:Mainpage}}]]" ।',
+'exportall' => 'ସମସ୍ତ ପୃଷ୍ଠାଗୁଡିକୁ ରପ୍ତାନି କରିବେ',
 'exportcuronly' => 'କେବଳ ଏବେକର ସଂସ୍କରଣରେ ଭରିଥାଏ, ପୁରା ଇତିହାସରେ ନୁହେଁ',
 'exportnohistory' => "----
 '''ସୂଚନା:''' ଦେଖଣାରେ ଅସୁବିଧା ହେବା କାରଣରୁ ପୃଷ୍ଠାର ପୁରା ଇତିହାସ ରପ୍ତାନି କରିବା ଅଚଳ କରାଯାଇଛି ।",
@@ -2870,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|ରପ୍ତାନି ସୁବିଧା]] ବ୍ୟବହାର କରି ମୂଳ ଉଇକିରୁ ଫାଇଲଟି ରପ୍ତାନି କରନ୍ତୁ ।
@@ -2903,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' => 'ଇତିହାସ ଆହରଣ',
@@ -2912,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 ଠିକଣାର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାଟି ବଦଳାଇବା ପାଇଁ ଚେଷ୍ଟା କରୁଛନ୍ତି',
@@ -3005,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' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରାଗଲା',
@@ -3028,6 +3128,8 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'markedaspatrollederror' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିପାରୁଲୁଁ ନାହିଁ',
 'markedaspatrollederrortext' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଏକ ସଂସ୍କରଣ ଦେବାକୁ ପଡ଼ିବ ।',
 'markedaspatrollederror-noautopatrol' => 'ଆପଣ ନିଜର ସମ୍ପାଦନାସବୁକୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିପାରିବେ ନାହିଁ ।',
+'markedaspatrollednotify' => '$1 ପାଇଁ ଏହି ବଦଳଟିକୁ ଶ୍ରେଣୀଗତ ବୋଲି ଚିହ୍ନଟ କରାଯାଇଛି ।',
+'markedaspatrollederrornotify' => 'ଶ୍ରେଣୀବିଭାଗ କରିହେଲାନି ।',
 
 # Patrol log
 'patrol-log-page' => 'ଜଗିବା ଇତିହାସ',
@@ -3061,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.',
@@ -3070,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' => 'ନୁତନ ଫାଇଲଗୁଡିକର ଗ୍ୟାଲେରୀ',
@@ -3088,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' => 'ଗଢ଼ଣଟି ଏମିତି ହେବ:
@@ -3584,6 +3692,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[ଉଇକି-ଉଇକି ଭିତରେ ଟ୍ରାନ୍ସକ୍ଲୁଡ଼ିଙ୍ଗ ଅଚଳ କରାଯାଇଛି]',
 'scarytranscludefailed' => '[$1 ପାଇଁ ଛାଞ୍ଚକୁ ପାଇବା ସମ୍ଭବ ହେଲାନାହିଁ]',
+'scarytranscludefailed-httpstatus' => '[Template fetch failed for $1: HTTP $2]',
 'scarytranscludetoolong' => '[URLଟି ଖୁବ ଲମ୍ବା]',
 
 # Delete conflict
@@ -3612,7 +3721,7 @@ $5
 'imgmultigoto' => '$1 ପୃଷ୍ଠାକୁ ଯିବେ',
 
 # Table pager
-'ascending_abbrev' => 'asc',
+'ascending_abbrev' => 'ସାନରୁ ବଡ କ୍ରମରେ',
 'descending_abbrev' => 'ବଖାଣ',
 'table_pager_next' => 'ପର ପୃଷ୍ଠା',
 'table_pager_prev' => 'ଆଗ ପୃଷ୍ଠା',
@@ -3695,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 ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଦେଖନ୍ତୁ ।
@@ -3703,6 +3813,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'version-software' => 'ଇନଷ୍ଟଲ ହୋଇଥିବା ସଫ୍ଟୱାର',
 'version-software-product' => 'ଉତ୍ପାଦ',
 'version-software-version' => 'ସଂସ୍କରଣ',
+'version-entrypoints' => 'ନିବେଶ ହେଉଥିବା ସ୍ଥାନର URLଗୁଡିକ',
 'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
 'version-entrypoints-header-url' => 'ଇଉଆରଏଲ',
 
@@ -3833,11 +3944,15 @@ 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 ଏଠାରେ ଅସୁବିଧାଟି ଜଣାନ୍ତୁ] । 
@@ -3870,10 +3985,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 d9c6daf..e89ba24 100644 (file)
@@ -100,12 +100,12 @@ $messages = array(
 'tog-newpageshidepatrolled' => 'Басгæрст фæрстæ ног фæрсты номхыгъдæй æмбæхс',
 'tog-extendwatchlist' => 'Стырдæр цæстдард номхыгъд алы ивдимæ дæр, æрмæст фæстагимæ нал.',
 'tog-usenewrc' => 'Фæстаг æмæ цæстдард ивдтытæ фарсмæ гæсгæ иу кæнæт (домы JavaScript)',
-'tog-numberheadings' => 'Сæргæндты автоматикон нумераци',
+'tog-numberheadings' => 'Сæртæн хæдæвзæргæ номыр æвæрын',
 'tog-showtoolbar' => 'Æвдисын ивыны панел (домы JavaScript)',
 'tog-editondblclick' => 'Фæрстæ дыкъæппæй ив (JavaScript)',
 'tog-editsection' => 'Равдис «баив æй» æрвитæн тексты алы хайы дæр',
-'tog-editsectiononrightclick' => 'СæÑ\80гондÑ\8bл Ñ\80аÑ\85из Ã¦Ñ\80кÑ\8aæппæй Ñ\84аÑ\80Ñ\81Ñ\8b Ñ\85æйÑ\82Ñ\82æ Ð¸Ð² (JavaScript)',
-'tog-showtoc' => 'Сæргæндты номхыгъд æвдис (æртæ сæргондæй фылдæр цы фарсы ис, уым)',
+'tog-editsectiononrightclick' => 'ХайÑ\8b Ñ\81æÑ\80Ñ\8bл Ñ\80аÑ\85иÑ\81 Ã¦Ñ\80кÑ\8aæппæй Ð¸Ð²Ñ\8bнÑ\8b Ñ\84адаÑ\82 Ð±Ð°Ð¸Ñ\83 ÐºÃ¦Ð½Ñ\8bн (домÑ\8b JavaScript)',
+'tog-showtoc' => 'Сæрты номхыгъд æвдисын (æртæйæ фылдæрсæр цы фарсы ис, уым)',
 'tog-rememberpassword' => 'Бахъуыды мæ кæнæд ацы браузер ($1 {{PLURAL:$1|бонмæ|бонмæ}})',
 'tog-watchcreations' => 'Æз цы фæрстæ аразын æмæ цы файлтæ бавгæнын, уыдон мæ цæстдард уæт.',
 'tog-watchdefault' => 'Æз цы фæрстæ æмæ цы файлтæ ивын, уыдон мæ цæстдард уæт',
@@ -140,7 +140,7 @@ $messages = array(
 
 'underline-always' => 'Æдзух',
 'underline-never' => 'Никуы',
-'underline-default' => 'Ð\91Ñ\80аÑ\83зеÑ\80Ñ\8b ÐºÑ\83Ñ\8bд Ñ\83',
+'underline-default' => 'ЦÑ\8aаÑ\80 Ã¦Ð²Ð¸ Ñ\81гаÑ\80æнмæ Ð³Ã¦Ñ\81гæ',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Ивæн бынаты шрифты стил:',
@@ -225,8 +225,8 @@ $messages = array(
 'newwindow' => '(кæны ног рудзынджы)',
 'cancel' => 'Ныууадзын',
 'moredotdotdot' => 'Фылдæр…',
-'mypage' => 'Ð\9cæ Ñ\84арс',
-'mytalk' => 'Ð\9cæ Ð½ыхас',
+'mypage' => 'Фарс',
+'mytalk' => 'Ð\9dыхас',
 'anontalk' => 'Ацы IP-адрисы тæрхон',
 'navigation' => 'Навигаци',
 'and' => '&#32;æмæ',
@@ -243,7 +243,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' => 'Рацаразын',
@@ -258,6 +258,7 @@ $messages = array(
 'namespaces' => 'Номдæттæ',
 'variants' => 'Варианттæ',
 
+'navigation-heading' => 'Навигацион меню',
 'errorpagetitle' => 'Рæдыд',
 'returnto' => 'Фæстæмæ $1 фарсмæ.',
 'tagline' => '{{grammar:ablative|{{SITENAME}}}}',
@@ -277,8 +278,8 @@ $messages = array(
 'create' => 'Скæнын',
 'editthispage' => 'Ивын ацы фарс',
 'create-this-page' => 'Ацы фарс скæнын',
-'delete' => 'Ð\90ппаÑ\80',
-'deletethispage' => 'Аппарын ацы фарс',
+'delete' => 'СÑ\85аÑ\84Ñ\8bн',
+'deletethispage' => 'Ацы фарс схафын',
 'undelete_short' => 'Рацаразын {{PLURAL:$1|иу ивд|$1 ивды}}',
 'viewdeleted_short' => 'Кæсын {{PLURAL:$1|иу хафт ивд|$1 хафт ивдтытæ}}',
 'protect' => 'Сæхгæнын',
@@ -305,7 +306,7 @@ $messages = array(
 'categorypage' => 'Категорийы фарс фен',
 'viewtalkpage' => 'Тæрхон фен',
 'otherlanguages' => 'Æндæр æвзæгтыл',
-'redirectedfrom' => '(Ацы уацæй æрвыст: «$1»)',
+'redirectedfrom' => '({{grammar:ablative|$1}} æрвыст)',
 'redirectpagesub' => 'Рарвысты фарс',
 'lastmodifiedat' => 'Ацы фарс фæстаг хатт ивд æрцыд: $1, $2.',
 'viewcount' => 'Ацы фарс домд æрцыд {{PLURAL:$1|иу хатт|$1 хатты}}.',
@@ -328,15 +329,15 @@ $1',
 'copyright' => 'Лицензи: $1.',
 'copyrightpage' => '{{ns:project}}:Авторы бартæ',
 'currentevents' => 'Ног хабæрттæ',
-'currentevents-url' => 'Project:Xabar',
-'disclaimers' => 'Бæрн нæ исыны тыххæй',
-'disclaimerpage' => 'Project:Ð\9dæ Ð±Ã¦Ñ\80н Ð¸Ñ\81Ñ\8bнÑ\8b Ñ\82Ñ\8bÑ\85Ñ\85æй',
+'currentevents-url' => 'Project:Ног хабæрттæ',
+'disclaimers' => 'Бæрн',
+'disclaimerpage' => 'Project:Ð\91æÑ\80н',
 'edithelp' => 'Ивынæн æххуыс',
-'edithelppage' => 'Help:Ивд',
-'helppage' => 'Help:СæÑ\80гæндÑ\82æ',
+'edithelppage' => 'Help:Ивын',
+'helppage' => 'Help:Ð\9cидиÑ\81',
 'mainpage' => 'Сæйраг фарс',
 'mainpage-description' => 'Сæйраг фарс',
-'policy-url' => 'Project:УагæвæÑ\80д',
+'policy-url' => 'Project:ФæÑ\82к',
 'portal' => 'Архайджыты æхсæнад',
 'portal-url' => 'Project:Архайджыты æхсæнад',
 'privacy' => 'Хибардзинады политикæ',
@@ -350,9 +351,9 @@ $1',
 'versionrequiredtext' => 'Хъæуы MediaWiki-йы $1 фæлтæр, цæмæй ацы фарсæй архайæн уа.
 Кæс [[Special:Version|фæлтæры фарс]].',
 
-'ok' => 'Ð\90Ñ\84Ñ\82æ Ñ\83æд!',
+'ok' => 'ХоÑ\80з',
 'pagetitle' => '$1 — {{SITENAME}}',
-'retrievedfrom' => 'РаÑ\82æдзæн: Â«$1»',
+'retrievedfrom' => 'Ð\98Ñ\81Ñ\82 Ã¦Ñ\80Ñ\86Ñ\8bд {{grammar:ablative|"$1"}}',
 'youhavenewmessages' => 'Райстай $1 ($2).',
 'newmessageslink' => 'ног фыстæгтæ',
 'newmessagesdifflink' => 'фæстаг ивд',
@@ -366,32 +367,32 @@ $1',
 'viewsourceold' => 'Код кæсын',
 'editlink' => 'ивын',
 'viewsourcelink' => 'Код кæсын',
-'editsectionhint' => 'Ð\98в Ñ\85ай: $1',
-'toc' => 'Сæргæндтæ',
+'editsectionhint' => 'Хай Ð¸Ð²Ñ\8bн: $1',
+'toc' => 'Сæртæ',
 'showtoc' => 'равдисын',
 'hidetoc' => 'бамбæхсын',
 'collapsible-collapse' => 'Стухын',
-'collapsible-expand' => 'Райтынг',
-'thisisdeleted' => 'Фенын æви рацаразын $1?',
+'collapsible-expand' => 'Райтынг кæнын',
+'thisisdeleted' => '$1 фенын хъæуы, æви рацаразын ?',
 'viewdeleted' => '$1 фенын дæ фæнды?',
 'restorelink' => '{{PLURAL:$1|иу хафт ивд|$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-лæсæн',
-'red-link-title' => '$1 (фыст нæу)',
+'site-rss-feed' => '{{grammar:genitive|$1}} RSS лæсæн',
+'site-atom-feed' => '{{grammar:genitive|$1}} Atom лæсæн',
+'page-rss-feed' => '"{{grammar:genitive|$1}}" RSS лæсæн',
+'page-atom-feed' => '"{{grammar:genitive|$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' => 'Архайæджы фарс',
-'nstab-media' => 'Мультимеди',
+'nstab-media' => 'Медиа фарс',
 'nstab-special' => 'Сæрмагонд фарс',
-'nstab-project' => 'Ð\9fÑ\80оекÑ\82Ñ\8b Ñ\82Ñ\8bÑ\85Ñ\85æй',
+'nstab-project' => 'Ð\9fÑ\80оекÑ\82Ñ\8b Ñ\84аÑ\80Ñ\81',
 'nstab-image' => 'Файл',
 'nstab-mediawiki' => 'Фыстæг',
 'nstab-template' => 'Хуызæг',
@@ -443,19 +444,19 @@ $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' => 'Хук æй хафын нæ бауагъта.
 Уæлæмхасæн æмбарынгæнæн нæ радта.',
-'badtitle' => 'Ã\86нæмбæлон Ñ\81æÑ\80гонд',
+'badtitle' => 'Ã\86взæÑ\80 Ð½Ð¾Ð¼',
 'badtitletext' => 'Æрдомд фарсы ном уыд рæдыдимæ кæнæ афтид кæнæ та йæ æхсæн-æвзаг æви йæ интервики æрвитæн раст нæ уыд.
 Гæнæн ис Номы ис ахæм дамгъæтæ, кæдон уым æвæрын нæй гæнæн.',
 'perfcached' => 'Бындæр цы рардтæ ис, уыдон сты кешгонд æмæ гæнæн ис базæронд сты. Кешы гæнæн ис уа æппæты фылдæр {{PLURAL:$1|иу фæстиуæг|$1 фæстиуæджы}}.',
@@ -470,7 +471,7 @@ $1',
 'actionthrottled' => 'Архайд урæд æрцыд',
 'actionthrottledtext' => 'Спамы ныхмæ тохы тыххæй дæуæн нæй гæнæн аразын ацы архайд æвæрд лимитæй фылдæр гыццыл рæстæджы. Ды уыцы лимит сæххæст кодтай.
 Дæ хорзæхæй, бафæлвар нæуæгæй цалдæр минуты фæстæ.',
-'protectedpagetext' => 'Ацы фарс у ивынæй æхгæд.',
+'protectedpagetext' => 'Ацы фарс ивынæй æмæ æндæр митæй æхгæд у.',
 'viewsourcetext' => 'Ацы фарсы код фенæн æмæ халдих кæнæн ис:',
 'viewyourtext' => "Дæ бон у фенын æмæ скопи кæнын ацы фарсмæ '''цы ивдтытæ сарæзтай''', уыдон бындур текст :",
 'protectedinterface' => 'Ацы фарсы ис ацы викийы софты интерфейсæн текст æмæ у æхгæд, цæмæй йæ фехалæн ма уа.
@@ -505,9 +506,9 @@ $2',
 
 Дæ бон у дарддæр архайай {{grammar:genitive|{{SITENAME}}}} æнæномæй, æви та <span class='plainlinks'>[$1 фæстæмæ бахизын]</span> раздæры номæй кæнæ та æндæр номæй.
 Дæ сæры дар æмæ иуæй иу фæрстæ гæнæн ис æвдыст цæуой афтæ, цымæ нырмæ дæр нæ рахызтæ. Уый тыххæй дæ браузеры кеш сафтид кæн.",
-'welcomecreation' => '== Ӕгас цу, $1! ==
-Дæ аккаунт арæзт æрцыдис.
\9cа Ð´Ã¦ Ñ\84еÑ\80оÑ\85 Ñ\83æÑ\82 Ã¦Ñ\80кæÑ\81Ñ\8bн Ð´Ã¦ [[Special:Preferences|{{grammar:genitive|{{SITENAME}}}} Ñ\84адæÑ\82тæм]].',
+'welcomeuser' => 'Æгас цу, $1!',
+'welcomecreation-msg' => 'Дæ аккаунт арæзт æрцыдис.
\9cа Ð´Ã¦ Ñ\84еÑ\80оÑ\85 Ñ\83æÑ\82 Ã¦Ñ\80кæÑ\81Ñ\8bн Ð´Ã¦ [[Special:Preferences|{{grammar:genitive|{{SITENAME}}}} Ñ\83агæвæÑ\80дтæм]].',
 'yourname' => 'Фæсномыг:',
 'yourpassword' => 'Пароль:',
 'yourpasswordagain' => 'Дæ пароль иу хатт ма:',
@@ -521,7 +522,7 @@ $2',
 'loginprompt' => 'Дæ cookies хъуамæ иу уой цæмæй дæ бон уа бахизын {{grammar:allative|{{SITENAME}}}}.',
 'userlogin' => 'Бахизын / регистраци кæнын',
 'userloginnocreate' => 'Бахизын',
-'logout' => 'Ð\9dомÑ\81Ñ\83Ñ\81æг Ñ\81Ñ\83ын',
+'logout' => 'РаÑ\85изын',
 'userlogout' => 'Рахизын',
 'notloggedin' => 'Системæйæн дæхи нæ бацамыдтай',
 'nologin' => "Регистрацигонд нæма дæ? '''$1'''.",
@@ -547,7 +548,7 @@ $2',
 'nocookiesfornew' => 'Архайæджы аккаунт нæ сарæзт ис, уымæн æмæ йын мах нæ базыдтам йæ равзæрæн.
 Бацархай, цæмæй cookies иу уой, анæуæг кæн ацы фарс æмæ ногæй бафæлвар.',
 'noname' => 'Раст фæсномыг нæ ныффыстай.',
-'loginsuccesstitle' => 'Бахизын рауадис',
+'loginsuccesstitle' => 'Бахызтæ',
 'loginsuccess' => "'''Ныр ды дæ хыст {{grammar:genitive|{{SITENAME}}}} куыд \"\$1\".'''",
 'nosuchuser' => 'Нæй ахæм архайæг "$1" номимæ.
 Архайджыты нæмттæ хатынц дамгъæты регистр.
@@ -583,7 +584,7 @@ $2',
 'emailauthenticated' => 'Дæ e-mail уыд бæлвырдгонд $2 $3 сахатыл.',
 'emailnotauthenticated' => 'Дæ e-mail адрис нырмæ нæу бæлвырдгонд.
 Иу e-mail дæр дæм нæ уыдзæн æрвыст ацы функцитæй.',
-'noemailprefs' => 'Ð\91аÑ\84Ñ\8bÑ\81Ñ\81 e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ Ñ\84адæÑ\82ты, цæмæй ацы функцитæ кусой.',
+'noemailprefs' => 'Ð\91аÑ\84Ñ\8bÑ\81Ñ\81 e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ Ñ\83агæвæÑ\80дты, цæмæй ацы функцитæ кусой.',
 'emailconfirmlink' => 'Дæ электронон посты адрис сфидар кæн',
 'invalidemailaddress' => 'E-mail нæй гæнæн райсын, уымæн æмæ йæ формат раст нæу.
 Бафысс раст форматы адрис кæнæ та йæ сафтид кæн.',
@@ -628,7 +629,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' => 'Парол фæлварын ацы викийы хицæн у.',
@@ -665,6 +666,7 @@ $2
 'changeemail-oldemail' => 'Нырыккон e-mail адрис:',
 'changeemail-newemail' => 'Ног e-mail адрис:',
 'changeemail-none' => '(нæй)',
+'changeemail-password' => 'Дæ {{grammar:genitive|{{SITENAME}}}} пароль:',
 'changeemail-submit' => 'E-mail фæивын',
 'changeemail-cancel' => 'Ныууадзын',
 
@@ -683,12 +685,12 @@ $2
 'nowiki_tip' => 'Ницæмæ дарын вики формат',
 'image_tip' => 'Æфтыд файл',
 'media_tip' => 'Файлмæ æрвитæн',
-'sig_tip' => 'Дæ ырфыст рæстæгимæ',
+'sig_tip' => 'Дæ къухæрфыст, рæстæгимæ',
 'hr_tip' => 'Горизонталон хахх (арæх дзы ма пайда кæн)',
 
 # Edit pages
 'summary' => 'Бындур:',
-'subject' => 'Темæ/сæргонд:',
+'subject' => 'Темæ/сæр:',
 'minoredit' => 'Ай чысыл ивд у.',
 'watchthis' => 'Цæст дарын ацы фарсмæ',
 'savearticle' => 'Бавæрын',
@@ -717,7 +719,7 @@ $2
 * Блокы мысан: $7
 
 Дæ бон у бадзурай {{grammar:allative|$1}} кæнæ [[{{MediaWiki:Grouppage-sysop}}|радгæсмæ]], цæмæй блокы тыххæй аныхас кæнай.
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\84адæÑ\82ты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\83агæвæÑ\80дты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
 Дæ нырыккон IP адрис у $3, æмæ блокы бæрæггæнæн у #$5.
 Дæ хорзæхæй, уæлдæр цы детальтæ ис, уыдон иу дæ домæнмæ бафтау.",
 'autoblockedtext' => "'''Дæ IP адрис йæхæдæг ныблок ис, уымæн æмæ ууылты архайдта æндæр архайæг, кæй ныблок кодта $1.'''
@@ -731,21 +733,21 @@ $2
 
 Дæ бон у бадзурай {{grammar:allative|$1}} кæнæ æндæр [[{{MediaWiki:Grouppage-sysop}}|радгæсмæ]], цæмæй блокы тыххæй аныхас кæнай.
 
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\84адæÑ\82ты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\83агæвæÑ\80дты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
 
 Дæ нырыккон IP адрис у $3, æмæ блокы бæрæггæнæн у #$5.
 Дæ хорзæхæй, уæлдæр цы детальтæ ис, уыдон иу дæ домæнмæ бафтау.",
 'blockednoreason' => 'аххос амынд не ’рцыд',
 'whitelistedittext' => 'Дæуæн хъæуы $1, цæмæй фæртæ ивай.',
 'confirmedittext' => 'Фæрстæ ивыны размæ ды хъуамæ сбæлвырд кæнай дæ e-mail адрис.
\94æ Ñ\85æÑ\80зæÑ\85æй, Ñ\81æвæÑ\80 Ã¦Ð¼Ã¦ Ñ\81бæлвÑ\8bÑ\80д ÐºÃ¦Ð½ Ð´Ã¦ e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ [[Special:Preferences|Ñ\84адæÑ\82ты]].',
\94æ Ñ\85æÑ\80зæÑ\85æй, Ñ\81æвæÑ\80 Ã¦Ð¼Ã¦ Ñ\81бæлвÑ\8bÑ\80д ÐºÃ¦Ð½ Ð´Ã¦ e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ [[Special:Preferences|Ñ\83агæвæÑ\80дты]].',
 'nosuchsectiontitle' => 'Хай нæ уард кæны',
 'nosuchsectiontext' => 'Ды фæлвардтай ахæм фарс ивын, кæцы нæй.
 Гæнæн ис, цалынмæ ды фарс кастæ, уый хаст кæнæ хафт æрцыдис.',
 'loginreqtitle' => 'Хъæуы бахизын',
 'loginreqlink' => 'бахизын',
 'loginreqpagetext' => 'Дæуæн хъæуы $1 цæмæй æндæр фæрстæ кæсай.',
-'accmailtitle' => 'Пароль рарвыст у.',
+'accmailtitle' => 'Пароль æрвыст æрцыд.',
 'accmailtext' => "[[User talk:$1|{{grammar:dative|$1}}]] халæй ист пароль æрвыст æрцыд $2-мæ.
 
 Ацы ног аккаунты пароль гæнæн ис фæивын ''[[Special:ChangePassword|пароль ивæн варсыл]]'' бахизыны фæстæ.",
@@ -762,12 +764,20 @@ $2
 кæнæ [{{fullurl:{{FULLPAGENAME}}|action=edit}} скæнын ацы фарс]</span>.',
 'noarticletext-nopermission' => 'Ацы фарсы нырмæ текст нæй.
 Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты, кæнæ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты]</span>, фæлæ дын йæ саразыны бар нæй.',
-'note' => "'''Бафиппай:'''",
+'missing-revision' => '"{{grammar:genitive|{{PAGENAME}}}}" фарсæн $1-æм фæлтæр нæй.
+
+Ай арæх æрцæуы, исчи хафт фарсы зæронд историйы æрвитæны фæдыл куы ацæуы.
+Фылдæр гæнæн ис базонын [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} хафыны логы].',
+'userpage-userdoesnotexist-view' => 'Архайæджы аккаунт "$1" регистрацигонд нæу.',
+'updated' => '(Ноггонд)',
+'note' => "'''Фиппаинаг:'''",
 'previewnote' => "'''Зон æй, æмæ ай у æрмæстдæр разбакаст.'''
 Дæ ивдтытæ нырмæ æвæрд не рцыдысты!",
-'continue-editing' => 'Ð\94аÑ\80ддæÑ\80 Ð¸Ð²ын',
+'continue-editing' => 'Ð\98вÑ\8bнÑ\8b Ð±Ñ\8bнаÑ\82мæ Ð°Ñ\86æÑ\83ын',
 'editing' => 'Ивд цæуы $1',
-'editingsection' => 'Ивыс $1 (фарсы хай)',
+'creating' => 'Конд цæуы $1',
+'editingsection' => 'Ивд цæуы $1 (хай)',
+'editingcomment' => 'Ивд цæуы $1 (ног хай)',
 'editconflict' => 'Ивыны конфликт: $1',
 'yourtext' => 'Дæ текст',
 'yourdiff' => 'Хицæндзинæдтæ',
@@ -775,7 +785,7 @@ $2
 'template-protected' => '(æхгæд)',
 'template-semiprotected' => '(æрдæг-æхгæд)',
 'hiddencategories' => 'Ацы фарс у {{PLURAL:$1|1 æмбæхст категорийы|$1 æмбæхст категориты}} уæнг:',
-'permissionserrors' => 'Бацæуæны рæдыдтæ',
+'permissionserrors' => 'Бавналыны рæдыдтытæ',
 'permissionserrorstext-withaction' => 'Нæй дын бар $2 {{PLURAL:$1|ай|адон}} тыххæй:',
 'recreate-moveddeleted-warn' => "'''Сындæг: Ды нæуæгæй кæныс фарс, кæцы раздæр уыдис хафт.'''
 
@@ -783,9 +793,15 @@ $2
 Хафын æмæ номивыны логтæ бындæр сты фыст.",
 'moveddeleted-notice' => 'Ацы фарс хафт уыдис.
 Уый тыххæй бындæр ис хафын æмæ номивыны логтæй фыст.',
-'edit-conflict' => 'Ð\98ввдзинæдты конфликт.',
+'edit-conflict' => 'Ð\98вдÑ\82Ñ\8bты конфликт.',
 'edit-already-exists' => 'Ног фарс скæнæн нæй. Ахæм фарс ис.',
 
+# Content models
+'content-model-wikitext' => 'викитекст',
+'content-model-text' => 'хуымæтæг текст',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Сындæг: ''' Хуызæджы бавæрд бæрц æгæр стыр у.
 Кæцыдæр хуызæгтæ нæ бавæд уыдзысты.",
@@ -805,8 +821,8 @@ $2
 'nextrevision' => 'Ногдæр фæлтæр →',
 'currentrevisionlink' => 'Нырыккон фæлтæр',
 'cur' => 'ныр.',
-'next' => 'фæдылдзог',
-'last' => 'раздæры',
+'next' => 'иннæ',
+'last' => 'раз.',
 'page_first' => 'фыццаг',
 'page_last' => 'фæстаг',
 'histlegend' => "Æвзарынæн: банысан кæн фæлтæрты радиобокстæ цæмæй цæ иртæсай æмæ стæй ныххæц enter кæнæ бынæй цы ныххæцæн ис, ууыл.<br />
@@ -827,13 +843,23 @@ $2
 'rev-deleted-user' => '(фæсномыг хафт у)',
 'rev-deleted-event' => '(фыст хафт у)',
 'rev-delundel' => 'равдисын/айсын',
-'revisiondelete' => 'Схафын/рацаразын фарсы фæлтæртæ',
+'rev-showdeleted' => 'равдисын',
+'revisiondelete' => 'Фæлтæртæ схафын/рацаразын',
+'revdelete-show-file-submit' => 'О',
+'revdelete-radio-same' => '(ма баив)',
+'revdelete-radio-set' => 'О',
+'revdelete-radio-unset' => 'Нæ',
 'revdel-restore' => 'ивын зынæн',
 'revdel-restore-deleted' => 'хафт ивдтытæ',
 'revdel-restore-visible' => 'зынгæ ивдтытæ',
 'pagehist' => 'Фарсы истори',
+'revdelete-reason-dropdown' => '*Хафыны арæхдæр бындуртæ
+** Сфæлдисæгы барты æфхæрд
+** Кæйдæр тыххæй æнæмбæлгæ информаци кæнæ хъуыды
+** Æнæмбæлгæ фæсномыг
+** Гæнæн ис цъыфкалд у',
 'revdelete-reasonotherlist' => 'Æндæр аххос',
-'revdelete-offender' => 'Фарсы фæлтæры автор:',
+'revdelete-offender' => 'Фæлтæры автор:',
 
 # History merging
 'mergehistory-reason' => 'Аххос:',
@@ -851,8 +877,8 @@ $2
 # Search results
 'searchresults' => 'Агуырды фæстиуджытæ',
 'searchresults-title' => 'Агуырды фæстиуæг: «$1»',
-'titlematches' => 'УаÑ\86Ñ\82Ñ\8b Ñ\81æÑ\80гæндÑ\82Ñ\8b Ã¦Ð¼Ñ\86аÑ\83Ñ\82æ',
-'notitlematches' => 'ФæÑ\80Ñ\81Ñ\82Ñ\8b Ñ\81æÑ\80гæндÑ\82Ñ\8b Ð½Ã¦Ð¹',
+'titlematches' => 'УаÑ\86Ñ\8b Ð½Ð¾Ð¼ Ã¦Ð¼Ð±Ã¦Ð»Ñ\8b',
+'notitlematches' => 'Ð\9dикæÑ\86Ñ\8b Ñ\84аÑ\80Ñ\81Ñ\8b Ð½Ð¾Ð¼ Ã¦Ð¼Ð±Ã¦Ð»Ñ\8b',
 'textmatches' => 'Уацты æмцаутæ',
 'prevn' => 'рæздæры {{PLURAL:$1|$1}}',
 'nextn' => 'иннæ {{PLURAL:$1|$1}}',
@@ -862,7 +888,8 @@ $2
 'viewprevnext' => 'Кæсын ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Ацы викийы ис фарс \"[[:\$1]]\" номимæ.'''",
 'searchmenu-new' => "'''Сараз фарс \"[[:\$1]]\" ацы викийы!'''",
-'searchprofile-articles' => 'Сæргæндты фæрстæ',
+'searchhelp-url' => 'Help:Мидис',
+'searchprofile-articles' => 'Мидисы фæрстæ',
 'searchprofile-project' => 'Æххуыс æмæ Проекты фæрстæ',
 'searchprofile-images' => 'Мультимеди',
 'searchprofile-everything' => 'Алцыдæр',
@@ -874,18 +901,20 @@ $2
 'searchprofile-advanced-tooltip' => 'Агурын равзаргæ номдæтты',
 'search-result-size' => '$1 ({{PLURAL:$2|$2 дзырд|$2 дзырды}})',
 'search-result-category-size' => '{{PLURAL:$1|1 уæнг|$1 уæнгы}} ({{PLURAL:$2|1 дæлкатегори|$2 дæлкатегорийы}}, {{PLURAL:$3|1 файл|$3 файлы}})',
-'search-redirect' => '(рарвыст ардыгæй: $1)',
+'search-redirect' => '({{grammar:ablative|$1}} æрвыст)',
 'search-section' => '(хай $1)',
 'search-suggest' => 'Кæд мыййаг агурыс: $1',
 'search-interwiki-caption' => 'Æфсымæрон проекттæ',
+'search-interwiki-default' => '{{grammar:genitive|$1}} фæстиуджытæ:',
 'search-interwiki-more' => '(нодзы)',
+'search-relatedarticle' => 'Хæстæг',
 'searchrelated' => 'хæстæг',
 'searchall' => 'иууылдæр',
 'showingresultsheader' => "{{PLURAL:$5|Фæстиуæг '''$1''' '''$3'''-йæ|Фæстиуджытæ '''$1 - $2''' '''$3'''-йæ}} '''{{grammar:dative|$4}}'''",
 'search-nonefound' => 'Ницы разындис домæнæн',
 'powersearch' => 'Сæрмагонд агуырд',
 'powersearch-legend' => 'Сæрмагонд агуырд',
-'powersearch-redir' => 'Рарвыстытæ дæр æвдис',
+'powersearch-redir' => 'Рарвыстытæ æвдисын',
 'powersearch-field' => 'Агуырд',
 'powersearch-toggleall' => 'Иууылдæр',
 
@@ -897,15 +926,16 @@ $2
 'qbsettings-floatingleft' => 'Рахизырдыгæй ленккæнгæ',
 
 # Preferences page
-'mypreferences' => 'Мæ фадæттæ',
+'preferences' => 'Уагæвæрдтæ',
+'mypreferences' => 'Уагæвæрдтæ',
 'prefs-edits' => 'Ивдтыты нымæц:',
 'prefsnologin' => 'Системæйæн дæхи нæ бацамыдтай',
 'changepassword' => 'Пароль ивæн',
 'prefs-skin' => 'Цъар',
 'skin-preview' => 'Разæркаст',
-'prefs-beta' => 'Ð\91еÑ\82а Ñ\84адæÑ\82тæ',
+'prefs-beta' => 'Ð\91еÑ\82а Ñ\83агæвæÑ\80дтæ',
 'prefs-datetime' => 'Датæ æмæ рæстæг',
-'prefs-labs' => 'Ð\9bабоÑ\80аÑ\82оÑ\80он Ñ\84адæÑ\82тæ',
+'prefs-labs' => 'Ð\9bабоÑ\80аÑ\82оÑ\80он Ñ\83агæвæÑ\80дтæ',
 'prefs-personal' => 'Архайæджы профил',
 'prefs-rc' => 'Фæстаг ивдтытæ',
 'prefs-watchlist' => 'Цæстдард',
@@ -934,7 +964,7 @@ $2
 'timezoneregion-europe' => 'Европæ',
 'timezoneregion-indian' => 'Индийы фурд',
 'timezoneregion-pacific' => 'Сабыр Фурд',
-'prefs-searchoptions' => 'Агурыны фадæттæ',
+'prefs-searchoptions' => 'Агурын',
 'prefs-namespaces' => 'Номдæттæ',
 'prefs-files' => 'Файлтæ',
 'prefs-custom-css' => 'Хиæвæрд CSS',
@@ -955,8 +985,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
@@ -990,10 +1038,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' => 'ацы фарс кæсын',
@@ -1005,7 +1053,7 @@ $2
 'action-move' => 'ацы фарсы ном ивын',
 'action-movefile' => 'ацы файлы ном ивын',
 'action-upload' => 'ацы файл æвгæнын',
-'action-delete' => 'ацы фарс аппарын',
+'action-delete' => 'ацы фарс схафын',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ивд|ивды}}',
@@ -1039,6 +1087,7 @@ $3',
 'newsectionsummary' => '/* $1 */ ног хай',
 'rc-enhanced-expand' => 'Лæмбынæг информаци равдисын (домы JavaScript)',
 'rc-enhanced-hide' => 'Айсын лæмбынæг информаци',
+'rc-old-title' => 'фыццаг арæзт æрцыд куыд "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Баст ивдтытæ',
@@ -1060,13 +1109,14 @@ $3',
 'filedesc' => 'Афыст:',
 'minlength1' => 'Файлы номы хъуамæ æппынкъаддæр иу дамгъæ уа.',
 'badfilename' => 'Нывы ном ивд æрцыдис. Ныр хуины «$1».',
-'savefile' => 'Ð\91авæÑ\80 Ã¦Ð¹',
+'savefile' => 'Файл Ð±Ð°Ð²Ã¦Ñ\80Ñ\8bн',
 'uploadedimage' => 'бавгæдта "[[$1]]"',
-'uploadvirus' => 'Файлы разынд вирус! Кæс $1',
-'watchthisupload' => 'Цæст дарын ацы файлмæ',
-'upload-success-subj' => 'Файлы сæвæрд фæрæстмæ',
+'uploadvirus' => 'Файлы ис вирус! 
+Лæмбынæг: $1',
+'watchthisupload' => 'Ацы файлмæ цæст æрдарын',
+'upload-success-subj' => 'Æвгæд æрцыд',
 
-'upload-file-error' => 'Мидæг рæдыд',
+'upload-file-error' => 'Мидæггаг рæдыд',
 
 'license' => 'Лицензи:',
 'license-header' => 'Лицензи',
@@ -1074,11 +1124,19 @@ $3',
 # Special:ListFiles
 'listfiles' => 'Нывты номхыгъд',
 'listfiles_thumb' => 'Къаддæргонд',
+'listfiles_date' => 'Датæ',
+'listfiles_name' => 'Ном',
+'listfiles_user' => 'Архайæг',
+'listfiles_size' => 'Ас',
+'listfiles_description' => 'Амынд',
+'listfiles_count' => 'Фæлтæртæ',
 
 # File description page
 'file-anchor-link' => 'Файл',
 'filehist' => 'Файлы истори',
 'filehist-help' => 'Ныххæц датæ/рæстæг-ыл, цæмæй фенай еуæд куыд фæзындис.',
+'filehist-deleteall' => 'иууылдæр схафын',
+'filehist-deleteone' => 'схафын',
 'filehist-revert' => 'раивын',
 'filehist-current' => 'нырыккон',
 'filehist-datetime' => 'Датæ/рæстæг',
@@ -1089,6 +1147,7 @@ $3',
 'filehist-dimensions' => 'Барæнтæ',
 'filehist-filesize' => 'Файлы бæрцуат',
 'filehist-comment' => 'Фиппаинаг',
+'filehist-missing' => 'Файл нæ зыны',
 'imagelinks' => 'Файлæй архайд',
 'linkstoimage' => 'Ацы нывæй пайда {{PLURAL:$1|кæны иу фарс|кæнынц ахæм фæрстæ}}:',
 'nolinkstoimage' => 'Нæй ахæм фæрстæ, кæдон æрвитынц ацы файлмæ.',
@@ -1099,22 +1158,29 @@ $3',
 [$2 Йæ фарсæй] афыст у æвдыст бындæр',
 
 # File deletion
-'filedelete-submit' => 'Аппар',
+'filedelete-comment' => 'Бындур:',
+'filedelete-submit' => 'Схафын',
+'filedelete-success' => "'''$1''' хафт æрцыд.",
 'filedelete-otherreason' => 'Æндæр кæнæ уæлæмхасæн аххос:',
 'filedelete-reason-otherlist' => 'Æндæр аххос',
 
 # MIME search
-'download' => 'æрбавгæн',
+'download' => 'равгæнын',
 
 # Unused templates
 'unusedtemplates' => 'Пайда кæмæй нæ чындæуы, ахæм хуызæгтæ',
 
 # Random page
-'randompage' => 'Халæй ист фарс',
+'randompage' => 'Æрхаугæ фарс',
 
 # Statistics
 'statistics' => 'Статистикæ',
+'statistics-header-pages' => 'Фарсы статистикæ',
+'statistics-header-edits' => 'Ивдтыты статистикæ',
+'statistics-header-views' => 'Бакастыты статистикæ',
 'statistics-header-users' => 'Архайджыты статистикæ',
+'statistics-header-hooks' => 'Æндæр статистикæтæ',
+'statistics-articles' => 'Мидисы фæрстæ',
 
 'disambiguationspage' => 'Template:бирæнысанон',
 
@@ -1129,9 +1195,14 @@ $3',
 
 # 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|фæлтæр|фæлтæры}}',
 'nviews' => '$1 {{PLURAL:$1|æркаст|æркасты}}',
+'nimagelinks' => 'Архайд цæуы $1 {{PLURAL:$1|фарсы}}',
+'ntransclusions' => 'архайд цæуы $1 {{PLURAL:$1|фарсы}}',
 'lonelypages' => 'Сидзæр фæрстæ',
 'uncategorizedpages' => 'Æнæкатегори фæрстæ',
 'uncategorizedimages' => 'Æнæкатегори файлтæ',
@@ -1139,6 +1210,7 @@ $3',
 'popularpages' => 'Популярон фæрстæ',
 'wantedcategories' => 'Хъæугæ категоритæ',
 'wantedpages' => 'Хъæугæ фæрстæ',
+'wantedfiles' => 'Хъæугæ файлтæ',
 'mostlinked' => 'Фылдæр æрвитæнтæ кæмæ и, ахæм фæрстæ',
 'mostlinkedcategories' => 'Фылдæр æрвитæнтæ кæмæ и, уыцы категоритæ',
 'mostrevisions' => 'Фылдæр кæй ивынц, ахæм фæрстæ',
@@ -1147,6 +1219,7 @@ $3',
 'longpages' => 'Даргъ фæрстæ',
 'protectedpages' => 'Æхгæд фæрстæ',
 'listusers' => 'Архайджыты номхыгъд',
+'usereditcount' => '$1 {{PLURAL:$1|ивд|ивды}}',
 'usercreated' => '{{GENDER:$3|Фæзындис}} $1, {{grammar:superessive|$2}}',
 'newpages' => 'Ног фæрстæ',
 'newpages-username' => 'Архайæг:',
@@ -1174,7 +1247,7 @@ $3',
 'allarticles' => 'Иууылдæр фæрстæ',
 'allpagesprev' => 'фæстæмæ',
 'allpagesnext' => 'дарддæр',
-'allpagessubmit' => 'Агур',
+'allpagessubmit' => 'Ацæуын',
 
 # Special:Categories
 'categories' => 'Категоритæ',
@@ -1193,11 +1266,9 @@ $3',
 # Special:ListUsers
 'listusers-submit' => 'Равдисын',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Архайджыты фæзындты лог',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Къорд',
+'listgrouprights-rights' => 'Бартæ',
 'listgrouprights-members' => '(уæнгты номхыгъд)',
 
 # E-mail user
@@ -1207,7 +1278,7 @@ $3',
 
 # Watchlist
 'watchlist' => 'Мæ цæстдард рæгъ',
-'mywatchlist' => 'Ð\9cæ Ñ\86æÑ\81Ñ\82даÑ\80д Ñ\84æÑ\80Ñ\81Ñ\82æ',
+'mywatchlist' => 'ЦæÑ\81Ñ\82даÑ\80д',
 'watchlistfor2' => 'Архайæг: $1 $2',
 'nowatchlist' => 'Иу уацмæ дæр дæ цæст нæ дарыс.',
 'watchnologin' => 'Системæйæн дæхи нæ бацамыдтай',
@@ -1227,9 +1298,8 @@ $3',
 'watching' => 'Цæстдард фæрсты номхыгъдмæ афтауын...',
 'unwatching' => 'Цæстдард фæрсты номхыгъдæй аиуварс кæнын...',
 
-'enotif_newpagetext' => 'Ай у нæуæг фарс.',
-'changed' => 'ивд æрцыд',
 'enotif_anon_editor' => 'сусæг архайæг $1',
+'changed' => 'ивд æрцыд',
 
 # Delete
 'deletepage' => 'Схаф фарс',
@@ -1237,8 +1307,8 @@ $3',
 'delete-confirm' => 'Схаф "$1"',
 'actioncomplete' => 'Æххæст',
 'actionfailed' => 'Нæ рауадис',
-'dellogpage' => 'Ð\90ппаÑ\80Ñ\8bны лог',
-'deletionlog' => 'аппарыны лог',
+'dellogpage' => 'ХаÑ\84Ñ\8bнÑ\82ы лог',
+'deletionlog' => 'хафынты лог',
 'deletecomment' => 'Аххос:',
 'deleteotherreason' => 'Æндæр кæнæ уæлæмхасæн аххос:',
 'deletereasonotherlist' => 'Æндæр аххос',
@@ -1265,6 +1335,7 @@ $3',
 # Undelete
 'undeletelink' => 'кæсын/рацаразын',
 'undeleteviewlink' => 'кæсын',
+'undelete-search-submit' => 'Агурын',
 
 # Namespace form on various pages
 'namespace' => 'Номдон:',
@@ -1272,16 +1343,16 @@ $3',
 'blanknamespace' => '(Сæйраг)',
 
 # Contributions
-'contributions' => 'Архайæджы бавæрд',
+'contributions' => '{{GENDER:$1|Архайæджы}} бавæрд',
 'contributions-title' => 'Архайæджы бавæрд: $1',
-'mycontris' => 'Ð\9cæ Ð±авæрд',
+'mycontris' => 'Ð\91авæрд',
 'contribsub2' => 'Архайæг: $1 ($2)',
 'uctop' => '(фæстаг)',
 'month' => 'Ацы мæйы (æмæ раздæр):',
 'year' => 'Ацы азы (æмæ раздæр):',
 
 'sp-contributions-newbies' => 'Æвдисын æрмæст нæуæг архайджыты бавæрд',
-'sp-contributions-blocklog' => 'Хъодыты лог',
+'sp-contributions-blocklog' => 'хъодыты лог',
 'sp-contributions-uploads' => 'бавгæндтытæ',
 'sp-contributions-logs' => 'логтæ',
 'sp-contributions-talk' => 'ныхас',
@@ -1294,26 +1365,31 @@ $3',
 'whatlinkshere' => 'Чи æрвиты ардæм',
 'whatlinkshere-title' => 'Фæрстæ, кæдон æрвитынц ардæм: «$1»',
 'whatlinkshere-page' => 'Фарс:',
-'linkshere' => "Ацы фæрстæ æрвитынц '''{{grammar:allative|[[:$1]]}}''':",
+'linkshere' => "Ацы фæрстæ æрвитынц '''[[:$1|{{grammar:allative|$1}}]]''':",
 'nolinkshere' => "Никæцы фарс æрвиты ардæм: '''[[:$1]]'''.",
-'isredirect' => 'рарвысты фарс',
+'isredirect' => 'æрвитæн фарс',
 'istemplate' => 'æфтыдæй',
 'isimage' => 'файлмæ æрвитæн',
 'whatlinkshere-prev' => '{{PLURAL:$1|раздæры|раздæры $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|иннæ|иннæ $1}}',
 'whatlinkshere-links' => '← æрвитæнтæ',
-'whatlinkshere-hideredirs' => '$1 рарвыстытæ',
+'whatlinkshere-hideredirs' => 'Рарвыстытæ $1',
 'whatlinkshere-hidetrans' => '$1 æфтыдтытæ',
 'whatlinkshere-hidelinks' => '$1 æрвитæнтæ',
-'whatlinkshere-hideimages' => '$1 нывмæ æрвитæнтæ',
+'whatlinkshere-hideimages' => 'Файлмæ æрвитæнтæ $1',
 '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-адристы номхыгъд]].',
@@ -1321,6 +1397,7 @@ $3',
 'ipb-blocklist-contribs' => '{{grammar:genitive|$1}} бавæрд',
 'ipblocklist' => 'Хъодыгонд архайджытæ',
 'ipblocklist-legend' => 'Хъодыгонд архайæджы ацагур',
+'ipblocklist-submit' => 'Агурын',
 'ipblocklist-empty' => 'Хъодыгæндты номхыгъд афтид у.',
 'blocklink' => 'бахъоды кæн',
 'unblocklink' => 'хъоды айс',
@@ -1350,7 +1427,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' => 'Иууылдæр',
@@ -1368,7 +1445,7 @@ $3',
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Дæ архайæджы фарс',
 'tooltip-pt-mytalk' => 'Дæ ныхасы фарс',
-'tooltip-pt-preferences' => 'Ð\94æ Ñ\84адæÑ\82тæ',
+'tooltip-pt-preferences' => 'Ð\94æ Ñ\83агæвæÑ\80дтæ',
 'tooltip-pt-watchlist' => 'Фæрстæ кæй ивдтытæм ды дарыс дæ цæст',
 'tooltip-pt-mycontris' => 'Дæ бавæрд',
 'tooltip-pt-login' => 'Хуыздæр у куы бахизай системæмæ; фæлæ нæмæнг нæу',
@@ -1380,7 +1457,7 @@ $3',
 Дæ бон у фенын ын йæ бындуртекст',
 'tooltip-ca-history' => 'Ацы фарсæн йæ раздæры фæлтæртæ',
 'tooltip-ca-protect' => 'Ацы фарс ивддзинæдтæй сæхгæнын',
-'tooltip-ca-delete' => 'Аппарын ацы фарс',
+'tooltip-ca-delete' => 'Ацы фарс схафын',
 'tooltip-ca-move' => 'Уацы ном ивын',
 'tooltip-ca-watch' => 'Бафтау ацы фарс дæ цæстдард рæгъмæ',
 'tooltip-ca-unwatch' => 'Айс ацы фарс дæ цæстдард рæгъæй',
@@ -1417,11 +1494,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
@@ -1526,7 +1615,7 @@ $3',
 'table_pager_last' => 'Фæстаг фарс',
 
 # Auto-summaries
-'autoredircomment' => 'РаÑ\80вÑ\8bÑ\81Ñ\82 [[$1|{{grammar:allative|$1}}]]',
+'autoredircomment' => 'ФаÑ\80Ñ\81 Ã¦Ñ\80вÑ\8bÑ\81Ñ\82 Ã¦Ñ\80Ñ\86Ñ\8bд [[$1|{{grammar:allative|$1}}]]',
 'autosumm-new' => 'Ног фарс, йæ код райдайы афтæ: «$1»',
 
 # Size units
@@ -1536,15 +1625,15 @@ $3',
 'size-gigabytes' => '$1 ГБ',
 
 # Live preview
-'livepreview-loading' => 'Ã\86вгæнгæ...',
-'livepreview-ready' => 'Ã\86вгæнгæ...Цæттæ!',
+'livepreview-loading' => 'Ã\86вгæд Ñ\86æÑ\83Ñ\8b...',
+'livepreview-ready' => 'Ã\86вгæд Ñ\86æÑ\83Ñ\8b...Цæттæ!',
 'livepreview-failed' => 'Тагъд разæркастæй пайда кæнæн нæй. Хуымæтæджы разæркастæй пайда кæн.',
 
 # Watchlist editor
 'watchlistedit-noitems' => 'Дæ цæстдард афтид у.',
 'watchlistedit-normal-title' => 'Цæстдард ивæн',
 'watchlistedit-normal-submit' => 'Схафын фыстытæ',
-'watchlistedit-raw-titles' => 'ФæÑ\80Ñ\81тæ:',
+'watchlistedit-raw-titles' => 'СæÑ\80тæ:',
 'watchlistedit-raw-submit' => 'Номхыгъд бафснай',
 
 # Watchlist editing tools
@@ -1564,12 +1653,14 @@ $3',
 'version-other' => 'Æндæр',
 'version-version' => '(Фæлтæр $1)',
 'version-license' => 'Лицензи',
+'version-poweredby-credits' => "Ацы викийæн тых радта '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'æндæртæ',
 'version-software-version' => 'Верси',
 
 # Special:FilePath
 'filepath' => 'Файлмæ фæт',
 'filepath-page' => 'Файл:',
+'filepath-submit' => 'Бацæуын',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-filename' => 'Файлы ном:',
@@ -1602,11 +1693,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' => 'Мидæггаг рæдыд: Нæ рауадис сбæрæг кæнын къопи кæнын куыд бантыстис.',
@@ -1623,7 +1723,7 @@ $3',
 'api-error-unknown-error' => 'Мидæггаг рæдыд: Цыдæр раст нæ ацыдис, файл куы æвгæдтай, уæд.',
 'api-error-unknown-warning' => 'Нæзонгæ фæдзæхст: "$1".',
 'api-error-unknownerror' => 'Нæзонгæ рæдыд: "$1".',
-'api-error-uploaddisabled' => 'Ацы викийы бавгæныны фадат хицæн у.',
+'api-error-uploaddisabled' => 'Ацы викийы, бавгæныны фадат хицæн у.',
 'api-error-verification-error' => 'Ацы файл гæнæн ис хæлд у, кæнæ йæ номы фæстаг хай раст нæу.',
 
 # Durations
index 5a022f1..ff05c7b 100644 (file)
  * @author Aalam
  * @author Amire80
  * @author Anjalikaushal
+ * @author Babanwalia
  * @author Gman124
  * @author Guglani
  * @author Kaganer
+ * @author Raj Singh
  * @author Sukh
  * @author Surinder.wadhawan
  * @author TariButtar
+ * @author VibhasKS
  * @author Xqt
  * @author Ævar Arnfjörð Bjarmason
  * @author לערי ריינהארט
@@ -139,11 +142,11 @@ $messages = array(
 'tog-numberheadings' => 'ਆਟੋ-ਨੰਬਰ ਹੈਡਿੰਗ',
 'tog-showtoolbar' => 'ਐਡਿਟ ਟੂਲਬਾਰ ਵੇਖੋ (JavaScript)',
 'tog-editondblclick' => 'ਦੂਹਰੇ ਕਲਿੱਕ ਨਾਲ਼ ਸਫ਼ੇ ਸੋਧੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
-'tog-editsection' => '[ਸà©\8bਧà©\8b] ਲਿੰਕਾਂ ਜ਼ਰੀਏ ਸੈਕਸ਼ਨ ਸੋਧ ਚਾਲੂ ਕਰੋ',
+'tog-editsection' => '[ਸੰਪਾਦਨ] ਲਿੰਕਾਂ ਜ਼ਰੀਏ ਸੈਕਸ਼ਨ ਸੋਧ ਚਾਲੂ ਕਰੋ',
 'tog-editsectiononrightclick' => 'ਸੈਕਸ਼ਨ ਸਿਰਲੇਖਾਂ ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਦੁਆਰਾ ਸੋਧ ਯੋਗ ਕਰੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'tog-showtoc' => 'ਟੇਬਲ ਆਫ਼ ਕੰਨਟੈੱਟ ਵੇਖਾਓ (for pages with more than 3 headings)',
 'tog-rememberpassword' => 'ਇਸ ਬਰਾਊਜ਼ਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)',
-'tog-watchcreations' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨¬à¨£à¨¾à¨\8f à¨\97à¨\8f à¨¨à¨µà©\87à¨\82 à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨\85ੱਪਲà©\8bਡ à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਪਾਓ',
+'tog-watchcreations' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨¬à¨£à¨¾à¨\8f à¨\97à¨\8f à¨ªà©°à¨¨à©\87 à¨\85ਤà©\87 à¨\85ੱਪਲà©\8bਡ à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±ਚ ਪਾਓ',
 'tog-watchdefault' => 'ਮੇਰੇ ਵੱਲੋਂ ਸੋਧੇ ਗਏ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
 'tog-watchmoves' => 'ਮੇਰੇ ਵੱਲੋਂ ਬਦਲੇ ਸਿਰਲੇਖਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
 'tog-watchdeletion' => 'ਮੇਰੇ ਵਲੋਂ ਮਿਟਾਏ ਗਏ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
@@ -183,7 +186,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 
 'underline-always' => 'ਹਮੇਸ਼ਾਂ',
 'underline-never' => 'ਕਦੇ ਨਹੀਂ',
-'underline-default' => 'ਬਰਾà¨\8aà¨\9c਼ਰ ਡਿਫਾਲਟ',
+'underline-default' => 'ਵਿਸ਼ਾ-ਵਸਤà©\82 à¨\9cਾà¨\82 à¨\87à©°à¨\9fਰਨà©\88ੱà¨\9f-à¨\9aਾਰà¨\95 ਡਿਫਾਲਟ',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'ਸੰਪਾਦਨ ਖੇਤਰ ਦੇ ਅੱਖਰਾਂ ਦੀ ਫ਼ੌਂਟ ਰੀਤੀ',
@@ -208,17 +211,17 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'fri' => 'ਸ਼ੁੱਕਰ',
 'sat' => 'ਸ਼ਨੀ',
 'january' => 'ਜਨਵਰੀ',
-'february' => 'ਫ਼ਰਵਰà©\80',
+'february' => 'ਫਰਵਰੀ',
 'march' => 'ਮਾਰਚ',
 'april' => 'ਅਪਰੈਲ',
 'may_long' => 'ਮਈ',
 'june' => 'ਜੂਨ',
 'july' => 'ਜੁਲਾਈ',
 'august' => 'ਅਗਸਤ',
-'september' => 'ਸਿਤੰਬਰ',
+'september' => 'ਸਤੰਬਰ',
 'october' => 'ਅਕਤੂਬਰ',
 'november' => 'ਨਵੰਬਰ',
-'december' => 'ਦਿਸੰਬਰ',
+'december' => 'ਦਸੰਬਰ',
 'january-gen' => 'ਜਨਵਰੀ',
 'february-gen' => 'ਫ਼ਰਵਰੀ',
 'march-gen' => 'ਮਾਰਚ',
@@ -227,7 +230,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'june-gen' => 'ਜੂਨ',
 'july-gen' => 'ਜੁਲਾਈ',
 'august-gen' => 'ਅਗਸਤ',
-'september-gen' => 'ਸਿਤੰਬਰ',
+'september-gen' => 'ਸਤੰਬਰ',
 'october-gen' => 'ਅਕਤੂਬਰ',
 'november-gen' => 'ਨਵੰਬਰ',
 'december-gen' => 'ਦਿਸੰਬਰ',
@@ -239,28 +242,28 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'jun' => 'ਜੂਨ',
 'jul' => 'ਜੁਲਾਈ',
 'aug' => 'ਅਗਸਤ',
-'sep' => 'ਸਿਤੰਬਰ',
+'sep' => 'ਸਤੰਬਰ',
 'oct' => 'ਅਕਤੂਬਰ',
 'nov' => 'ਨਵੰਬਰ',
-'dec' => 'ਦਿਸੰਬਰ',
+'dec' => 'ਦਸੰਬਰ',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80|à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ}}',
-'category_header' => 'à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 "$1" à¨µà¨¿ਚ ਲੇਖ',
-'subcategories' => 'ਸਬ-à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ',
-'category-media-header' => 'à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 "$1" à¨µà¨¿ਚ ਮੀਡੀਆ',
-'category-empty' => "''à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨\87ਸ à¨µà©\87ਲ਼à©\87 à¨\95à©\8bà¨\88 à¨µà©\80 à¨¸à¨«à¨¼ਾ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
-'hidden-categories' => '{{PLURAL:$1|ਲà©\81à¨\95ਵà©\80à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80|ਲà©\81à¨\95ਵà©\80à¨\82à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ}}',
+'pagecategories' => '{{PLURAL:$1|ਸ਼à©\8dਰà©\87ਣà©\80|ਸ਼à©\8dਰà©\87ਣੀਆਂ}}',
+'category_header' => 'ਸ਼à©\8dਰà©\87ਣà©\80 "$1" à¨µà¨¿à©±ਚ ਲੇਖ',
+'subcategories' => 'à¨\89ਪਸ਼à©\8dਰà©\87ਣੀਆਂ',
+'category-media-header' => 'ਸ਼à©\8dਰà©\87ਣà©\80 "$1" à¨µà¨¿à©±ਚ ਮੀਡੀਆ',
+'category-empty' => "''à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a à¨\87ਸ à¨µà©\87ਲà©\87 à¨\95à©\8bà¨\88 à¨µà©\80 à¨ªà©°à¨¨ਾ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
+'hidden-categories' => '{{PLURAL:$1|ਲà©\81à¨\95ਵà©\80à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣà©\80|ਲà©\81à¨\95ਵà©\80à¨\82à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ}}',
 'hidden-category-category' => 'ਲੁਕੀਆਂ ਕੈਟੇਗਰੀਆਂ',
-'category-subcat-count' => 'à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à¨\9aà©\8bà¨\82, {{PLURAL:$2|ਸਿਰਫ਼ à¨\87ਹ à¨¸à¨¬-à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨¹à©\88|à¨\87ਹ {{PLURAL:$1|ਸਬ-à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨¹à©\88|$1 à¨¸à¨¬-à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ ਹਨ}}}}।',
+'category-subcat-count' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à©±à¨\9aà©\8bà¨\82, {{PLURAL:$2|ਸਿਰਫ਼ à¨\87ਹ à¨\89ਪਸ਼à©\8dਰà©\87ਣà©\80 à¨¹à©\88|à¨\87ਹ {{PLURAL:$1|à¨\89ਪਸ਼à©\8dਰà©\87ਣà©\80 à¨¹à©\88|$1 à¨\89ਪਸ਼à©\8dਰà©\87ਣੀਆਂ ਹਨ}}}}।',
 'category-subcat-count-limited' => 'ਇਸ ਕੈਟੇਗਰੀ ਵਿਚ {{PLURAL:$1|ਸਬ-ਕੈਟੇਗਰੀ ਹੈ|$1 ਸਬ-ਕੈਟੇਗਰੀਆਂ ਹਨ}}।',
-'category-article-count' => '{{PLURAL:$2|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¹à©\88|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à¨\9aà©\8bà¨\82, à¨\87ਹ {{PLURAL:$1|ਸਫ਼ਾ à¨¹à©\88|$1 à¨¸à¨«à¨¼ੇ ਹਨ}}}}।',
+'category-article-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨¹à©\88।| à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à©±à¨\9aà©\8bà¨\82, à¨\87ਹ {{PLURAL:$1|ਪੰਨਾ à¨¹à©\88|$1 à¨ªà©°à¨¨ੇ ਹਨ}}}}।',
 'category-article-count-limited' => 'ਮੌਜੂਦਾ ਕੈਟੇਗਰੀ ਵਿਚ ਇਹ {{PLURAL:$1|ਸਫ਼ਾ ਹੈ|$1 ਸਫ਼ੇ ਹਨ}}।',
-'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨¹à©\88|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿ਚ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}}}।',
+'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨¹à©\88|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±ਚ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}}}।',
 'category-file-count-limited' => 'ਮੌਜੂਦਾ ਕੈਟੇਗਰੀ ਵਿਚ ਇਹ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}।',
 'listingcontinuesabbrev' => 'ਜਾਰੀ',
 'index-category' => 'ਤਤਕਰੇ ਵਾਲ਼ੇ ਸਫ਼ੇ',
-'noindex-category' => 'ਬਿਨਾà¨\82 à¨¤à¨¤à¨\95ਰà©\87 à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼ੇ',
+'noindex-category' => 'ਬਿਨਾà¨\82 à¨¤à¨¤à¨\95ਰà©\87 à¨µà¨¾à¨²à©\87 à¨ªà©°à¨¨ੇ',
 'broken-file-category' => 'ਟੁੱਟੇ ਹੋਏ ਫ਼ਾਈਲ ਜੋੜਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ',
 
 'about' => 'ਇਸ ਬਾਰੇ',
@@ -268,8 +271,8 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'newwindow' => '(ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਖੁੱਲ੍ਹਦੀ ਹੈ)',
 'cancel' => 'ਰੱਦ ਕਰੋ',
 'moredotdotdot' => 'ਹੋਰ...',
-'mypage' => 'ਮà©\87ਰਾ à¨¸à¨«à¨¼ਾ',
-'mytalk' => 'ਮà©\87ਰà©\80 à¨\97ੱਲ-ਬਾਤ',
+'mypage' => 'ਪੰਨਾ',
+'mytalk' => 'à¨\9aਰà¨\9aਾ',
 'anontalk' => 'ਇਸ IP ਲਈ ਗੱਲ-ਬਾਤ',
 'navigation' => 'ਰਹਿਨੁਮਾਈ',
 'and' => '&#32;ਅਤੇ',
@@ -278,30 +281,30 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'qbfind' => 'ਖੋਜੋ',
 'qbbrowse' => 'ਬਰਾਊਜ਼',
 'qbedit' => 'ਸੋਧ',
-'qbpageoptions' => 'à¨\87ਹ à¨¸à¨«à¨¼ਾ',
-'qbmyoptions' => 'ਮà©\87ਰà©\87 à¨¸à¨«à¨¼ੇ',
-'qbspecialpages' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¾',
-'faq' => 'à¨\85à¨\95ਸਰ à¨ªà©\81ੱà¨\9bà©\87 à¨\9cਾਣ à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨µà¨¾à¨²',
+'qbpageoptions' => 'à¨\87ਹ à¨ªà©°à¨¨ਾ',
+'qbmyoptions' => 'ਮà©\87ਰà©\87 à¨ªà©°à¨¨ੇ',
+'qbspecialpages' => 'à¨\96ਾਸ à¨ªà©°à¨¨à©\87',
+'faq' => 'ਅਕਸਰ ਪੁੱਛੇ ਜਾਣ ਵਾਲੇ ਸਵਾਲ',
 'faqpage' => 'Project:ਸਵਾਲ-ਜਵਾਬ',
 
 # Vector skin
-'vector-action-addsection' => 'ਮà¨\9c਼ਮà©\82ਨ ਜੋੜੋ',
-'vector-action-delete' => 'ਮਿਟਾਓ',
-'vector-action-move' => 'ਭà©\87à¨\9cੋ',
+'vector-action-addsection' => 'ਵਿਸ਼ਾ ਜੋੜੋ',
+'vector-action-delete' => 'ਹਟਾਓ',
+'vector-action-move' => 'ਸਥਾਨਾà¨\82ਤਰਣ à¨\95ਰੋ',
 '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' => 'ਸà©\8bਧ',
-'vector-view-history' => 'à¨\85ਤà©\80ਤ ਵੇਖੋ',
+'vector-view-edit' => 'ਸੰਪਾਦਨ',
+'vector-view-history' => 'à¨\87ਤਿਹਾਸ ਵੇਖੋ',
 'vector-view-view' => 'ਪੜ੍ਹੋ',
 'vector-view-viewsource' => 'ਸਰੋਤ ਵੇਖੋ',
 'actions' => 'ਕਾਰਵਾਈਆਂ',
 'namespaces' => 'ਨਾਮ-ਥਾਂਵਾਂ',
 'variants' => 'ਬਦਲ',
 
-'errorpagetitle' => 'à¨\97਼ਲਤà©\80',
+'errorpagetitle' => 'ਗਲਤੀ',
 'returnto' => '$1 ’ਤੇ ਵਾਪਸ ਜਾਓ।',
 'tagline' => '{{SITENAME}} ਤੋਂ',
 'help' => 'ਮਦਦ',
@@ -309,29 +312,29 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'searchbutton' => 'ਖੋਜੋ',
 'go' => 'ਜਾਓ',
 'searcharticle' => 'ਜਾਓ',
-'history' => 'ਸਫ਼à©\87 à¨¦à¨¾ à¨\85ਤà©\80ਤ',
-'history_short' => 'à¨\85ਤà©\80ਤ',
+'history' => 'ਪੰਨà©\87 à¨¦à¨¾ à¨\87ਤਿਹਾਸ',
+'history_short' => 'à¨\87ਤਿਹਾਸ',
 'updatedmarker' => 'ਮੇਰੀ ਆਖ਼ਰੀ ਫੇਰੀ ਤੋਂ ਬਾਅਦ ਬਦਲੇ ਗਏ',
 'printableversion' => 'ਛਪਣਯੋਗ ਵਰਜਨ',
 'permalink' => 'ਪੱਕਾ ਲਿੰਕ',
 'print' => 'ਛਾਪੋ',
 'view' => 'ਵੇਖੋ',
-'edit' => 'ਬਦਲà©\8b',
+'edit' => 'ਸੰਪਾਦਨ',
 'create' => 'ਬਣਾਓ',
 'editthispage' => 'ਇਹ ਸਫ਼ਾ ਸੋਧੋ',
 'create-this-page' => 'ਇਹ ਸਫ਼ਾ ਬਣਾਓ',
-'delete' => 'ਮਿਟਾਓ',
+'delete' => 'ਹਟਾਓ',
 'deletethispage' => 'ਇਹ ਸਫ਼ਾ ਮਿਟਾਓ',
 'undelete_short' => '{{PLURAL:$1|ਇੱਕ ਸੋਧ|$1 ਸੋਧਾਂ}} ਅਣ-ਮਿਟਾਓ',
 'viewdeleted_short' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ',
 'protect' => 'ਸੁਰੱਖਿਆ',
-'protect_change' => 'ਤਬਦà©\80ਲੀ',
+'protect_change' => 'ਬਦਲੀ',
 'protectthispage' => 'ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'unprotectthispage' => 'ਇਹ ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'newpage' => 'ਨਵਾà¨\82 à¨¸à¨«à¨¼ਾ',
+'newpage' => 'ਨਵਾà¨\82 à¨ªà©°à¨¨ਾ',
 'talkpage' => 'ਇਸ ਸਫ਼ੇ ਬਾਰੇ ਚਰਚਾ ਕਰੋ',
-'talkpagelinktext' => 'à¨\97ੱਲ-ਬਾਤ',
+'talkpagelinktext' => 'à¨\9aਰà¨\9aਾ',
 'specialpage' => 'ਖ਼ਾਸ ਸਫ਼ਾ',
 'personaltools' => 'ਨਿੱਜੀ ਸੰਦ',
 'postcomment' => 'ਨਵਾਂ ਸੈਕਸ਼ਨ',
@@ -347,10 +350,10 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'viewhelppage' => 'ਮਦਦ ਸਫ਼ਾ ਵੇਖੋ',
 'categorypage' => 'ਕੈਟੈਗਰੀ ਸਫ਼ਾ ਵੇਖੋ',
 'viewtalkpage' => 'ਚਰਚਾ ਵੇਖੋ',
-'otherlanguages' => 'ਹà©\8bਰ à¨\9c਼ਬਾਨਾà¨\82 à¨µà¨¿à¨\9a',
-'redirectedfrom' => '($1 ਤੋਂ ਰੀ-ਡਿਰੈਕਟ)',
+'otherlanguages' => 'ਹà©\8bਰ à¨­à¨¾à¨¸à¨¼à¨¾à¨µà¨¾à¨\82',
+'redirectedfrom' => '($1 ਤੋਂ ਰੀਡਿਰੈਕਟ)',
 'redirectpagesub' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
-'lastmodifiedat' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨\86à¨\96਼ਰà©\80 à¨µà¨¾à¨° $1 à¨¨à©\82à©° $2 â\80\99ਤà©\87 à¨¸à©\8bਧਿà¨\86 ਗਿਆ ਸੀ।',
+'lastmodifiedat' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨\86à¨\96ਰà©\80 à¨µà¨¾à¨° $1 à¨¨à©\82à©° $2 â\80\99ਤà©\87 à¨¬à¨¦à¨² ਗਿਆ ਸੀ।',
 'viewcount' => 'ਇਹ ਸਫ਼ਾ {{PLURAL:$1|ਇੱਕ ਵਾਰ|$1 ਵਾਰ}} ਵੇਖਿਆ ਗਿਆ।',
 'protectedpage' => 'ਸੁਰੱਖਿਅਤ ਪੇਜ',
 'jumpto' => 'ਇਸ ’ਤੇ ਜਾਓ:',
@@ -369,20 +372,20 @@ $1',
 'aboutpage' => 'Project:ਬਾਰੇ',
 'copyright' => 'ਸਮੱਗਰੀ $1 ਹੇਠ ਉਪਲੱਬਧ ਹੈ।',
 'copyrightpage' => '{{ns:project}}:ਕਾਪੀਰਾਈਟ',
-'currentevents' => 'ਮà©\8cà¨\9cà©\82ਦਾ à¨\87ਵà©\88à¨\82à¨\9f',
-'currentevents-url' => 'Project:ਮà©\8cà¨\9cà©\82ਦਾ à¨\88ਵà©\88à¨\82à¨\9f',
+'currentevents' => 'ਹਾਲ à¨¦à©\80à¨\86à¨\82 à¨\98à¨\9fਨਾਵਾà¨\82',
+'currentevents-url' => 'Project:ਹਾਲ à¨¦à©\80à¨\86à¨\82 à¨\98à¨\9fਨਾਵਾà¨\82',
 'disclaimers' => 'ਇਨਕਾਰੀ ਐਲਾਨ',
 'disclaimerpage' => 'Project:ਆਮ ਇਨਕਾਰ',
-'edithelp' => 'ਮੱਦਦ à¨\90ਡà©\80à¨\9fਿੰà¨\97',
-'edithelppage' => 'Help:à¨\90ਡà¨\9fਿੰà¨\97',
+'edithelp' => 'ਸੰਪਾਦਨ à¨®à¨¦à¨¦',
+'edithelppage' => 'Help:ਸੰਪਾਦਨ',
 'helppage' => 'Help:ਚੀਜ਼ਾਂ',
-'mainpage' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼ਾ',
-'mainpage-description' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼ਾ',
+'mainpage' => 'ਮà©\81ੱà¨\96 à¨ªà©°à¨¨ਾ',
+'mainpage-description' => 'ਮà©\81ੱà¨\96 à¨ªà©°à¨¨ਾ',
 'policy-url' => 'Project:ਪਾਲਸੀ',
-'portal' => 'à¨\95ਮਿà¨\8aਨà¨\9fà©\80 à¨ªà©\8bਰà¨\9fਲ',
-'portal-url' => 'Project:à¨\95ਮਿà¨\8aਨà¨\9fà©\80 à¨ªà©\8bਰà¨\9fਲ',
-'privacy' => 'ਪਰਾà¨\88ਵà©\87ਸà©\80 à¨ªà¨¾à¨²à¨¸ੀ',
-'privacypage' => 'Project:ਪਰਾà¨\88ਵà©\87ਸà©\80 à¨ªà¨¾à¨²à¨¸ੀ',
+'portal' => 'ਸਮਾà¨\9c à¨®à©\81ੱà¨\96 à¨ªà©°à¨¨à¨¾',
+'portal-url' => 'Project:ਸਮਾà¨\9c à¨®à©\81ੱà¨\96 à¨ªà©°à¨¨à¨¾',
+'privacy' => 'ਲà©\81à¨\95ਾà¨\85 à¨¨à©\80ਤੀ',
+'privacypage' => 'Project:ਲà©\81à¨\95ਾà¨\85 à¨¨à©\80ਤੀ',
 
 'badaccess' => 'ਅਧਿਕਾਰ ਗਲਤੀ',
 'badaccess-group0' => 'ਤੁਹਾਨੂੰ ਉਹ ਐਕਸ਼ਨ ਕਰਨ ਦੀ ਮਨਜ਼ੂਰੀ ਨਹੀਂ, ਜਿਸ ਦੀ ਤੁਸੀਂ ਮੰਗ ਕੀਤੀ ਹੈ।',
@@ -396,19 +399,19 @@ $1',
 'retrievedfrom' => '"$1" ਤੋਂ ਲਿਆ',
 'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
 'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
-'newmessagesdifflink' => 'à¨\86à¨\96਼ਰà©\80 à¨¤à¨¬à¨¦à©\80ਲੀ',
+'newmessagesdifflink' => 'ਪਿà¨\9bਲà©\80 à¨¬à¨¦ਲੀ',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'youhavenewmessagesmanyusers' => 'ਕਈ ਵਰਤੋਂਕਾਰਾਂ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
 'newmessagesdifflinkplural' => 'ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|ਤਬਦੀਲੀਆਂ}}',
 'youhavenewmessagesmulti' => '$1 ’ਤੇ ਤੁਹਾਡੇ ਲਈ ਨਵੇਂ ਸੁਨੇਹੇ ਹਨ',
-'editsection' => 'ਸà©\8bਧ',
-'editold' => 'ਸà©\8bਧà©\8b',
+'editsection' => 'ਸੰਪਾਦਨ',
+'editold' => 'ਸੰਪਾਦਨ',
 'viewsourceold' => 'ਸਰੋਤ ਵੇਖੋ',
-'editlink' => 'ਸà©\8bਧà©\8b',
+'editlink' => 'ਸੰਪਾਦਨ',
 'viewsourcelink' => 'ਸਰੋਤ ਵੇਖੋ',
-'editsectionhint' => 'ਸ਼à©\88à¨\95ਸ਼ਨ à¨¸à©\8bਧ: $1',
-'toc' => 'ਲਿਸà¨\9f',
+'editsectionhint' => 'ਭਾà¨\97 à¨¸à©°à¨ªà¨¾à¨¦à¨¨: $1',
+'toc' => 'ਵਿਸ਼ਾ à¨¸à©\82à¨\9aà©\80',
 'showtoc' => 'ਵੇਖੋ',
 'hidetoc' => 'ਓਹਲੇ',
 'collapsible-collapse' => 'ਸਮੇਟੋ',
@@ -423,21 +426,21 @@ $1',
 'site-atom-feed' => '$1 ਐਟਮ ਫੀਡ',
 'page-rss-feed' => '"$1" RSS ਫੀਡ',
 'page-atom-feed' => '"$1" ਐਟਮ ਫੀਡ',
-'red-link-title' => '$1 (ਸਫ਼ਾ ਮੌਜੂਦ ਨਹੀਂ ਹੈ)',
+'red-link-title' => '$1 (ਪੰਨਾ ਮੌਜੂਦ ਨਹੀਂ ਹੈ)',
 'sort-descending' => 'ਘੱਟਦਾ ਕ੍ਰਮ',
 'sort-ascending' => 'ਵੱਧਦਾ ਕ੍ਰਮ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'ਲà©\87à¨\96',
-'nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¸à¨«à¨¼à¨¾',
+'nstab-main' => 'ਪੰਨਾ',
+'nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨ªà©°à¨¨à©\87',
 'nstab-media' => 'ਮੀਡੀਆ ਸਫ਼ਾ',
-'nstab-special' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼ਾ',
-'nstab-project' => 'ਪà©\8dਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨¸à¨«à¨¼ਾ',
+'nstab-special' => 'à¨\96ਾਸ à¨ªà©°à¨¨ਾ',
+'nstab-project' => 'ਪਰਿਯà©\8bà¨\9cਨਾ à¨ªà©°à¨¨ਾ',
 'nstab-image' => 'ਫ਼ਾਈਲ',
 'nstab-mediawiki' => 'ਸੁਨੇਹਾ',
-'nstab-template' => 'ਫਰਮਾ',
+'nstab-template' => 'ਸਾà¨\82à¨\9aਾ',
 'nstab-help' => 'ਮੱਦਦ ਪੇਜ',
-'nstab-category' => 'à¨\95à©\88à¨\9fà©\87à¨\97ਰੀ',
+'nstab-category' => 'ਸ਼à©\8dਰà©\87ਣੀ',
 
 # Main script and global functions
 'nosuchaction' => 'ਐਸਾ ਕੋਈ ਐਕਸ਼ਨ ਨਹੀਂ ਹੈ',
@@ -455,18 +458,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' => "ਡਾà¨\9fਾਬà©\87ਸ à¨¨à©\82à©° ''$1'' $2 à¨¨à¨¾à¨® à¨¦à¨¾ à¨\95à©\8bà¨\88 à¨¸à¨«à¨¼ਾ ਨਹੀਂ ਮਿਲਿਆ।
-à¨\86ਮ à¨¤à©\8cਰ à¨¤à©\87 à¨®à¨¿à¨\9fਾà¨\8f à¨\9cਾ à¨\9aà©\81ੱà¨\95à©\87 à¨¸à¨«à¨¼à©\87 à¨¦à©\80 à¨\85ਤà©\80ਤ à¨\95à©\9cà©\80 à¨¦à©\80 à¨µà¨°à¨¤à©\8bà¨\82 à¨\95ਰਨ à¨¨à¨¾à¨²à¨¼ ਇੰਝ ਹੁੰਦਾ ਹੈ।
-à¨\9cà©\87 à¨\87ਹ à¨\97ੱਲ à¨¨à¨¹à©\80à¨\82 à¨¤à¨¾à¨\82 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨¤à©\81ਹਾਨà©\82à©° à¨¸à¨¾à¨«à¨¼à¨\9fਵà©\87à¨\85ਰ à¨µà¨¿à¨\9a à¨\96਼ਾਮà©\80 à¨®à¨¿à¨² à¨\97à¨\88 à¨¹à©\88। à¨®à¨¿à¨¹à¨°à¨¬à¨¾à¨¨à©\80 à¨\95ਰà¨\95à©\87 à¨¸à¨«à¨¼ੇ ਦੇ ਪਤੇ ਸਮੇਤ [[Special:ListUsers/sysop|administrator]] ਨੂੰ ਇਤਲਾਹ ਦਿਓ।",
+'missing-article' => "ਡਾà¨\9fਾਬà©\87ਸ à¨¨à©\82à©° ''$1'' $2 à¨¨à¨¾à¨® à¨¦à¨¾ à¨\95à©\8bà¨\88 à¨ªà©°à¨¨ਾ ਨਹੀਂ ਮਿਲਿਆ।
+à¨\86ਮ à¨¤à©\8cਰ à¨¤à©\87 à¨¹à¨\9fਾà¨\88 à¨\9cਾ à¨\9aà©\81ੱà¨\95à©\87 à¨ªà©°à¨¨à©\87 à¨¦à¨¾ à¨\87ਤਿਹਾਸ à¨\95à©\9cà©\80 à¨¦à©\80 à¨µà¨°à¨¤à©\8bà¨\82 à¨\95ਰਨ à¨¨à¨¾à¨² ਇੰਝ ਹੁੰਦਾ ਹੈ।
+à¨\9cà©\87 à¨\87ਹ à¨\97ੱਲ à¨¨à¨¹à©\80à¨\82 à¨¤à¨¾à¨\82 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨¤à©\81ਹਾਨà©\82à©° à¨¸à¨¾à¨«à¨¼à¨\9fਵà©\87à¨\85ਰ à¨µà¨¿à¨\9a à¨\96ਾਮà©\80 à¨®à¨¿à¨² à¨\97à¨\88 à¨¹à©\88। à¨\95ਿਰਪਾ à¨\95ਰà¨\95à©\87 à¨ªà©°à¨¨ੇ ਦੇ ਪਤੇ ਸਮੇਤ [[Special:ListUsers/sysop|administrator]] ਨੂੰ ਇਤਲਾਹ ਦਿਓ।",
 'missingarticle-rev' => '(ਬਦਲਾਅ#: $1)',
 'missingarticle-diff' => '(ਫ਼ਰਕ: $1, $2)',
 'readonly_lag' => 'ਜਦੌਂ ਤਕ ਅਧੀਨ ਡੇਟਾਬੇਸ ਸਰਵਰ ਸੁਤੰਤਰ ਡੈਟਾਬੇਸ ਸਰਵਰ ਦੀ ਪਕੜ ਵਿਚ ਨਹੀਂ ਆ ਜਾਂਦੇ ਡੈਟਾਬੇਸ ਸਵੈ ਜਕੜਿਆ ਗਿਆ ਹੈ।',
@@ -488,11 +490,12 @@ $1',
 'cannotdelete-title' => "ਸਫ਼ਾ ''$1'' ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ",
 'delete-hook-aborted' => 'ਹੁੱਕ ਨੇ ਮਿਟਾਉਣਾ ਨਾਕਾਮ ਕੀਤਾ।
 ਇਸਨੇ ਕੋਈ ਕਾਰਨ ਨਹੀਂ ਦੱਸਿਆ।',
-'badtitle' => 'à¨\97਼ਲਤ à¨¸à¨¿à¨°à¨²à©\87à¨\96',
-'badtitletext' => 'ਤà©\81ਹਾਡਾ à¨¦à¨°à¨\96਼ਾਸਤਸ਼à©\81ਦਾ à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¨à¨¾à¨\95ਾਬਿਲ, à¨\96਼ਾਲà©\80 à¨\9cਾà¨\82 à¨\97਼ਲਤ à¨\9cà©\81à©\9cਿà¨\86 à¨¹à©\8bà¨\87à¨\86 inter-languagd à¨\9cਾà¨\82 inter-wiki à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¹à©\88। à¨\87ਹ à¨µà©\80 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨\95ਿ à¨\87ਸ à¨µà¨¿à¨\9a à¨\87à¨\95-ਦà©\8b à¨\85ੱà¨\96ਰ à¨\90ਸà©\87 à¨¹à©\8bਣ à¨\9cà©\8b à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨µà¨¿ਚ ਵਰਤੇ ਨਹੀਂ ਜਾ ਸਕਦੇ।',
+'badtitle' => 'ਗਲਤ ਸਿਰਲੇਖ',
+'badtitletext' => 'ਤà©\81ਹਾਡਾ à¨¦à¨°à¨\96ਾਸਤਸ਼à©\81ਦਾ à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¨à¨¾à¨\95ਾਬਿਲ, à¨\96ਾਲà©\80 à¨\9cਾà¨\82 à¨\97ਲਤ à¨\9cà©\81à©\9cਿà¨\86 à¨¹à©\8bà¨\87à¨\86 inter-languagd à¨\9cਾà¨\82 inter-wiki à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¹à©\88। à¨\87ਹ à¨µà©\80 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨\95ਿ à¨\87ਸ à¨µà¨¿à©±à¨\9a à¨\87à¨\95-ਦà©\8b à¨\85ੱà¨\96ਰ à¨\90ਸà©\87 à¨¹à©\8bਣ à¨\9cà©\8b à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨µà¨¿à©±ਚ ਵਰਤੇ ਨਹੀਂ ਜਾ ਸਕਦੇ।',
 'viewsource' => 'ਸਰੋਤ ਵੇਖੋ',
 'viewsource-title' => '$1 ਲਈ ਸਰੋਤ ਵੇਖੋ',
-'protectedpagetext' => 'ਇਹ ਸਫ਼ਾ ਫੇਰ-ਬਦਲ ਕਰਨ ਖ਼ਿਲਾਫ਼ ਸੁਰੱਖਿਅਤ ਹੈ।',
+'actionthrottled' => 'ਕਾਰਜ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ',
+'protectedpagetext' => 'ਇਹ ਪੰਨੇ ਸੰਪਾਦਨ ਅਤੇ ਹੋਰ ਕੰਮ ਤੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਹੋਇਆ ਹੈ।',
 'viewsourcetext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'viewyourtext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਕੀਤੀਆਂ "ਆਪਣੀਆਂ ਸੋਧਾਂ" ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'protectedinterface' => 'ਇਹ ਪੰਨਾ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦਾ ਮੂਲ ਪਾਠ ਹੈ ,ਅਤੇ ਦੁਰਵਰਤੌਂ ਤੌਂ ਬਚਾਅ ਲਈ ਰਾਖਵਾਂ ਕੀਤਾ ਗਿਆ ਹੈ।',
@@ -515,10 +518,9 @@ $1',
 
 You can continue to use {{SITENAME}} anonymously, or you can log in again as the same or as a different user.
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-'welcomecreation' => '== ਜੀ ਆਇਆਂ ਨੂੰ, $1! ==
-
-ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦਾਂ]] ਬਦਲਣੀਆਂ ਨਾ ਭੁੱਲੋ।',
-'yourname' => 'ਮੈਂਬਰ ਨਾਂ:',
+'welcomeuser' => 'ਸੁਆਗਤ, $1!',
+'welcomecreation-msg' => 'ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦਾਂ]] ਬਦਲਣੀਆਂ ਨਾ ਭੁੱਲੋ।',
+'yourname' => 'ਮੈਂਬਰ ਨਾਮ:',
 'yourpassword' => 'ਪਾਸਵਰਡ:',
 'yourpasswordagain' => 'ਪਾਸਵਰਡ ਦੁਬਾਰਾ ਲਿਖੋ:',
 'remembermypassword' => 'ਇਸ ਕੰਪਿਊਟਰ ’ਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ (ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ)',
@@ -598,7 +600,7 @@ Note that some pages may continue to be displayed as if you were still logged in
 'login-throttled' => 'ਤੁਸੀਂ ਬਹੁਤ ਸਾਰੀਆਂ ਤਾਜ਼ਾ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਹਨ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਥੋੜੀ ਉਡੀਕ ਕਰੋ।',
 'login-abort-generic' => 'ਤੁਹਾਡੀ ਲਾਗਇਨ ਨਾਕਾਮ ਸੀ - ਰੱਦ',
-'loginlanguagelabel' => 'ਬà©\8bਲà©\80: $1',
+'loginlanguagelabel' => 'ਭਾਸ਼ਾ: $1',
 
 # E-mail sending
 'user-mail-no-addy' => 'ਬਿਨਾਂ ਈ-ਮੇਲ ਪਤਾ ਦਿੱਤੇ ਈ-ਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ।',
@@ -658,49 +660,49 @@ $2
 'bold_tip' => 'ਗੁੜ੍ਹੀ ਲਿਖਾਈ',
 'italic_sample' => 'ਟੇਢੀ ਲਿਖਤ',
 'italic_tip' => 'ਟੇਢੀ ਲਿਖਾਈ',
-'link_sample' => 'ਲਿੰà¨\95 à¨¦à¨¾ ਸਿਰਲੇਖ',
-'link_tip' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨²à¨¿à©°à¨\95',
+'link_sample' => 'à¨\95à©\9cà©\80 ਸਿਰਲੇਖ',
+'link_tip' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨\95à©\9cà©\80',
 'extlink_sample' => 'http://www.example.com ਲਿੰਕ ਸਿਰਲੇਖ',
-'extlink_tip' => 'ਬਾਹਰà©\80 à¨²à¨¿à©°à¨\95 (ਅਗੇਤਰ http:// ਯਾਦ ਰੱਖੋ)',
-'headline_sample' => 'ਸà©\81ਰà¨\96਼à©\80 à¨¦à©\80 à¨²à¨¿à¨\96ਤ',
+'extlink_tip' => 'ਬਾਹਰà©\80 à¨\95à©\9cà©\80 (ਅਗੇਤਰ http:// ਯਾਦ ਰੱਖੋ)',
+'headline_sample' => 'ਸਿਰਲà©\87à¨\96',
 'headline_tip' => 'ਦੂਜੇ ਦਰਜੇ ਦਾ ਸਿਰਲੇਖ',
 'nowiki_sample' => 'ਅਸੰਗਠਿਤ ਪਾਠ (NON -FORMATTED) ਇੱਥੇ ਰਖੋ।',
 'nowiki_tip' => 'ਵਿਕੀ ਫ਼ੌਰਮੈਟਿੰਗ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰੋ',
 'image_tip' => 'ਇੰਬੈੱਡ ਚਿੱਤਰ',
-'media_tip' => 'ਮà©\80ਡਿà¨\86 à¨«à¨¾à¨\87ਲ à¨²à¨¿à©°à¨\95',
-'sig_tip' => 'ਤà©\81ਹਾਡà©\87 à¨¦à¨¸à¨¤à¨\96਼ਤ à¨µà¨\95ਤ ਸਮੇਤ',
+'media_tip' => 'ਫ਼ਾà¨\88ਲ à¨\95à©\9cà©\80',
+'sig_tip' => 'ਤà©\81ਹਾਡà©\87 à¨¦à¨¸à¨¤à¨\96ਤ à¨¸à¨®à©\87à¨\82 ਸਮੇਤ',
 'hr_tip' => 'ਲੇਟਵੀਂ ਲਾਈਨ (use sparingly)',
 
 # Edit pages
 'summary' => 'ਸਾਰ:',
 'subject' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ:',
-'minoredit' => 'à¨\87ਹ à¨\9bà©\8bà¨\9fà©\80 à¨¸à©\8bਧ ਹੈ',
-'watchthis' => 'à¨\87ਸ à¨¸à¨«à¨¼à©\87 â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ ਰੱਖੋ',
-'savearticle' => 'ਸਫ਼ਾ ਸਾਂਭੋ',
+'minoredit' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fà©\80 à¨¬à¨¦à¨²à©\80 ਹੈ',
+'watchthis' => 'à¨\87ਸ à¨ªà©°à¨¨à©\87 â\80\99ਤà©\87 à¨§à¨¿à¨\86ਨ ਰੱਖੋ',
+'savearticle' => 'ਪੰਨਾ ਸਾਂਭੋ',
 'preview' => 'ਝਲਕ',
 'showpreview' => 'ਝਲਕ ਵੇਖੋ',
 'showlivepreview' => 'ਲਾਈਵ ਝਲਕ',
 'showdiff' => 'ਤਬਦੀਲੀ ਵੇਖੋ',
-'anoneditwarning' => "'''à¨\9aà©\87ਤਾਵਨà©\80:''' à¨¤à©\81ਸà©\80à¨\82 à¨²à¨¾à¨\97à¨\87ਨ à¨¨à¨¹à©\80à¨\82 à¨\95à©\80ਤਾ à¨¹à©\88। à¨¤à©\81ਹਾਡਾ IP à¨\90ਡਰà©\88ੱਸ à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¦à©\87 à¨\85ਤà©\80ਤ ਵਿੱਚ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾਵੇਗਾ।",
+'anoneditwarning' => "'''à¨\9aà©\87ਤਾਵਨà©\80:''' à¨¤à©\81ਸà©\80à¨\82 à¨²à¨¾à¨\97à¨\87ਨ à¨¨à¨¹à©\80à¨\82 à¨\95à©\80ਤਾ à¨¹à©\88। à¨¤à©\81ਹਾਡਾ IP à¨\90ਡਰà©\88ੱਸ à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¦à©\87 à¨\87ਤਿਹਾਸ ਵਿੱਚ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾਵੇਗਾ।",
 'anonpreviewwarning' => "''ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ। ਤਬਦੀਲੀ ਸਾਂਭਣ ਨਾਲ਼ ਤੁਹਾਡਾ IP ਪਤਾ ਸਫ਼ੇ ਦੇ ਸੋਧ ਅਤੀਤ ਵਿਚ ਰਿਕਾਰਡ ਹੋ ਜਾਵੇਗਾ।''",
 'missingsummary' => "'''ਯਾਦ-ਦਹਾਨੀ:''' ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। ਜੇ ਤੁਸੀਂ \"{{int:savearticle}}\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਸਾਂਭਿਆ ਜਾਵੇਗਾ।",
 'missingcommenttext' => 'ਹੇਠਾਂ ਇੱਕ ਟਿੱਪਣੀ ਦਿਓ।',
 'summary-preview' => 'ਸੋਧ ਸਾਰ ਦੀ ਝਲਕ:',
 'subject-preview' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ ਝਲਕ:',
 'blockedtitle' => 'ਯੂਜ਼ਰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ',
-'blockedtext' => "'''ਤà©\81ਹਾਡà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨¨à¨¾à¨\82 ਜਾਂ IP ਪਤੇ ’ਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''
+'blockedtext' => "'''ਤà©\81ਹਾਡà©\87 à¨®à©\8cਮਬਰ à¨¨à¨¾à¨® ਜਾਂ IP ਪਤੇ ’ਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''
 
 ਪਾਬੰਦੀ $1 ਨੇ ਲਾਈ ਹੈ।
 ਦਿੱਤਾ ਗਿਆ ਕਾਰਨ ਇਹ ਹੈ, ''$2''।
 
 * ਪਾਬੰਦੀ ਸ਼ੁਰੂ: $8
-* à¨ªà¨¾à¨¬à©°à¨¦à©\80 à¨\96਼ਤਮ: $6
-* à¨ªà¨¾à¨¬à©°à¨¦à©\80 à¨²à¨¾à¨\89ਣ à¨µà¨¾à¨²à¨¼à©\87 à¨¦à¨¾ à¨\87ਰਾਦਾ: $7
+* ਪਾਬੰਦੀ ਖਤਮ: $6
+* ਪਾਬੰਦੀ ਲਾਉਣ ਵਾਲੇ ਦਾ ਇਰਾਦਾ: $7
 
 ਪਾਬੰਦੀ ਬਾਰੇ ਚਰਚਾ ਕਰਨ ਲਈ ਤੁਸੀਂ $1 ਜਾਂ ਕਿਸੇ ਹੋਰ
 [[{{MediaWiki:Grouppage-
-sysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
-ਤੁਸੀਂ 'ਇਸ ਮੈਂਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ' ਸਹੂਲਤ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕਦੇ ਜੇ ਤੁਹਾਡੀਆਂ [[Special:Preferences|ਖਾਤਾ ਪਸੰਦਾਂ]] ਵਿਚ ਇੱਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ ਜਾਂ ਜੇ ਤੁਹਾਡੇ ਇਸਨੂੰ ਵਰਤਣ ਤੇ ਪਾਬੰਦੀ ਹੈ।
+sysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
+ਤà©\81ਸà©\80à¨\82 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ à¨¨à©\82à©° à¨\88-ਮà©\87ਲ à¨­à©\87à¨\9cà©\8b' à¨¸à¨¹à©\82ਲਤ à¨¦à©\80 à¨µà¨°à¨¤à©\8bà¨\82 à¨¨à¨¹à©\80à¨\82 à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨\9cà©\87 à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 [[Special:Preferences|à¨\96ਾਤਾ à¨ªà¨¸à©°à¨¦à¨¾à¨\82]] à¨µà¨¿à©±à¨\9a à¨\87ੱà¨\95 à¨¸à¨¹à©\80 à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¨à¨¹à©\80à¨\82 à¨¦à¨¿à©±à¨¤à¨¾ à¨\97ਿà¨\86 à¨\9cਾà¨\82 à¨\9cà©\87 à¨¤à©\81ਹਾਡà©\87 à¨\87ਸਨà©\82à©° à¨µà¨°à¨¤à¨£ à¨¤à©\87 à¨ªà¨¾à¨¬à©°à¨¦à©\80 à¨¹à©\88।
 ਤੁਹਾਡਾ ਚਾਲੂ IP ਪਤਾ $3 ਹੈ,
 ਅਤੇ ਪਾਬੰਦੀ ਪਤਾ #$5 ਹੈ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੇ ਕਿਸੇ ਵੀ ਸਵਾਲ ਜਾਂ ਪੁੱਛ-ਗਿੱਛ ਵਿਚ ਇਹ ਉੱਪਰਲੀ ਤਫ਼ਸੀਲ ਜ਼ਰੂਰ ਸ਼ਾਮਲ ਕਰੋ।",
@@ -718,15 +720,15 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'accmailtext' => "[[User talk:$1|$1]] ਲਈ ਰਲ਼ਵੇਂ ਤੌਰ ’ਤੇ ਬਣਿਆ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।
 ਇਸ ਨਵੇਂ ਖਾਤੇ ਲਈ ਲਾਗਇਨ ਕਰਨ ਤੋਂ ਬਾਅਦ ''[[Special:ChangePassword|ਪਾਸਵਰਡ ਬਦਲੋ]]'' ’ਤੇ ਜਾ ਕੇ ਪਾਸਵਰਡ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।",
 'newarticle' => '(ਨਵਾਂ)',
-'newarticletext' => "ਤà©\81ਸà©\80à¨\82 à¨\95ਿਸà©\87 à¨\90ਸà©\87 à¨¸à¨«à¨¼à©\87 à¨¦à©\87 à¨²à¨¿à©°à¨\95 ’ਤੇ ਹੋ ਜੋ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
-ਸਫ਼ਾ à¨¬à¨£à¨¾à¨\89ਣ à¨²à¨\88 à¨¹à©\87ਠ à¨¦à¨¿à©±à¨¤à©\87 à¨\96਼ਾਨà©\87 à¨µà¨¿à¨\9a à¨²à¨¿à¨\96ਣਾ à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà©\8b। (ਹà©\8bਰ à¨®à¨¦à¨¦ à¨²à¨\88 [[{{MediaWiki:Helppage}}|ਮਦਦ à¨¸à¨«à¨¼ਾ]] ਵੇਖੋ।)
-à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\97਼ਲਤà©\80 à¨¨à¨¾à¨²à¨¼ ਇੱਥੇ ਆਏ ਹੋ ਤਾਂ ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ '''ਪਿੱਛੇ''' ਬਟਨ ’ਤੇ ਕਲਿੱਕ ਕਰੋ।",
+'newarticletext' => "ਤà©\81ਸà©\80à¨\82 à¨\95ਿਸà©\87 à¨\90ਸà©\87 à¨ªà©°à¨¨à©\87 à¨¦à©\87 à¨\95à©\9cà©\80 ’ਤੇ ਹੋ ਜੋ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
+ਸਫ਼ਾ à¨¬à¨£à¨¾à¨\89ਣ à¨²à¨\88 à¨¹à©\87ਠ à¨¦à¨¿à©±à¨¤à©\87 à¨\96ਾਨà©\87 à¨µà¨¿à©±à¨\9a à¨²à¨¿à¨\96ਣਾ à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà©\8b। (ਹà©\8bਰ à¨®à¨¦à¨¦ à¨²à¨\88 [[{{MediaWiki:Helppage}}|ਮਦਦ à¨ªà©°à¨¨ਾ]] ਵੇਖੋ।)
+à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\97ਲਤà©\80 à¨¨à¨¾à¨² ਇੱਥੇ ਆਏ ਹੋ ਤਾਂ ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ '''ਪਿੱਛੇ''' ਬਟਨ ’ਤੇ ਕਲਿੱਕ ਕਰੋ।",
 'anontalkpagetext' => "----''ਇਹ ਇਕ ਗੁਮਨਾਮ ਮੈਂਬਰ ਲਈ ਇਕ ਚਰਚਾ ਸਫ਼ਾ ਹੈ ਜਿਸਨੇ ਹਾਲੇ ਖਾਤਾ ਨਹੀ ਬਣਾਇਆ ਜਾਂ ਉਸਨੂੰ ਵਰਤ ਨਹੀਂ ਰਿਹਾ।
 ਇਸ ਵਾਸਤੇ ਸਾਡੇ ਕੋਲ ਉਸਨੂੰ ਪਛਾਨਣ ਲਈ IP ਪਤਾ ਹੈ।
 ਇਕ IP ਪਤਾ ਕਈ ਵਰਤਣ ਵਾਲ਼ਿਆਂ ਦੁਆਰਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
 ਜੇ ਤੁਸੀਂ ਇੱਕ ਗੁਮਨਾਮ ਮੈਂਬਰ ਹੋ ਅਤੇ ਸਮਝਦੇ ਹੋ ਕਿ ਇਹ ਟਿੱਪਣੀਆਂ ਤੁਹਾਡੇ ਲਈ ਹਨ ਤਾਂ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਹੋਰਾਂ ਗੁਮਨਾਮ ਮੈਂਬਰਾਂ ਨਾਲ਼ ਪੈਦਾ ਹੋਣ ਵਾਲ਼ੀ ਉਲਝਣ ਤੋਂ ਬਚਣ ਲਈ [[Special:UserLogin/signup|ਖਾਤਾ ਬਣਾਓ]] ਜਾਂ [[Special:UserLogin|ਲਾਗਇਨ ਕਰੋ]]।''",
-'noarticletext' => 'ਫ਼ਿਲਹਾਲ à¨\87ਸ à¨¸à¨«à¨¼à©\87 â\80\99ਤà©\87 à¨\95à©\8bà¨\88 à¨²à¨¿à¨\96ਤ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88। à¨¤à©\81ਸà©\80à¨\82 à¨¦à©\82à¨\9cà©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 â\80\99ਤà©\87 [[Special:Search/{{PAGENAME}}|à¨\87ਸ à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¦à©\80 à¨\96à©\8bà¨\9c]] à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨¹à©\8b, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨\9aਿੱਠà©\87 à¨\96à©\8bà¨\9c] à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\9cਾà¨\82 à¨\87ਸ [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¨¸à¨«à¨¼à©\87 à¨µà¨¿ਚ ਲਿਖ] ਸਕਦੇ ਹੋ</span>।',
-'noarticletext-nopermission' => 'ਫ਼ਿਲਹਾਲ à¨\87ਸ à¨¸à¨«à¨¼à©\87 â\80\99ਤà©\87 à¨\95à©\8bà¨\88 à¨²à¨¿à¨\96ਤ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88। à¨¤à©\81ਸà©\80à¨\82 à¨¦à©\82ਸਰà©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¤à©\87 [[Special:Search/{{PAGENAME}}|à¨\87ਸ à¨ªà¨¾à¨  à¨¦à©\80 à¨\96à©\8bà¨\9c]] à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨¹à©\8b, à¨¸à¨¬à©°à¨§à¨¤ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¨\9aਿੱਠà©\87] à¨\96à©\8bà¨\9c à¨¸à¨\95ਦà©\87 à¨¹à©\8b, à¨\9cਾà¨\82 [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨µà¨¿à¨\9a à¨²à¨¿à¨\96] à¨¸à¨\95ਦà©\87 à¨¹à©\8b</span>।',
+'noarticletext' => 'ਫ਼ਿਲਹਾਲ à¨\87ਸ à¨ªà©°à¨¨à©\87 â\80\99ਤà©\87 à¨\95à©\8bà¨\88 à¨²à¨¿à¨\96ਤ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88। à¨¤à©\81ਸà©\80à¨\82 à¨¦à©\82à¨\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 â\80\99ਤà©\87 [[Special:Search/{{PAGENAME}}|à¨\87ਸ à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¦à©\80 à¨\96à©\8bà¨\9c]] à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨¹à©\8b, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨\9aਿੱਠà©\87 à¨\96à©\8bà¨\9c] à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\9cਾà¨\82 à¨\87ਸ [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¨ªà©°à¨¨à©\87 à¨µà¨¿à©±ਚ ਲਿਖ] ਸਕਦੇ ਹੋ</span>।',
+'noarticletext-nopermission' => 'ਫ਼ਿਲਹਾਲ à¨\87ਸ à¨ªà©°à¨¨à©\87 â\80\99ਤà©\87 à¨\95à©\8bà¨\88 à¨²à¨¿à¨\96ਤ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88। à¨¤à©\81ਸà©\80à¨\82 à¨¦à©\82ਸਰà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 â\80\99ਤà©\87 [[Special:Search/{{PAGENAME}}|à¨\87ਸ à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¦à©\80 à¨\96à©\8bà¨\9c]] à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨¹à©\8b, à¨¸à¨¬à©°à¨§à¨¤ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¨\9aਿੱਠà©\87] à¨\96à©\8bà¨\9c à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\9cਾà¨\82 [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨µà¨¿à©±à¨\9a à¨²à¨¿à¨\96] à¨¸à¨\95ਦà©\87 à¨¹à©\8b।</span>',
 'userpage-userdoesnotexist' => 'ਮੈਂਬਰ ਖਾਤਾ "$1" ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ।
 ਜੇ ਤੁਸੀਂ ਇਸਨੂੰ ਬਣਾਉਣਾ/ਸੋਧਣਾ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਮਿਰਬਾਨੀ ਕਰਕੇ ਜਾਂਚ ਕਰ ਲਓ।',
 'userpage-userdoesnotexist-view' => 'ਮੈਂਬਰ ਖਾਤਾ "$1" ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ।',
@@ -744,12 +746,12 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 '''ਇਹ ਹਾਲੇ ਸਾਂਭੀ ਨਹੀਂ ਗਈ ਹੈ!'''",
 'updated' => '(ਅੱਪਡੇਟ)',
 'note' => "'''ਨੋਟ:'''",
-'previewnote' => "'''ਯਾਦ à¨°à©±à¨\96à©\8b à¨\87ਹ à¨¸à¨¿à¨°à¨«à¨¼ à¨\87à¨\95 à¨\9dਲà¨\95 à¨¹à©\88।''' à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!",
-'continue-editing' => 'ਸà©\8bਧਣਾ ਜਾਰੀ ਰੱਖੋ',
+'previewnote' => "'''ਯਾਦ à¨°à©±à¨\96à©\8b à¨\87ਹ à¨\95à©\87ਵਲ à¨\87ੱà¨\95 à¨\9dਲà¨\95 à¨¹à©\88।''' à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!",
+'continue-editing' => 'ਸੰਪਾਦਨ ਜਾਰੀ ਰੱਖੋ',
 'previewconflict' => 'ਇਹ ਝਲਕ ਲਿਖਤ ਦਾ ਓਹ ਅਕਸ ਪੇਸ਼ ਕਰਦੀ ਹੈ ਜਿਵੇਂ ਓਹ ਤੁਹਾਡੇ ਸਾਂਭੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਦਿੱਸੇਗਾ।',
-'editing' => '$1 à¨¸à©\8bਧਿà¨\86 à¨\9cਾ à¨°à¨¿à¨¹à¨¾ à¨¹à©\88',
+'editing' => '$1 à¨¸à©°à¨ªà¨¾à¨¦à¨¨',
 'creating' => '$1 ਬਣਾ ਰਹੇ ਹੋ',
-'editingsection' => '$1 à¨\9c਼à©\87ਰà©\87 à¨¸à©\81ਧਾà¨\88 à¨¹à©\88 (ਸ਼à©\88à¨\95ਸ਼ਨ)',
+'editingsection' => '$1 à¨¸à©°à¨ªà¨¾à¨¦à¨¨ (ਭਾà¨\97)',
 'editingcomment' => '$1 ਸੋਧ ਰਹੇ ਹੋ (ਨਵਾਂ ਸੈਕਸ਼ਨ)',
 'editconflict' => 'ਅਪਵਾਦ ਟਿੱਪਣੀ: $1',
 'yourtext' => 'ਤੁਹਾਡਾ ਟੈਕਸਟ',
@@ -767,27 +769,26 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 ਚਿੱਠੇ ਵਿਚਲਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
 'titleprotectedwarning' => "'''ਖ਼ਬਰਦਾਰ: ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਹੈ ਸੋ ਇਸਨੂੰ ਬਣਾਉਣ ਲਈ [[Special:ListGroupRights|ਖ਼ਾਸ ਹੱਕਾਂ]] ਦੀ ਲੋੜ ਹੈ।'''
 ਚਿੱਠੇ ਦਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
-'templatesused' => 'à¨\87ਸ à¨¸à¨«ੇ ’ਤੇ {{PLURAL:$1|ਵਰਤਿਆ ਸਾਂਚਾ|ਵਰਤੇ ਸਾਂਚੇ}}:',
+'templatesused' => 'à¨\87ਸ à¨ªà©°à¨¨ੇ ’ਤੇ {{PLURAL:$1|ਵਰਤਿਆ ਸਾਂਚਾ|ਵਰਤੇ ਸਾਂਚੇ}}:',
 'templatesusedpreview' => "{{PLURAL:$1|ਟੈਪਲੇਟ|ਟੈਪਲੇਟ}} ਇਹ ਝਲਕ 'ਚ ਵਰਤੇ ਜਾਂਦੇ ਹਨ:",
-'templatesusedsection' => 'à¨\87ਹ à¨¸à¨¼à©\88à¨\95ਸ਼ਨ à¨µà¨¿à©±à¨\9a à¨\9fà©\88ਪਲà©\87à¨\9f ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:',
+'templatesusedsection' => 'à¨\87ਹ à¨­à¨¾à¨\97 à¨µà¨¿à©±à¨\9a {{PLURAL:$1|ਸਾà¨\82à¨\9aਾ|ਸਾà¨\82à¨\9aà©\87}} ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:',
 'template-protected' => '(ਸੁਰੱਖਿਅਤ)',
 'template-semiprotected' => '(ਨੀਮ-ਸੁਰੱਖਿਅਤ)',
-'hiddencategories' => 'à¨\87ਹ à¨¸à¨«à¨¼ਾ {{PLURAL:$1|੧ ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|
+'hiddencategories' => 'à¨\87ਹ à¨ªà©°à¨¨ਾ {{PLURAL:$1|੧ ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|
 $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ ਹੈ:',
-'nocreatetitle' => 'ਸਫ਼ਾ ਬਣਾਉਣ ਦੀ ਹੱਦ ਹੈ',
 'nocreatetext' => '{{SITENAME}} ਨੇ ਨਵੇਂ ਸਫ਼ੇ ਬਣਾਉਣ ਤੇ ਰੋਕ ਲਾਈ ਹੋਈ ਹੈ।
 ਤੁਸੀਂ ਵਾਪਸ ਜਾ ਕੇ ਮੌਜੂਦਾ ਸਫ਼ੇ ਸੋਧ ਸਕਦੇ ਹੋ ਜਾਂ [[Special:UserLogin|ਲਾਗਇਨ ਜਾਂ ਖਾਤਾ ਬਣਾ]] ਸਕਦੇ ਹੋ।',
 'nocreate-loggedin' => 'ਤੁਹਾਨੂੰ ਨਵੇਂ ਸਫ਼ੇ ਬਣਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
 'permissionserrors' => 'ਅਧਿਕਾਰ ਗਲਤੀਆਂ',
 'permissionserrorstext' => 'ਤੁਹਾਨੂੰ ਇੰਝ ਕਰਨ ਦੇ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ। ਹੇਠ ਦਿੱਤੇ {{PLURAL:$1|ਕਾਰਨ|ਕਾਰਨ}} ਨੇ:',
 'permissionserrorstext-withaction' => '{{PLURAL:$1|ਇਸ ਕਾਰਨ|ਇਹਨਾਂ ਕਾਰਨਾਂ}} ਕਰਕੇ ਤੁਹਾਨੂੰ $2 ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ:',
-'recreate-moveddeleted-warn' => "'''à¨\96਼ਬਰਦਾਰ:
-ਤà©\81ਸà©\80à¨\82 à¨\90ਸਾ à¨¸à¨«à¨¼à¨¾ à¨¬à¨£à¨¾ à¨°à¨¹à©\87 à¨¹à©\8b à¨\9cà©\8b à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨®à¨¿ਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।'''
+'recreate-moveddeleted-warn' => "'''à¨\9aਿਤਾਵਣà©\80:
+ਤà©\81ਸà©\80à¨\82 à¨\90ਸਾ à¨ªà©°à¨¨à¨¾ à¨¬à¨£à¨¾ à¨°à¨¹à©\87 à¨¹à©\8b à¨\9cà©\8b à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¹ਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।'''
 
-à¨\96਼ਿà¨\86ਲ à¨\95ਰà©\8b à¨\95ਿ à¨\95à©\80 à¨\87ਸ à¨¸à¨«à¨¼ੇ ਦਾ ਕਾਇਮ ਰਹਿਣਾ ਠੀਕ ਹੈ।
+à¨\96ਿà¨\86ਲ à¨\95ਰà©\8b à¨\95ਿ à¨\95à©\80 à¨\87ਸ à¨ªà©°à¨¨ੇ ਦਾ ਕਾਇਮ ਰਹਿਣਾ ਠੀਕ ਹੈ।
 ਇਸਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
-'moveddeleted-notice' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨®à¨¿ਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
-à¨\87ਸਦà©\87 à¨®à¨¿ਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ।',
+'moveddeleted-notice' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨¹ਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
+à¨\87ਸਦà©\87 à¨¹ਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ।',
 'log-fulllog' => 'ਪੂਰਾ ਚਿੱਠਾ ਵੇਖੋ',
 'edit-gone-missing' => 'ਸਫ਼ਾ ਅਪਡੇਟ ਨਹੀਂ ਹੋ ਸਕਿਆ।
 ਲਗਦਾ ਹੈ ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
@@ -796,11 +797,11 @@ $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ 
 ਇਹ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''à¨\96਼ਬਰਦਾਰ:''' à¨\9fà©\88à¨\82ਪਲà©\87à¨\9fਾà¨\82 ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। ਕੁਝ ਟੈਂਪਲੇਟ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣਗੇ।",
-'post-expand-template-inclusion-category' => 'à¨\93ਹ à¨¸à¨«à¨¼ੇ ਜਿੱਥੇ ਟੈਂਪਲੇਟਾਂ ਦੇ ਸ਼ਾਮਲ ਕਰਨ ਦਾ ਅਕਾਰ ਹੱਦੋਂ ਵਧ ਗਿਆ ਹੈ',
+'post-expand-template-inclusion-warning' => "'''à¨\96ਬਰਦਾਰ:''' à¨¸à¨¾à¨\82à¨\9aਾ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। ਕੁਝ ਟੈਂਪਲੇਟ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣਗੇ।",
+'post-expand-template-inclusion-category' => 'à¨\93ਹ à¨ªà©°à¨¨ੇ ਜਿੱਥੇ ਟੈਂਪਲੇਟਾਂ ਦੇ ਸ਼ਾਮਲ ਕਰਨ ਦਾ ਅਕਾਰ ਹੱਦੋਂ ਵਧ ਗਿਆ ਹੈ',
 'post-expand-template-argument-warning' => "'''ਖ਼ਬਰਦਾਰ:'''
-à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¤à©\87 à¨\98ੱà¨\9fà©\8b à¨\98ੱà¨\9f à¨\87à¨\95 à¨\90ਸà©\80 à¨\9fà©\88à¨\82ਪਲà©\87à¨\9f à¨¬à¨¹à¨¿à¨¸ à¨¹à©\88 à¨\9cਿਸ à¨¦à¨¾ à¨\85à¨\95ਾਰ à¨¬à¨¹à©\81ਤ à¨µà©±à¨¡à¨¾ à¨¹à©\88। à¨\90ਸੀਆਂ ਬਹਿਸਾਂ ਨੂੰ ਛੱਡ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
-'post-expand-template-argument-category' => 'à¨\90ਸà©\87 à¨¸à¨«à¨¼à©\87 à¨\9cਿਨà©\8dਹਾà¨\82 à¨µà¨¿à¨\9a à¨«à¨¼à¨°à¨®ੇ ਦੇ ਸਁਘਟਕ ਛੁੱਟ ਗਏ ਹਨ ।',
+à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¤à©\87 à¨\98ੱà¨\9fà©\8b à¨\98ੱà¨\9f à¨\87ੱà¨\95 à¨\90ਸà©\80 à¨¸à¨¾à¨\82à¨\9aਾ à¨¬à¨¹à¨¿à¨¸ à¨¹à©\88 à¨\9cਿਸ à¨¦à¨¾ à¨\85à¨\95ਾਰ à¨¬à¨¹à©\81ਤ à¨µà©±à¨¡à¨¾ à¨¹à©\88। à¨\85à¨\9cਿਹੀਆਂ ਬਹਿਸਾਂ ਨੂੰ ਛੱਡ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
+'post-expand-template-argument-category' => 'à¨\90ਸà©\87 à¨ªà©°à¨¨à©\87 à¨\9cਿਨà©\8dਹਾà¨\82 à¨µà¨¿à©±à¨\9a à¨¸à¨¾à¨\82à¨\9aੇ ਦੇ ਸਁਘਟਕ ਛੁੱਟ ਗਏ ਹਨ ।',
 'parser-template-loop-warning' => 'ਸਾਂਚੇ ਦਾ ਲੂਪ ਲੱਭਿਆ: [[$1]]',
 
 # "Undo" feature
@@ -816,26 +817,26 @@ $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ 
 $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 
 # History pages
-'viewpagelogs' => 'à¨\87ਸ à¨¸à¨«à¨¼ੇ ਲਈ ਚਿੱਠੇ ਵੇਖੋ',
+'viewpagelogs' => 'à¨\87ਸ à¨ªà©°à¨¨ੇ ਲਈ ਚਿੱਠੇ ਵੇਖੋ',
 'nohistory' => 'ਇਸ ਸਫ਼ੇ ਦਾ ਕੋਈ ਸੋਧ ਅਤੀਤ ਨਹੀਂ ਹੈ।',
 'currentrev' => 'ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ',
-'currentrev-asof' => '$1 à¨®à©\81ਤਾਬà¨\95 à¨¸à¨­ à¨¤à©\8bà¨\82 à¨¨à¨µà¨¾à¨\82 à¨°à©\80ਵਿà¨\9c਼ਨ',
-'revisionasof' => '$1 à¨¦à¨¾ à¨°à©\80ਵਿà¨\9c਼ਨ',
-'revision-info' => '$2 à¨¦à¨¾ à¨¬à¨£à¨¾à¨\87à¨\86 $1 à¨¦à¨¾ à¨°à©\80ਵਿà¨\9c਼ਨ',
-'previousrevision' => 'â\86\90ਪà©\81ਰਾਣਾ à¨°à©\80ਵਿà¨\9c਼ਨ',
-'nextrevision' => 'ਨਵਾà¨\82 à¨°à©\80ਵਿà¨\9c਼ਨ→',
-'currentrevisionlink' => 'ਸਭ à¨¤à©\8b à¨¨à¨µà¨¾à¨\82 à¨°à©\80ਵਿà¨\9c਼ਨ',
+'currentrev-asof' => '$1 ਮੁਤਾਬਕ ਸਭ ਤੋਂ ਨਵਾਂ ਰੀਵਿਜਨ',
+'revisionasof' => '$1 ਦਾ ਰੀਵਿਜਨ',
+'revision-info' => '$2 ਦਾ ਬਣਾਇਆ $1 ਦਾ ਰੀਵਿਜਨ',
+'previousrevision' => '←ਪੁਰਾਣਾ ਰੀਵਿਜਨ',
+'nextrevision' => 'ਨਵਾà¨\82 à¨°à©\80ਵਿà¨\9cਨ →',
+'currentrevisionlink' => 'ਸਭ ਤੋ ਨਵਾਂ ਰੀਵਿਜਨ',
 'cur' => 'ਮੌਜੂਦਾ',
 'next' => 'ਅੱਗੇ',
-'last' => 'à¨\86à¨\96਼ਰà©\80',
+'last' => 'ਆਖਰੀ',
 'page_first' => 'ਪਹਿਲਾਂ',
 'page_last' => 'ਆਖਰੀ',
 'histlegend' => "ਫ਼ਰਕ ਵੇਖੋ:
-ਮà©\81à¨\95ਾਬਲਾ à¨\95ਰਨ à¨²à¨\88 à¨°à©\80ਵਿà¨\9c਼ਨਾà¨\82 à¨¦à©\87 à¨°à©\87ਡà©\80à¨\93 à¨¬à¨\9fਨਾà¨\82 à¨µà¨¿à¨\9a à¨¨à¨¿à¨¸à¨¼à¨¾à¨¨ à¨²à¨¾à¨\93 à¨\85ਤà©\87 à¨\9cਾà¨\93 à¨\9cਾà¨\82 à¨¸à¨­ à¨¤à©\8bà¨\82 à¨¥à©±à¨²à©\87 à¨µà¨¾à¨²à¨¼ੇ ਬਟਨ ਤੇ ਕਲਿੱਕ ਕਰੋ। <br />
+ਮà©\81à¨\95ਾਬਲਾ à¨\95ਰਨ à¨²à¨\88 à¨°à©\80ਵਿà¨\9cਨਾà¨\82 à¨¦à©\87 à¨°à©\87ਡà©\80à¨\93 à¨¬à¨\9fਨਾà¨\82 à¨µà¨¿à©±à¨\9a à¨¨à¨¿à¨¸à¨¼à¨¾à¨¨ à¨²à¨¾à¨\93 à¨\85ਤà©\87 à¨\9cਾà¨\93 à¨\9cਾà¨\82 à¨¸à¨­ à¨¤à©\8bà¨\82 à¨¥à©±à¨²à©\87 à¨µà¨¾à¨²ੇ ਬਟਨ ਤੇ ਕਲਿੱਕ ਕਰੋ। <br />
 ਲੈਜਅੰਡ:
-'''({{int:cur}})''' = à¨¨à¨µà©\87à¨\82 à¨°à©\80ਵਿà¨\9c਼ਨ à¨¨à¨¾à¨²à¨¼à©\8bà¨\82 à¨«à¨¼à¨°à¨\95, '''({{int:last}})''' = à¨\86à¨\96਼ਰà©\80 à¨°à©\80ਵਿà¨\9c਼ਨ à¨¨à¨¾à¨²à¨¼ੋਂ ਫ਼ਰਕ, '''({{int:minoreditletter}})''' = ਛੋਟੀ ਸੋਧ।",
-'history-fieldset-title' => 'à¨\85ਤà©\80ਤ â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ à¨®à¨¾ਰੋ',
-'history-show-deleted' => 'ਸਿਰਫ਼ à¨®à¨¿ਟਾਏ ਗਏ',
+'''({{int:cur}})''' = à¨¨à¨µà©\87à¨\82 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¾à¨²à©\8bà¨\82 à¨«à¨¼à¨°à¨\95, '''({{int:last}})''' = à¨\86à¨\96ਰà©\80 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¾à¨²ੋਂ ਫ਼ਰਕ, '''({{int:minoreditletter}})''' = ਛੋਟੀ ਸੋਧ।",
+'history-fieldset-title' => 'à¨\87ਤਿਹਾਸ à¨¨à©\82à©° à¨¬à©\8dਰਾà¨\8aà¨\9c਼ à¨\95ਰੋ',
+'history-show-deleted' => 'ਸਿਰਫ਼ à¨¹ਟਾਏ ਗਏ',
 'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਦੇ',
 'histlast' => 'ਸਭ ਤੋਂ ਨਵਾਂ',
 'historysize' => '($1 ਬਾਈਟ)',
@@ -893,15 +894,15 @@ 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' => 'ਦਿੱਖ ਬਦਲੋ',
-'revdel-restore-deleted' => 'ਮਿà¨\9fਾà¨\8f à¨\97à¨\8f à¨°à©\80ਵà©\80à¨\9c਼ਨ',
-'revdel-restore-visible' => 'ਦਿੱਸਣਯà©\8bà¨\97 à¨°à©\80ਵà©\80à¨\9c਼ਨ',
+'revdel-restore-deleted' => 'ਹà¨\9fਾà¨\8f à¨\97à¨\8f à¨°à©\80ਵà©\80à¨\9cਨ',
+'revdel-restore-visible' => 'ਦਿਸਣਯà©\8bà¨\97 à¨°à©\80ਵà©\80à¨\9cਨ',
 'pagehist' => 'ਪੇਜ ਦਾ ਅਤੀਤ',
 'deletedhist' => 'ਹਟਾਇਆ ਗਿਆ ਅਤੀਤ',
-'revdelete-hide-current' => 'ਤਾਰੀਖ਼ &2, $1 ਦੀ ਚੀਜ਼ ਲੁਕਾਉਣ ਵਿਚ ਗ਼ਲਤੀ: ਇਹ ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ ਹੈ।
+'revdelete-hide-current' => 'ਤਾਰੀਖ &2, $1 ਦੀ ਚੀਜ਼ ਲੁਕਾਉਣ ਵਿਚ ਗਲਤੀ: ਇਹ ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ ਹੈ।
 ਇਹ ਲੁਕਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ।',
 'revdelete-otherreason' => 'ਹੋਰ/ਵਾਧੂ ਕਾਰਨ:',
 'revdelete-reasonotherlist' => 'ਹੋਰ ਕਾਰਨ',
@@ -929,15 +930,15 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'mergelogpagetext' => 'ਹੇਠਾਂ ਇੱਕ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਦੂਜੇ ਦੇ ਅਤੀਤ ਵਿਚ ਰਲ਼ਾਉਣ ਦੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲਿਸਟ ਹੈ।',
 
 # Diffs
-'history-title' => '"$1" ਦੇ  ਸੁਧਾਰਾਂ ਦਾ ਅਤੀਤ',
+'history-title' => 'ਰੀਵਿਜਨ ਦਾ ਇਤਿਹਾਸ "$1"',
 'difference-title' => '"$1" ਦੇ ਰੀਵਿਜ਼ਨਾਂ ਵਿਚ ਫ਼ਰਕ',
 'difference-title-multipage' => 'ਸਫ਼ਿਆਂ "$1" ਅਤੇ "$2" ਵਿਚ ਫ਼ਰਕ',
 'difference-multipage' => '(ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ)',
 'lineno' => 'ਲਾਈਨ $1:',
 'compareselectedversions' => 'ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ',
 'showhideselectedversions' => 'ਚੁਣੇ ਰੀਵਿਜ਼ਨ ਵਖਾਓ/ਲੁਕਾਓ',
-'editundo' => 'ਨà¨\95ਾਰੋ',
-'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਼ਨਾà¨\82 à¨¨à¨¹à©\80à¨\82 à¨¦à¨¿à¨\96ਾà¨\88à¨\86à¨\82 à¨\9cਾ à¨°à¨¹à©\80à¨\86à¨\82}})',
+'editundo' => 'à¨\89ਧà©\87à©\9cੋ',
+'diff-multi' => '({{PLURAL:$2|ਮੈਂਬਰ ਦੀ|$2 ਮੈਂਬਰਾਂ ਦੀਆਂ}} {{PLURAL:$1|ਵਿਚਕਾਰਲੀ ਰੀਵਿਜਨ ਨਹੀਂ ਦਿਖਾਈ ਜਾ ਰਹੀ|ਵਿਚਕਾਰਲੀਆਂ $1 ਰੀਵਿਜ਼ਨਾਂ ਨਹੀਂ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ}})',
 
 # Search results
 'searchresults' => 'ਖੋਜ ਨਤੀਜੇ',
@@ -953,27 +954,27 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'nextn' => 'ਅਗਲੇ {{PLURAL:$1|$1}}',
 'prevn-title' => 'ਪਿਛਲੇ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}}',
 'nextn-title' => 'ਅਗਲੇ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}}',
-'shown-title' => 'ਪà©\8dਰਤà©\80 à¨¸à¨«à¨¼ਾ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}} ਵਖਾਓ',
+'shown-title' => 'ਪà©\8dਰਤà©\80 à¨ªà©°à¨¨ਾ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}} ਵਖਾਓ',
 'viewprevnext' => 'ਵੇਖੋ ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'ਖੋਜ ਇਖ਼ਤਿਆਰ',
-'searchmenu-exists' => "'''à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 \"[[:\$1]]\" à¨¨à¨¾à¨® à¨¦à¨¾ à¨¸à¨«à¨¼ਾ ਹੈ।'''",
-'searchmenu-new' => "'''à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 \"[[:\$1]]\" à¨¸à¨«à¨¼ਾ ਬਣਾਓ!'''",
+'searchmenu-exists' => "'''à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 \"[[:\$1]]\" à¨¨à¨¾à¨® à¨¦à¨¾ à¨ªà©°à¨¨ਾ ਹੈ।'''",
+'searchmenu-new' => "'''à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 \"[[:\$1]]\" à¨ªà©°à¨¨ਾ ਬਣਾਓ!'''",
 'searchhelp-url' => 'Help:ਸਮੱਗਰੀ',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|ਇਸ ਅਗੇਤਰ ਵਾਲ਼ੇ ਸਫ਼ੇ ਵੇਖੋ]]',
-'searchprofile-articles' => 'ਸਮੱà¨\97ਰà©\80 à¨¸à¨«à¨¼ੇ',
-'searchprofile-project' => 'ਮਦਦ à¨\85ਤà©\87 à¨ªà©\8dਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨¸à¨«à¨¼ੇ',
-'searchprofile-images' => 'ਮਲà¨\9fà©\80ਮà©\80ਡਿਆ',
+'searchprofile-articles' => 'ਸਮੱà¨\97ਰà©\80 à¨ªà©°à¨¨ੇ',
+'searchprofile-project' => 'ਮਦਦ à¨\85ਤà©\87 à¨ªà¨°à¨¿à¨¯à©\8bà¨\9cਨਾ à¨ªà©°à¨¨ੇ',
+'searchprofile-images' => 'ਮਲà¨\9fà©\80ਮà©\80ਡà©\80ਆ',
 'searchprofile-everything' => 'ਸਭ ਕੁਝ',
 'searchprofile-advanced' => 'ਆਧੁਨਿਕ',
-'searchprofile-articles-tooltip' => '$1 ਵਿਚ ਖੋਜੋ',
-'searchprofile-project-tooltip' => '$1 ਵਿਚ ਖੋਜੋ',
-'searchprofile-images-tooltip' => 'ਫਾà¨\87ਲਾਂ ਖੋਜੋ',
-'searchprofile-everything-tooltip' => 'ਸਭ à¨\9aà©\80à¨\9c਼ਾà¨\82 à¨\96à©\8bà¨\9cà©\8b (à¨\97ੱਲਬਾਤ à¨¸à¨«à¨¼ਿਆਂ ਸਮੇਤ)',
-'searchprofile-advanced-tooltip' => 'ਆਪਣੇ ਬਣਾਏ ਨਾਮ-ਥਾਂਵਾਂ ਵਿਚ ਖੋਜੋ',
-'search-result-size' => '$1 ({{PLURAL:$2| ਸ਼ਬਦ|$2 ਸ਼ਬਦ}})',
-'search-result-category-size' => '{{PLURAL:$1|੧ ਮੈਂਬਰ|$1 ਮੈਂਬਰ}} ({{PLURAL:$2|੧ ਉਪ-ਸ਼੍ਰੇਣੀ|$2 ਉਪ-ਸ਼੍ਰੇਣੀਆਂ}}, {{PLURAL:$3|੧ ਫ਼ਾਈਲ|$3 ਫ਼ਾਈਲਾਂ}})',
+'searchprofile-articles-tooltip' => '$1 à¨µà¨¿à©±à¨\9a à¨\96à©\8bà¨\9cà©\8b',
+'searchprofile-project-tooltip' => '$1 à¨µà¨¿à©±à¨\9a à¨\96à©\8bà¨\9cà©\8b',
+'searchprofile-images-tooltip' => 'ਫ਼ਾà¨\88ਲਾਂ ਖੋਜੋ',
+'searchprofile-everything-tooltip' => 'ਸਭ à¨\9aà©\80à¨\9c਼ਾà¨\82 à¨\96à©\8bà¨\9cà©\8b (à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨ਿਆਂ ਸਮੇਤ)',
+'searchprofile-advanced-tooltip' => 'à¨\86ਪਣà©\87 à¨¬à¨£à¨¾à¨\8f à¨¨à¨¾à¨®-ਥਾà¨\82ਵਾà¨\82 à¨µà¨¿à©±à¨\9a à¨\96à©\8bà¨\9cà©\8b',
+'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-redirect' => '($1 ਰੀਡਿਰੈਕਟ)',
 'search-section' => '(ਭਾਗ $1)',
 'search-suggest' => 'ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1',
 'search-interwiki-caption' => 'ਸਾਥੀ ਪ੍ਰੋਜੈਕਟ',
@@ -988,8 +989,8 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 $1|'''1''' ਨਤੀਜਾ|'''$1''' ਤੱਕ ਨਤੀਜੇ}} ਵਖਾਓ।",
 'showingresultsnum' => "ਹੇਠਾਂ #'''$2''' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ {{PLURAL:
 $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
-'showingresultsheader' => "'''$4''' à¨µà¨¾à¨¸à¨¤à©\87 {{PLURAL:$5|'''$3''' à¨µà¨¿à¨\9aà©\8bà¨\82 '''$1''' à¨¨à¨¤à©\80à¨\9cà©\87|'''$3''' à¨µà¨¿ਚੋਂ '''$1 - $2''' ਨਤੀਜੇ}}",
-'search-nonefound' => 'ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ।',
+'showingresultsheader' => "'''$4''' à¨µà¨¾à¨¸à¨¤à©\87 {{PLURAL:$5|'''$3''' à¨µà¨¿à©±à¨\9aà©\8bà¨\82 '''$1''' à¨¨à¨¤à©\80à¨\9cà©\87|'''$3''' à¨µà¨¿à©±ਚੋਂ '''$1 - $2''' ਨਤੀਜੇ}}",
+'search-nonefound' => 'ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ।',
 'powersearch' => 'ਖੋਜ',
 'powersearch-legend' => 'ਤਕਨੀਕੀ ਖੋਜ',
 'powersearch-ns' => 'ਨੇਮ-ਸਪੇਸ ਵਿੱਚ ਖੋਜ:',
@@ -1006,7 +1007,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Preferences page
 'preferences' => 'ਮੇਰੀ ਪਸੰਦ',
-'mypreferences' => 'ਮà©\87ਰà©\80à¨\86à¨\82 à¨ªà¨¸à©°à¨¦à¨¾à¨\82',
+'mypreferences' => 'ਪਸੰਦਾਂ',
 'prefs-edits' => 'ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:',
 'prefsnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
 'prefsnologintext' => 'ਵਰਤੋਂਕਾਰ ਪਸੰਦਾਂ ਸੈੱਟ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ਲਾਗਇਨ]</span> ਕਰਨਾ ਪਵੇਗਾ।',
@@ -1066,8 +1067,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' => 'ਅਸਲੀ ਨਾਮ:',
@@ -1082,8 +1083,8 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'email' => 'ਈਮੇਲ',
 'prefs-help-realname' => 'ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ, ਅਤੇ ਜੇ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।',
 'prefs-help-email' => 'ਤੁਹਾਡੀ ਮਰਜ਼ੀ ਹੈ ਈਮੇਲ ਪਤਾ ਦਿਓ ਜਾਂ ਨਾ ਦਿਓ ਪਰ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਣ ਤੇ ਨਵਾਂ ਪਾਸਵਰਡ ਹਾਸਲ ਕਰਨ ਲਈ ਇਹ ਜ਼ਰੂਰੀ ਹੈ।',
-'prefs-help-email-others' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ਹ à¨µà©\80 à¨\9aà©\81ਣ à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\95ਿ à¨¤à©\81ਹਾਡà©\87 à¨®à©\88à¨\82ਬਰ à¨\9cਾà¨\82 à¨\97ੱਲ-ਬਾਤ à¨¸à¨«à¨¼à©\87 à¨¤à©\8bà¨\82 à¨¹à©\8bਰ à¨®à©\88à¨\82ਬਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜ ਸਕਣ?
-à¨\9cਦà©\8bà¨\82 à¨¹à©\8bਰ à¨®à©\88à¨\82ਬਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।',
+'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' => 'ਦਸਤਖ਼ਤ',
@@ -1104,7 +1105,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' => 'ਇਸ ਦਾ ਮੈਂਬਰ:',
@@ -1115,14 +1116,16 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Groups
 'group' => 'ਗਰੁੱਪ:',
-'group-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
+'group-user' => 'ਮà©\88à¨\82ਬਰ',
 'group-autoconfirmed' => 'ਖ਼ੁਦ-ਤਸਦੀਕਸ਼ੁਦਾ ਮੈਂਬਰ',
 'group-bot' => 'ਬੋਟ',
 'group-all' => '(ਸਭ)',
 
-'group-user-member' => '{{GENDER:$1|ਵਰਤà©\8bà¨\82à¨\95ਾਰ}}',
+'group-user-member' => '{{GENDER:$1|ਮà©\88à¨\82ਬਰ}}',
 'group-bot-member' => 'ਬੋਟ',
 
+'grouppage-user' => '{{ns:project}}:ਮੈਂਬਰ',
+
 # Rights
 'right-read' => 'ਸਫ਼ੇ ਪੜ੍ਹਨਾ',
 'right-edit' => 'ਸਫ਼ੇ ਸੋਧ',
@@ -1149,15 +1152,17 @@ $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' => 'ਇਹ ਸਫ਼ਾ ਪੜ੍ਹਨ',
-'action-edit' => 'à¨\87ਹ à¨¸à¨«à¨¼à©\87 â\80\99à¨\9a à¨«à©\87ਰ-ਬਦਲ à¨\95ਰà©\8b',
+'action-edit' => 'à¨\87ਹ à¨ªà©°à¨¨à©\87 à¨¨à©\82à©° à¨¸à©°à¨ªà¨¾à¨¦à¨¿à¨¤ à¨\95ਰਨ',
 'action-createpage' => 'ਸਫ਼ੇ ਬਣਾਉਣ',
 'action-createtalk' => 'ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣ',
 'action-createaccount' => 'ਮੈਂਬਰ ਖਾਤਾ ਬਣਾਉਣ',
@@ -1177,31 +1182,31 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'action-sendemail' => 'ਈ-ਮੇਲਾਂ ਭੇਜਣ',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|ਤਬਦà©\80ਲੀ|
-ਤਬਦà©\80ਲੀਆਂ}}',
-'recentchanges' => 'ਤਾà¨\9c਼ਾ ਤਬਦੀਲੀਆਂ',
-'recentchanges-legend' => 'ਤਾà¨\9c਼ਾ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à©\87 à¨\87à¨\96਼ਤਿà¨\86ਰ',
+'nchanges' => '$1 {{PLURAL:$1|ਬਦਲੀ|
+ਬਦਲੀਆਂ}}',
+'recentchanges' => 'ਹਾਲ à¨¹à©\80 â\80\99à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 ਤਬਦੀਲੀਆਂ',
+'recentchanges-legend' => 'ਹਾਲ à¨¦à©\80à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨¸à¨¬à©°à¨§à©\80 à¨\9aà©\8bਣਾà¨\82',
 'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹੋਈਆਂ ਸਭ ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਵੇਖੋ।',
-'recentchanges-feed-description' => 'à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 à¨¹à¨¾à¨² à¨¹à©\80 à¨µà¨¿à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
-'recentchanges-label-newpage' => 'à¨\87ਹ à¨¸à©\8bਧ à¨¨à©\87 à¨¨à¨µà¨¾à¨\82 à¨¸à¨«à¨¼ਾ ਬਣਾਇਆ ਹੈ',
-'recentchanges-label-minor' => 'à¨\87ਹ à¨\9bà©\8bà¨\9fà©\80 à¨¸à©\8bਧ ਹੈ',
-'recentchanges-label-bot' => 'à¨\87ਹ à¨¸à©\8bਧ ਬੋਟ ਵਲੋਂ ਕੀਤੀ ਗਈ ਹੈ',
+'recentchanges-feed-description' => 'à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 à¨¹à¨¾à¨² à¨¹à©\80 à¨µà¨¿à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
+'recentchanges-label-newpage' => 'à¨\87ਹ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨¨à©\87 à¨¨à¨µà¨¾à¨\82 à¨ªà©°à¨¨ਾ ਬਣਾਇਆ ਹੈ',
+'recentchanges-label-minor' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fਾ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ ਹੈ',
+'recentchanges-label-bot' => 'à¨\87ਹ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ ਬੋਟ ਵਲੋਂ ਕੀਤੀ ਗਈ ਹੈ',
 '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ਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
+'rcnote' => "$4, $5 à¨¤à©±à¨\95 à¨\86à¨\96ਰà©\80 {{PLURAL:$2|ਦਿਨ|'''$2''' à¨¦à¨¿à¨¨à¨¾à¨\82}} à¨µà¨¿à©±à¨\9a {{PLURAL:$1|'''1''' à¨¬à¨¦à¨²à©\80 à¨¹à©\8bà¨\88 à¨¹à©\88।|'''$1''' à¨¬à¨¦ਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
 'rcnotefrom' => "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੀਆਂ) ਤਬਦੀਲੀਆਂ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
-'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à¨¿ਖਾਓ',
-'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\80à¨\86à¨\82 à¨¸à©\8bਧਾਂ',
+'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\80à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨µà©\87ਖਾਓ',
+'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\80à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86ਂ',
 'rcshowhidebots' => '$1 ਬੋਟ',
 'rcshowhideliu' => '$1 ਲਾਗਇਨ ਹੋਏ ਮੈਂਬਰ',
-'rcshowhideanons' => '$1 à¨\97à©\81ਮਨਾਮ à¨®à©\88à¨\82ਬਰ',
-'rcshowhidepatr' => 'ਵà©\87à¨\96à©\80à¨\86à¨\82 à¨\9cਾ à¨\9aà©\81ੱà¨\95à©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 $1',
-'rcshowhidemine' => 'ਮà©\87ਰà©\80à¨\86à¨\82 à¨¸à©\8bਧਾਂ $1',
-'rclinks' => 'ਪਿà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 $1 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à¨¿à¨\96ਾà¨\93 <br /> $3',
+'rcshowhideanons' => '$1 à¨\97à©\81ਮਨਾਮ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ',
+'rcshowhidepatr' => 'à¨\9cਾà¨\82à¨\9aà©\87 à¨¹à©\8bà¨\8f à¨¸à©°à¨ªà¨¾à¨¦à¨¨ $1',
+'rcshowhidemine' => 'ਮà©\87ਰà©\80à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86ਂ $1',
+'rclinks' => 'ਪਿà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 $1 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨µà©\87à¨\96ਾà¨\93<br /> $3',
 'diff' => 'ਫ਼ਰਕ',
-'hist' => 'à¨\85ਤà©\80ਤ',
+'hist' => 'à¨\87ਤਿਹਾਸ',
 'hide' => 'ਲੁਕਾਓ',
 'show' => 'ਵਖਾਓ',
-'minoreditletter' => 'ਛ',
+'minoreditletter' => 'ਛ',
 'newpageletter' => 'ਨ',
 'boteditletter' => 'ਬ',
 'rc_categories_any' => 'ਕੋਈ ਵੀ',
@@ -1209,17 +1214,17 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'rc-enhanced-hide' => 'ਵੇਰਵਾ ਲੁਕਾਓ',
 
 # Recent changes linked
-'recentchangeslinked' => 'ਸਬੰਧਿਤ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82',
+'recentchangeslinked' => 'ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ',
 'recentchangeslinked-feed' => 'ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ à¨¤à¨¬à¨¦à©\80ਲੀਆਂ',
-'recentchangeslinked-title' => '"$1" ਨਾਲ ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-noresult' => 'à¨\9cà©\81à©\9cà©\87 à¨¸à¨«à¨¿à¨\86à¨\82 â\80\99ਤà©\87, à¨¦à¨¿à©±à¨¤à©\87 à¨¸à¨®à©\87à¨\82 â\80\99à¨\9a à¨\95à©\8bà¨\88 à¨¤à¨¬à¨¦à©\80ਲੀ ਨਹੀਂ ਹੋਈ।',
-'recentchangeslinked-summary' => 'à¨\87ਹ à¨²à¨¿à¨¸à¨\9f à¨\87à¨\95 à¨\96਼ਾਸ à¨¸à¨«à¨¼à©\87 à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨\9cਾà¨\82 à¨\95ਿਸà©\87 à¨\96਼ਾਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨¹à¨¾à¨² à¨µà¨¿à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µà¨¾à¨\82 à¨¨à©\82à©° à¨¦à¨°à¨¸à¨¾à¨\82à¨\89ਦà©\80 à¨¹à©\88। [[Special:Watchlist|ਤà©\81ਹਾਡà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f]] à¨µà¨¿à¨\9a à¨®à©\8cà¨\9cà©\82ਦ à¨¸à¨«à¨¼à©\87 à¨®à©\8bà¨\9fà©\87 à¨\85ੱà¨\96ਰਾà¨\82 à¨µà¨¿ਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
-'recentchangeslinked-page' => 'ਸਫ਼ੇ ਦਾ ਨਾਮ:',
-'recentchangeslinked-to' => 'à¨\87ਸਦà©\87 à¨¬à¨¦à¨²à©\87 à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¨à¨¾à¨²à¨¼ à¨\9cà©\81à©\9cà©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨µà¨¿ਚ ਹੋਏ ਬਦਲਾਅ ਦਿਖਾਓ',
+'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ à¨¬à¨¦ਲੀਆਂ',
+'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 à¨\96ਾਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨\9cਾà¨\82 à¨\95ਿਸà©\87 à¨\96ਾਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨¹à¨¾à¨² à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨¨à©\82à©° à¨¦à¨°à¨¸à¨¾à¨\82à¨\89ਦà©\80 à¨¹à©\88। [[Special:Watchlist|ਤà©\81ਹਾਡà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80]] à¨µà¨¿à©±à¨\9a à¨®à©\8cà¨\9cà©\82ਦ à¨ªà©°à¨¨à©\87 à¨®à©\8bà¨\9fà©\87 à¨\85ੱà¨\96ਰਾà¨\82 à¨µà¨¿à©±ਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
+'recentchangeslinked-page' => 'ਪੰਨੇ ਦਾ ਨਾਮ:',
+'recentchangeslinked-to' => 'à¨\87ਸਦà©\87 à¨¬à¨¦à¨²à©\87 à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨\9cà©\81à©\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨µà¨¿à©±ਚ ਹੋਏ ਬਦਲਾਅ ਦਿਖਾਓ',
 
 # Upload
-'upload' => 'ਫਾà¨\87ਲ ਅੱਪਲੋਡ ਕਰੋ',
+'upload' => 'ਫ਼ਾà¨\88ਲ ਅੱਪਲੋਡ ਕਰੋ',
 'uploadbtn' => 'ਫਾਇਲ ਅੱਪਲੋਡ ਕਰੋ',
 'reuploaddesc' => 'ਅੱਪਲੋਡ ਫਾਰਮ ਉੱਤੇ ਜਾਓ।',
 'uploadnologin' => 'ਲਾਗਇਨ ਨਹੀਂ ਹੋ',
@@ -1288,7 +1293,7 @@ to upload files.',
 'upload-curl-error28' => 'ਅੱਪਲੋਡ ਟਾਈਮ-ਆਉਟ',
 
 'license' => 'ਲਾਈਸੈਂਸਿੰਗ:',
-'license-header' => 'ਲਾà¨\88ਸà©\88à¨\82ਸ',
+'license-header' => 'ਲਸੰਸ',
 'nolicense' => 'ਕੁਝ ਵੀ ਚੁਣਿਆ',
 'license-nopreview' => '(ਝਲਕ ਉਪਲੱਬਧ ਨਹੀਂ)',
 'upload_source_file' => ' (ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਇੱਕ ਫਾਇਲ)',
@@ -1307,29 +1312,29 @@ to upload files.',
 
 # File description page
 'file-anchor-link' => 'ਫ਼ਾਈਲ',
-'filehist' => 'ਫ਼ਾà¨\88ਲ à¨¦à¨¾ à¨\85ਤà©\80ਤ',
-'filehist-help' => 'ਤਾਰੀਖ/ਸਮੇਂ ’ਤੇ ਕਲਿੱਕ ਕਰੋ ਤਾਂ ਉਸ ਸਮੇਂ ਦੀ ਫਾਈਲ ਪੇਸ਼ ਹੋ ਜਾਵੇਗੀ।',
+'filehist' => 'ਫ਼ਾà¨\88ਲ à¨¦à¨¾ à¨\87ਤਿਹਾਸ',
+'filehist-help' => 'ਤਾਰੀਖ/ਸਮੇਂ ’ਤੇ ਕਲਿੱਕ ਕਰੋ ਤਾਂ ਉਸ ਸਮੇਂ ਦੀ ਫਾਈਲ ਪੇਸ਼ ਹੋ ਜਾਵੇਗੀ।',
 'filehist-deleteall' => 'ਸਭ ਹਟਾਓ',
 'filehist-deleteone' => 'ਇਹ ਹਟਾਓ',
 'filehist-revert' => 'ਉਲਟਾਓ',
 'filehist-current' => 'ਮੌਜੂਦਾ',
-'filehist-datetime' => 'ਤਾਰੀਖ਼/ਸਮਾਂ',
+'filehist-datetime' => 'ਤਾਰੀਖ/ਸਮੇਂ',
 'filehist-thumb' => 'ਨਮੂਨਾ',
 'filehist-thumbtext' => '$1 ਦੇ ਸਮੇਂ ਦੇ ਸੰਸਕਰਨ ਦਾ ਅੰਗੂਠਾਕਾਰ ਪ੍ਰਤੀਰੂਪ',
 'filehist-nothumb' => 'ਕੋਈ ਨਮੂਨਾ-ਤਸਵੀਰ ਨਹੀਂ',
-'filehist-user' => 'ਮà©\88à¨\82ਬਰ',
+'filehist-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
 'filehist-dimensions' => 'ਨਾਪ',
 'filehist-filesize' => 'ਫਾਇਲ ਆਕਾਰ',
 'filehist-comment' => 'ਟਿੱਪਣੀ',
 'filehist-missing' => 'ਫ਼ਾਈਲ ਗੁੰਮ',
 'imagelinks' => 'ਫ਼ਾਈਲ ਦੀ ਵਰਤੋਂ',
-'linkstoimage' => 'à¨\87ਹ {{PLURAL:$1|ਸਫ਼à©\87 à¨¦à©\87 à¨²à¨¿à©°à¨\95|$1 à¨¸à¨«à¨¼à©\87}} à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à¨¾à¨²à¨¼ ਜੋੜਦੇ ਹਨੇ:',
-'nolinkstoimage' => 'à¨\95à©\8bà¨\88 à¨µà©\80 à¨¸à¨«à¨¼à¨¾ à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à¨¾à¨²à¨¼ ਨਹੀਂ ਜੋੜਦਾ।',
+'linkstoimage' => 'à¨\87ਹ {{PLURAL:$1|ਪੰਨà©\87 à¨¦à©\87 à¨²à¨¿à©°à¨\95|$1 à¨ªà©°à¨¨à©\87}} à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à¨¾à¨² ਜੋੜਦੇ ਹਨੇ:',
+'nolinkstoimage' => 'à¨\95à©\8bà¨\88 à¨µà©\80 à¨ªà©°à¨¨à¨¾ à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à¨¾à¨² ਨਹੀਂ ਜੋੜਦਾ।',
 'morelinkstoimage' => 'ਇਸ ਫ਼ਾਈਲ ਨਾਲ਼ ਜੋੜਦੇ [[Special:WhatLinksHere/$1|ਹੋਰ ਲਿੰਕ]] ਵੇਖੋ।',
 '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 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
@@ -1379,7 +1384,7 @@ to upload files.',
 'unusedtemplateswlh' => 'ਹੋਰ ਲਿੰਕ',
 
 # Random page
-'randompage' => 'ਰਲ਼ਵਾà¨\82 à¨¸à¨«à¨¼ਾ',
+'randompage' => 'ਰਲਵਾà¨\82 à¨ªà©°à¨¨ਾ',
 'randompage-nopages' => '{{PLURAL:$2|ਇਸ ਥਾਂ-ਨਾਮ|ਇਹਨਾਂ ਥਾਂ-ਨਾਂਵਾ}} ਵਿਚ ਕੋਈ ਸਫ਼ਾ ਨਹੀਂ ਹੈ: $1।',
 
 # Statistics
@@ -1417,7 +1422,7 @@ to upload files.',
 'nbytes' => '$1 {{PLURAL:$1|ਬਾਈਟ|ਬਾਈਟ}}',
 'ncategories' => '$1 {{PLURAL:$1|ਕੈਟੇਗਰੀ|ਕੈਟੇਗਰੀਆਂ}}',
 'nlinks' => '$1 {{PLURAL:$1|ਲਿੰਕ|ਲਿੰਕ}}',
-'nmembers' => '$1 {{PLURAL:$1|ਮੈਂਬਰ|ਮੈਂਬਰ}}',
+'nmembers' => '$1 {{PLURAL:$1|ਮੈਂਬਰ|ਮੈਂਬਰਾਂ}}',
 'nrevisions' => '$1 {{PLURAL:$1|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}}',
 'nviews' => '$1 {{PLURAL:$1|ਨਜ਼ਾਰਾ|ਨਜ਼ਾਰੇ}}',
 'nimagelinks' => '$1 {{PLURAL:$1|ਸਫ਼ੇ|ਸਫ਼ਿਆਂ}} ’ਤੇ ਵਰਤਿਆ ਹੋਇਆ',
@@ -1436,29 +1441,29 @@ to upload files.',
 'wantedfiles' => 'ਚਾਹੀਦੀਆਂ ਫ਼ਾਈਲਾਂ',
 'wantedtemplates' => 'ਚਾਹੀਦੇ ਸਾਂਚੇ',
 'mostcategories' => 'ਸਭ ਤੋਂ ਵੱਧ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਫ਼ੇ',
-'prefixindex' => 'à¨\87ਸ à¨\85à¨\97à©\87ਤਰ à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨¾à¨°à©\87 à¨¸à¨«à¨¼ੇ',
+'prefixindex' => 'à¨\87ਸ à¨\85à¨\97à©\87ਤਰ à¨µà¨¾à¨²à©\87 à¨¸à¨¾à¨°à©\87 à¨ªà©°à¨¨ੇ',
 'shortpages' => 'ਛੋਟੇ ਪੇਜ',
 'listusers' => 'ਯੂਜ਼ਰ ਲਿਸਟ',
 'usercreated' => '$1 ਨੂੰ $2 ’ਤੇ {{GENDER:$3|ਬਣਾਇਆ}}',
-'newpages' => 'ਨਵà©\87à¨\82 à¨¸à¨«à¨¼ੇ',
+'newpages' => 'ਨਵà©\87à¨\82 à¨ªà©°à¨¨ੇ',
 'newpages-username' => 'ਵਰਤੋਂਕਾਰ-ਨਾਂ:',
 'ancientpages' => 'ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਪੇਜ',
-'move' => 'ਭà©\87à¨\9cà©\8b',
+'move' => 'ਸਥਾਨਾà¨\82ਤਰਣ',
 'movethispage' => 'ਇਹ ਪੇਜ ਭੇਜੋ',
 'unusedcategoriestext' => 'ਇਹ ਕੈਟੇਗਰੀ ਸਫ਼ੇ ਮੌਜੂਦ ਹਨ ਹਾਲਾਂਕਿ ਕਿਸੇ ਵੀ ਸਫ਼ੇ ਜਾਂ ਕੈਟੇਗਰੀ ਨੇ ਇਹਨਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕੀਤੀ।',
 'notargettitle' => 'ਟਾਰਗੇਟ ਨਹੀਂ',
-'pager-newer-n' => '{{PLURAL:$1| ਨਵਾਂ|$1 ਨਵੇਂ}}',
-'pager-older-n' => '{{PLURAL:$1| ਪੁਰਾਣਾ|$1 ਪੁਰਾਣੇ}}',
+'pager-newer-n' => '{{PLURAL:$1|1 ਨਵਾਂ|$1 ਨਵੇਂ}}',
+'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' => 'ਚਿੱਠੇ ’ਚ ਮੇਲ ਖਾਂਦੀ ਕੋਈ ਚੀਜ਼ ਨਹੀਂ ਹੈ।',
@@ -1466,13 +1471,13 @@ to upload files.',
 'showhideselectedlogentries' => 'ਚਿੱਠੇ ਦੇ ਚੁਣੇ ਹੋਏ ਦਾਖ਼ਲੇ ਵਖਾਓ/ਲੁਕਾਓ',
 
 # Special:AllPages
-'allpages' => 'ਸਭ à¨¸à¨«à¨¼ੇ',
+'allpages' => 'ਸਭ à¨ªà©°à¨¨ੇ',
 'alphaindexline' => '$1 ਤੋਂ $2',
 'nextpage' => 'ਅੱਗੇ ਪੇਜ ($1)',
 'prevpage' => 'ਪਿੱਛੇ ਪੇਜ ($1)',
 'allpagesfrom' => 'ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਸਫ਼ੇ ਵਖਾਓ:',
 'allpagesto' => 'ਇਸਤੇ ਖ਼ਤਮ ਹੋਣ ਵਾਲ਼ੇ ਸਫ਼ੇ ਵਖਾਓ:',
-'allarticles' => 'ਸਭ ਸਫ਼ੇ',
+'allarticles' => 'ਸਭ  ਪੰਨੇ',
 'allinnamespace' => 'ਸਭ ਪੇਜ ($1 ਨੇਮਸਪੇਸ)',
 'allnotinnamespace' => 'ਸਭ ਪੇਜ ($1 ਨੇਮਸਪੇਸ ਵਿੱਚ ਨਹੀਂ)',
 'allpagesprev' => 'ਪਿੱਛੇ',
@@ -1486,7 +1491,7 @@ to upload files.',
 'cachedspecial-refresh-now' => 'ਸਭ ਤੋਂ ਨਵਾਂ ਵੇਖੋ।',
 
 # Special:Categories
-'categories' => 'à¨\95à©\88à¨\9fਾà¨\97ਰੀਆਂ',
+'categories' => 'ਸ਼à©\8dਰà©\87ਣੀਆਂ',
 'categoriesfrom' => 'ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੀਆਂ ਕੈਟੇਗਰੀਆਂ ਵਖਾਓ:',
 'special-categories-sort-count' => 'ਗਿਣਤੀ ਮੁਤਾਬਕ ਤਰਤੀਬ ਦੇਵੋ',
 'special-categories-sort-abc' => 'ਅੱਖਰਾਂ ਮੁਤਾਬਕ ਤਰਤੀਬ ਦੇਵੋ',
@@ -1497,10 +1502,10 @@ 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 ਬਾਹਰੀ ਸਿਰਨਾਵਾਂ ਹੈ',
+'linksearch-line' => '$2 à¨µà¨¿à©±à¨\9a $1 à¨¬à¨¾à¨¹à¨°à©\80 à¨¸à¨¿à¨°à¨¨à¨¾à¨µà¨¾à¨\82 à¨¹à©\88',
 
 # Special:ListUsers
 'listusersfrom' => 'ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਮੈਂਬਰ ਵਖਾਓ:',
@@ -1517,22 +1522,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ਬਰਾà¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f)',
+'listgrouprights-members' => '(ਵਰਤà©\8bà¨\82à¨\95ਾਰਾà¨\82 à¨¦à©\80 à¨¸à©\82à¨\9aà©\80)',
 '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' => 'ਮੈਂਬਰ ਈ-ਮੇਲ ਬੰਦ ਹੈ',
@@ -1558,42 +1559,41 @@ to upload files.',
 'emailuserfooter' => 'ਇਹ ਈ-ਮੇਲ $1 ਨੇ {{SITENAME}} ’ਤੇ "ਇਸ ਮੈਂਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ" ਸਹੂਲਤ ਜ਼ਰੀਏ $2 ਨੂੰ ਭੇਜੀ ਸੀ।',
 
 # Watchlist
-'watchlist' => 'ਮà©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f',
-'mywatchlist' => 'ਮà©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f',
+'watchlist' => 'ਮà©\87ਰà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80',
+'mywatchlist' => 'ਧਿà¨\86ਨਸà©\82à¨\9aà©\80',
 'watchlistfor2' => '$1 $2 ਲਈ',
 'nowatchlist' => 'ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਕੋਈ ਚੀਜ਼ ਨਹੀਂ ਹੈ।',
 'watchlistanontext' => 'ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚਲੀਆਂ ਚੀਜ਼ਾਂ ਵੇਖਣ ਜਾਂ ਸੋਧਣ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ $1।',
 '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' => 'ਨà¨\9c਼ਰ ਰੱਖੋ',
+'watch' => 'ਧਿà¨\86ਨ ਰੱਖੋ',
 'watchthispage' => 'ਇਹ ਪੇਜ ਵਾਚ ਕਰੋ',
-'unwatch' => 'ਨà¨\9c਼ਰ ਹਟਾਓ',
+'unwatch' => 'ਧਿà¨\86ਨ ਹਟਾਓ',
 'unwatchthispage' => 'ਨਜ਼ਰ ਰੱਖਣੀ ਬੰਦ ਕਰੋ',
 'notvisiblerev' => 'ਇੱਕ ਵੱਖਰੇ ਮੈਂਬਰ ਦੀ ਬਣਾਈ ਆਖ਼ਰੀ ਰੀਵਿਜ਼ਨ ਮਿਟਾਈ ਜਾ ਚੁੱਕੀ ਹੈ',
 'watchnochange' => 'ਵਖਾਏ ਜਾ ਰਹੇ ਸਮੇਂ ਅੰਦਰ ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚਲਾ ਕੋਈ ਵੀ ਸਫ਼ਾ ਸੋਧਿਆ ਨਹੀਂ ਗਿਆ।',
-'watchlist-details' => 'à¨\97ੱਲ-ਬਾਤ à¨¸à¨«à¨¼à©\87 à¨¨à¨¾ à¨\97ਿਣਦà©\87 à¨¹à©\8bà¨\8f, à¨¤à©\81ਹਾਡà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9a {{PLURAL:$1|$1 à¨¸à¨«à¨¼à¨¾ à¨¹à©\88|$1 à¨¸à¨«à¨¼ੇ ਹਨ}}।',
+'watchlist-details' => 'à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨à©\87 à¨¨à¨¾ à¨\97ਿਣਦà©\87 à¨¹à©\8bà¨\8f, à¨¤à©\81ਹਾਡà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±à¨\9a{{PLURAL:$1|$1 à¨ªà©°à¨¨à¨¾ à¨¹à©\88|$1 à¨ªà©°à¨¨ੇ ਹਨ}}।',
 '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',
-'watchlist-options' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨¦à©\87 à¨\87à¨\96਼ਤਿਆਰ',
+'wlshowlast' => 'ਆਖਰੀ $1 ਦਿਨ $2 ਘੰਟੇ $3 ਵਖਾਓ',
+'watchlist-options' => 'ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 à¨¦à©\87 à¨\87à¨\96ਤਿਆਰ',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'ਨਿਗ੍ਹਾ (ਵਾਚ) ਰੱਖੀ ਜਾ ਰਹੀ ਹੈ...',
 'unwatching' => 'ਨਿਗ੍ਹਾ ਰੱਖਣੀ (ਵਾਚ) ਬੰਦ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..',
 
-'enotif_newpagetext' => 'ਇਹ ਨਵਾਂ ਪੇਜ ਹੈ।',
 'enotif_impersonal_salutation' => '{{SITENAME}} ਯੂਜ਼ਰ',
-'changed' => 'ਬਦਲਿਆ',
-'created' => 'ਬਣਾਇਆ',
 'enotif_lastvisited' => 'ਤੁਹਾਡੀ ਆਖ਼ਰੀ ਆਮਦ ਤੋਂ ਲੈ ਕੇ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।',
 'enotif_lastdiff' => 'ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।',
 'enotif_anon_editor' => 'ਅਗਿਆਤ ਯੂਜ਼ਰ $1',
+'created' => 'ਬਣਾਇਆ',
+'changed' => 'ਬਦਲਿਆ',
 
 # Delete
 'deletepage' => 'ਪੇਜ ਹਟਾਓ',
@@ -1608,7 +1608,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'actionfailed' => 'ਕਾਰਵਾਈ ਨਾਕਾਮ',
 'deletedtext' => '"$1" ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।
 ਤਾਜ਼ੀਆਂ ਮਿਟਾਉਣਾਂ ਦੇ ਰਿਕਾਰਡ ਲਈ $2 ਵੇਖੋ।',
-'dellogpage' => 'ਮਿਟਾਉਣ ਦਾ ਚਿੱਠਾ',
+'dellogpage' => 'ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ',
 'dellogpagetext' => 'ਹੇਠਾਂ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਮਿਟਾਉਣਾਂ ਦੀ ਲਿਸਟ ਹੈ।',
 'deletionlog' => 'ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ',
 'deletecomment' => 'ਕਾਰਨ:',
@@ -1647,8 +1647,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' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸੁਰੱਖਿਆ ਦਰਜਾ ਨਹੀਂ ਬਦਲ ਸਕਦੇ ਕਿਉਂਕਿ ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਸੋਧਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
@@ -1686,8 +1686,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' => 'ਖੋਜੋ',
@@ -1699,45 +1699,45 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'blanknamespace' => '(ਮੁੱਖ)',
 
 # Contributions
-'contributions' => 'ਮੈਂਬਰ ਯੋਗਦਾਨ',
+'contributions' => '{{GENDER:$1|ਮੈਂਬਰ}} ਯੋਗਦਾਨ',
 'contributions-title' => '$1 ਦੇ ਯੋਗਦਾਨ',
-'mycontris' => 'ਮà©\87ਰਾ à¨¯à©\8bà¨\97ਦਾਨ',
+'mycontris' => 'ਯੋਗਦਾਨ',
 'contribsub2' => '$1 ($2) ਲਈ',
 'uctop' => '(ਟੀਸੀ)',
 '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' => 'ਅਪਲੋਡ',
 'sp-contributions-logs' => 'ਚਿੱਠੇ',
-'sp-contributions-talk' => 'à¨\97ੱਲ-ਬਾਤ',
+'sp-contributions-talk' => 'à¨\9aਰà¨\9aਾ',
 'sp-contributions-blocked-notice' => 'ਇਹ ਮੈਂਬਰ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'sp-contributions-blocked-notice-anon' => 'ਇਹ IP ਪਤਾ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
-'sp-contributions-username' => 'IP ਪਤਾ ਜਾਂ ਵਰਤੋਂਕਾਰ ਨਾਮ:',
-'sp-contributions-toponly' => 'ਸਿਰਫ਼ à¨\89ਹà©\80 à¨¸à©\8bਧਾà¨\82 à¨µà¨\96ਾà¨\93 à¨\9cà©\8b à¨¸à¨­ à¨¤à©\8bà¨\82 à¨¨à¨µà©\80à¨\82à¨\86à¨\82 ਹਨ',
+'sp-contributions-username' => 'IP ਪਤਾ ਜਾਂ ਵਰਤੋਂਕਾਰਨਾਮ:',
+'sp-contributions-toponly' => 'à¨\95à©\87ਵਲ à¨\89ਨà©\8dਹਾà¨\82 à¨¸à©°à¨ªà¨¾à¨¦à¨¨à¨¾à¨\82 à¨¨à©\82à©° à¨µà¨\96ਾà¨\93 à¨\9cà©\8b à¨¨à¨µà©\80ਨਤਮ à¨¸à©°à¨¸à¨¼à©\8bਧਨ ਹਨ',
 'sp-contributions-submit' => 'ਖੋਜੋ',
 
 # What links here
-'whatlinkshere' => 'à¨\95ਿਹà©\9cà©\87 (ਸਫ਼ੇ) ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
-'whatlinkshere-title' => '$1 ਨਾਲ਼ ਜੋੜਨ ਵਾਲ਼ੇ ਸਫ਼ੇ',
-'whatlinkshere-page' => 'ਸਫਾ:',
-'linkshere' => "à¨\87ਹ à¨¸à¨«à¨¼à©\87 '''[[:$1]]''' à¨¨à¨¾à¨²à¨¼ ਜੋੜਦੇ ਹਨ:",
-'nolinkshere' => "à¨\95à©\8bà¨\88 à¨µà©\80 à¨¸à¨«à¨¼à¨¾ '''[[:$1]]''' à¨¨à¨¾à¨²à¨¼ ਨਹੀਂ ਜੋੜਦਾ।",
-'isredirect' => 'ਰà©\80ਡਿਰà©\88à¨\95à¨\9f à¨¸à¨«à¨¼ਾ',
+'whatlinkshere' => 'à¨\95ਿਹà©\9cà©\87 (ਪੰਨੇ) ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
+'whatlinkshere-title' => '$1 ਨਾਲ ਜੋੜਨ ਵਾਲੇ ਪੰਨੇ',
+'whatlinkshere-page' => 'ਪੰਨਾ:',
+'linkshere' => "à¨\87ਹ à¨ªà©°à¨¨à©\87 '''[[:$1]]''' à¨¨à¨¾à¨² ਜੋੜਦੇ ਹਨ:",
+'nolinkshere' => "à¨\95à©\8bà¨\88 à¨µà©\80 à¨ªà©°à¨¨à¨¾ '''[[:$1]]''' à¨¨à¨¾à¨² ਨਹੀਂ ਜੋੜਦਾ।",
+'isredirect' => 'ਰà©\80ਡਿਰà©\88à¨\95à¨\9f à¨ªà©°à¨¨ਾ',
 'istemplate' => 'ਟਾਕਰਾ ਕਰੋ',
-'isimage' => 'ਫ਼ਾà¨\88ਲ à¨¦à¨¾ à¨²à¨¿à©°à¨\95',
+'isimage' => 'ਫ਼ਾà¨\88ਲ à¨¦à©\80 à¨\95à©\9cà©\80',
 'whatlinkshere-prev' => '{{PLURAL:$1|ਪਿਛਲਾ|ਪਿਛਲੇ $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|ਅਗਲਾ|ਅਗਲੇ $1}}',
-'whatlinkshere-links' => 'â\86\90 à¨²à¨¿à©°à¨\95',
+'whatlinkshere-links' => 'â\86\90 à¨\95à©\9cà©\80à¨\86à¨\82',
 'whatlinkshere-hideredirs' => 'ਅਸਿੱਧੇ ਰਾਹ $1',
 'whatlinkshere-hidetrans' => '$1 ਇੱਥੇ ਕੀ ਕੀ ਜੁੜਦਾ ਹੈ।',
-'whatlinkshere-hidelinks' => '$1 à¨²à¨¿à©°à¨\95',
-'whatlinkshere-hideimages' => 'ਤਸਵà©\80ਰ ਲਿੰਕ $1',
+'whatlinkshere-hidelinks' => '$1 à¨\95à©\9cà©\80',
+'whatlinkshere-hideimages' => 'ਫ਼ਾà¨\88ਲ ਲਿੰਕ $1',
 'whatlinkshere-filters' => 'ਛਾਨਣੀਆਂ',
 
 # Block/unblock
@@ -1748,7 +1748,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'ipbreasonotherlist' => 'ਹੋਰ ਕਾਰਨ',
 'ipbsubmit' => 'ਇਹ ਯੂਜ਼ਰ ਲਈ ਪਾਬੰਦੀ',
 'ipbother' => 'ਹੋਰ ਟਾਈਮ:',
-'ipboptions' => '੨ ਘੰਟੇ:2 hours, ੧ ਦਿਨ:1 day, ੩ ਦਿਨ:3 days, ੧ ਹਫ਼ਤਾ:1 week, ੨ ਹਫ਼ਤੇ:2 weeks, ੧ ਮਹੀਨਾ:1 month, ੩ ਮਹੀਨੇ:3 months, ੬ ਮਹੀਨੇ:6 months, ੧ ਸਾਲ:1 year, ਹਮੇਸ਼ਾ ਲਈ:infinite',
+'ipboptions' => '2 ਘੰਟੇ:2 hours, 1 ਦਿਨ:1 day, 3 ਦਿਨ:3 days, 1 ਹਫ਼ਤਾ:1 week, 2 ਹਫ਼ਤੇ:2 weeks, 2 ਮਹੀਨਾ:1 month, 3 ਮਹੀਨੇ:3 months, 6 ਮਹੀਨੇ:6 months, 1 ਸਾਲ:1 year, ਹਮੇਸ਼ਾ ਲਈ:infinite',
 'ipbotheroption' => 'ਹੋਰ',
 'ipbotherreason' => 'ਹੋਰ/ਆਮ ਕਾਰਨ:',
 'ipbwatchuser' => 'ਇਸ ਮੈਂਬਰ ਦੇ ਮੈਂਬਰ ਅਤੇ ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ ਤੇ ਨਜ਼ਰ ਰੱਖੋ',
@@ -1766,7 +1766,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' => 'ਆਰਜ਼ੀ ਪਾਬੰਦੀਆਂ ਲੁਕਾਓ',
@@ -1836,7 +1836,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'move-leave-redirect' => 'ਪਿੱਛੇ ਇਕ ਰੀਡਿਰੈਕਟ ਛੱਡੋ',
 
 # Export
-'export' => 'ਸਫ਼ੇ ਐਕਸਪੋਰਟ ਕਰੋ',
+'export' => 'ਪੰਨੇ ਐਕਸਪੋਰਟ ਕਰੋ',
 'exportcuronly' => 'ਸਿਰਫ਼ ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ ਸ਼ਾਮਲ ਕਰੋ, ਸਾਰਾ ਅਤੀਤ ਨਹੀਂ',
 'export-submit' => 'ਐਕਸਪੋਰਟ',
 'export-addcat' => 'ਸ਼ਾਮਲ',
@@ -1847,7 +1847,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 # Namespace 8 related
 'allmessages' => 'ਸਿਸਟਮ ਸੁਨੇਹੇ',
 'allmessagesname' => 'ਨਾਮ',
-'allmessagesdefault' => 'ਡਿਫਾਲà¨\9f à¨\9fà©\88à¨\95ਸà¨\9f',
+'allmessagesdefault' => 'ਡਿਫਾਲà¨\9f à¨ªà¨¾à¨ ',
 'allmessagescurrent' => 'ਮੌਜੂਦਾ ਟੈਕਸਟ',
 'allmessages-filter-legend' => 'ਛਾਨਣਾ',
 'allmessages-filter-all' => 'ਸਭ',
@@ -1857,7 +1857,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 # Thumbnails
 'thumbnail-more' => 'ਵਧਾਓ',
 'filemissing' => 'ਫਾਇਲ ਗੁੰਮ ਹੈ',
-'thumbnail_error' => 'ਨਮà©\82ਨਾ à¨¬à¨£à¨¾à¨\89ਣ à¨µà¨¿à¨\9a à¨\97਼ਲਤੀ ਹੋਈ ਹੈ: $1',
+'thumbnail_error' => 'ਨਮà©\82ਨਾ à¨¬à¨£à¨¾à¨\89ਣ à¨µà¨¿à©±à¨\9a à¨\97ਲਤੀ ਹੋਈ ਹੈ: $1',
 
 # Special:Import
 'import' => 'ਪੇਜ ਇੰਪੋਰਟ ਕਰੋ',
@@ -1872,78 +1872,78 @@ 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ਹਾਡਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨¸à¨«à¨¼ਾ',
-'tooltip-pt-mytalk' => 'ਤà©\81ਹਾਡਾ à¨\97ੱਲ-ਬਾਤ à¨¸à¨«à¨¼ਾ',
+'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨ªà©°à¨¨ਾ',
+'tooltip-pt-mytalk' => 'ਤà©\81ਹਾਡਾ à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨ਾ',
 'tooltip-pt-preferences' => 'ਤੁਹਾਡੀਆਂ ਪਸੰਦਾਂ',
-'tooltip-pt-watchlist' => 'à¨\93ਹਨਾà¨\82 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f ਜੋ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੇਖ ਰਹੇ ਹੋ',
+'tooltip-pt-watchlist' => 'à¨\93ਹਨਾà¨\82 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨¦à©\80 à¨¸à©\82à¨\9aà©\80 ਜੋ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੇਖ ਰਹੇ ਹੋ',
 'tooltip-pt-mycontris' => 'ਤੁਹਾਡੇ ਯੋਗਦਾਨਾਂ ਦੀ ਲਿਸਟ',
 'tooltip-pt-login' => 'ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ; ਪਰ ਇਹ ਕੋਈ ਲਾਜ਼ਮੀ ਨਹੀਂ',
 'tooltip-pt-anonlogin' => 'ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ; ਪਰ ਇਹ ਕੋਈ ਲਾਜ਼ਮੀ ਨਹੀਂ ਹੈ',
 'tooltip-pt-logout' => 'ਲਾਗ ਆਉਟ',
-'tooltip-ca-talk' => 'ਸਮà¨\97ੱਰà©\80 à¨¸à¨«à¨¼ੇ ਬਾਰੇ ਚਰਚਾ',
-'tooltip-ca-edit' => 'ਤੁਸੀਂ ਇਹ ਸਫ਼ਾ ਸੋਧ ਸਕਦੇ ਹੋ। ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਸੰਭਾਲਣ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਬਟਨ ਵਰਤੋ',
+'tooltip-ca-talk' => 'ਸਮà¨\97ੱਰà©\80 à¨ªà©°à¨¨ੇ ਬਾਰੇ ਚਰਚਾ',
+'tooltip-ca-edit' => 'ਤੁਸੀ ਇਹ ਪੰਨਾ ਬਦਲ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਤਬਦੀਲੀ ਸੰਜੋਣ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖੋ।',
 'tooltip-ca-addsection' => 'ਨਵਾਂ ਭਾਗ ਸ਼ੁਰੂ ਕਰੋ',
-'tooltip-ca-viewsource' => 'à¨\87ਹ à¨¸à¨«à¨¼ਾ ਸੁਰੱਖਿਅਤ ਹੈ।
+'tooltip-ca-viewsource' => 'à¨\87ਹ à¨ªà©°à¨¨ਾ ਸੁਰੱਖਿਅਤ ਹੈ।
 ਤੁਸੀਂ ਇਸਦਾ ਸਰੋਤ ਵੇਖ ਸਕਦੇ ਹੋ।',
-'tooltip-ca-history' => 'à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¦à©\87 à¨ªà¨¿à¨\9bਲà©\87 à¨°à©\80ਵਿà¨\9c਼ਨ',
-'tooltip-ca-protect' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨®à¨¹à¨¿à¨«à¨¼à©\82à¨\9c਼ ਕਰੋ',
+'tooltip-ca-history' => 'à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¦à©\87 à¨ªà¨¿à¨\9bਲà©\87 à¨°à©\80ਵਿà¨\9cਨ',
+'tooltip-ca-protect' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨¸à©\81ਰੱà¨\96ਿà¨\85ਤ ਕਰੋ',
 'tooltip-ca-unprotect' => 'ਇਸ ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'tooltip-ca-delete' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨®à¨¿ਟਾਓ',
-'tooltip-ca-move' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨­à©\87à¨\9cੋ',
-'tooltip-ca-watch' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨\86ਪਣà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਸ਼ਾਮਲ ਕਰੋ',
-'tooltip-ca-unwatch' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨\86ਪਣà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f ’ਚੋਂ ਹਟਾਓ',
+'tooltip-ca-delete' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨¨à©\82à©° à¨¹ਟਾਓ',
+'tooltip-ca-move' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨®à©\81ੰਤà¨\95ਿਲ à¨\95ਰੋ',
+'tooltip-ca-watch' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨\86ਪਣà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±ਚ ਸ਼ਾਮਲ ਕਰੋ',
+'tooltip-ca-unwatch' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨\86ਪਣà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 ’ਚੋਂ ਹਟਾਓ',
 'tooltip-search' => '{{SITENAME}} ’ਤੇ ਖੋਜੋ',
-'tooltip-search-go' => 'ਠà©\80à¨\95 à¨\87ਸ à¨¨à¨¾à¨® à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼ੇ ’ਤੇ ਜਾਉ, ਜੇ ਮੌਜੂਦ ਹੈ ਤਾਂ',
-'tooltip-search-fulltext' => 'à¨\87ਸ à¨²à¨¿à¨\96ਤ à¨²à¨\88 à¨¸à¨«à¨¼ੇ ਲੱਭੋ',
-'tooltip-p-logo' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼ੇ ’ਤੇ ਜਾਓ',
-'tooltip-n-mainpage' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼ੇ ’ਤੇ ਜਾਓ',
-'tooltip-n-mainpage-description' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼ੇ ’ਤੇ ਜਾਓ',
-'tooltip-n-portal' => 'ਪਰà©\8bà¨\9cà©\88à¨\95à¨\9f ਬਾਰੇ, ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ, ਕਿੱਥੇ ਕੁਝ ਲੱਭਣਾ ਹੈ',
+'tooltip-search-go' => 'ਠà©\80à¨\95 à¨\87ਸ à¨¨à¨¾à¨® à¨µà¨¾à¨²à©\87 à¨ªà©°à¨¨ੇ ’ਤੇ ਜਾਉ, ਜੇ ਮੌਜੂਦ ਹੈ ਤਾਂ',
+'tooltip-search-fulltext' => 'à¨\87ਸ à¨²à¨¿à¨\96ਤ à¨²à¨\88 à¨ªà©°à¨¨ੇ ਲੱਭੋ',
+'tooltip-p-logo' => 'ਮà©\81ੱà¨\96 à¨ªà©°à¨¨ੇ ’ਤੇ ਜਾਓ',
+'tooltip-n-mainpage' => 'ਮà©\81ੱà¨\96 à¨ªà©°à¨¨ੇ ’ਤੇ ਜਾਓ',
+'tooltip-n-mainpage-description' => 'ਮà©\81ੱà¨\96 à¨ªà©°à¨¨ੇ ’ਤੇ ਜਾਓ',
+'tooltip-n-portal' => 'ਪਰਿਯà©\8bà¨\9cਨਾ ਬਾਰੇ, ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ, ਕਿੱਥੇ ਕੁਝ ਲੱਭਣਾ ਹੈ',
 'tooltip-n-currentevents' => 'ਮੌਜੂਦਾ ਸਮਾਗਮ ਬਾਰੇ ਪਿਛਲੀ ਜਾਣਕਾਰੀ ਲੱਭੋ',
-'tooltip-n-recentchanges' => 'ਵਿਕੀ ’ਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਦੀ ਲਿਸਟ',
-'tooltip-n-randompage' => 'à¨\87à¨\95 à¨°à¨²à¨¼à¨µà¨¾à¨\82 à¨¸à¨«à¨¼ਾ ਲੋਡ ਕਰੋ',
+'tooltip-n-recentchanges' => 'ਵਿਕੀ ਵਿੱਚ ਹਾਲ ’ਚ ਹੋਈਆਂ ਬਦਲੀਆਂ ਦੀ ਸੂਚੀ',
+'tooltip-n-randompage' => 'à¨\87ੱà¨\95 à¨°à¨²à¨µà¨¾à¨\82 à¨ªà©°à¨¨ਾ ਲੋਡ ਕਰੋ',
 'tooltip-n-help' => 'ਖੋਜਣ ਲਈ ਥਾਂ',
-'tooltip-t-whatlinkshere' => 'ਵਿà¨\95à©\80 à¨¦à©\87 à¨¸à¨¾à¨°à©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f, ਜੋ ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
-'tooltip-t-recentchangeslinked' => 'à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¤à©\8bà¨\82 à¨²à¨¿à©°à¨\95 à¨\95à©\80ਤà©\87 à¨¸à¨«à¨¼ਿਆਂ ਵਿੱਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ',
-'tooltip-feed-atom' => 'à¨\87ਸ à¨¸à¨«à¨¼ੇ ਦੀ ਐਟਮ ਫ਼ੀਡ',
-'tooltip-t-contributions' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ à¨¦à©\87 à¨¯à©\8bà¨\97ਦਾਨ à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f',
-'tooltip-t-emailuser' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
-'tooltip-t-upload' => 'à¨\9aਿੱਤਰ à¨\9cਾà¨\82 à¨®à©\80ਡਿà¨\86 à¨«à¨¾à¨\87ਲਾਂ ਅੱਪਲੋਡ ਕਰੋ',
-'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f',
-'tooltip-t-print' => 'à¨\87ਹ à¨¸à¨«à¨¼ੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ',
-'tooltip-t-permalink' => 'ਸਫ਼à©\87 à¨¦à©\87 à¨\87ਸ à¨°à©\80ਵਿà¨\9c਼ਨ ਲਈ ਪੱਕਾ ਲਿੰਕ',
-'tooltip-ca-nstab-main' => 'ਸਮੱà¨\97ਰà©\80 à¨¸à¨«à¨¼ਾ ਵੇਖੋ',
-'tooltip-ca-nstab-user' => 'ਮà©\88à¨\82ਬਰ à¨¸à¨«à¨¼ਾ ਵੇਖੋ',
+'tooltip-t-whatlinkshere' => 'ਵਿà¨\95à©\80 à¨¦à©\87 à¨¸à¨¾à¨°à©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨¦à©\80 à¨¸à©\82à¨\9aà©\80, ਜੋ ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
+'tooltip-t-recentchangeslinked' => 'à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¤à©\8bà¨\82 à¨²à¨¿à©°à¨\95 à¨\95à©\80ਤà©\87 à¨ªà©°à¨¨ਿਆਂ ਵਿੱਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ',
+'tooltip-feed-atom' => 'à¨\87ਸ à¨ªà©°à¨¨ੇ ਦੀ ਐਟਮ ਫ਼ੀਡ',
+'tooltip-t-contributions' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨¦à©\87 à¨¯à©\8bà¨\97ਦਾਨ à¨¦à©\80 à¨¸à©\82à¨\9aà©\80',
+'tooltip-t-emailuser' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
+'tooltip-t-upload' => 'à¨\9aਿੱਤਰ à¨\9cਾà¨\82 à¨®à©\80ਡà©\80à¨\86 à¨«à¨¾à¨\88ਲਾਂ ਅੱਪਲੋਡ ਕਰੋ',
+'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨¦à©\80 à¨¸à©\82à¨\9aà©\80',
+'tooltip-t-print' => 'à¨\87ਹ à¨ªà©°à¨¨ੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ',
+'tooltip-t-permalink' => 'ਪੰਨà©\87 à¨¦à©\87 à¨\87ਸ à¨°à©\80ਵਿà¨\9cਨ ਲਈ ਪੱਕਾ ਲਿੰਕ',
+'tooltip-ca-nstab-main' => 'ਸਮੱà¨\97ਰà©\80 à¨ªà©°à¨¨ਾ ਵੇਖੋ',
+'tooltip-ca-nstab-user' => 'ਮà©\88à¨\82ਬਰ à¨ªà©°à¨¨ਾ ਵੇਖੋ',
 'tooltip-ca-nstab-media' => 'ਮੀਡਿਆ ਪੇਜ ਵੇਖੋ',
-'tooltip-ca-nstab-special' => 'à¨\87ਹ à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¾ à¨¹à©\88, à¨¤à©\81ਸà©\80à¨\82 à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¨à©\82à©° à¨¸à©\8bਧ ਨਹੀਂ ਸਕਦੇ।',
-'tooltip-ca-nstab-project' => 'ਪà©\8dਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨¸à¨«à¨¼ਾ ਵੇਖੋ',
-'tooltip-ca-nstab-image' => 'ਫ਼ਾà¨\88ਲ à¨¸à¨«à¨¼ਾ ਵੇਖੋ',
+'tooltip-ca-nstab-special' => 'à¨\87ਹ à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ à¨ªà©°à¨¨à¨¾ à¨¹à©\88, à¨¤à©\81ਸà©\80à¨\82 à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¨à©\82à©° à¨¬à¨¦à¨² ਨਹੀਂ ਸਕਦੇ।',
+'tooltip-ca-nstab-project' => 'ਪਰਿਯà©\8bà¨\9cਨਾ à¨ªà©°à¨¨ਾ ਵੇਖੋ',
+'tooltip-ca-nstab-image' => 'ਫ਼ਾà¨\88ਲ à¨ªà©°à¨¨ਾ ਵੇਖੋ',
 'tooltip-ca-nstab-mediawiki' => 'ਸਿਸਟਮ ਸੁਨੇਹੇ ਵੇਖੋ',
 'tooltip-ca-nstab-template' => 'ਸਾਂਚਾ ਵੇਖੋ',
 'tooltip-ca-nstab-help' => 'ਮੱਦਦ ਪੇਜ ਵੇਖੋ',
-'tooltip-ca-nstab-category' => 'à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 à¨¸à¨«à¨¼ਾ ਵੇਖੋ',
-'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à©\80ਲੀ ਨਿਸ਼ਾਨ ਲਾਓ',
+'tooltip-ca-nstab-category' => 'ਸ਼à©\8dਰà©\87ਣà©\80 à¨ªà©°à¨¨ਾ ਵੇਖੋ',
+'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fà©\80 à¨¬à¨¦ਲੀ ਨਿਸ਼ਾਨ ਲਾਓ',
 'tooltip-save' => 'ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ',
 'tooltip-preview' => 'ਆਪਣੀ ਤਬਦੀਲੀ ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ!',
-'tooltip-diff' => 'ਤੁਹਾਡੇ ਦੁਆਰਾ ਲਿਖਤ ਵਿਚ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਵਖਾਉਂਦਾ ਹੈ',
-'tooltip-compareselectedversions' => 'à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¦à©\87 à¨¦à©\8b à¨\9aà©\81ਣà©\87 à¨¹à©\8bà¨\8f à¨¸à©\8bਧਾà¨\82 à¨µà¨¿ਚ ਫ਼ਰਕ ਵੇਖੋ',
-'tooltip-watch' => 'à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¨à©\82à©° à¨\86ਪਣà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਪਾਓ',
+'tooltip-diff' => 'ਤà©\81ਹਾਡà©\87 à¨¦à©\81à¨\86ਰਾ à¨²à¨¿à¨\96ਤ à¨µà¨¿à©±à¨\9a à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨µà¨\96ਾà¨\89à¨\82ਦਾ à¨¹à©\88',
+'tooltip-compareselectedversions' => 'à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¦à©\87 à¨¦à©\8b à¨\9aà©\81ਣà©\87 à¨¹à©\8bà¨\8f à¨¸à©\8bਧਾà¨\82 à¨µà¨¿à©±ਚ ਫ਼ਰਕ ਵੇਖੋ',
+'tooltip-watch' => 'à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¨à©\82à©° à¨\86ਪਣà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±ਚ ਪਾਓ',
 'tooltip-watchlistedit-normal-submit' => 'ਸਿਰਲੇਖ ਹਟਾਓ',
 'tooltip-watchlistedit-raw-submit' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਨਵੀਂ ਕਰੋ',
 'tooltip-upload' => 'ਅੱਪਲੋਡ ਸਟਾਰਟ ਕਰੋ',
-'tooltip-rollback' => "''ਵਾਪਸ à¨®à©\8bà©\9cà©\8b'' à¨\87à¨\95 à¨¹à©\80 à¨\95ਲਿੱà¨\95 à¨¨à¨¾à¨²à¨¼ à¨\86à¨\96਼ਰੀ ਯੋਗਦਾਨ ਨੂੰ ਰੱਦ ਕਰ ਦਿੰਦਾ ਹੈ",
-'tooltip-undo' => '"ਨà¨\95ਾਰà©\8b" à¨\87ਸ à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¨à©\82à©° à¨°à©±à¨¦ à¨\95ਰà¨\95à©\87 à¨¸à©\8bਧ à¨«à¨¼à¨¾à¨°à¨® à¨¨à©\82à©° à¨\9dਲà¨\95 à¨¦à©\87 à¨\85ੰਦਾà¨\9c਼ à¨µà¨¿ਚ ਦਿਖਾਉਂਦਾ ਹੈ।
-ਇੰਝ "ਸਾਰ" ਵਿਚ ਤਬਦੀਲੀ ਨਕਾਰਨ ਦਾ ਕਾਰਨ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।',
+'tooltip-rollback' => "''ਵਾਪਸ à¨®à©\8bà©\9cà©\8b'' à¨\87ੱà¨\95 à¨¹à©\80 à¨\95ਲਿੱà¨\95 à¨¨à¨¾à¨² à¨\86à¨\96ਰੀ ਯੋਗਦਾਨ ਨੂੰ ਰੱਦ ਕਰ ਦਿੰਦਾ ਹੈ",
+'tooltip-undo' => '"à¨\89ਧà©\87à©\9cਨਾ" à¨\87ਸ à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¨à©\82à©° à¨°à©±à¨¦ à¨\95ਰà¨\95à©\87 à¨¸à©\8bਧ à¨«à¨¼à¨¾à¨°à¨® à¨¨à©\82à©° à¨\9dਲà¨\95 à¨¦à©\87 à¨¸à¨¼à©\88ਲà©\80 à¨µà¨¿à©±ਚ ਦਿਖਾਉਂਦਾ ਹੈ।
+à¨\87à©°à¨\9d "ਸਾਰ" à¨µà¨¿à©±à¨\9a à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¨à¨\95ਾਰਨ à¨¦à¨¾ à¨\95ਾਰਨ à¨²à¨¿à¨\96ਿà¨\86 à¨\9cਾ à¨¸à¨\95ਦਾ à¨¹à©\88।',
 'tooltip-preferences-save' => 'ਪਸੰਦਾਂ ਸਾਂਭੋ',
 'tooltip-summary' => 'ਸੰਖੇਪ ਸਾਰ ਦਰਜ ਕਰੋ',
 
 # Attribution
 'lastmodifiedatby' => 'ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ $3 ਨੇ ਸੋਧਿਆ ਸੀ।',
 'others' => 'ਹੋਰ',
-'siteusers' => '{{SITENAME}} ਯੂਜ਼ਰ $1',
+'siteusers' => '{{SITENAME}} {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰਾਂ}} $1',
 'creditspage' => 'ਪੇਜ ਮਾਣ',
 
 # Spam protection
@@ -1962,15 +1962,15 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'skinname-simple' => 'ਸੈਂਪਲ',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 à¨ªà©\81ਰਾਣà©\80 à¨¸à©\8bਧ',
-'nextdiff' => 'ਨਵà©\80à¨\82 à¨¸à©\8bਧ →',
+'previousdiff' => 'â\86\90 à¨\87ਸ à¨¤à©\8bà¨\82 à¨ªà©\81ਰਾਣà©\80 à¨¬à¨¦à¨²à©\80',
+'nextdiff' => 'ਤਾà¨\9c਼ਾ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ →',
 
 # 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' => 'à¨\87ਸ à¨¤à©\8bà¨\82 à¨µà©±à¨¡à©\80 à¨¤à¨¸à¨µà©\80ਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
+'file-nohires' => 'à¨\87ਸ à¨¤à©\8bà¨\82 à¨µà©±à¨¡à©\80 à¨\9aਿੱਤਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
 'svg-long-desc' => 'SVG ਫ਼ਾਈਲ, ਆਮ ਤੌਰ ’ਤੇ $1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਦਾ ਅਕਾਰ: $3',
 'show-big-image' => 'ਪੂਰਾ ਰੈਜ਼ੋਲੇਸ਼ਨ',
 
@@ -1982,13 +1982,13 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Bad image list
 'bad_image_list' => 'ਤਰਤੀਬ ਇਸ ਤਰਾਂ ਹੈ:
-ਸਿਰਫ਼ à¨²à¨¿à¨¸à¨\9f ਵਿਚਲੀਆਂ ਚੀਜ਼ਾਂ (* ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੀਆਂ ਕਤਾਰਾਂ) ’ਤੇ ਹੀ ਗ਼ੌਰ ਕੀਤਾ ਜਾਵੇਗਾ।
-ਲਾà¨\88ਨ à¨µà¨¿à¨\9a à¨ªà¨¹à¨¿à¨²à©\80 à¨\95à©\9cà©\80 à¨\97਼ਲਤ à¨«à¨¼à¨¾à¨\88ਲ à¨¦à©\80 à¨\95à©\9cà©\80 à¨¹à©\8bਣà©\80 à¨\9aਾਹà©\80ਦà©\80 à¨¹à©\88। à¨\89ਸ à¨²à¨¾à¨\88ਨ â\80\99à¨\9a à¨\85ੱà¨\97à©\87 à¨¦à¨¿à¨¤à©\80à¨\86à¨\82 à¨\95à©\9cà©\80à¨\86à¨\82 à¨¨à©\82à©° à¨\87ਤਰਾà¨\9c਼ਯà©\8bà¨\97 à¨®à©°à¨¨à¨¿à¨\86 à¨\9cਾਵà©\87à¨\97ਾ, à¨­à¨¾à¨µ à¨\89ਹ à¨¸à¨«à¨¼ੇ ਜਿਨ੍ਹਾਂ ਵਿਚ ਫ਼ਾਈਲ ਕਿਸੇ ਲਾਈਨ ਵਿਚ ਸਥਿਤ ਹੋ ਸਕਦੀ ਹੈ।',
+ਸਿਰਫ਼ à¨¸à©\82à¨\9aà©\80 ਵਿਚਲੀਆਂ ਚੀਜ਼ਾਂ (* ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੀਆਂ ਕਤਾਰਾਂ) ’ਤੇ ਹੀ ਗ਼ੌਰ ਕੀਤਾ ਜਾਵੇਗਾ।
+ਲਾà¨\88ਨ à¨µà¨¿à¨\9a à¨ªà¨¹à¨¿à¨²à©\80 à¨\95à©\9cà©\80 à¨\97਼ਲਤ à¨«à¨¼à¨¾à¨\88ਲ à¨¦à©\80 à¨\95à©\9cà©\80 à¨¹à©\8bਣà©\80 à¨\9aਾਹà©\80ਦà©\80 à¨¹à©\88। à¨\89ਸ à¨²à¨¾à¨\88ਨ â\80\99à¨\9a à¨\85ੱà¨\97à©\87 à¨¦à¨¿à¨¤à©\80à¨\86à¨\82 à¨\95à©\9cà©\80à¨\86à¨\82 à¨¨à©\82à©° à¨\87ਤਰਾà¨\9c਼ਯà©\8bà¨\97 à¨®à©°à¨¨à¨¿à¨\86 à¨\9cਾਵà©\87à¨\97ਾ, à¨­à¨¾à¨µ à¨\89ਹ à¨ªà©°à¨¨ੇ ਜਿਨ੍ਹਾਂ ਵਿਚ ਫ਼ਾਈਲ ਕਿਸੇ ਲਾਈਨ ਵਿਚ ਸਥਿਤ ਹੋ ਸਕਦੀ ਹੈ।',
 
 # Metadata
-'metadata' => 'ਮà©\87à¨\9fਾ à¨¡à©\88ਟਾ',
-'metadata-help' => 'à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿à¨\9a à¨µà¨¾à¨§à©\82 à¨\9cਾਣà¨\95ਾਰà©\80à¨\86à¨\82 à¨¹à¨¨, à¨\9cà©\8b à¨¸à¨¼à¨¾à¨\87ਦ à¨\89ਸ à¨\95à©\88ਮਰà©\87 à¨\9cਾà¨\82 à¨¸à¨\95à©\88ਨਰ à¨¦à©\80 à¨¦à©\87ਣ à¨¹à¨¨ à¨\9cà©\8b à¨\87ਸਨà©\82à©° à¨¬à¨£à¨¾à¨\89ਣ à¨²à¨\88 à¨µà¨°à¨¤à¨¿à¨\86 à¨\97ਿà¨\86। à¨\9cà©\87 à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿ਚ ਕੋਈ ਤਬਦੀਲੀ ਕੀਤੀ ਗਈ ਹੈ ਤਾਂ ਹੋ ਸਕਦਾ ਹੈ ਕੁਝ ਵੇਰਵੇ ਬਦਲੀ ਫ਼ਾਈਲ ਦਾ ਸਹੀ ਰੂਪਮਾਨ ਨਾ ਹੋਣ।',
-'metadata-fields' => 'à¨\87ਸ à¨¸à©\81ਨà©\87ਹà©\87 à¨µà¨¿à¨\9a à¨¸à©\82à¨\9aà©\80ਬੱਧ à¨\96à©\87ਤਰ à¨¤à¨¸à¨µà©\80ਰ à¨¸à¨«à¨¼à©\87 â\80\99à¨\9a à¨¸à¨¼à¨¾à¨®à¨² à¨\95à©\80ਤà©\87 à¨\9cਾਣà¨\97à©\87 à¨\9cà©\8b à¨\89ਦà©\8bà¨\82 à¨¦à¨¿à©±à¨¸à¨¦à©\87 à¨¹à¨¨ à¨\9cਦà©\8b à¨®à©\88à¨\9fਾਡà©\88à¨\9fਾ à¨\96਼ਾਕਾ ਬੰਦ ਹੋਵੇ। ਬਾਕੀ ਉਂਞ ਹੀ ਲੁਕੇ ਹੋਣਗੇ।',
+'metadata' => 'ਮà©\80à¨\9fਾਡਾਟਾ',
+'metadata-help' => 'à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿à©±à¨\9a à¨µà¨¾à¨§à©\82 à¨\9cਾਣà¨\95ਾਰà©\80à¨\86à¨\82 à¨¹à¨¨, à¨\9cà©\8b à¨¸à¨¼à¨¾à¨\87ਦ à¨\89ਸ à¨\95à©\88ਮਰà©\87 à¨\9cਾà¨\82 à¨¸à¨\95à©\88ਨਰ à¨¦à©\80 à¨¦à©\87ਣ à¨¹à¨¨ à¨\9cà©\8b à¨\87ਸਨà©\82à©° à¨¬à¨£à¨¾à¨\89ਣ à¨²à¨\88 à¨µà¨°à¨¤à¨¿à¨\86 à¨\97ਿà¨\86। à¨\9cà©\87 à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿à©±ਚ ਕੋਈ ਤਬਦੀਲੀ ਕੀਤੀ ਗਈ ਹੈ ਤਾਂ ਹੋ ਸਕਦਾ ਹੈ ਕੁਝ ਵੇਰਵੇ ਬਦਲੀ ਫ਼ਾਈਲ ਦਾ ਸਹੀ ਰੂਪਮਾਨ ਨਾ ਹੋਣ।',
+'metadata-fields' => 'à¨\87ਸ à¨¸à©\81ਨà©\87ਹà©\87 à¨µà¨¿à©±à¨\9a à¨¸à©\82à¨\9aà©\80ਬੱਧ à¨\96à©\87ਤਰ à¨\9aਿੱਤਰ à¨ªà©°à¨¨à©\87 â\80\99à¨\9a à¨¸à¨¼à¨¾à¨®à¨² à¨\95à©\80ਤà©\87 à¨\9cਾਣà¨\97à©\87 à¨\9cà©\8b à¨\89ਦà©\8bà¨\82 à¨¦à¨¿à©±à¨¸à¨¦à©\87 à¨¹à¨¨ à¨\9cਦà©\8b à¨®à©\88à¨\9fਾਡà©\88à¨\9fਾ à¨\96ਾਕਾ ਬੰਦ ਹੋਵੇ। ਬਾਕੀ ਉਂਞ ਹੀ ਲੁਕੇ ਹੋਣਗੇ।',
 
 # EXIF tags
 'exif-imagewidth' => 'ਚੌੜਾਈ',
@@ -2030,14 +2030,20 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'exif-gpsspeed-k' => 'ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ',
 'exif-gpsspeed-m' => 'ਮੀਲ ਪ੍ਰਤੀ ਘੰਟਾ',
 
+'exif-iimcategory-war' => 'ਯੁੱਧ, ਸੰਘਰਸ਼ ਅਤੇ ਅਸ਼ਾਂਟੀ',
+'exif-iimcategory-wea' => 'ਮੌਸਮ',
+
+'exif-urgency-normal' => 'ਸਧਾਰਨ ($1)',
+
 # External editor support
-'edit-externally' => 'ਬਾਹਰà©\80 à¨\90ਪਲà©\80à¨\95à©\87ਸ਼ਨ à¨µà¨°à¨¤à¨¦à©\87 à¨¹à©\8bà¨\8f à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à©\82à©° à¨¸à©\8bਧà©\8b',
+'edit-externally' => 'ਬਾਹਰà©\80 à¨\90ਪਲà©\80à¨\95à©\87ਸ਼ਨ à¨µà¨°à¨¤à¨¦à©\87 à¨¹à©\8bà¨\8f à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à©\82à©° à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨\95ਰà©\8b।',
 'edit-externally-help' => '(ਜ਼ਿਆਦਾ ਜਾਣਕਾਰੀ ਲਈ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ਸਭ',
 'namespacesall' => 'ਸਭ',
 'monthsall' => 'ਸਭ',
+'limitall' => 'ਸਭ',
 
 # E-mail address confirmation
 'confirmemail' => 'ਈਮੇਲ ਐਡਰੈੱਸ ਪੁਸ਼ਟੀ',
@@ -2081,21 +2087,32 @@ 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' => 'ਮੌਕੇ ਮੁਤਾਬਕ ਤਬਦੀਲੀਆਂ ਵੇਖੋ',
-'watchlisttools-edit' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵੇਖੋ ’ਤੇ ਸੋਧੋ',
-'watchlisttools-raw' => 'ਕੱਚੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ',
+'watchlisttools-view' => 'ਮੌਕੇ ਮੁਤਾਬਕ ਬਦਲੀਆਂ ਵੇਖੋ',
+'watchlisttools-edit' => 'ਧਿਆਨਸੂਚੀ ਵੇਖੋ ’ਤੇ ਸੰਪਾਦਨ ਕਰੋ',
+'watchlisttools-raw' => 'ਕੱਚੀ ਧਿਆਨਸੂਚੀ ਸੰਪਾਦਨ ਕਰੋ',
+
+# Core parser functions
+'duplicate-defaultsort' => 'ਪੁਰਾਣੀ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $1 ਦੇ ਬਜਾਏ ਹੁਣ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $2 ਹੋਵੇਗੀ।',
 
 # 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' => 'ਖ਼ਾਲੀ ਸਫ਼ਾ',
@@ -2103,7 +2120,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 # External image whitelist
 'external_image_whitelist' => " #ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ <pre>
 #ਹੇਠਾਂ ਓਹੀ ਐਕਸਪ੍ਰੈਸ਼ਨ ਪਾਓ (ਜਿਹੜਾ ਹਿੱਸਾ // ਦੇ ਵਿਚਾਲੇ ਹੈ)
-#ਇਹ ਬਾਹਰੀ ਤਸਵੀਰਾਂ ਦੇ URLs (ਹੌਟਲਿੰਕਡ) ਨਾਲ ਮਿਲਣਗੀਆਂ
+#ਇਹ ਬਾਹਰੀ ਤਸਵੀਰਾਂ ਦੇ URLs (ਹੌਟਲਿੰਕਡ) ਨਾਲ ਮਿਲਣਗੀਆਂ
 #ਜਿਹੜੀਆਂ ਮਿਲਣਗੀਆਂ ਓਹ ਬਤੌਰ ਤਸਵੀਰਾਂ ਦਿੱਸਣਗੀਆਂ ਨਹੀਂ ਤਾਂ ਤਸਵੀਰ ਦਾ ਸਿਰਫ਼ ਲਿੰਕ ਨਜ਼ਰ ਆਵੇਗਾ
 #'#' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੀਆਂ ਲਾਈਨਾਂ ਟਿੱਪਣੀਆਂ ਵਾਂਗ ਲਈਆਂ ਜਾਂਦੀਆਂ ਹਨ
 #ਇਹ ਕੇਸ-ਇਨਸੈਂਸਟਿਵ ਹੈ
@@ -2112,12 +2129,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 b003cb7..b644558 100644 (file)
@@ -21,7 +21,7 @@ $messages = array(
 'tog-hidepatrolled' => "Isalikut la reng edit a babanten (''controlled edits'') kareng bayung mengayalili",
 'tog-newpageshidepatrolled' => "Isalikut la reng bulung a babanten (''patrolled pages'') king listaan king bayung bulung (''new page list'')",
 'tog-extendwatchlist' => 'Dagdagan la reng babanten ba lang palto deng anggang mialilan, aliwa mu deng pekabayu.',
-'tog-usenewrc' => 'Mesanting la reng bayung mengayalili (JavaScript)',
+'tog-usenewrc' => '↓mesanting la reng bayung mengayalili (JavaScript)',
 'tog-numberheadings' => 'Tambing lang dinan nomiru deng pamagat',
 'tog-showtoolbar' => 'Ipakit ya panaliling toolbar (JavaScript)',
 'tog-editondblclick' => 'Alilan la reng bulung kapamilatan ning makataduang pamagpindut (JavaScript)',
@@ -29,7 +29,7 @@ $messages = array(
 Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
 'tog-editsectiononrightclick' => "Paganan ya ing pamag-edit seksiyon (section editing) kapamilata'ning pamag right click kareng pamagat da reng seksiyon (JavaScript)",
 'tog-showtoc' => 'Pakit ya ing kalamnan [table of contents] (kareng bulung a maki 3 o mas dakal a pamagat)',
-'tog-rememberpassword' => 'Tandanan ya ing kanakung login keng computer a ini (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'tog-rememberpassword' => 'Tandanan ya ing kanakung login keng computer a ini (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Idagdag la deng bulung a lelengan ku kareng babanten',
 'tog-watchdefault' => 'Idagdag la reng bulung a inalilan ku kareng babanten',
 'tog-watchmoves' => 'Idagdag la reng bulung a inalis ku kareng babanten',
@@ -50,7 +50,7 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
 'tog-showjumplinks' => 'Salangian la reng suglung a pampabilis (accessibility links) a "luksu king" (jump to)',
 'tog-uselivepreview' => 'Gumamit kang live preview (JavaScript) (Experimental)',
 'tog-forceeditsummary' => 'Pabaluan mu ku ustung magpalub a blankung edit',
-'tog-watchlisthideown' => 'Isaliut mo reng alili kareng babante',
+'tog-watchlisthideown' => 'Isalikut mo reng alili kareng babanten',
 'tog-watchlisthidebots' => 'Isalikut la reng edit kareng babanten',
 'tog-watchlisthideminor' => 'Isalikut la reng mangalating edits kareng babanten',
 'tog-watchlisthideliu' => "Isalikut la reng elilan da reng talagamit a maka-log in (''edits by logged in users'') king listaan da reng babanten (''watchlist'')",
@@ -164,6 +164,7 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
 'vector-view-history' => 'Lawen ya ing amlat',
 'vector-view-view' => 'Basan',
 'vector-view-viewsource' => 'Lawen ya ing pikuanan',
+'actions' => '↓Ding kilus',
 'namespaces' => 'Karinanlagiu',
 'variants' => 'Aliwapa',
 
@@ -367,9 +368,6 @@ Iti ing binie nang sangkan: ''$2''.",
 
 Malyari mung isundu ing pamangamit mu king {{SITENAME}} a e ka papakilala, o malyari kang mag login pasibayu anting pareu o aliwang talagamit.
 Apansingan mung mapalyaring makalto la pa murin deng aliwang bulung a bala mu maka login ka pa murin, anggang e me lilinisan (clear) ing kekang browser cache.",
-'welcomecreation' => '== Malaus ka, $1! ==
-
-Melalang ne ing kekang account. E mo kakalingwan alilan deng kekang piniling {{SITENAME}}',
 'yourname' => 'Lagyung talagamit (Username):',
 'yourpassword' => 'Kekang password:',
 'yourpasswordagain' => 'Pakisulat meng pasibayu ing password:',
@@ -481,9 +479,9 @@ Bang mayari ing kekang pamag-login, kailangan mung mangibiling bayung password k
 'subject' => 'Paksa/pamagat (headline):',
 'minoredit' => 'Malati yang edit ini',
 'watchthis' => 'Banten ya ing bulung a ini',
-'savearticle' => 'I-save ya ing bulung',
-'preview' => 'I-preview',
-'showpreview' => 'Pakit ya ing preview',
+'savearticle' => 'Isikap ya ing bulung',
+'preview' => '↓Ipasinag',
+'showpreview' => 'Pakit ya ing pasinag',
 'showlivepreview' => 'Kasalungsungan (live) a preview',
 'showdiff' => 'Pakit la reng miyalilan',
 'anoneditwarning' => "'''Kapiadian:''' Eka maka-login.  Mitala ya ing kekang IP address king amlat pamanalili (edit history) ning bulung a ini.",
@@ -550,8 +548,8 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} i-edit ing bulung a ini]</span>.',
 Tandanan mung deng pasadiang bulung (custom pages) a .css ampong .js, gagamit lang bansag a mababang letra (lowercase), alm. (alimbawa), {{ns:user}}:Foo/vector.css, at e {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Mibayu)',
 'note' => "'''Kapabaluan:'''",
-'previewnote' => "'''Preview ya mu ini;
-e la pa me-save detang miyalilan!'''",
+'previewnote' => "'''Tandanan mu pasinag ya mu ini.
+Deng elilan mu ela pa misikap!'''",
 'previewconflict' => 'Ing ayus ning makasulat king dake nang babo ning lugal a pipag-edit-an (upper text editing area) ing magi nang itsura ning kekang gagawan nung i-save me iti.',
 'session_fail_preview' => "'''Pasensia na ka! E mi ya apalub ing kekang in-edit uling mewala ing session data.
 Pakisubukan mung pasibayu. Nung ala pa muring miliari, subukan mung mag-logout at mag-login pasibayu.'''",
@@ -602,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}}.',
@@ -621,6 +618,7 @@ Ibie la para king kekang beluan deng kasulatan ning pamagbura ampong pamanalis (
 
 Kailangan, mas ditak la king $2 deti; $1 na la reng atyu ngeni.',
 'expensive-parserfunction-category' => 'Deng bulung a masiadung dakal ing karelang mangamal a parser function call',
+'post-expand-template-inclusion-category' => '↓Bulung nung nu ing ulma kayabe ya ing sukad sinobra ya',
 
 # "Undo" feature
 'undo-success' => 'E maliaring iurung ing pamag-edit a ini. Pakilawe mo reng pikumparang bersion king lalam ba mung akit nung ini pin ing buri mung gawan, at kaibat, i-save mo retang miyalilan bang mayari ing pamanurung king edit.',
@@ -698,7 +696,9 @@ Abusni da pa murin deng aliwang talapanibala (admin) king {{SITENAME}} itang lam
 'revdelete-submit' => 'Ipairal ya kareng mepiling pamanalili (selected revision)',
 'revdelete-success' => "'''Mituldu na ing pamagbayu ning sala/kalinawan.'''",
 'logdelete-success' => "'''Mituldu na ing sala/lino (visibility) ning tala (log).'''",
-'revdel-restore' => 'Alilan ya ing mayaykit',
+'revdel-restore' => 'Alilan ya ing mayayakit',
+'revdel-restore-deleted' => '↓meburang meyalili',
+'revdel-restore-visible' => '↓mayayakit a meyalili',
 'pagehist' => 'Amlat ning bulung',
 'deletedhist' => 'Meburang amlat',
 'revdelete-edit-reasonlist' => 'I-edit la reng sangkan king pamamura',
@@ -738,7 +738,7 @@ Gamitan me ing radio button column bang bukud mung detang miyalilan aniang o bay
 'mergelogpagetext' => 'Makabili la king lalam deng pekabayung pamisanib da reng amlat bulung (page history).',
 
 # Diffs
-'history-title' => 'Amlat ning pamagbayu king "$1"',
+'history-title' => 'Amlat ning pamagbayu king "$1"',
 'lineno' => 'Gulis $1:',
 'compareselectedversions' => 'Pikumpara/piyanti la reng mepiling bersion',
 'editundo' => 'iurung',
@@ -757,9 +757,17 @@ Gamitan me ing radio button column bang bukud mung detang miyalilan aniang o bay
 'notextmatches' => 'Alang tinud/pareu kareng bansag bulung (no page title matches)',
 'prevn' => 'minunang {{PLURAL:$1|$1}}',
 'nextn' => 'tutuking {{PLURAL:$1|$1}}',
+'prevn-title' => '↓Dati $1 {{PLURAL:$1|result|results}}',
+'nextn-title' => '↓
+Tutuking $1 {{PLURAL:$1|result|results}}',
+'shown-title' => '↓Ipakit $1 {{PLURAL:$1|bunga|ding bunga}}balang bulung',
 'viewprevnext' => 'Lon ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Atin bulung a mikilagiung \"[[:\$1]]\" keng wiking ini.'''",
+'searchmenu-new' => "↓'''Maglalang kang bulung \"[[:\$1]] keng wiking ini!'''",
 'searchhelp-url' => 'Help:Kalamnan',
+'searchprofile-articles' => '↓Kalamnan bulung',
+'searchprofile-project' => '↓Saup ampong bulung proyectu',
+'searchprofile-images' => '↓Dakalmedia',
 'searchprofile-everything' => 'Eganagana',
 'searchprofile-articles-tooltip' => 'Paintunan king$1',
 'searchprofile-images-tooltip' => 'Manintun makasimpan',
@@ -798,7 +806,7 @@ Pakitandanan mung maliaring e no makapanaun deng karelang index king kalamnan ni
 
 # Preferences page
 'preferences' => 'Pinili',
-'mypreferences' => 'Deng pinili ku',
+'mypreferences' => 'Deng pinili ku',
 'prefs-edits' => 'Bilang da reng edit:',
 'prefsnologin' => 'ekamaka log',
 'prefsnologintext' => 'Kailangan kang [[Special:UserLogin|maka-login]] ba mong apagana deng pinili ning talagamit (user preferences).',
@@ -942,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',
@@ -987,7 +996,7 @@ Nung ibie me, magamit ya bang kilalanan ing kekang ambag.',
 'recentchangeslinked-toolbox' => 'Miyalilan a makaugne',
 'recentchangeslinked-title' => 'Deng miyalilan a maki kaugnayan king "$1"',
 'recentchangeslinked-noresult' => 'Alang miyalilan kareng bulung a pakasuglung ketang mebanggit a panaun.',
-'recentchangeslinked-summary' => "Makalista la king bulung a iti deng tauling mengayalilan kareng
+'recentchangeslinked-summary' => "↓Makalista la king bulung a iti deng tauling mengayalilan kareng 
 bulung a makasuglung ketang partikular a bulung. '''Makapal la pangasulat''' deng bulung
 king kekang watchlist (tala da reng babanten).",
 'recentchangeslinked-page' => 'Lagyu ning bulung:',
@@ -1090,7 +1099,7 @@ Pakilawe mu nung makasalangi ya iti, manaya ka saguli, at subukan mung pasibayu.
 Mapaliaring mas masanting yang subukan nung mas ditak la reng gagamit.',
 
 'license' => 'Pamamie lisensia:',
-'license-header' => 'Pamamie lisensia:',
+'license-header' => 'Pamamie lisensia',
 'nolicense' => 'Alang mepili',
 'license-nopreview' => '(Alang preview maliaring lon)',
 'upload_source_url' => ' (metung a URL a matatanggap at aluban ding malda)',
@@ -1123,7 +1132,7 @@ Miyalilan ing pamanayus nung i-click ya ing pamagat ning kolum (column header).'
 'filehist-dimensions' => 'Sukad',
 'filehist-filesize' => 'Dagul ning simpan (file size)',
 'filehist-comment' => 'Komentu/Puna',
-'imagelinks' => "Suglung kareng simpan (''file links'')",
+'imagelinks' => "Suglung kareng simpan (''file links'')",
 'linkstoimage' => "Ing tutuking {{PLURAL:$1|page links|$1 pages link}} kaniting simpan (''file''):",
 'nolinkstoimage' => 'Alang bulung a pakasuglung king simpan (file) a ini.',
 'sharedupload' => "Ibat ya king $1 ining simpan (''file'') at maliari yang gamitan kareng aliwang proyectu.",
@@ -1314,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]].',
@@ -1382,11 +1388,7 @@ click me ing \"Tuknangan ing pamagbante\" (Unwatch) king gilid na ning bulung.",
 'unwatching' => 'E ne babanten...',
 
 'enotif_reset' => 'Dinan lang tanda deng eganaganang bulung a pintalan mu',
-'enotif_newpagetext' => 'Bayu yang bulung ini.',
 'enotif_impersonal_salutation' => 'talagamit king {{SITENAME}}',
-'changed' => 'miyalilan',
-'created' => 'melalang',
-'enotif_subject' => 'Ining bulung ning {{SITENAME}} a $PAGETITLE me$CHANGEDORCREATED ya kapamilatan nang $PAGEEDITOR',
 'enotif_lastvisited' => 'Lon me ing $1 para kareng eganaganang miyalilan
 manibat anyang tawli kang linabas.',
 'enotif_lastdiff' => 'Lon me ing $1 ba meng akit ining miyalilan.',
@@ -1414,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',
@@ -1538,6 +1542,7 @@ Mapaliaring putut ya ing kekang suglung, o misubli (restored) ya o milako king s
 'undelete-nodiff' => 'Alang meyakit kareng dating meyalili',
 'undeletebtn' => 'Ibálik yang pasibayu',
 'undeletelink' => 'lon/ibalik',
+'undeleteviewlink' => '↓lawen',
 'undeletereset' => 'Isubli king sadia (reset)',
 'undeletecomment' => 'Komentu:',
 'undeletedrevisions' => '{{PLURAL:$1|1 pamagbayung|$1 pamagbayung}} misubli',
@@ -1649,7 +1654,7 @@ mu nung sanu retang bulung a sinira da).',
 'ipusubmit' => 'Ilako ya pangasabat ing address a ini',
 'unblocked' => 'Mesabat ya i [[User:$1|$1]]',
 'unblocked-id' => 'Milako ing Sabat (Block) $1',
-'ipblocklist' => "Deng IP address ampong lagiungtalagamit (''username'') a makasabat",
+'ipblocklist' => 'Deng IP address ampong lagiungtalagamit a makasabat',
 'ipblocklist-legend' => 'Maintun talagamit a makasabat',
 'ipblocklist-submit' => 'Manintun',
 'infiniteblock' => 'alang kapupusan',
@@ -1847,7 +1852,7 @@ Maka-login la reng eganaganang pamaglub a transwiki (transwiki import actions) k
 'tooltip-pt-anonlogin' => 'Pakisabi ming mag-login ka, oneng e sapilitan iti.',
 'tooltip-pt-logout' => 'Mag log out',
 'tooltip-ca-talk' => 'Pamisabi-sabi tungkul king bulung kalamnan (content page)',
-'tooltip-ca-edit' => 'Malyari meng i-edit ing bulung a ini. Pakigamit me pamu ing "preview button" bayu ka mag-save.',
+'tooltip-ca-edit' => 'Malyari meng samasan ing bulung a ini. Pakigamit me pamu ing "pasinag a pipindutan" bayu me isikap.',
 'tooltip-ca-addsection' => "Mangibili kang bayung dake o ''section''.",
 'tooltip-ca-viewsource' => 'Protektadu/makakambil ya ing bulung a ini. Malyari meng lon ing kayang pikuanan (source).',
 'tooltip-ca-history' => 'Deng milabas a bersion ning bulung a ini.',
@@ -1889,16 +1894,17 @@ Maka-login la reng eganaganang pamaglub a transwiki (transwiki import actions) k
 'tooltip-ca-nstab-help' => 'Lon ya ing bulung saup (help page)',
 'tooltip-ca-nstab-category' => 'Lon ya ing bulung pang-kategoriya (category page)',
 'tooltip-minoredit' => 'Markan ya ini antimong malating pamag-edit',
-'tooltip-save' => 'I-save mo reng binayu mu',
-'tooltip-preview' => 'Lon (i-preview) mo pamu detang elilan mu; pakigamit me ini bayu ka mag-save!',
+'tooltip-save' => 'Isikap mo reng binayu mu',
+'tooltip-preview' => 'Lawen mo reng elilan mu keng pasinag. bayu me isikap!',
 'tooltip-diff' => 'Ipakit nung sanu ing inalilan mu ketang makasulat.',
 'tooltip-compareselectedversions' => 'Pakit la reng pamiyaliwa da reng aduang mepiling bersion ning bulung a ini.',
 'tooltip-watch' => 'Idagdag ya ing bulung a ini kareng kekang babanten',
 'tooltip-recreate' => 'Isubli ya ing bulung angiang mebura ne',
 'tooltip-upload' => 'Umpisan ya ing pamaglulan',
-'tooltip-rollback' => "Susubli no ning \"rollback\" deng miyalilan o edit kaniting bulung ning tauling talayambag king metung a ''click''",
-'tooltip-undo' => "Ing \"undo\" susubli ne ing edit at bubusni ne ing edit form king preview mode.
+'tooltip-rollback' => "Susubli no ning \"rollback\" deng miyalilan o edit kaniting bulung ning tauling talayambag king metung a ''pindut (click)''",
+'tooltip-undo' => "Ing \"balikgawan (undo)\" susubli ne ing edit at bubusni ne ing edit form king pasinag mode.
 Paintulutan na ing pamandagdag king sangkan king sampulung (''summary'').",
+'tooltip-summary' => '↓Palub kang makuyad a kabilugan',
 
 # Stylesheets
 'common.css' => '/** CSS mikabit keni maging mabisa ya karing eganaganang pabalat */',
@@ -2339,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 5be7b31..e22c428 100644 (file)
@@ -114,13 +114,14 @@ $messages = array(
 'category-empty' => "''Din l'catégorie-lo, i n'y o poin d'paches ou d'média.''",
 'hidden-categories' => '{{PLURAL:$1|Catégorie muchée|Catégories muchées}}',
 'hidden-category-category' => 'Catégouries muchées',
-'category-subcat-count' => "{{PLURAL:$2|Chol catégorie o seulemint el sou-catégorie-lo.|Chol catégorie o  {{PLURAL:$1|l'sou-catégorie-lo|$1 sou-catégories}}, pou un total éd $2.}}",
+'category-subcat-count' => "{{PLURAL:$2|Chol catégorie ale o seulemint el dsou-catégorie-lo:|Chol catégorie ale o  {{PLURAL:$1|l'dsou-catégorie-lo|chés $1 dsou-catégories suivantes}}, pou un total éd $2.}}",
 'category-subcat-count-limited' => "L'catégorie-lo ale o {{PLURAL:$1|el dsous-catégorie|chés $1 dsous-catégories}} -lo:",
-'category-article-count' => "{{PLURAL:$2|Chol catégorie o seulemint chol pache-lo.|{{PLURAL:$1|El pache-lo est|$1 Chés paches-lo sont}} din l'catégorie-lo, pou un total éd $2 .}}",
+'category-article-count' => "Chol catégorie ale o {{PLURAL:$2|seulemint l'pache-lo:|$2 paches, dont{{PLURAL:$1|chelle-chi:|chés $1 paches chi:}} }}",
 'category-article-count-limited' => "{{PLURAL:$1|L' pache d'apré ale est|Chés $1 paches d'apré sont}} dins l'catégorie-lo.",
-'category-file-count' => "{{PLURAL:$2|Chol catégorie o seulemint chol fichié-lo.|{{PLURAL:$1|Ech fichier-lo est|$1 Chés fichiés-lo sont}} din l'catégorie-lo, pou un total éd $2 fichiés.}}",
+'category-file-count' => 'Chol catégorie ale o  {{PLURAL:$2|seulemint ech fichié-lo:|$2 fichiés dont chés $1 fichiés suivants:}}',
 'category-file-count-limited' => "{{PLURAL:$1|Ech fichié d'apré est|Chés $1 fichiés d'apré sont}} dins l'catégorie-lo.",
 'listingcontinuesabbrev' => 'cont.',
+'noindex-category' => 'Paches nin indécsées',
 'broken-file-category' => "Paches aveuc des loïens d'fichiés bérzillés",
 
 'about' => 'À pérpos',
@@ -128,7 +129,7 @@ $messages = array(
 'newwindow' => '(ouvrir din eune nouvèle fernéte)',
 'cancel' => 'Canchler',
 'moredotdotdot' => 'Plu...',
-'mypage' => 'Em pache',
+'mypage' => 'Pache',
 'mytalk' => 'Min bavouér',
 'anontalk' => "Bavouér pou chl'IP-lo",
 'navigation' => 'Navigachon',
@@ -317,6 +318,7 @@ Si s'n'est poin ch'cas-lo, pététe éq ch'est un bogue din ch'businkillache. <b
 'yourpassword' => "Mot d'passe:",
 'yourpasswordagain' => "Intrer à nouvieu ch'mot d'passe:",
 'remembermypassword' => "Intrer oùtonmatiquemint l'prochaine fouos (pour un maximum éd $1 {{PLURAL:$1|jour|jours}})",
+'securelogin-stick-https' => "Réster connécté in HTTPS apré l'connécsion",
 'yourdomainname' => 'Vote donmène:',
 'login' => 'Intrer',
 'nav-login-createaccount' => 'Intrer / créer vote conpte',
@@ -330,6 +332,7 @@ Si s'n'est poin ch'cas-lo, pététe éq ch'est un bogue din ch'businkillache. <b
 'createaccount' => 'Créer un conpte',
 'gotaccount' => "Jou qu'os avez piécha un conpte? '''$1'''.",
 'gotaccountlink' => 'Intrer',
+'userlogin-resetlink' => "Vos avez oblié vous détals d'connécsion ?",
 'createaccountmail' => 'par imèle',
 'badretype' => "Chés mots d'passe intrés, is sont poin bon.",
 'userexists' => "Nom d’utilisateur entré déjà utilisé.
@@ -355,6 +358,12 @@ j'm'escuse mais i feut prinde un aute nom.",
 'resetpass_forbidden' => "Chés mots d'passe is n'peu'te poin ète cangés",
 'resetpass-submit-loggedin' => "Canger ch'mot d'passe",
 
+# Special:PasswordReset
+'passwordreset' => "Ortreuver ch'mot d'passe",
+
+# Special:ChangeEmail
+'changeemail' => "Canger l'adrèche du imèle",
+
 # Edit page toolbar
 'bold_sample' => 'Cros teske',
 'bold_tip' => 'Cros teske',
@@ -394,6 +403,10 @@ Si vos ètes ichi par bérlure, bukez su l'bouton '''értour''' du navigateu.",
 Os povez [[Special:Search/{{PAGENAME}}|foaire eune érchérche du tite del pache]] din chés eutes paches,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} érchércher din chés érliées opéracions]
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} créer chol pache]</span>.',
+'noarticletext-nopermission' => "Achteure i n’y o autchun teske dseur l'pache-lo.
+Os povez [[Special:Search/{{PAGENAME}}|foaire eune érchérche du tite del pache]] din chés eutes paches,
+o bin <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} érchércher din chés érliées gazètes]</span>
+mais vos n'avez poin l'droué d'créer chol pache.",
 'previewnote' => "'''Afute! ch'teske-lo ch'est seulemint eune prévue.'''
 
 Vos cangemints, is sont poin coèr inrégistrés!",
@@ -408,10 +421,16 @@ Os prométtez auchi éq vos avez écrit ch'teske vous-méme, ou éq vos l’avez
 'template-semiprotected' => '(semi-garanti)',
 'hiddencategories' => '{{PLURAL:$1|Catégorie muchée|Catégories muchées}} pou chol pache:',
 'permissionserrorstext-withaction' => "Vos n’avez poin l'pérmichon éd $2, pou {{PLURAL:$1|ch'motif suivant|chés motifs suivants}}:",
+'recreate-moveddeleted-warn' => "'''Afute ! : Os ètes in route à ércréer eune pache qu'o té abolie édvant.'''
+
+Controler qu'ch'est pértinint d' porsuire chés modificacions édseur chol pache. L'jornal des défacions pi des déplachemints l'est affiké chi-édsous :",
+'moveddeleted-notice' => "Chol pache ale o té abolie. L'jornal des défacions pi des déplachemints il est affiké chi-édsous pour référinche.",
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "Affute : Chèle pache ale a trop d’modèles. Des inclusions n'sront poin foaites.",
 'post-expand-template-inclusion-category' => "Paches aveuc granmint d'modèles",
+'post-expand-template-argument-warning' => "Afute : Chol pache ale o au moins un paramète d'modèle dont l'inclusion est rindue impossibe. Apré éstinsion, chti-chi il éroait produit un résultat trop long, i n'a donc poin té inclus.",
+'post-expand-template-argument-category' => "Paches aveuc des paramètes d'modèle mie évalués",
 
 # History pages
 'viewpagelogs' => 'Vir chés gasètes del pache-lo',
@@ -428,9 +447,13 @@ Os prométtez auchi éq vos avez écrit ch'teske vous-méme, ou éq vos l’avez
 'histlegend' => "Diff séléccion: buke chés boétes d'chés canjemints à comparète pi détriquer intrer ou ch'bouton édsou.<br />
 Léginde : ({{MediaWiki:Cur}}) = différinches aveuc el vérchon à ch'momint-chi, ({{MediaWiki:Last}}) = différinches aveuc el vérchon édvant, <b>m</b> = tiot canjemint.",
 'history-fieldset-title' => "S'déplacher din l'historique",
+'history-show-deleted' => 'Défacés seulemint',
 'histfirst' => 'preumières paches',
 'histlast' => 'Darin',
 
+# Revision feed
+'history-feed-item-nocomment' => '$1 à $2',
+
 # Revision deletion
 'rev-delundel' => 'montrer/mucher',
 'revdel-restore' => 'cange écmint vir',
@@ -442,10 +465,11 @@ Léginde : ({{MediaWiki:Cur}}) = différinches aveuc el vérchon à ch'momint-ch
 'revertmerge' => "N'poin mélinger",
 
 # Diffs
-'history-title' => 'Histoère des cangemints éd "$1"',
+'history-title' => 'Historike des canjemints éd "$1"',
 'lineno' => 'Line $1:',
 'compareselectedversions' => 'Compérer chés couésies contérbuchons',
 'editundo' => "n'poin foaire",
+'diff-multi' => '({{PLURAL:$1|Un canjemint intarmédiaire|$1 canjemints intarmédiaires}} par {{PLURAL:$2|un uzeu|$2 uzeus}} {{PLURAL:$1|est muché|sont muchées}})',
 
 # Search results
 'searchresults' => 'Tracher chés résultats',
@@ -459,7 +483,10 @@ Léginde : ({{MediaWiki:Cur}}) = différinches aveuc el vérchon à ch'momint-ch
 'prevn' => 'dvant {{PLURAL:$1|$1}}',
 'nextn' => 'apreu {{PLURAL:$1|$1}}',
 'prevn-title' => 'Dvant $1 {{PLURAL:$1|résultat|résultats}}',
+'nextn-title' => "$1 {{PLURAL:$1|résultat d'apré|résultats d'apré}}",
+'shown-title' => 'Montrer $1 résultat{{PLURAL:$1||s}} pèr pache',
 'viewprevnext' => 'Vir ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Il y o eune pache lonmée « [[:$1]] » édseur ch'wiki'''",
 'searchmenu-new' => "'''Créer l'pache « [[:$1|$1]] » édseur ech wiki !'''",
 'searchprofile-articles' => "Paches d'étnu",
 'searchprofile-project' => "Paches d’aïude et pi d'prodjé",
@@ -472,13 +499,16 @@ Léginde : ({{MediaWiki:Cur}}) = différinches aveuc el vérchon à ch'momint-ch
 'searchprofile-everything-tooltip' => "Tracher dins tout ch'wikipédia (et ochi dins chés paches éd distchucion)",
 'searchprofile-advanced-tooltip' => "Couésir chés éspaches d'noms pour l'értrache",
 'search-result-size' => '$1 ({{PLURAL:$2|1 mot|$2 mots}})',
+'search-result-category-size' => '$1 mimbe{{PLURAL:$1||s}} ($2 édsous-catégorie{{PLURAL:$2||s}}, $3 fichié{{PLURAL:$3||s}})',
 'search-redirect' => '(érdirection $1)',
 'search-section' => '(sekchon $1)',
 'search-suggest' => 'Cha vo ti dire: $1',
 'search-interwiki-caption' => 'Proujé analocq',
 'search-interwiki-default' => '$1 résultats:',
 'search-interwiki-more' => '(pus)',
+'searchrelated' => 'relaté',
 'searchall' => 'tout',
+'showingresultsheader' => "{{PLURAL:$5|Résultat '''$1'''|Résultats '''$1–$2'''}} éd '''$3''' pour '''$4'''",
 'nonefound' => "'''Note''': il y o tasseulemint quéques éspaces éd noms éq sont trachés pèr défeut. <br /> Pou tracher din tous chés contnus (paches éd pérlache, modéles, etc... comprins) insséyer in imploéyant ch'préfixe ''all:'' o bin imploéyer echl éspace éd noms édmindé conme préfixe.",
 'search-nonefound' => 'Y a autchun résultat pour chol dmanne.',
 'powersearch' => 'Érvue avanchée',
@@ -490,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.
@@ -502,12 +533,16 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 'gender-male' => 'Marle',
 'gender-female' => 'Femelle',
 'email' => 'Imèle',
+'prefs-help-email' => "L’adrèche du courrièl est facultative, mais ale est nécessaire pour artreuver vote mot d'passe, si vos vnoète à l’oblier.",
+'prefs-help-email-others' => "Os pouvez auchi couésir d'laicher les eutes vos contacter par imèle aveuc un loïen édseur vote pache éd distchussion d'uzeu sans qu'i soèche nécessaire ed révéler vote idintité.",
 'prefs-help-email-required' => 'I feut eune iméle adérche',
 
 # User rights
 'userrights-groupsmember' => 'Mimbe éd:',
 
 # Groups
+'group-user' => 'Uzeus',
+'group-autoconfirmed' => 'Uzeus inrégistrés',
 'group-sysop' => 'Aménistrateus',
 'group-bureaucrat' => 'Buroécrates',
 
@@ -516,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",
 
@@ -550,12 +588,18 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 'recentchanges' => 'Darins canjemints',
 'recentchanges-legend' => 'Opchons éd chés nouvieus canjemints',
 'recentchanges-feed-description' => 'Tracher chés pus darins cangemints du wiki din chol alimintachon.',
+'recentchanges-label-newpage' => 'Chol modificacion ale o créé eune nouvèle pache',
+'recentchanges-label-minor' => "C'est un tiot canjemint",
+'recentchanges-label-bot' => 'Chol modificacion ale o té foaite pèr un robot.',
+'recentchanges-label-unpatrolled' => 'Chol modificacion ale n’o poin coèr té controlée.',
 'rcnote' => "Vlo {{PLURAL:$1|ech darin canjemint foait|chés $1 darins canjemints foaits}} din {{PLURAL:$2|l'darinne jornèe|chés <b>$2</b> darins jours}} dusque  l' $4 à $5.",
+'rcnotefrom' => "Vlo chés modificacions foaites édpuis l' '''$2''' (dousqu'à '''$1''' au plus).",
 'rclistfrom' => "Montrer chés nouvieus cangemints d'puis $1",
 'rcshowhideminor' => '$1 tiotes éditions',
 'rcshowhidebots' => '$1 bots',
 'rcshowhideliu' => '$1 lodjés uzeus',
 'rcshowhideanons' => '$1 uzeus anonimes',
+'rcshowhidepatr' => '$1 chés modificacions wardées',
 'rcshowhidemine' => '$1 ems éditions',
 'rclinks' => 'Afiqher chés $1 darins canjemints din chés $2 darins jours<br />$3',
 'diff' => 'dif',
@@ -570,7 +614,9 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 
 # Recent changes linked
 'recentchangeslinked' => 'Darins canjemints érliés',
+'recentchangeslinked-toolbox' => 'Suivi des paches loïées',
 'recentchangeslinked-title' => 'Cangemints à pérpos éd "$1"',
+'recentchangeslinked-noresult' => "I n’y a poin d' modificacion des paches loïées pindant l'période couésie.",
 'recentchangeslinked-summary' => "Ch'est eune lisse d'chés darins canjemints su chés paches qu'ont un loïen aveuc l'pache-lo. Chés paches din vote [[Special:Watchlist|''lisse à suire'']] il sont in '''cros'''.",
 'recentchangeslinked-page' => 'Nom del pache:',
 'recentchangeslinked-to' => "Vir putot chés canjemints d'chés paches aveuc un loïen su l'pache-lo",
@@ -578,8 +624,15 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 # Upload
 'upload' => 'Quértcher chés fichiés',
 'uploadlogpage' => 'Jornal éd chés quértchémints',
+'filedesc' => 'Résumè',
 'uploadedimage' => '"[[$1]]" quértchée',
 
+'license' => 'Licince',
+'license-header' => 'Licince',
+
+# Special:ListFiles
+'listfiles' => 'Lisse des fichiés',
+
 # File description page
 'file-anchor-link' => 'Fichié',
 'filehist' => 'Histoère dech fichié',
@@ -594,23 +647,64 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 'filehist-comment' => 'Fichié éd chés conmints',
 'imagelinks' => 'Usage dech fichié',
 'linkstoimage' => "{{PLURAL:$1|L'pache d'apreu est liée|Chés $1 paches d'apreu sont liées}} à ch'fichié-lo :",
+'nolinkstoimage' => "Autchune pache n'est loïée aveuc ch'fichié-lo",
 'sharedupload' => "Cht'fichié vient éd $1 pi i put ète imploïé par d'eutes proujés.",
 'sharedupload-desc-here' => "Ch'fichié i vient éd $1. I put ète uzer pèr d’eutes prodjés.
 Vir apré ([$2 pache]).",
 'uploadnewversion-linktext' => 'Quértcher eune novèle vérchion del pache-lo',
 
+# MIME search
+'mimesearch' => 'Tracher pèr type éd contenu MIME',
+
+# Unwatched pages
+'unwatchedpages' => 'Paches poin suivies',
+
+# List redirects
+'listredirects' => 'Lisse des érdiréccions',
+
+# Unused templates
+'unusedtemplates' => 'Modèles poin implouéyés',
+
 # Random page
 'randompage' => "Pache à l'bérlure",
 
 # 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',
+
+'doubleredirects' => 'Doubes érdireccions',
+
+'brokenredirects' => 'Érdireccions bérzillées',
+
+'withoutinterwiki' => 'Paches sans loïens intar-langues',
+
+'fewestrevisions' => 'Paches les moins canjées',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|octé|octés}}',
 'nmembers' => '$1 {{PLURAL:$1|mimbe|mimbes}}',
+'lonelypages' => 'Paches orfelines',
+'uncategorizedpages' => 'Paches sans catégories',
+'uncategorizedimages' => 'Fichiés sans catégories',
+'unusedcategories' => 'Catégories poin implouéyées',
+'unusedimages' => 'Fichiés orfelins',
+'wantedcategories' => 'Catégories granmint écmindées',
+'wantedpages' => 'Paches les pus écmindés',
+'wantedfiles' => 'Fichiés les pus écmindés',
+'wantedtemplates' => 'Modèles écmindés',
 'prefixindex' => 'Tertous chés paches aveuc préfix',
+'shortpages' => 'Courtes paches',
+'longpages' => 'Paches longues',
+'deadendpages' => "Paches in tchul d'so",
+'protectedpages' => 'Paches défènnées',
+'protectedtitles' => 'Tites défènnés',
+'listusers' => 'Lisse des uzeus',
 'usercreated' => '{{GENDER:$3|Créé}} ech $1 à $2',
 'newpages' => 'Novèles paches',
+'ancientpages' => 'Paches les pus vieilles',
 'move' => 'Déplacher',
 'movethispage' => "Déplacher l'pache-lo",
 'pager-newer-n' => '{{PLURAL:$1|pu nouvieu 1|pu nouvieus $1}}',
@@ -638,13 +732,22 @@ Vir apré ([$2 pache]).",
 'allpagessubmit' => 'Aler',
 'allpagesprefix' => "Foaire vir chés paches aveuc ch'préfix:",
 
+# 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',
 
-# Special:Log/newusers
-'newuserlogpage' => "Jornal éd chés créachons d'comptes d'uzeu",
+# Special:ActiveUsers
+'activeusers' => 'Lisse des ouvreus uzeus',
 
 # 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)',
 
 # E-mail user
@@ -672,6 +775,7 @@ Vir apré ([$2 pache]).",
 'deletepage' => "Défacer l'pache",
 'confirmdeletetext' => "Vos alez défacer eune pache ou un fichié aveuc toutes chés antieusses vérchons.<br /> Confreumer éq ch'est cho éq vos voulez foaire, éq vos conprindez chés consécanches et pi éq ch'est bin s'lon el [[{{MediaWiki:Policy-url}}|politique éd MédiaWiki]].",
 'actioncomplete' => 'Plònne acchon',
+'actionfailed' => "L’action n'a poin réussi",
 'deletedtext' => "« $1 » o té défacé.
 Vir $2 pou eune lisse d'chés darinnes défachons.",
 'dellogpage' => 'jornal éd chés défacions',
@@ -713,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',
 
@@ -732,6 +838,8 @@ 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',
 'sp-contributions-search' => 'Tracher pou chés contérbuchons',
@@ -748,7 +856,7 @@ Vlo chés réglages del pache '''$1''' à ch'momint-chi:",
 'nolinkshere-ns' => "i n'y o poin d'pache aveuc un loïen vers '''[[:$1]]''' dins echl'éspace d'noms coési.",
 'isredirect' => 'pache érdirigée',
 'istemplate' => 'transclusion',
-'isimage' => "Loïen aveuc l'imache",
+'isimage' => "Loïen aveuc l'fichié",
 'whatlinkshere-prev' => '{{PLURAL:$1|édvant|édvants $1}}',
 'whatlinkshere-next' => "{{PLURAL:$1|d'apreu|d'apreu $1}}",
 'whatlinkshere-links' => '← loïens',
@@ -759,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",
@@ -767,6 +876,7 @@ I feut l'foaire seleumint pour inréyer ech vindalime et pi i feut ète acordant
 Donner apré ch'motif  (pèr egzimpe chiter chés paches qu'ont té vindalisées).",
 'ipboptions' => '2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 ésminne:1 week,2 ésminnes:2 weeks,1 moés:1 month,3 moés:3 months,6 moés:6 months,1 an:1 year,infini:infinite',
 'ipbotheroption' => 'eute',
+'blocklist' => 'Uzeus blotchés',
 'ipblocklist' => 'Uzeus blotchés',
 'blocklink' => 'blotcher',
 'unblocklink' => 'déblotcher',
@@ -808,9 +918,11 @@ Din chés cas-lo, I feut érlonmer ou ratatouiller l'pache aveuc l'main.",
 
 # Namespace 8 related
 'allmessagesname' => 'Nom',
+'allmessagesdefault' => 'Messache pèr défeut',
 
 # Thumbnails
 'thumbnail-more' => 'Pu grand',
+'thumbnail_error' => "Bérlurage tandir l'créachon éd la miniature : $1",
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Vote pache éd uzeu',
@@ -872,6 +984,9 @@ Os pouvez vir l'source",
 'tooltip-preferences-save' => 'Warder chés préférinches.',
 'tooltip-summary' => 'Intrer un tiot résumè',
 
+# Info page
+'pageinfo-toolboxlink' => "Informacions édseur l'page",
+
 # Browsing diffs
 'previousdiff' => '← Pu vieille édition',
 'nextdiff' => 'Nouvèle édichon →',
@@ -882,6 +997,9 @@ Os pouvez vir l'source",
 'svg-long-desc' => 'Fichié SVG, résoluchon éd $1 × $2 picsels, diminchon: $3',
 'show-big-image' => 'Plinne résoluchon',
 
+# Special:NewFiles
+'newimages' => "Galerie d'chés nouvieus fichiés",
+
 # Bad image list
 'bad_image_list' => "Ch'format ch'est:
 
@@ -930,21 +1048,55 @@ Chés eutes cans is s'ront muchés pèr défeut.
 'watchlisttools-edit' => "Vir pi éditer l'lisse à suire",
 'watchlisttools-raw' => 'Éditer eune brute lisse à suire',
 
+# Core parser functions
+'duplicate-defaultsort' => "Afute : él cleu d'tri pèr défeut « $2 » écrase l'précédinte « $1 ».",
+
 # Special:Version
 'version-specialpages' => 'Paches éspéchiales',
 
 # Special:FilePath
 'filepath-page' => 'Fichié :',
 
+# Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Dénicher chés doublons',
+
 # Special:SpecialPages
 'specialpages' => 'Paches éspéchiales',
+'specialpages-note' => '----
+* Paches éspéchiales conformes.
+* <span class="mw-specialpagerestricted">Paches éspéchiales réstrintes.</span>
+* <span class="mw-specialpagecached">Paches éspéchiales seulemint in muche (pétète des viuseries).</span>',
+'specialpages-group-maintenance' => "Rapports d'maintenanche",
+'specialpages-group-other' => 'Eutes paches éspéchiales',
+'specialpages-group-changes' => 'Darins canjemints pi gazètes',
+'specialpages-group-media' => "Rapports pi imports d'chés fichiés médias",
 'specialpages-group-users' => 'Uzeus pi leus droués',
+'specialpages-group-highuse' => 'Paches bougrémint implouéyées',
 'specialpages-group-pages' => "Lisses d'chés paches",
+'specialpages-group-pagetools' => 'Otis pour chés paches',
+'specialpages-group-wiki' => 'Donnèes pi otis dech Wiki',
+'specialpages-group-redirects' => 'Paches éspéchiales ardirigées',
 
 # Special:BlankPage
 'blankpage' => 'Blanke pache',
 
+# External image whitelist
+'external_image_whitelist' => " #Laicher chol line egzactemint telle quelle.<pre>
+#Dire chés bérlukes d’éspressions rationnelles (juste l'partie désignée inte chés //) chi-édsous.
+#I correspondront aveuc chés URL des images éstérnes.
+#Chelles qui corresponde'te s’affikeront conme des images, sinon seul un loïen vers l’image i s'ra affiké.
+#Les lines conmençant par un # s'ront considérées conme des conmintaires.
+#Chol lisse n’est mie sensibe à la casse.
+
+#Mettez tous chés bérlukes d’éspressions rationnelles au-d'sus éd chol line. Laichez chol darin.ne line telle quelle.</pre>",
+
+# Special:Tags
+'tags' => 'Balises des canjemints valides',
+'tag-filter' => 'Filtrer chés [[Special:Tags|balises]] :',
+
 # Special:ComparePages
+'comparepages' => 'Compérer dés paches',
+'compare-selector' => 'Compérer chés vèrsions dés paches',
 'compare-page1' => 'Pache 1',
 'compare-page2' => 'Pache 2',
 'compare-rev1' => 'Canjemint 1',
index 5d5adb7..ab3f5ce 100644 (file)
@@ -138,7 +138,7 @@ $messages = array(
 'cancel' => 'Zerick',
 'moredotdotdot' => 'Mehner…',
 'mypage' => 'Mei Blatt',
-'mytalk' => 'Mei Gschwetz-Blatt',
+'mytalk' => 'Mei Dischbedutt',
 'anontalk' => 'Gschwetz-Blatt fer die IP',
 'navigation' => 'Faahre-Gnepp',
 'and' => '&#32;unn',
@@ -187,7 +187,7 @@ $messages = array(
 'protectthispage' => 'Des Blatt schitze',
 'newpage' => 'Neies Blatt',
 'talkpage' => 'Sell Blatt dischbediere',
-'talkpagelinktext' => 'Gschwetz',
+'talkpagelinktext' => 'Dischbedutt',
 'specialpage' => 'Besunneres Blatt',
 'personaltools' => 'Paerseenlich Gscharr',
 'articlepage' => 'Inhalt vun dem Blatt aagucke',
@@ -425,7 +425,7 @@ Paesswatt fer nau: $2',
 
 # Preferences page
 'preferences' => 'Paerseenlich Profil',
-'mypreferences' => 'Mei Uffschtelling',
+'mypreferences' => 'Uffschtellinge',
 'changepassword' => 'Paesswatt ennere',
 'skin-preview' => 'Aagucke',
 'prefs-personal' => 'Yuuser Profile',
@@ -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',
@@ -691,7 +688,7 @@ Paesswatt fer nau: $2',
 
 # Watchlist
 'watchlist' => 'Mei Watsch-Lischt',
-'mywatchlist' => 'Mei Watsch-Lischt',
+'mywatchlist' => 'Watsch-Lischt',
 'watchlistfor2' => 'Vun $1 $2',
 'watch' => 'watsche',
 'watchthispage' => 'watsch des Blatt',
@@ -706,7 +703,6 @@ Paesswatt fer nau: $2',
 'watching' => 'Watsche…',
 'unwatching' => 'Nimmi watsche...',
 
-'enotif_newpagetext' => 'Sell iss en neies Blatt.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-Yuuser',
 'changed' => 'gennert',
 
@@ -764,7 +760,7 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 'month' => 'unn Munet:',
 'year' => 'bis Yaahr:',
 
-'sp-contributions-talk' => 'Gschwetz',
+'sp-contributions-talk' => 'Dischbedutt',
 'sp-contributions-search' => 'Guck fer Ardickel',
 'sp-contributions-username' => 'IP-Adress odder Yuusernaame:',
 'sp-contributions-submit' => 'Guck uff',
@@ -1014,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 77d4823..5121c2e 100644 (file)
@@ -18,11 +18,12 @@ $fallback = 'de';
 
 $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',
@@ -32,6 +33,13 @@ $messages = array(
 'thursday' => 'Dunnaschdaach',
 'friday' => 'Fraidaach',
 'saturday' => 'Somschdaach',
+'sun' => 'Su',
+'mon' => 'Mo',
+'tue' => 'Di',
+'wed' => 'Mi',
+'thu' => 'Du',
+'fri' => 'Fr',
+'sat' => 'So',
 'january' => 'Jänner',
 'february' => 'Fewwer',
 'march' => 'März',
@@ -39,10 +47,10 @@ $messages = array(
 'may_long' => 'Mai',
 'june' => 'Juni',
 'july' => 'Juli',
-'august' => 'Auguscht',
+'august' => 'Auguschd',
 'september' => 'Sebdember',
 'october' => 'Ogdower',
-'november' => 'November',
+'november' => 'Nowember',
 'december' => 'Dezember',
 'january-gen' => 'Jänner',
 'february-gen' => 'Fewwer',
@@ -51,10 +59,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',
@@ -74,7 +82,8 @@ $messages = array(
 'category_header' => 'Saide in de Kadegorie „$1“',
 'subcategories' => 'Unnerkadegorie',
 'category-media-header' => 'Medie in de Kadegorie „$1“',
-'hidden-categories' => '{{PLURAL:$1|Versteckelte Kadegorie|Versteckelte Kadegorie}}',
+'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.)',
@@ -82,42 +91,48 @@ $messages = array(
 'about' => 'Iwwer',
 'newwindow' => '(werd im e naie Fenschter uffgmacht)',
 'cancel' => 'Abbreche',
-'mytalk' => 'Gebabbel mit dir',
-'navigation' => 'Navigation',
+'mypage' => 'Said',
+'mytalk' => 'Dischbediere',
+'navigation' => 'Nawigadzion',
 
 # Cologne Blue skin
 'qbfind' => 'Finne',
 'qbedit' => 'Bearwaide',
 'qbmyoptions' => 'Mai Saide',
+'faq' => 'Ofd gschdeldi Froche',
 
 # 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.',
 'tagline' => 'Vun {{SITENAME}}',
-'help' => 'Hilfe',
+'help' => 'Hilf',
 'search' => 'Suche',
 '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',
@@ -125,8 +140,8 @@ $messages = array(
 'personaltools' => 'Perseenliche Werkzeische',
 'talk' => 'Dischbediere',
 'views' => 'Wievielmol aageguckt',
-'toolbox' => 'Werkzaich',
-'otherlanguages' => 'In annere Sproche',
+'toolbox' => 'Werkzaisch',
+'otherlanguages' => 'In annere Schbroche',
 'redirectedfrom' => '(Wairrerglaidet vun $1)',
 'redirectpagesub' => 'Wairerlaidungssaid',
 'lastmodifiedat' => 'Die Said isch zum ledschde Mol gänneret worre am $1, am $2.',
@@ -140,153 +155,165 @@ $messages = array(
 'aboutpage' => 'Project:Iwwer',
 'copyright' => 'Was do drin schdeht isch unner $1 verfiechbar.',
 'copyrightpage' => '{{ns:project}}:Urhewerrecht',
-'currentevents' => 'Was grad so bassiert isch',
+'currentevents' => 'Was grad so bassierd isch',
+'currentevents-url' => 'Project: Leschdi Eraigniss',
 'disclaimers' => 'Hafdungsausschluß',
 'disclaimerpage' => 'Project:Impressum',
-'edithelp' => 'Hilf fer s Bearwaide',
+'edithelp' => 'Hilf fers Bearwaide',
 'edithelppage' => 'Help:Ännere',
-'helppage' => 'Help:Inhalt',
+'helppage' => 'Help:Inhald',
 'mainpage' => 'Hääptsaid',
 'mainpage-description' => 'Startseid',
-'portal' => '{{SITENAME}}-Pordal',
-'privacy' => 'Dadeschutz',
+'portal' => '{{SITENAME}}-Bordal',
+'portal-url' => 'Project:Gmoinschafdsbordal',
+'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',
-'editsectionhint' => 'Abschnitt ännere: $1',
+'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',
 'page-atom-feed' => '"$1" Atom Feed',
-'red-link-title' => '$1 (Said gebbs nid)',
+'red-link-title' => '$1 (Said gebbds nid)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Said',
 'nstab-user' => 'Benutzersaid',
 'nstab-media' => 'Media',
 'nstab-special' => 'Spezialsaid',
-'nstab-project' => 'Pordal',
-'nstab-image' => 'Datei',
+'nstab-project' => 'Bordal',
+'nstab-image' => 'Dadei',
 'nstab-mediawiki' => 'Mitdeelung',
 'nstab-template' => 'Vorlaach',
-'nstab-help' => 'Hilfe',
+'nstab-help' => 'Hilf',
 'nstab-category' => 'Kadegorie',
 
 # General errors
-'missing-article' => 'De Text fer „$1“ $2 isch in de Datebank nit gfunne worre.
+'missing-article' => "De Text fer „$1“ $2 isch inde Daadebong'g nit gfunne worre.
 
-Normalerwais hääßt des, dass die Said gleschd worre isch.
+Normalerwais hääßd des, dass die Said gleschd worre isch.
 
-Wenn s des nit isch, hoscht villaicht en Fehler in de Datebank gfunne.
-Bitte meld des an e [[Special:ListUsers/sysop|Adminischtrator]], un gebb d URL dezu aa.',
+Wenns des nit isch, hoschd villaischd en Fehler in de Daadebong'g gfunne.
+Bidde meldsm [[Special:ListUsers/sysop|Adminischdrador]], un gebb d URL dezu aa.",
 'missingarticle-rev' => '(Versionsnummer#: $1)',
+'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',
-'sig_tip' => 'Dai Unnerschrift mit ener Zaitaagab',
+'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',
-'revdel-restore' => 'Sichtbarkeit ännere',
+'revdelete-submit' => 'Uff die gewehld {{PLURAL:$1|Version|Versione}} owende',
+'revdel-restore' => 'Sischdbakaid ännere',
+'revdel-restore-deleted' => 'gleschdi Änarunge',
+'revdel-restore-visible' => 'sischdbari Änarunge',
 
 # Merge log
 'revertmerge' => 'Zammefiehrung rickgängich mache',
@@ -295,7 +322,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',
@@ -307,8 +334,15 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'notextmatches' => 'Kää Iwwerainstimmunge mit Inhalde',
 'prevn' => 'voriche {{PLURAL:$1|$1}}',
 '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)',
@@ -316,7 +350,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:',
@@ -329,10 +365,12 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 
 # Preferences page
 'preferences' => 'Optione',
-'mypreferences' => 'Mai Aistellunge',
+'mypreferences' => 'Oistellunge',
 'saveprefs' => 'Oischdellunge schbeichere',
 'resetprefs' => 'Oischdellunge verwerfe',
 'guesstimezone' => 'Aus em Browser iwwernemme',
+'yourrealname' => 'Birscherlischer Nome:',
+'yourlanguage' => 'Schbrooch:',
 'gender-unknown' => 'Ghoim gkalde',
 
 # Groups
@@ -342,26 +380,29 @@ 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",
 'rcnote' => "Aagezaicht {{PLURAL:$1|werd '''1''' Ännerung|werre die letschte '''$1''' Ännerunge}} {{PLURAL:$2|vum letschte Dach|in de letschte '''$2''' Dache}} (Stand: $4, $5)",
-'rclistfrom' => 'Zeich die letschte Ännerunge ab $1',
+'rclistfrom' => 'Zeich die ledschde Ännerunge ab $1',
 'rcshowhideminor' => 'Klenne Ännerunge $1',
 'rcshowhidebots' => 'Bots $1',
 'rcshowhideliu' => 'Aagemeldte Benutzer $1',
@@ -369,14 +410,14 @@ 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',
 'newpageletter' => 'N',
 'boteditletter' => 'B',
 'rc-enhanced-expand' => "Details zaische (dodezu braucht's JavaScript)",
-'rc-enhanced-hide' => 'Details versteckeln',
+'rc-enhanced-hide' => 'Dedails versdeckle',
 
 # Recent changes linked
 'recentchangeslinked' => 'Was on verlinkde Saide gemacht worre isch',
@@ -389,11 +430,13 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'recentchangeslinked-to' => 'Zaisch Ännerunge uff Saide, wu do her verlinkt sinn',
 
 # Upload
-'upload' => 'Hochlade',
+'upload' => 'Nufflade',
 '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.',
@@ -403,20 +446,23 @@ 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' => 'Dateigschicht',
+'filehist' => 'Dateigschischd',
 'filehist-help' => 'Drick uff e Zaidpunkt zum aazääche, wie s dort ausgsähne hot.',
 'filehist-revert' => 'zuriggsedze',
-'filehist-current' => 'aktuell',
-'filehist-datetime' => 'Zaidpunkt',
+'filehist-current' => 'akduell',
+'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',
 
@@ -464,19 +510,17 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 # Special:LinkSearch
 'linksearch' => 'Externe Links',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Naiaameldungs-Logbuch',
-
 # Special:ListGroupRights
-'listgrouprights-members' => '(Mitgliederlischt)',
+'listgrouprights-members' => '(Midgliederlischd)',
 
 # E-mail user
-'emailuser' => 'E-Mail on den Benutzer',
+'emailuser' => 'E-Mail on de Benutzer',
 'emailsend' => 'Abschigge',
 
 # Watchlist
 'watchlist' => 'Beowachdungslischd',
-'mywatchlist' => 'Mai 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.',
@@ -499,7 +543,7 @@ Zukimftiche Ännerunge an derre Said un de Dischbediersaid, wu dezu ghert, werre
 'delete-legend' => 'Lesche',
 'confirmdeletetext' => 'Du bisch debai e Said z lesche mid alle Versione.
 Bitte du bstätiche, dass Du des wllscht du, dass Du verstehsch, was des hääßt, un dass Du des machscht in Iwweraistimmung mit de [[{{MediaWiki:Policy-url}}|Richtline]].',
-'actioncomplete' => 'Aktion fertich',
+'actioncomplete' => 'Agtion ferdisch',
 'deletedtext' => '"$1" isch gelescht worre.
 Guck $2 fer e Lischt vun de letschte Leschunge.',
 'dellogpage' => 'Leschlogbuch',
@@ -508,11 +552,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:',
@@ -521,7 +565,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',
@@ -529,7 +573,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:',
@@ -542,6 +586,7 @@ Der Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uf
 'undelete' => 'Widderherschdelle',
 'undeletebtn' => 'Widderherschdelle',
 'undeletelink' => 'aagucke/wirrer herstelle',
+'undeleteviewlink' => 'Ogugge',
 'undeletereset' => 'Zuricksetze',
 'undelete-show-file-submit' => 'Ja',
 
@@ -551,11 +596,11 @@ Der Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uf
 'blanknamespace' => '(Haaptsaid)',
 
 # Contributions
-'contributions' => 'Was der gemacht hot',
+'contributions' => '{{GENDER:$1|Wasa gemachd hod}}',
 'contributions-title' => 'Benutzerbaidräch vun $1',
-'mycontris' => 'Was isch gemacht hab',
+'mycontris' => 'Baidräsch',
 'contribsub2' => 'Fer $1 ($2)',
-'uctop' => '(aktuell)',
+'uctop' => '(akduell)',
 'month' => 'un Monet (un frieher):',
 'year' => 'Ab em Johr (un frieher):',
 
@@ -635,12 +680,12 @@ 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',
 
 # Export
-'export' => 'Saide exportiere',
+'export' => 'Saide expordiere',
 'export-submit' => 'Seide exbordiere',
 
 # Thumbnails
@@ -650,45 +695,45 @@ 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',
-'tooltip-pt-mycontris' => 'Lischt vun Daine Baidräch',
+'tooltip-pt-mycontris' => 'Lischd vun Daine Baidräch',
 'tooltip-pt-login' => 'Du kannscht Dich aamelde, awwer du muscht s nit',
 'tooltip-pt-logout' => 'Abmelde',
 'tooltip-ca-talk' => 'Iwwer d Inhaltssaid dischbediere',
-'tooltip-ca-edit' => 'Du kannscht die Said bearwaide.
-Bitte brauch de Vorschau-Knopp vor em Schbaichere',
+'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 mit genää dem Namme, wenn s se gebbt',
-'tooltip-search-fulltext' => 'Such in de Said noch dem Text',
+'tooltip-search-go' => 'Geh zu ere Said mid genää dem Namme, wenn s se gebbt',
+'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 Lischt vun de letschte Ännerunge in dem Wiki',
-'tooltip-n-randompage' => 'E zufälliche Said lade',
+'tooltip-n-recentchanges' => 'D Lischd vun de ledschde Ännerunge in dem Wiki',
+'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',
-'tooltip-t-contributions' => 'Die letschte Baidräch vun däm Benutzer aagucke',
+'tooltip-t-contributions' => 'Die ledschde Baidräch vun däm Benudzer aagucke',
 'tooltip-t-emailuser' => 'Dem Benutzer e E-Mail schicke',
 'tooltip-t-upload' => 'Dateije nufflade',
-'tooltip-t-specialpages' => 'Lischt vun alle Spezialsaide',
-'tooltip-t-print' => 'Druckversion vun derre Said',
+'tooltip-t-specialpages' => 'Lischd vun alle Schbezialsaide',
+'tooltip-t-print' => 'Druggversion vun derre Said',
 'tooltip-t-permalink' => 'E dauerhafte Link zu derre Version vun de Said',
 'tooltip-ca-nstab-main' => 'D Inhaldssaid aagucke',
 'tooltip-ca-nstab-user' => 'D Benutzersaid aagucke',
@@ -703,9 +748,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 letschte Bearwaider rickgängich',
-'tooltip-undo' => '„Zerick“ macht numme die Ännerung rickgängich un zaicht d Vorschau aa.
-Du kannscht 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',
@@ -722,16 +767,16 @@ Du kannscht e Grund in dr Zammfassung aagewwe',
 'ilsubmit' => 'Such',
 
 # Bad image list
-'bad_image_list' => 'Format:
+'bad_image_list' => 'Formad:
 
-nur Zaile, die wu mit eme * aafange werre bericksichticht.
-De erscht Link muss e Link zu ere unerwinschte Datei sai.
-Annere Links in der glaiche Zail werre als Ausnahme behannelt, d. h. Saide, wu d Datei drin vorkumme därft.',
+nur Zaile, wu mid eme * aafange werre bericksichdischd.
+De erschd Link muss e Link zu ere unerwinschd Dadei sai.
+Annere Links in der glaiche Zail werre als Ausnahme behanneld, d. h. Saide, wu d Dadei drin vorkumme därfd.',
 
 # Metadata
 'metadata' => 'Metadata',
-'metadata-help' => 'Die Datei hot waitere Informatione, wahrschainlich vun de Digitalkamera oder vum Scanner, mit dem wu sie gmacht worre sinn.
-Wenn die Datei verännert worre isch, dann kann s sai, dass die zusätzlich Information fer die verännert Datei nimmi richtich isch.',
+'metadata-help' => 'Die Dadei hot waidere Informatione, wahrschainlich vun de Digidalkamera oder vum Scanner, mid dem wu sie gmacht worre sinn.
+Wenn die Dadei verännerd worre isch, dann kann s sai, dass die zusädzlich Information fer die verännert Dadei nimmi richdisch isch.',
 'metadata-expand' => 'Erwaiterte Details aazaiche',
 'metadata-collapse' => 'Erwaiterte Details versteckeln',
 'metadata-fields' => 'Die EXIF-Medadaade werren inde Bild-Bschraiwung a ogzaischd, wonn die Medadaade-Tabelle verschdegld isch.
@@ -768,10 +813,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 c352658..562583a 100644 (file)
@@ -33,6 +33,7 @@
  * @author Mikołka
  * @author Nux
  * @author Odder
+ * @author Odie2
  * @author Olgak85
  * @author Przemub
  * @author Reedy
  * @author Saper
  * @author Sovq
  * @author Sp5uhe
+ * @author Stanko
  * @author Stlmch
  * @author Stv
  * @author Szczepan1990
  * @author Timpul
  * @author ToSter
+ * @author Tsca
+ * @author WTM
  * @author Woytecr
  * @author Wpedzich
  * @author Ymar
@@ -341,7 +345,7 @@ $messages = array(
 
 'underline-always' => 'zawsze',
 'underline-never' => 'nigdy',
-'underline-default' => 'według ustawień przeglądarki',
+'underline-default' => 'według ustawień skórki lub przeglądarki',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Styl czcionki w polu edycyjnym',
@@ -426,8 +430,8 @@ $messages = array(
 'newwindow' => '(otwiera się w nowym oknie)',
 'cancel' => 'Anuluj',
 'moredotdotdot' => 'Więcej...',
-'mypage' => 'Moja strona',
-'mytalk' => 'Moja dyskusja',
+'mypage' => 'Strona',
+'mytalk' => 'Dyskusja',
 'anontalk' => 'Dyskusja tego IP',
 'navigation' => 'Nawigacja',
 'and' => '&#32;oraz',
@@ -459,6 +463,7 @@ $messages = array(
 'namespaces' => 'Przestrzenie nazw',
 'variants' => 'Warianty',
 
+'navigation-heading' => 'Menu nawigacyjne',
 'errorpagetitle' => 'Błąd',
 'returnto' => 'Wróć do strony $1.',
 'tagline' => 'Z {{GRAMMAR:D.lp|{{SITENAME}}}}',
@@ -556,10 +561,10 @@ $1',
 'youhavenewmessages' => 'Masz $1 ($2).',
 'newmessageslink' => 'nowe wiadomości',
 'newmessagesdifflink' => 'różnica z poprzednią wersją',
-'youhavenewmessagesfromusers' => 'Masz $1 od {{PLURAL:$3|innego użytkownika|$3 innych użytkowników}} ($2).',
+'youhavenewmessagesfromusers' => 'Masz $1 od {{PLURAL:$3|innego użytkownika|$3 użytkowników}} ($2).',
 'youhavenewmessagesmanyusers' => 'Masz $1 od wielu użytkowników ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|jedną wiadomość|$1 wiadomości}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ostatnia zmiana|ostatnie $1 zmiany|ostatnie $1 zmian}}',
+'newmessageslinkplural' => '{{PLURAL:$1|jedną wiadomość|nowe wiadomości}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ostatnia zmiana|ostatnie zmiany}}',
 'youhavenewmessagesmulti' => 'Masz nowe wiadomości na $1',
 'editsection' => 'edytuj',
 'editold' => 'edytuj',
@@ -701,9 +706,9 @@ Administrator blokujący go podał następujący powód "\'\'$3\'\'".',
 
 Możesz kontynuować pracę w {{GRAMMAR:MS.lp|{{SITENAME}}}} jako niezarejestrowany użytkownik albo <span class='plainlinks'>[$1 zalogować się ponownie]</span> jako ten sam lub inny użytkownik.
 Zauważ, że do momentu wyczyszczenia pamięci podręcznej przeglądarki niektóre strony mogą wyglądać tak, jakbyś wciąż był zalogowany.",
-'welcomecreation' => '== Witaj, $1! ==
-Twoje konto zostało utworzone.
-Nie zapomnij dostosować [[Special:Preferences|preferencji dla {{GRAMMAR:D.lp|{{SITENAME}}}}]].',
+'welcomeuser' => 'Witaj, $1!',
+'welcomecreation-msg' => 'Twoje konto zostało utworzone.
+Nie zapomnij dostosować [[Special:Preferences|preferencji]].',
 'yourname' => 'Nazwa {{GENDER:|użytkownika|użytkowniczki}}',
 'yourpassword' => 'Hasło',
 'yourpasswordagain' => 'Powtórz hasło',
@@ -726,7 +731,7 @@ Nie zapomnij dostosować [[Special:Preferences|preferencji dla {{GRAMMAR:D.lp|{{
 'gotaccount' => "Masz już konto? '''$1'''.",
 'gotaccountlink' => 'Zaloguj się',
 'userlogin-resetlink' => 'Zapomniałeś danych do zalogowania się?',
-'createaccountmail' => 'poprzez e‐mail',
+'createaccountmail' => 'Wyślij hasło e-mailem',
 'createaccountreason' => 'Powód',
 'badretype' => 'Wprowadzone hasła różnią się między sobą.',
 'userexists' => 'Wybrana przez Ciebie nazwa użytkownika jest już zajęta.
@@ -804,6 +809,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',
@@ -862,6 +868,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',
 
@@ -1046,7 +1053,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.',
@@ -1444,9 +1450,9 @@ Tej operacji nie można później cofnąć.',
 'prefs-emailconfirm-label' => 'Potwierdzenie adresu e‐mail',
 'prefs-textboxsize' => 'Rozmiar okna edycji',
 'youremail' => 'Twój adres e‐mail',
-'username' => 'Nazwa użytkownika',
-'uid' => 'ID użytkownika',
-'prefs-memberingroups' => 'Należy do {{PLURAL:$1|grupy|grup}}',
+'username' => '{{GENDER:$1|Nazwa użytkownika}}:',
+'uid' => '{{GENDER:$1|Identyfikator użytkownika}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Członek}} {{PLURAL:$1|grupy|grup}}:',
 'prefs-registration' => 'Data rejestracji',
 'yourrealname' => 'Imię i nazwisko',
 'yourlanguage' => 'Język interfejsu',
@@ -1595,12 +1601,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 zmienia przynależność ($2 → $3)',
-'rightsnone' => 'brak',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'przeglądania tej strony',
@@ -1846,6 +1853,7 @@ Jeśli problem będzie się powtarzał, skontaktuj się z [[Special:ListUsers/sy
 'backend-fail-notsame' => 'Plik o podobnej nazwie już istnieje w $1.',
 'backend-fail-invalidpath' => '$1nie jest poprawną ścieżką zapisu.',
 'backend-fail-delete' => 'Nie można usunąć pliku $1.',
+'backend-fail-describe' => 'Nie udało się zmienić metadanych pliku "$1".',
 'backend-fail-alreadyexists' => 'Plik „$1” już istnieje',
 'backend-fail-store' => 'Nie może zapisać pliku  $1  w  $2 .',
 'backend-fail-copy' => 'Nie może skopiować pliku $1 do $2.',
@@ -1995,6 +2003,7 @@ Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
 '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
@@ -2233,7 +2242,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> (nie podawaj ich podczas wyszukiwania).',
+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.',
 
@@ -2252,10 +2261,6 @@ Obsługiwane protokoły: <code>$1</code> (nie podawaj ich podczas wyszukiwania).
 '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ń.
@@ -2321,8 +2326,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',
@@ -2350,19 +2355,23 @@ Każda zmiana treści tej strony lub związanej z nią strony dyskusji zostanie
 
 'enotif_mailer' => 'Powiadomienie z {{GRAMMAR:D.lp|{{SITENAME}}}}',
 'enotif_reset' => 'Zaznacz wszystkie strony jako odwiedzone',
-'enotif_newpagetext' => 'To jest nowa strona.',
 'enotif_impersonal_salutation' => 'użytkownik {{GRAMMAR:D.lp|{{SITENAME}}}}',
-'changed' => 'zmieniona',
-'created' => 'utworzona',
-'enotif_subject' => 'Strona $PAGETITLE w {{GRAMMAR:MS.lp|{{SITENAME}}}} została $CHANGEDORCREATED przez użytkownika $PAGEEDITOR',
+'enotif_subject_deleted' => 'Strona projektu {{SITENAME}} o nazwie $1 została usunięta przez {{gender:$2|$2}}',
+'enotif_subject_created' => 'Strona projektu {{SITENAME}} o nazwie $1 została stworzona przez {{gender:$2|$2}}',
+'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_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',
+'enotif_body_intro_changed' => 'Strona projektu {{SITENAME}} o nazwie $1 została zmieniona $PAGEEDITDATE przez {{gender:$2|$2}}, zobacz aktualną wersję na: $3',
 'enotif_lastvisited' => 'Zobacz na stronie $1 wszystkie zmiany od Twojej ostatniej wizyty.',
 'enotif_lastdiff' => 'Zobacz na stronie $1 tę zmianę.',
 'enotif_anon_editor' => 'użytkownik anonimowy $1',
 'enotif_body' => 'Szanowny $WATCHINGUSERNAME,
 
-strona $PAGETITLE w {{GRAMMAR:MS.lp|{{SITENAME}}}} została $CHANGEDORCREATED $PAGEEDITDATE przez użytkownika $PAGEEDITOR. Zobacz na stronie $PAGETITLE_URL aktualną wersję.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Opis zmiany: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2370,8 +2379,7 @@ Kontakt do autora:
 mail – $PAGEEDITOR_EMAIL
 wiki – $PAGEEDITOR_WIKI
 
-W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane, dopóki nie odwiedzisz tej strony.
-Możesz także zresetować wszystkie flagi powiadomień na swojej liście stron obserwowanych.
+W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane, dopóki nie odwiedzisz tej strony. Możesz także zresetować wszystkie flagi powiadomień na swojej liście stron obserwowanych.
 
        Wiadomość z systemu powiadomień {{GRAMMAR:D.lp|{{SITENAME}}}}
 
@@ -2384,6 +2392,8 @@ $UNWATCHURL
 
 Pomoc
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'utworzona',
+'changed' => 'zmieniona',
 
 # Delete
 'deletepage' => 'Usuń stronę',
@@ -2425,7 +2435,7 @@ Bądź ostrożny, ponieważ usunięcie jej może spowodować zakłócenia w prac
 'rollbacklinkcount' => 'cofnij $1 {{PLURAL:$1|edycję|edycje|edycji}}',
 'rollbacklinkcount-morethan' => 'cofnij więcej niż $1 {{PLURAL:$1|edycję|edycje|edycji}}',
 'rollbackfailed' => 'Nie udało się cofnąć zmiany',
-'cantrollback' => 'Nie można cofnąć edycji, ponieważ jest tylko jedna wersja tej strony.',
+'cantrollback' => 'Nie można cofnąć edycji tego autora, ponieważ jest jedynym autorem tej strony.',
 'alreadyrolled' => 'Nie można dla strony [[:$1|$1]] cofnąć ostatniej zmiany, którą wykonał [[User:$2|$2]] ([[User talk:$2|dyskusja]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]).
 Ktoś inny zdążył już to zrobić lub wprowadził własne poprawki do treści strony.
 
@@ -2455,6 +2465,7 @@ 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-title' => 'Nieblokowalna strona',
 'protect-legend' => 'Potwierdź zabezpieczenie',
 'protectcomment' => 'Powód',
 'protectexpiry' => 'Czas wygaśnięcia',
@@ -2570,9 +2581,9 @@ $1',
 'blanknamespace' => '(Główna)',
 
 # Contributions
-'contributions' => 'Wkład użytkownika',
+'contributions' => 'Wkład {{GENDER:$1|użytkownika|użytkowniczki}}',
 'contributions-title' => 'Wkład {{GENDER:$1|użytkownika|użytkowniczki}} $1',
-'mycontris' => 'Moje edycje',
+'mycontris' => 'Edycje',
 'contribsub2' => 'Dla użytkownika $1 ($2)',
 'nocontribs' => 'Brak zmian odpowiadających tym kryteriom.',
 'uctop' => ' (jako ostatnia)',
@@ -2612,7 +2623,7 @@ Poniżej znajduje się ostatni wpis w rejestrze blokowania.',
 'whatlinkshere-hideredirs' => '$1 przekierowania',
 'whatlinkshere-hidetrans' => '$1 dołączenia',
 'whatlinkshere-hidelinks' => '$1 linki',
-'whatlinkshere-hideimages' => '$1 linki z grafik',
+'whatlinkshere-hideimages' => '$1 linki z plików',
 'whatlinkshere-filters' => 'Filtry',
 
 # Block/unblock
@@ -2958,6 +2969,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.',
@@ -3064,6 +3076,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. */',
@@ -3104,7 +3118,7 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 
 # Info page
 'pageinfo-title' => 'Informacje o „$1“',
-'pageinfo-not-current' => 'Informacje mogą być wyświetlane tylko dla najnowszej wersji strony.',
+'pageinfo-not-current' => 'Niestety, te informacje nie są dostępne dla starych wersji stron.',
 'pageinfo-header-basic' => 'Podstawowe informacje',
 'pageinfo-header-edits' => 'Historia edycji',
 'pageinfo-header-restrictions' => 'Zmień zabezpieczenie',
@@ -3163,6 +3177,8 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'markedaspatrollederror' => 'Nie można oznaczyć jako „sprawdzone”',
 'markedaspatrollederrortext' => 'Musisz wybrać wersję żeby oznaczyć ją jako „sprawdzoną”.',
 'markedaspatrollederror-noautopatrol' => 'Nie masz uprawnień wymaganych do oznaczania swoich edycji jako „sprawdzone”.',
+'markedaspatrollednotify' => 'Ta zmiana na stronie «$1» została oznaczona jako sprawdzona.',
+'markedaspatrollederrornotify' => 'Oznaczenie strony jako sprawdzonej nie powiodło się.',
 
 # Patrol log
 'patrol-log-page' => 'Rejestr patrolowania',
@@ -3196,6 +3212,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.',
@@ -3229,6 +3246,7 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 'hours' => '{{PLURAL:$1|$1 godzina|$1 godziny|$1 godzin}}',
 'days' => '{{PLURAL:$1|$1 dzień|$1 dni}}',
 'ago' => '$1 temu',
+'just-now' => 'przed chwilą',
 
 # Bad image list
 'bad_image_list' => 'Dane należy wprowadzić w formacie:
@@ -3665,7 +3683,7 @@ Pozostałe pola zostaną domyślnie ukryte.
 
 # E-mail address confirmation
 'confirmemail' => 'Potwierdzanie adresu e‐mail',
-'confirmemail_noemail' => 'Nie {{GENDER:|podałeś|podałaś}} prawidłowego adresu e‐mail w [[Special:Preferences|preferencjach]].',
+'confirmemail_noemail' => 'Nie podał{{GENDER:|eś|aś|eś/aś}} prawidłowego adresu e‐mail w [[Special:Preferences|preferencjach]].',
 'confirmemail_text' => 'Projekt {{SITENAME}} wymaga weryfikacji adresu e‐mail przed użyciem funkcji korzystających z poczty.
 Wciśnij przycisk poniżej aby wysłać na swój adres list z linkiem do strony WWW.
 List będzie zawierał link do strony, w którym zakodowany będzie identyfikator.
@@ -3688,15 +3706,15 @@ Możesz [[Special:UserLogin|zalogować się]] i korzystać z szerszego wachlarza
 'confirmemail_error' => 'Pojawiły się błędy przy zapisywaniu potwierdzenia.',
 'confirmemail_subject' => '{{SITENAME}} – weryfikacja adresu e‐mail',
 'confirmemail_body' => 'Ktoś łącząc się z komputera o adresie IP $1
-zarejestrował w {{GRAMMAR:MS.lp|{{SITENAME}}}} konto „$2” podając niniejszy adres e‐mail.
+zarejestrował w {{GRAMMAR:MS.lp|{{SITENAME}}}} konto „$2”, podając niniejszy adres e‐mail.
 
-Aby potwierdzić, że to Ty {{GENDER:|zarejestrowałeś|zarejestrowałaś}} to konto oraz, aby włączyć
-wszystkie funkcje korzystające z poczty elektronicznej, otwórz w swojej
+Aby potwierdzić, że to Ty zarejestrował{{GENDER:|eś|aś|eś/aś}} to konto i włączyć
+wszystkie funkcje korzystające z poczty elektronicznej otwórz w swojej
 przeglądarce ten link:
 
 $3
 
-Jeśli to *nie* Ty {{GENDER:|zarejestrowałeś|zarejestrowałaś}} konto, otwórz w swojej przeglądarce
+Jeśli to *nie* Ty zarejestrował{{GENDER:|eś|aś|eś/aś}} konto, otwórz w swojej przeglądarce
 poniższy link, aby anulować potwierdzenie adresu e‐mail:
 
 $5
@@ -3979,8 +3997,8 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'compare-rev2' => 'Wersja 2',
 'compare-submit' => 'Porównaj',
 'compare-invalid-title' => 'Tytuł jest nieprawidłowy.',
-'compare-title-not-exists' => 'Tytuł, który podałeś nie istnieje.',
-'compare-revision-not-exists' => 'Zmiana, którą wybrałeś nie istnieje.',
+'compare-title-not-exists' => 'Podany tytuł nie istnieje.',
+'compare-revision-not-exists' => 'Wybrana wersja nie istnieje.',
 
 # Database error messages
 'dberr-header' => 'Ta wiki nie działa poprawnie',
@@ -4008,12 +4026,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 $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',
@@ -4027,17 +4045,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-newusers-newusers' => '$1 tworzy konto użytkownika',
-'logentry-newusers-create' => '$1 tworzy konto użytkownika',
-'logentry-newusers-create2' => '$1 tworzy konto użytkownika $3',
+'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|odznaczył|odznaczyła}} wersję $4 strony $3 jako sprawdzoną',
+'logentry-patrol-patrol-auto' => '$1 automatycznie {{GENDER:$2|odznaczył|odznaczył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-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].
index 4ccd524..b5bf0aa 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,8 +175,9 @@ $messages = array(
 'newwindow' => '(as deurb ant na fnestra neuva)',
 'cancel' => 'Scancela',
 'moredotdotdot' => 'Dë pì...',
-'mypage' => 'Mia pàgina',
-'mytalk' => 'Mie ciaciarade',
+'morenotlisted' => 'Autr pa listà...',
+'mypage' => 'Pàgina',
+'mytalk' => 'Ciaciarade',
 'anontalk' => "Ciaciarade për st'adrëssa IP-sì",
 'navigation' => 'Navigassion',
 'and' => '&#32;e',
@@ -208,6 +209,7 @@ $messages = array(
 'namespaces' => 'Spassi nominaj',
 'variants' => 'Variant',
 
+'navigation-heading' => 'Lista ëd navigassion',
 'errorpagetitle' => 'Eror',
 'returnto' => 'Torna andré a $1.',
 'tagline' => 'Da {{SITENAME}}.',
@@ -415,7 +417,7 @@ Arcesta: $2',
 'viewsource-title' => 'Vëdde la sorgiss ëd $1',
 'actionthrottled' => 'Assion frenà',
 'actionthrottledtext' => "Për evité che gent ò màchine an carìo dla rumenta, st'assion-sì as peul nen fesse tròp ëd soèns, e chiel/chila a l'ha arpetula tròpe vire. Ch'a sia gentil, ch'a preuva torna antra dontre minute.",
-'protectedpagetext' => "Sta pàgina-sì a l'è stàita blocà për evité che a-j faso dle modìfiche.",
+'protectedpagetext' => "Sta pàgina-sì a l'è stàita blocà për evité 'd modìfiche o d'àutre assion.",
 'viewsourcetext' => 'A peul vardé e copié la sorgiss dë sta pàgina:',
 'viewyourtext' => "A peule vëdde e copié la sorziss ëd '''soe modìfiche''' a costa pàgina-sì:",
 'protectedinterface' => "Costa pàgina-sì a l'ha andrinta un cheicòs che a fa part d'antërfacia dël programa che a deuvro tùit; donca a l'é proteta për evité che a-i rivo dle ròbe brute.",
@@ -448,8 +450,8 @@ L'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
 
 A peul tiré anans a dovré {{SITENAME}} coma Utent anònim, ò pura a peul <span class='plainlinks'>[$1 rintré torna ant ël sistema]</span> con l'istess stranòm che a dovrava prima, ò con un diferent.
 Ch'a nòta che chèiche pàgine a peulo continué a esse visualisà com s'a fussa ancor ant ël sistema, fin ch'a scancela nen la memòria local ëd sò navigador.",
-'welcomecreation' => '==Bin ëvnù, $1!==
-Sò cont a l\'é stàit creà.
+'welcomeuser' => 'Bin ëvnù, $1!',
+'welcomecreation-msg' => 'Sò cont a l\'é stàit creà.
 Che as dësmentia pa ëd cambié ij [[Special:Preferences|"sò gust" an {{SITENAME}}]].',
 'yourname' => 'Sò stranòm',
 'yourpassword' => 'Soa ciav',
@@ -546,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',
@@ -604,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',
 
@@ -780,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.",
@@ -1102,7 +1105,7 @@ Ch'a preuva a gionté dnans a soa arserca ël prefiss ''all:'' për sërché an
 
 # Preferences page
 'preferences' => 'Mè gust',
-'mypreferences' => 'mè gust',
+'mypreferences' => 'Gust',
 'prefs-edits' => 'Nùmer ëd modìfiche fàite:',
 'prefsnologin' => "A l'é ancó pa rintrà ant ël sistema",
 'prefsnologintext' => 'A deuv esse <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} intrà ant ël sistema]</span> për amposté ij sò gust.',
@@ -1178,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',
@@ -1332,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ì',
@@ -1472,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.",
@@ -1569,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',
@@ -1584,6 +1585,7 @@ Se a-i riva sossì n'àotra vira, ch'as buta an comunicassion con n'[[Special:Li
 'backend-fail-notsame' => "N'archivi nen idéntich a esist già a $1.",
 'backend-fail-invalidpath' => "$1 a l'é pa un përcors ëd memorisassion bon.",
 'backend-fail-delete' => "As peul pa scanselesse l'archivi $1.",
+'backend-fail-describe' => "Impossìbil cangé ij metadat për l'archivi «$1».",
 'backend-fail-alreadyexists' => 'L\'archivi "$1" a esist già.',
 'backend-fail-store' => "As peul pa memorisesse l'archivi $1 a $2.",
 'backend-fail-copy' => "As peul pa copiesse l'archivi $1 su $2.",
@@ -1666,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',
@@ -1971,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.',
 
@@ -1990,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à.
@@ -2053,7 +2051,7 @@ L'adrëssa ëd pòsta eletrònica ch'a l'ha butà ant ij [[Special:Preferences|s
 
 # Watchlist
 'watchlist' => 'Ròba che im ten-o sot-euj',
-'mywatchlist' => 'Ròba che im ten-o 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.",
 'watchlistanontext' => "Për piasì, $1 për ës-ciairé ò pura modifiché j'element ëd soa lista dla ròba che as ten sot-euj.",
@@ -2061,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',
@@ -2090,19 +2088,23 @@ Le modìfiche che a-i vniran ant costa pàgina-sì e ant soa pàgina ëd discuss
 
 'enotif_mailer' => '{{SITENAME}} - Servissi ëd Notìfica Postal',
 'enotif_reset' => 'Marché tute le pàgine tanme visità',
-'enotif_newpagetext' => "Costa-sì a l'é na pàgina neuva",
 'enotif_impersonal_salutation' => 'utent ëd {{SITENAME}}',
-'changed' => 'modificà',
-'created' => 'creà',
-'enotif_subject' => 'La pàgina $PAGETITLE ëd {{SITENAME}} a l\'é staita $CHANGEDORCREATED da $PAGEEDITOR',
+'enotif_subject_deleted' => "La pàgina $1 ëd {{SITENAME}} a l'é stàita scancelà da {{gender:$2|$2}}",
+'enotif_subject_created' => "La pàgina $1 ëd {{SITENAME}} a l'é stàita creà da {{gender:$2|$2}}",
+'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.',
+'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.',
+'enotif_body_intro_changed' => 'La pàgina $1 ëd {{SITENAME}} a l\'é stàita modificà da {{gender:$2|$2}} ël $PAGEEDITDATE, vëdde $3 për la revision corenta.',
 'enotif_lastvisited' => "Che as varda $1 për ës-ciaré tute le modìfiche da 'nt l'ùltima vira che a l'é passà.",
 'enotif_lastdiff' => "Ch'a varda $1 për visioné sta modìfica.",
 'enotif_anon_editor' => 'utent anònim $1',
 'enotif_body' => 'Car $WATCHINGUSERNAME,
 
-La pàgina $PAGETITLE dël sit {{SITENAME}} a l\'é stàita $CHANGEDORCREATED al $PAGEEDITDATE da $PAGEEDITOR, che a varda $PAGETITLE_URL për la version corenta.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resumé dl\'editor: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2126,6 +2128,8 @@ $UNWATCHURL
 
 Comunicassion ëd servissi e pì d\'agiut:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creà',
+'changed' => 'modificà',
 
 # Delete
 'deletepage' => 'Scancelé la pàgina',
@@ -2195,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:',
@@ -2209,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',
@@ -2309,9 +2315,9 @@ $1",
 'blanknamespace' => '(Prinsipal)',
 
 # Contributions
-'contributions' => "Contribussion dë st'Utent-sì",
+'contributions' => "Contribussion dë st'{{GENDER:$1|utent}}-sì",
 'contributions-title' => 'Contribussion ëd $1',
-'mycontris' => 'Mie contribussion',
+'mycontris' => 'Contribussion',
 'contribsub2' => 'Për $1 ($2)',
 'nocontribs' => "A l'é pa trovasse gnun-a modìfica che a fussa conforma a costi criteri-sì",
 'uctop' => ' (ùltima dla pàgina)',
@@ -2351,7 +2357,7 @@ L'ùltima intrada dël registr dij blocagi a l'é butà sì-sota për arferiment
 'whatlinkshere-hideredirs' => '$1 le ridiression',
 'whatlinkshere-hidetrans' => '$1 anclusion',
 'whatlinkshere-hidelinks' => '$1 anliura',
-'whatlinkshere-hideimages' => '$1 anliure ëd figure',
+'whatlinkshere-hideimages' => "$1 j'archivi lijà",
 'whatlinkshere-filters' => 'Filtr',
 
 # Block/unblock
@@ -2699,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.',
@@ -2856,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',
@@ -2864,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à',
@@ -2875,6 +2887,8 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'markedaspatrollederror' => 'As peul pa marché coma verificà',
 'markedaspatrollederrortext' => 'A venta che a spessìfica che version che a veul marchè coma verificà.',
 'markedaspatrollederror-noautopatrol' => "A l'ha nen ël përmess dë marchesse soe modìfiche coma «controlà».",
+'markedaspatrollednotify' => "Ës cambi a $1 a l'é stàit marcà com verificà.",
+'markedaspatrollederrornotify' => 'Marcadura com verificà falìa.',
 
 # Patrol log
 'patrol-log-page' => 'Registr dij contròj',
@@ -2908,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.',
@@ -2937,7 +2952,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => "La forma a l'é costa-sì:
@@ -3364,7 +3382,7 @@ J'àutri a saran stërmà coma stàndard.
 
 # External editor support
 'edit-externally' => "Modifiché st'archivi con un programa estern",
-'edit-externally-help' => "(Lese [//www.mediawiki.org/wiki/Manual:External_editors setup j'anstrussion d'anstalassion] për avèj pì d'anformassion)",
+'edit-externally-help' => "(Lese [//www.mediawiki.org/wiki/Manual:External_editors j'anstrussion d'anstalassion] për avèj pì d'anformassion)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tute',
@@ -3375,91 +3393,91 @@ J'àutri a saran stërmà coma stàndard.
 # E-mail address confirmation
 'confirmemail' => "Confermé l'adrëssa postal",
 'confirmemail_noemail' => "A l'ha pa butà gnun-a adrëssa vàlida ëd pòsta eletrònica ant ij [[Special:Preferences|sò gust]].",
-'confirmemail_text' => "Costa wiki a ciama che chiel a convalida n'adrëssa postal anans che
-dovré lòn che toca la pòsta. Che a sgnaca ël boton ambelessì sota
-për fesse mandé un messa ëd conferma a soa adrëssa eletrònica.
-Andrinta al messagi a-i sara n'anliura (URL) con andrinta un còdes.
-Che a deurba st'anliura andrinta a sò programa ëd navigassion (browser)
+'confirmemail_text' => "Costa wiki a ciama che chiel a convàlida n'adrëssa ëd pòsta eletrònica anans che
+dovré lòn che a toca la pòsta. Che a sgnaca ël boton ambelessì-sota
+për fesse mandé un mëssage ëd conferma a soa adrëssa eletrònica.
+Andrinta al messagi a-i sara n'anliura con andrinta un còdes.
+Che a deurba st'anliura andrinta a sò programa ëd navigassion
 për confermé che soa adrëssa a l'é pròpe cola.",
 'confirmemail_pending' => "I l'oma già mandaje sò còdes ëd conferma;
-se a l'ha pen-a creasse sò cont, miraco a venta che a speta dontre minute che a-j riva ant la pòsta, nopà che ciamene un neuv.",
-'confirmemail_send' => 'Manda un còdes ëd conferma për pòsta eletrònica',
-'confirmemail_sent' => "Ël messagi ëd conferma a l'é stait mandà.",
-'confirmemail_oncreate' => "Un còdes ëd conferma a l'é stait mandà a soa adrëssa ëd pòsta eletrònica.
-D'ës còdes a fa pa dë manca për rintré ant ël sistema, ma a ventrà che a lo mostra al sistema për podej abilité cole funsion dla wiki che a son basà ant sla pòsta eletrònica.",
-'confirmemail_sendfailed' => "{{SITENAME}} a l'ha pa podù mandete l'e-mail ëd conferma.
+se a l'ha pen-a creasse sò cont, miraco a venta che a speta dontré minute che a-j riva ant la pòsta, nopà che ciamene un neuv.",
+'confirmemail_send' => 'Mandé un còdes ëd conferma për pòsta eletrònica',
+'confirmemail_sent' => "Ël mëssagi ëd conferma a l'é stàit mandà.",
+'confirmemail_oncreate' => "Un còdes ëd conferma a l'é stàit mandà a soa adrëssa ëd pòsta eletrònica.
+D'ës còdes a fa pa dë manca për rintré ant ël sistema, ma a ventrà che a lo mostra al sistema për podèj abilité cole funsion dla wiki che a son basà ant sla pòsta eletrònica.",
+'confirmemail_sendfailed' => "{{SITENAME}} a l'ha pa podù mandeje ël mëssagi ëd conferma.
 Che a controla l'adrëssa che a l'ha dane, mai che a-i fusso dij caràter nen vàlid.
 
-Ël programa ëd pòsta a l'ha arspondù: $1",
+Ël programa ëd pòsta a l'ha spondù: $1",
 'confirmemail_invalid' => 'Còdes ëd conferma nen vàlid. A podrìa ëdcò mach esse scadù.',
-'confirmemail_needlogin' => 'A venta che a fasa $1 për confermé soa addrëssa postal eletrònica.',
-'confirmemail_success' => "Soa adrëssa postal a l'é staita confermà, adess a peul rintré ant ël sistema e i-j auguroma da fessla bin ant la wiki!",
+'confirmemail_needlogin' => 'A venta $1 për confermé soa adrëssa ëd pòsta eletrònica.',
+'confirmemail_success' => "Soa adrëssa a l'é stàita confermà, adess a peul [[Special:UserLogin|rintré ant ël sistema]] e i-j auguroma da fessla bin ant la wiki!",
 'confirmemail_loggedin' => "Motobin mersì. Soa adrëssa ëd pòsta eletrònica adess a l'é confermà.",
-'confirmemail_error' => "Cheich-còs a l'é andà mal ën salvand soa conferma.",
+'confirmemail_error' => "Cheicòs a l'é andà mal ën salvand soa conferma.",
 'confirmemail_subject' => "Conferma dl'adrëssa postal da 'nt la {{SITENAME}}",
-'confirmemail_body' => "Cheidun, a l'é belfé che a sia stait pròpe chiel (ò chila), da 'nt l'adrëssa IP \$1,
-a l'ha doertà un cont utent \"\$2\" ansima a {{SITENAME}}, lassand-ne st'adrëssa ëd pòsta eletrònica-sì.
+'confirmemail_body' => "Cheidun, a l'é belfé che a sia stàit pròpe chiel, da 'nt l'adrëssa IP $1,
+a l'ha duvertà un cont utent «$2» ansima a {{SITENAME}}, lassand-ne st'adrëssa ëd pòsta eletrònica-sì.
 
 Për confermé che ës cont a l'é da bon sò e për ativé
-le possibilità corelà a la pòsta eletrònica ansima a {{SITENAME}}, che a deurba st'adrëssa-sì andrinta a sò programa ëd navigassion (browser):
+le possibilità gropà a la pòsta eletrònica ansima a {{SITENAME}}, che a deurba st'adrëssa-sì andrinta a sò programa ëd navigassion:
 
-\$3
+$3
 
-Se a fussa *nen* stait chiel a deurbe ël cont, anlora che a vada daré a sto colegament-sì
-për scanselé la conferma ëd l'adrëssa e-mail:
+Se a fussa *nen* stàit chiel a deurbe ël cont, anlora che a vada dapress a la liura sì-sota
+për scancelé la conferma ëd l'adrëssa ëd pòsta eletrònica:
 
-\$5
+$5
 
-Cost còdes ëd conferma a l'é bon fin-a al \$4.",
-'confirmemail_body_changed' => "Cheidun, a l'é belfé ch'a sia chiel, da l'adrëssa IP \$1,
-a l'ha cangià l'adrëssa ëd pòsta eletrònica dël cont \"\$2\" con st'adrëssa-sì dzora a {{SITENAME}}.
+Cost còdes ëd conferma a l'é bon fin-a al $4.",
+'confirmemail_body_changed' => "Cheidun, a l'é belfé ch'a sia chiel, da l'adrëssa IP $1,
+a l'ha cangià l'adrëssa ëd pòsta eletrònica dël cont «$2» con st'adrëssa-sì dzora a {{SITENAME}}.
 
 Për confirmé che sto cont-sì a l'é pròpi sò e për riativé
-le possibilità ëd pòsta eletrònica dzora a {{SITENAME}}, ch'a deurba sto colegament-sì an sò navigador:
+le fonsion ëd pòsta eletrònica dzora a {{SITENAME}}, ch'a deurba costa liura-sì an sò navigador:
 
-\$3
+$3
 
-Se ël cont a l'é *nen* sò, ch'a vada andré a sto colegament-sì
+Se ël cont a l'é *nen* sò, ch'a-i vada dapress a costa liura-sì
 për scancelé la conferma dl'adrëssa ëd pòsta eletrònica:
 
-\$5
+$5
 
-Ës còdes ëd conferma a scadrà a \$4.",
-'confirmemail_body_set' => "Quaidun, miraco chiel, da l'adrëssa IP \$1,
-a l'ha ampostà l'adrëssa ëd pòsta eletrònica dël cont \"\$2\" con costa adrëssa su {{SITENAME}}.
+Ës còdes ëd conferma a scadrà ël $4.",
+'confirmemail_body_set' => "Quaidun, miraco chiel, da l'adrëssa IP $1,
+a l'ha ampostà l'adrëssa ëd pòsta eletrònica dël cont «$2» con costa adrëssa su {{SITENAME}}.
 
 Për confirmé che sto cont a l'é pròpi sò e ativé torna
 le funsion ëd pòsta eletrònica su {{SITENAME}}, ch'a duverta cost'anliura an sò navigador:
 
-\$3
+$3
 
 Se ël cont a l'é *pa* sò, ch'a-j vada dapress a st'anliura
 për scancelé la conferma ëd l'adrëssa ëd pòsta eletrònica:
 
-\$5
+$5
 
-Cost còdes ëd conferma a scad ai \$4.",
-'confirmemail_invalidated' => "Conferma ëd l'adrëssa e-mail scanselà",
-'invalidateemail' => "Scansela l'e-mail ëd conferma",
+Cost còdes ëd conferma a scad ai $4.",
+'confirmemail_invalidated' => "Conferma ëd l'adrëssa ëd pòsta eletrònica anulà",
+'invalidateemail' => "Anulé la conferma dl'adrëssa ëd pòsta eletrònica",
 
 # Scary transclusion
 'scarytranscludedisabled' => "[L'inclusion ëd pàgine antra wiki diferente a l'é nen abilità]",
 'scarytranscludefailed' => "[Darmagi, ma lë stamp $1 a l'é pa podusse carié]",
 'scarytranscludefailed-httpstatus' => '[Letura dlë stamp falìa për $1: HTTP $2]',
-'scarytranscludetoolong' => "[L'URL a l'é tròp longa]",
+'scarytranscludetoolong' => "[L'adrëssa dl'aragnà a l'é tròp longa]",
 
 # Delete conflict
-'deletedwhileediting' => "'''Avertensa''': sta pàgina-sì a l'é staita scancelà quand che chiel (chila) a l'avìa già anandiasse a modifichela!",
-'confirmrecreate' => "L'utent [[User:$1|$1]] ([[User talk:$1|talk]]) a l'ha scancelà st'articol-sì quand che chiel (chila) a l'avia già anandiasse a modifichelo, dand coma motiv ëd la scancelament:
+'deletedwhileediting' => "'''Avertensa''': sta pàgina-sì a l'é stàita scancelà quand che chiel a l'avìa già anandiasse a modifichela!",
+'confirmrecreate' => "L'utent [[User:$1|$1]] ([[User talk:$1|talk]]) a l'ha scancelà st'articol-sì quand che chiel a l'avia già anandiasse a modifichelo, dasend coma motiv ëd lë scancelament:
 ''$2''
 Për piasì, che an conferma che da bon a veul torna creélo.",
 'confirmrecreate-noreason' => "L'utent [[User:$1|$1]] ([[User talk:$1|ciaciarade]]) a l'ha scancelà sta pàgina apress che chiel a l'ha ancaminà a modifiché.  Për piasì, ch'a confirma ch'a veul pròpi torna creé sta pàgina.",
-'recreate' => "Créa n'àutra vira",
+'recreate' => 'Creé torna',
 
 # action=purge
 'confirm_purge_button' => 'Va bin',
-'confirm-purge-top' => 'Veujdé la memorisassion dë sta pàgina-sì?',
-'confirm-purge-bottom' => 'Spurghé na pàgina a scansela la "cache" e a fà aparì le revision pì neuve.',
+'confirm-purge-top' => 'Dësvujdé la memorisassion dë sta pàgina-sì?',
+'confirm-purge-bottom' => 'Spurghé na pàgina a scancela la memorisassion local e a fà comparì la revision pì neuva.',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Va bin',
@@ -3470,8 +3488,8 @@ Për piasì, che an conferma che da bon a veul torna creélo.",
 # Multipage image navigation
 'imgmultipageprev' => '← pàgina andré',
 'imgmultipagenext' => 'pàgina anans →',
-'imgmultigo' => 'Va',
-'imgmultigoto' => ' a la pàgina $1',
+'imgmultigo' => 'Andé!',
+'imgmultigoto' => 'Andé a la pàgina $1',
 
 # Table pager
 'ascending_abbrev' => 'a chërse',
@@ -3481,12 +3499,12 @@ Për piasì, che an conferma che da bon a veul torna creélo.",
 'table_pager_first' => 'Prima pàgina',
 'table_pager_last' => 'Ùltima pàgina',
 'table_pager_limit' => 'Smon-me $1 archivi për pàgina',
-'table_pager_limit_label' => 'Oget për pàgina:',
-'table_pager_limit_submit' => 'Va',
-'table_pager_empty' => 'Pa gnun arsultà',
+'table_pager_limit_label' => 'Arzultà për pàgina:',
+'table_pager_limit_submit' => 'Andé',
+'table_pager_empty' => 'Gnun arzultà',
 
 # Auto-summaries
-'autosumm-blank' => 'Pàgina dësveujdà',
+'autosumm-blank' => 'Pàgina dësvujdà',
 'autosumm-replace' => "Pàgina cambià con '$1'",
 'autoredircomment' => 'Ridiression anvers a [[$1]]',
 'autosumm-new' => "Creà la pàgina con '$1'",
@@ -3500,39 +3518,39 @@ Për piasì, che an conferma che da bon a veul torna creélo.",
 # Live preview
 'livepreview-loading' => "Antramentr ch'as caria…",
 'livepreview-ready' => "Antramentr ch'as caria… Carià.",
-'livepreview-failed' => 'La "preuva dal viv" a l\'é falìa!
-Ch\'a preuva an manera sòlita.',
-'livepreview-error' => 'Conession falà: $1 "$2"
-Ch\'a preuva an manera sòlita.',
+'livepreview-failed' => "La preuva dal viv a l'é falìa!
+Ch'a preuva an manera sòlita.",
+'livepreview-error' => "Conession falìa: $1 «$2».
+Ch'a preuva an manera sòlita.",
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'Le modìfiche pì neuve ëd $1 {{PLURAL:$1|second|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 pì giovne che $1 {{PLURAL:$1|second|second}} fa
-a podrìo ëdcò nen ess-ie ant sta lista -sì.",
+'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 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 ëuj {{PLURAL:$1|1 tìtol|$1 tìtoj}}, nen contand le pàgine ëd discussion.",
-'watchlistedit-noitems' => "A-i é pa gnun tìtol ch'as ten-a sot euj.",
-'watchlistedit-normal-title' => "Modifiché la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-normal-legend' => "Gavé via ij tìtoj da 'nt la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-normal-explain' => "Ij tìtoj ch'a ten sot euj a son ësmonù ambelessì-sota. Për gavene via un ch'a-i fasa la crosëtta ant la casela ch'a l'ha aranda, e peuj ch'ai bata ansima a «{{int:Watchlistedit-normal-submit}}». As peul ëdcò [[Special:EditWatchlist/raw|modifiché la lista ampressa]].",
+'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.",
+'watchlistedit-noitems' => "A-i é pa gnun tìtol ch'as ten-a sot-euj.",
+'watchlistedit-normal-title' => "Modifiché la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-normal-legend' => "Gavé via ij tìtoj da 'nt la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-normal-explain' => "Ij tìtoj ch'a ten sot-euj a son ësmonù ambelessì-sota.
+Për gavene via un, ch'a-j fasa la crosëtta ant la casela ch'a l'ha aranda, e peuj ch'ai bata ansima a «{{int:Watchlistedit-normal-submit}}». As peul ëdcò [[Special:EditWatchlist/raw|modifiché la lista ampressa]].",
 'watchlistedit-normal-submit' => 'Gavé via ij tìtoj',
-'watchlistedit-normal-done' => "{{PLURAL:$1|1 tìtol a l'é|$1 tìtoj a son}} stait gavà via da 'nt la lista ëd lòn ch'as ten sot euj:",
-'watchlistedit-raw-title' => "Modifiché ampressa la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-raw-legend' => "Modifiché ampressa la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-raw-explain' => "Ij tìtoj ch'a l'é antramentr ch'as ten sot euj a son ambelessì-sota, e a peulo modifichesse ën giontand-ne e gavand-ne via da 'nt la lista; un tìtol për riga.
-Quand a l'ha finì, ch'a-i bata ansima a \"{{int:Watchlistedit-raw-submit}}\".
+'watchlistedit-normal-done' => "{{PLURAL:$1|Un tìtol a l'é|$1 tìtoj a son}} ëstàit gavà via da 'nt la lista ëd lòn ch'as ten sot-euj:",
+'watchlistedit-raw-title' => "Modifiché ampressa la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-raw-legend' => "Modìfica lesta ëd la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-raw-explain' => "Ij tìtoj ch'a l'é antramentr ch'as ten sot-euj a son ambelessì-sota, e a peulo modifichesse ën giontand-ne e gavand-ne via da 'nt la lista; un tìtol për riga.
+Quand a l'ha finì, ch'a-i bata ansima a «{{int:Watchlistedit-raw-submit}}».
 As peul ëdcò [[Special:EditWatchlist|dovré l'editor sòlit]].",
 'watchlistedit-raw-titles' => 'Tìtoj:',
 'watchlistedit-raw-submit' => 'Agiorné la Lista',
-'watchlistedit-raw-done' => "La lista ëd lòn ch'as ten sot euj a l'é staita agiornà.",
-'watchlistedit-raw-added' => "A {{PLURAL:$1|l'é|son}} giontasse {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
-'watchlistedit-raw-removed' => "A {{PLURAL:$1|l'é|son}} gavasse via {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
+'watchlistedit-raw-done' => "La lista ëd lòn ch'as ten sot-euj a l'é stàita agiornà.",
+'watchlistedit-raw-added' => "{{PLURAL:$1|A l'é|As son}} giontasse {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
+'watchlistedit-raw-removed' => "{{PLURAL:$1|A l'é|As son}} gavasse via {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
 
 # Watchlist editing tools
 'watchlisttools-view' => 'S-ciairé le modifiché amportante',
-'watchlisttools-edit' => "Vardé e modifiché la lista ëd lòn ch'as ten sot euj",
-'watchlisttools-raw' => "Modifiché ampressa la lista ëd lòn ch'as ten sot euj",
+'watchlisttools-edit' => "Vardé e modifiché la lista ëd lòn ch'as ten sot-euj",
+'watchlisttools-raw' => "Modifiché ampressa la lista ëd lòn ch'as ten sot-euj",
 
 # Iranian month names
 'iranian-calendar-m1' => 'Prim mèis Jalāli',
@@ -3552,14 +3570,14 @@ As peul ëdcò [[Special:EditWatchlist|dovré l'editor sòlit]].",
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ciaciarade]])',
 
 # Core parser functions
-'unknown_extension_tag' => 'Tacolèt d\'estension "$1" pa conossù',
-'duplicate-defaultsort' => "'''Atension:''' La ciav d'ordinament ëd default \"\$2\" a ven al pòst ëd cola ëd prima \"\$1\"",
+'unknown_extension_tag' => "Tichëtta d'estension «$1» pa conossùa",
+'duplicate-defaultsort' => "'''Atension:''' La ciav d'ordinament ëstàndard «$2» a pija ël pòst ëd cola ëd prima «$1».",
 
 # Special:Version
 'version' => 'Version',
 'version-extensions' => 'Estension anstalà',
 'version-specialpages' => 'Pàgine speciaj',
-'version-parserhooks' => 'Gancio dlë scompositor',
+'version-parserhooks' => 'Gancio dël dëscompositor',
 'version-variables' => 'Variàbij',
 'version-antispam' => 'Prevension dla rumenta',
 'version-skins' => 'Pej',
@@ -3567,16 +3585,16 @@ As peul ëdcò [[Special:EditWatchlist|dovré l'editor sòlit]].",
 'version-mediahandlers' => 'Gestor multimojen',
 'version-hooks' => 'Gancio',
 'version-extension-functions' => "Fonsion dj'estension",
-'version-parser-extensiontags' => "Tacolèt dj'estension conossùe da lë scompositor",
-'version-parser-function-hooks' => 'Gancio për le fonsion dlë scompositor',
+'version-parser-extensiontags' => "Tichëtte dj'estension conossùe dal dëscompositor",
+'version-parser-function-hooks' => 'Gancio për le fonsion dël dëscompositor',
 'version-hook-name' => 'Nòm dël gancio',
 'version-hook-subscribedby' => 'A son scrivusse',
 'version-version' => '(Version $1)',
 'version-license' => 'Licensa',
-'version-poweredby-credits' => "Sta wiki-sì a l'é basà su '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Costa wiki-sì a marcia mersì a '''[//www.mediawiki.org/ MediaWiki]''', licensa © 2001-$1 $2.",
 'version-poweredby-others' => 'àutri',
 'version-credits-summary' => 'I tnoma a aringrassié le përson-e sì-dapress për soa contribussion a [[Special:Version|MediaWiki]].',
-'version-license-info' => "MediaWiki a l'é un programa lìber; a peul passelo an gir e/o modifichelo sota le condission dla Licensa Pùblica General GNU coma publicà da la Free Software Foundation; o la version 2 dla licensa o (a soa decision) qualsëssìa version apress.
+'version-license-info' => "MediaWiki a l'é un programa lìber; a peul passelo an gir o modifichelo sota le condission dla Licensa Pùblica General GNU coma publicà da la Free Software Foundation; o la version 2 dla licensa o (a soa decision) qualsëssìa version apress.
 
 MediaWiki a l'é distribuì ant la speransa che a sia ùtil, ma SENSA GNUN-A GARANSÌA; sensa gnanca la garansìa implìcita ëd COMERSIABILITA' o d'ADATAMENT A UN BUT PARTICOLAR. Ch'a lesa la Licensa General Pùblica GNU per pi 'd detaj.
 
@@ -3584,9 +3602,10 @@ A dovrìa avèj arseivù [{{SERVER}}{{SCRIPTPATH}}/COPYING na còpia dla Licensa
 'version-software' => 'Programa anstalà',
 'version-software-product' => 'Prodot',
 'version-software-version' => 'Version',
-'version-entrypoints' => "Anliure ëd pont d'intrada",
+'version-entrypoints' => "Anliure dij pont d'intrada",
 'version-entrypoints-header-entrypoint' => "Pont d'intrada",
 'version-entrypoints-header-url' => "Adrëssa an sl'aragnà",
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Senté d\'artìcol]',
 
 # Special:FilePath
 'filepath' => "Përcors d'archivi",
@@ -3601,10 +3620,10 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'fileduplicatesearch-legend' => 'Arsërca ëd na dobia',
 'fileduplicatesearch-filename' => "Nòm dl'archivi:",
 'fileduplicatesearch-submit' => 'Arsërca',
-'fileduplicatesearch-info' => '$1 × $2 pixel<br />Amzure: $3<br />Sòrt MIME: $4',
-'fileduplicatesearch-result-1' => 'Pa gnun-a dobia për l\'archivi "$1".',
-'fileduplicatesearch-result-n' => 'A-i {{PLURAL:$2|é \'n dobion midem|son $2 dobion midem}} ëd l\'archivi "$1".',
-'fileduplicatesearch-noresults' => 'Gnun archivi ciamà "$1" trovà.',
+'fileduplicatesearch-info' => '$1 × $2 pontin<br />Amzure: $3<br />Sòrt MIME: $4',
+'fileduplicatesearch-result-1' => "Pa gnun dobion për l'archivi «$1».",
+'fileduplicatesearch-result-n' => "A-i {{PLURAL:$2|é 'n dobion midem|son $2 dobion midem}} ëd l'archivi «$1».",
+'fileduplicatesearch-noresults' => "Gnun archivi ciamà «$1» a l'é stàit trovà.",
 
 # Special:SpecialPages
 'specialpages' => 'Pàgine Speciaj',
@@ -3616,40 +3635,40 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'specialpages-group-other' => 'Àutre pàgine speciaj',
 'specialpages-group-login' => 'Intré ant ël sistema / creé un cont',
 'specialpages-group-changes' => 'Ùltime modìfiche e registr',
-'specialpages-group-media' => 'Rapòrt dij file multimediaj e dle carie',
+'specialpages-group-media' => "Rapòrt e amportassion d'archivi multimojen",
 'specialpages-group-users' => 'Utent e drit',
 'specialpages-group-highuse' => 'Pàgine motobin dovrà',
 'specialpages-group-pages' => 'Liste ëd pàgine',
 'specialpages-group-pagetools' => 'Utiss për le pàgine',
 'specialpages-group-wiki' => 'Dat e utiss ëd la wiki',
-'specialpages-group-redirects' => 'Pàgine speciaj ëd rediression',
-'specialpages-group-spam' => 'Utiss contra lë spam',
+'specialpages-group-redirects' => 'Pàgine speciaj ëd ridiression',
+'specialpages-group-spam' => 'Utiss contra la rumenta',
 
 # Special:BlankPage
 'blankpage' => 'Pàgina bianca',
-'intentionallyblankpage' => "Sta pàgina-sì a l'é lassà antensionalment an bianch.",
+'intentionallyblankpage' => "Costa pàgina a l'é lassà veuida a pòsta.",
 
 # External image whitelist
-'external_image_whitelist' => "  #Lassa sta riga-sì pròpi con a l'é<pre>
-#Buta ij tòch d'espression regolar (mach la part che a va an tra //) sota
-#Ste sì a saran confrontà con le URL dle figure esterne (hotlinked)
-#Cole che as cobio a saran visualisà com figure, dasnò a sarà mach mostà un colegament a la figura
+'external_image_whitelist' => "  #Lassé costa riga-sì pròpi 'me ch'a l'é<pre>
+#Buté ij fragment d'espression regolar (mach la part che a va antra le //) sì-sota
+#Coste-sì a saran confrontà con le liure dle figure esterne
+#Cole che as cobio a saran visualisà com figure, dësnò a sarà mach mostrà na liura a la figura
 #Le linie che a ancamin-o con # a saran tratà com coment
-#Sòn sì a l'é pa sensìbil a minuscol o maiuscol
+#La lista a l'é indiferenta a minùscol o majùscol
 
-#Buta tùit ij tòch ëd regex sota sta linia-sì. Lassa sta linia-sì pròpi com a l'é</pre>",
+#Buté tùit ij fragment d'espression regolar sota sta linia-sì. Lassé costa linia pròpi com a l'é</pre>",
 
 # Special:Tags
-'tags' => 'Tag ëd modìfiche vàlid',
-'tag-filter' => '[[Special:Tags|Tag]] filtror:',
+'tags' => 'Tichëtte ëd le modìfiche vàlide',
+'tag-filter' => 'Filtror ëd le [[Special:Tags|tichëtte]]:',
 'tag-filter-submit' => 'Filtror',
-'tags-title' => 'Tag',
-'tags-intro' => 'Sta pàgina-sì a lista ij tag che ël software a peul dovré për identifiché na modìfica, e ël sò significà.',
-'tags-tag' => 'Nòm dël tag',
+'tags-title' => 'Tichëtte',
+'tags-intro' => 'Costa pàgina a lista le tichëtte che ël programa a peul dovré për marché na modìfica, e sò significà.',
+'tags-tag' => 'Nòm ëd la tichëtta',
 'tags-display-header' => 'Aparensa ant la lista dle modìfiche',
 'tags-description-header' => 'Descrission completa dël significà',
-'tags-hitcount-header' => 'Modìfiche con tag',
-'tags-edit' => 'modìfica',
+'tags-hitcount-header' => 'Modìfiche con tichëtta',
+'tags-edit' => 'modifiché',
 'tags-hitcount' => '$1 {{PLURAL:$1|cambiament|cambiament}}',
 
 # Special:ComparePages
@@ -3659,30 +3678,31 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'compare-page2' => 'Pàgina 2',
 'compare-rev1' => 'Revision 1',
 'compare-rev2' => 'Revision 2',
-'compare-submit' => 'Confronta',
+'compare-submit' => 'Confronté',
 'compare-invalid-title' => "Ël tìtol ch'a l'ha spessificà a va pa bin.",
-'compare-title-not-exists' => "Ël tìtol ch'a l'ha spessificà a esist pa",
-'compare-revision-not-exists' => "La revision che it l'has spessificà a esist pa.",
+'compare-title-not-exists' => "Ël tìtol ch'a l'ha spessificà a esist pa.",
+'compare-revision-not-exists' => "La revision che a l'ha spessificà a esist pa.",
 
 # Database error messages
 'dberr-header' => "Sta wiki-sì a l'ha un problema",
-'dberr-problems' => "Spiasent! Sto sit-sì a l'ha dle dificoltà técniche.",
-'dberr-again' => 'Preuva a speté cheich minute e a torna carié.',
-'dberr-info' => '(As peul pa contaté ël database server: $1)',
-'dberr-usegoogle' => 'It peule prové a serché con Google ant ël mentre.',
-'dberr-outofdate' => 'Nòta che la soa indicisassion dij nòst contnù a podrìa nen esse agiornà.',
-'dberr-cachederror' => 'Sta sì a l\'ìé na còpia an "cache" ëd la pàgina ciamà, e a peul esse pa agiornà.',
+'dberr-problems' => "An dëspias!
+Ës sit a l'ha dle dificoltà técniche.",
+'dberr-again' => "Ch'a speta chèiche minute e ch'a preuva torna a carié.",
+'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' => "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
@@ -3692,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à',
@@ -3707,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",
@@ -3715,70 +3735,74 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'logentry-move-move_redir-noredirect' => "$1 a l'ha tramudà la pàgina $3 a $4 ansima a na ridiression sensa lassé na ridiression",
 'logentry-patrol-patrol' => "$1 a l'ha marcà la revision $4 dla pàgina $3 'me controlà",
 'logentry-patrol-patrol-auto' => "$1 a l'ha marcà automaticament la revision $4 dla pàgina $3 'me controlà",
-'logentry-newusers-newusers' => '$1 creà un cont utent',
-'logentry-newusers-create' => '$1 creà un cont utent',
-'logentry-newusers-create2' => '$1 creà un cont utent $3',
+'logentry-newusers-newusers' => "Ël cont utent $1 a l'é stàit creà",
+'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à.",
 
index 2efddb7..5ed26d0 100644 (file)
@@ -413,9 +413,6 @@ $messages = array(
 تسی   {{SITENAME}} نوں گمنامی چ ورت سکدے او یا تسی <span class='plainlinks'>[$1 لاگ ان دوبارہ]</span> ہوجاؤ اوسے ناں توں یا وکھرے ورتن والے توں۔ اے گل چیتے رکھنا جے کج صفیاں تے تسی لاگ ان دسے جاؤگے جدوں تک تسی اپنے براؤزر دے کاشے نوں صاف ناں کرلو۔
 You can continue to use {{SITENAME}} anonymously, or you can <span class='plainlinks'>[$1 log in again]</span> as the same or as a different user.
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-'welcomecreation' => '== جی آیاں نوں, $1! ==
-تواڈا کھاتا بن گیا اے۔
-اپنیاں [[Special:Preferences|{{SITENAME}} تانگاں]] بدلنا نا پلنا۔',
 'yourname' => 'ورتن والہ:',
 'yourpassword' => 'کنجی:',
 'yourpasswordagain' => 'کنجی دوبارہ لکھو:',
@@ -738,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' => 'توانوں نواں صفحہ بنانے دی اجازت نئیں۔',
@@ -1265,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' => 'اس صفحے نوں پڑھو',
@@ -1893,10 +1890,6 @@ $1",
 'activeusers-hidesysops' => 'مکھۓ لکاؤ',
 'activeusers-noresult' => 'کوئی ورتن والا نئیں لبیا۔',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ورتاوا بنان آلی لاگ',
-'newuserlogpagetext' => 'اے ورتن والا بنان دی لاگ اے۔',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ورتن ٹرلی حق',
 'listgrouprights-summary' => 'تھلے اک لسٹ اے ورتن ٹولیاں دی ای وکی تے، اپنے رلدے حقاں نال۔ 
@@ -1990,11 +1983,7 @@ $1",
 
 'enotif_mailer' => '{{سائٹ ناں}} نوٹینیکیشن میلر',
 'enotif_reset' => 'سارے ویکھے گۓ صفحیاں تے نشان لاؤ',
-'enotif_newpagetext' => 'اے نواں صفہ اے۔',
 'enotif_impersonal_salutation' => '{{SITENAME}} ورتن والا',
-'changed' => 'بدلیا',
-'created' => 'بن گیا',
-'enotif_subject' => '{{سائیٹتھاں}} صفہ $صفہ سرخی  $تبدیلی بنائی  $صفہ لکھاری',
 'enotif_lastvisited' => '$1 تبدیلیاں ویکھو اپنے آخری واری آن مکروں',
 'enotif_lastdiff' => '$1 ویکھو ایس تبدیلی نون ویکھن لئی۔',
 'enotif_anon_editor' => 'گم نام ورتن آلا $1',
@@ -2030,6 +2019,8 @@ $UNWATCHURL
 
 فیڈبیک تے ہور مدد لئی:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'بن گیا',
+'changed' => 'بدلیا',
 
 # Delete
 'deletepage' => 'صفہ مٹاؤ',
@@ -3541,6 +3532,7 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 'logentry-newusers-create2' => '$1 {{جنس:$2|بنایا}} {{جنس:$4|اک ورتن کھاتہ}} $3',
 'logentry-newusers-autocreate' => 'کھاتہ $1 اپنے آپ ای {{جنس:$2|بنایا گیا}} بنایا گیا۔',
 'newuserlog-byemail' => 'کنجی ای-میل راہ پیج دتی گئی۔',
+'rightsnone' => '(کوئی وی نئیں)',
 
 # Feedback
 'feedback-bugornote' => 'اگر تسیں اک تکنیکی مسلے نوں  پوری طراں دسن لئی تیار او تے فیر مہربانی کرکے [$1 بگ بارے دسو]۔  ںئیں تے تسیں تھلے دتا گیا فارم ورتو۔ تواڈی گل صفہ "[$3 $2]" تے جڑے گی،  تواڈے ورتن والے ناں تے براؤزر جیہڑا تسیں ورت رۓ او۔',
index 6c2088e..88b7195 100644 (file)
@@ -337,9 +337,6 @@ $messages = array(
 'virus-unknownscanner' => 'αναγνώριμον αντιικόν:',
 
 # Login and logout pages
-'welcomecreation' => "== Καλώς έρθετεν, $1! ==
-Η λογαρίαν εσουν εγέντον.
-Τ' άλλαγμαν τη [[Special:Preferences|{{SITENAME}} προτιμησίων]] εσουν μη νεσπάλετε.",
 'yourname' => 'Όνεμαν χρήστε:',
 'yourpassword' => 'Σημάδι:',
 'yourpasswordagain' => "Ξαν' γράψτεν το σημάδι:",
@@ -707,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' => 'δεάβασον αβούτεν την σελίδαν',
@@ -944,9 +943,6 @@ $messages = array(
 # Special:ListUsers
 'listusers-submit' => 'Δείξον',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Αρχείον ποισιματίων λογαρίων χρήστε',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Ομάδαν',
 'listgrouprights-rights' => 'Δικαιώματα',
@@ -980,9 +976,9 @@ $messages = array(
 'unwatching' => "'κ ωριάζω...",
 
 'enotif_impersonal_salutation' => '{{SITENAME}} χρήστες',
-'changed' => 'ελλάγεν',
-'created' => 'έντον',
 'enotif_anon_editor' => 'ανώνυμον χρήστες $1',
+'created' => 'έντον',
+'changed' => 'ελλάγεν',
 
 # Delete
 'deletepage' => 'Σβήσον τη σελίδαν',
@@ -1442,6 +1438,9 @@ $messages = array(
 'htmlform-reset' => "Κλώσον τ'αλλαγάς",
 'htmlform-selectorother-other' => 'Άλλον',
 
+# New logging system
+'rightsnone' => '(τιδέν)',
+
 # Search suggestions
 'searchsuggest-search' => 'Αράεμαν',
 
index f0d44b3..e81e4fa 100644 (file)
@@ -377,9 +377,6 @@ Drēudisnas pagrintinsna: "$2".',
 
 Tū mazzi ēmpirsin sadīntun tērpautun {{SITENAME}} kāigi niengūbuns tērpautajs, anga <span class='plainlinks'>[$1 enēitwei etkūmps]</span> kāigi šis sūbs anga kits tērpautajs.
 Endirēis, kāi ainuntai pāusai mazzi būtwei waidīntan ikāigi tū būlai ainatīngi engūbun, ērgi tū wīrst skistinnuns lasātlas rānkas minīsnan.",
-'welcomecreation' => '== Kaīls, $1! ==
-Twājs rekkens pastāi teīktan.
-Ni izmīrstais kitawīdintun Twajjans [[Special:Preferences|pirminiskwans per {{SITENAME}}]].',
 'yourname' => 'Twajā tērpautajas pabilisnā:',
 'yourpassword' => 'Twājs kliptaswīrds:',
 'yourpasswordagain' => 'Āntrinais kliptaswīrdan',
@@ -627,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.',
@@ -1044,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',
@@ -1529,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.
@@ -1609,14 +1603,12 @@ Eraīna šisse pāusas ēnturas kitawīdinsna anga diskusiōnis pāusas sēitan
 
 'enotif_mailer' => 'Pawakīsenis iz {{SITENAME}}',
 'enotif_reset' => 'Ebzentlis wissans pāusans per kāimalukitans',
-'enotif_newpagetext' => 'Sta ast nāunan pāusan.',
 'enotif_impersonal_salutation' => 'tērpautajs stesse {{SITENAME}}',
-'changed' => 'kitawīdintan',
-'created' => 'teīktan',
-'enotif_subject' => 'Pāusan $PAGETITLE en {{SITENAME}} pastāi $CHANGEDORCREATED pra $PAGEEDITOR',
 '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',
@@ -2716,5 +2708,6 @@ Enpeisāis zūrbrukes pabilīsnan šlāit "{{ns:file}}:" prefiksan.',
 '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 bb01925..33ab6f8 100644 (file)
@@ -12,6 +12,8 @@
  * @author Umherirrender
  */
 
+$rtl = true;
+
 $namespaceNames = array(
        NS_MEDIA            => 'رسنۍ',
        NS_SPECIAL          => 'ځانګړی',
@@ -155,8 +157,6 @@ $magicWords = array(
        'protectionlevel'           => array( '1', 'ژغورکچه', 'PROTECTIONLEVEL' ),
 );
 
-$rtl = true;
-
 $messages = array(
 # User preference toggles
 'tog-underline' => 'کرښنې تړنې:',
@@ -269,7 +269,7 @@ $messages = array(
 'category_header' => 'د "$1" په وېشنيزه کې شته مخونه',
 'subcategories' => 'څېرمه وېشنيزې',
 'category-media-header' => 'د "$1" په وېشنيزه کې شته رسنۍ',
-'category-empty' => "''تر Ø§Ù\88سÙ\87 Ù¾Ù\88رÛ\90 Ù\87Ù\85دا Ù\88Û\90Ø´Ù\86Ù\8aزÙ\87 Ù\87Û\90Ú\85 Ú©Ù\88Ù\85 Ù\85Ø® Ù\8aا Ú©Ù\88Ù\85Ù\87 رسنيزه دوتنه نلري.''",
+'category-empty' => "''دا Ù\88Û\90Ø´Ù\86Ù\8aزÙ\87 ØªØ± Ø§Ù\88سÙ\87 Ù¾Ù\88رÛ\90 Ú©Ù\88Ù\85 Ù\85Ø® Ù\8aا رسنيزه دوتنه نلري.''",
 'hidden-categories' => '{{PLURAL:$1|پټه وېشنيزه|پټې وېشنيزې}}',
 'hidden-category-category' => 'پټې وېشنيزې',
 'category-subcat-count' => '{{PLURAL:$2|په دې وېشنيزه کې دا لاندې وړه وېشنيزه ده.|په دې وېشنيزه کې له ټولټال $2 نه {{PLURAL:$1|وړه وېشنيزه ده|$1 وړې وېشنيزې دي}}.}}',
@@ -288,9 +288,9 @@ $messages = array(
 'newwindow' => '(په نوې کړکۍ کې پرانيستل کېږي)',
 'cancel' => 'ناګارل',
 'moredotdotdot' => 'نور ...',
-'mypage' => 'زÙ\85ا Ù¾Ø§Ú¼Ù\87',
-'mytalk' => 'زÙ\85ا Ø®Ø¨Ø±Û\90 Ø§ØªØ±Û\90',
-'anontalk' => 'ددې IP لپاره خبرې اترې',
+'mypage' => 'زÙ\85ا Ù\85Ø®',
+'mytalk' => 'خبرې اترې',
+'anontalk' => 'ددې IP خبرې اترې',
 'navigation' => 'ګرځښت',
 'and' => '&#32;او',
 
@@ -320,6 +320,7 @@ $messages = array(
 'namespaces' => 'نوم-تشيالونه',
 'variants' => 'ډولونه',
 
+'navigation-heading' => 'ګرځښت غورنۍ',
 'errorpagetitle' => 'تېروتنه',
 'returnto' => 'بېرته $1 ته وګرځه.',
 'tagline' => 'د {{SITENAME}} لخوا',
@@ -331,7 +332,7 @@ $messages = array(
 'history' => 'د مخ پېښليک',
 'history_short' => 'پېښليک',
 'updatedmarker' => 'زما د وروستي راتګ نه راپدېخوا اوسمهاله شوی',
-'printableversion' => 'د چاپ بڼه',
+'printableversion' => 'چاپي بڼه',
 'permalink' => 'تلپاتې تړنه',
 'print' => 'چاپ',
 'view' => 'کتل',
@@ -340,7 +341,7 @@ $messages = array(
 'editthispage' => 'همدا مخ سمول',
 'create-this-page' => 'همدا مخ ليکل',
 'delete' => 'ړنګول',
-'deletethispage' => 'دا مخ ړنګ کړه',
+'deletethispage' => 'دا مخ ړنګول',
 'undelete_short' => '{{PLURAL:$1|يو سمون|$1 سمونې}} ناړنګول',
 'viewdeleted_short' => '{{PLURAL:$1|يو ړنګ شوی سمون|$1 ړنګ شوي سمونونه}} کتل',
 'protect' => 'ژغورل',
@@ -361,7 +362,7 @@ $messages = array(
 'userpage' => 'د کارن پاڼه کتل',
 'projectpage' => 'د پروژې مخ کتل',
 'imagepage' => 'د دوتنې مخ کتل',
-'mediawikipage' => 'د پيغامونو مخ کتل',
+'mediawikipage' => 'پيغام مخ کتل',
 'templatepage' => 'د کينډۍ مخ کتل',
 'viewhelppage' => 'د لارښود مخ کتل',
 'categorypage' => 'د وېشنيزې مخ کتل',
@@ -447,7 +448,7 @@ $1',
 'sort-ascending' => 'مخپورته اوډل',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Ù\84Ù\8aÚ©Ù\86Ù\87',
+'nstab-main' => 'Ù\85Ø®',
 'nstab-user' => 'کارن مخ',
 'nstab-media' => 'د رسنۍ مخ',
 'nstab-special' => 'ځانګړی مخ',
@@ -455,7 +456,7 @@ $1',
 'nstab-image' => 'دوتنه',
 'nstab-mediawiki' => 'پيغام',
 'nstab-template' => 'کينډۍ',
-'nstab-help' => 'لارښود',
+'nstab-help' => 'لارښود مخ',
 'nstab-category' => 'وېشنيزه',
 
 # Main script and global functions
@@ -506,7 +507,7 @@ $1',
 'viewsource' => 'سرچينه کتل',
 'viewsource-title' => 'د $1 سرچينه کتل',
 'actionthrottled' => 'د دې کړنې مخنيوی وشو',
-'protectedpagetext' => 'دا Ù\85Ø® Ø¯ Ø¨Ø¯Ù\84Ù\88Ù\86 Ø§Ù\88 Ø³Ù\85Ù\88Ù\86 Ø¯ Ù\85Ø®Ù\86Ù\8aÙ\88Ù\8a Ù¾Ù\87 ØªÚ©Ù\84 ØªÚ\93Ù\84 Ø´Ù\88Û\8c Ø¯ی.',
+'protectedpagetext' => 'دا Ù\85Ø® Ø¯ Ø³Ù\85Ù\88Ù\86 Ø§Ù\88 Ù\86Ù\88رÙ\88 Ú©Ú\93Ù\86Ù\88 Ø¯ ØªØ±Ø³Ø±Ù\87 Ú©Ù\88Ù\84Ù\88 Ù¾Ù\87 ØªÚ©Ù\84 Ú\98غÙ\88رÙ\84 Ø´Ù\88ی.',
 'viewsourcetext' => 'تاسې د دې مخ سرچينه کتلی او لمېسلی شی:',
 'protectedinterface' => 'دا مخ د دې ويکي د ساوترې د ليدنمخ متن لري، او د ورانکارۍ په خاطر ژغورل شوی.
 په ټولو ويکي ګانو کې د ژباړې د ورګډولو او يا هم د ژباړې د سمون او بدلون لپاره د مېډياويکي د ځايتابه پروژه [//translatewiki.net/ translatewiki.net] وکاروۍ.',
@@ -532,9 +533,6 @@ $1',
 
 تاسې کولای شی چې د کارن-نوم نه پرته په ورکنومي توګه {{SITENAME}} وکاروی، او يا هم په همدې او يا کوم بل کارن-نوم، يو ځل <span class='plainlinks'>[$1 بيا غونډال ته ورننوځۍ]</span>.
 دا په پام کې وساتۍ چې تر څو تاسې د خپل کتنمل حافظه نه وي سپينه کړې، نو ځينې مخونو کې به لا تر اوسه پورې په غونډال کې ننوتي ښکارۍ.",
-'welcomecreation' => '==$1 ښه راغلۍ! ==
-
-ستاسې ګڼون جوړ شو. لطفاً د خپلو [[Special:Preferences|{{SITENAME}} غوره توبونو]] ټاکل مو مه هېروی.',
 'yourname' => 'کارن-نوم:',
 'yourpassword' => 'پټنوم:',
 'yourpasswordagain' => 'پټنوم بيا وليکه',
@@ -665,19 +663,20 @@ $1',
 'changeemail-oldemail' => 'اوسنۍ برېښليک پته:',
 'changeemail-newemail' => 'نوې برېښليک پته:',
 'changeemail-none' => '(هېڅ)',
+'changeemail-password' => 'ستاسې د{{SITENAME}} پټنوم:',
 'changeemail-submit' => 'برېښليک بدلول',
 'changeemail-cancel' => 'ناګارل',
 
 # Edit page toolbar
 'bold_sample' => 'زغرد متن',
 'bold_tip' => 'زغرد متن',
-'italic_sample' => 'کوږ ليک',
-'italic_tip' => 'کوږ ليک',
+'italic_sample' => 'رېوند متن',
+'italic_tip' => 'رېوند متن',
 'link_sample' => 'د تړن سرليک',
 'link_tip' => 'کورنۍ تړنه',
 'extlink_sample' => 'http://www.example.com د تړنې سرليک',
 'extlink_tip' => 'باندنۍ تړنې (د http:// مختاړی مه هېروی)',
-'headline_sample' => 'سرÙ\84Ù\8aÚ©',
+'headline_sample' => 'د Ø³Ø±Ù\84Ù\8aÚ© Ù\85تÙ\86',
 'headline_tip' => 'د ۲ کچې سرليک',
 'nowiki_sample' => 'دلته دې بې بڼې متن ځای پر ځای شي',
 'nowiki_tip' => 'د ويکي بڼه نيونه بابېزه ګڼل',
@@ -762,18 +761,21 @@ $1',
 '''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
 'userjspreview' => "'''هېر مو نشي چې دا يوازې ستاسې د کارن د جاوا سکرېپټ آزمېيل/مخليدنه ده.'''
 '''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
+'sitecsspreview' => "'''په پام کې دې وي چې دا يوازې ستاسې د CSS مخليدنه ده.'''
+'''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
 'sitejspreview' => "'''په پام کې مو اوسه چې تاسې يوازې د دغه جاواسکرېپټ کوډ مخليدنه کوۍ.'''
 '''تر اوسه پورې دا نه دی خوندي شوی!'''",
 'updated' => '(تازه)',
 'note' => "'''يادونه:'''",
 'previewnote' => "'''هېر مو نه شي چې دا يواځې يوه مخليدنه ده.'''
 ستاسې لخوا ترسره شوي بدلونونه لا تر اوسه پورې نه دي خوندي شوي!!",
+'continue-editing' => 'د سمولو سيمې ته ورتلل',
 'editing' => 'د $1 سمونه',
 'creating' => '$1 جوړېدنې کې دی',
 'editingsection' => '$1 (برخه) په سمېدنې کې دی',
 'editingcomment' => 'د $1 سمون (نوې برخه)',
 'editconflict' => 'په سمادولو کې خنډ: $1',
-'yourtext' => 'ستاسو متن',
+'yourtext' => 'ستاسې متن',
 'storedversion' => 'زېرمه شوې مخکتنه',
 'yourdiff' => 'توپيرونه',
 'copyrightwarning' => "لطفاً په پام کې وساتۍ چې ټولې هغه ونډې چې تاسې يې {{SITENAME}} کې ترسره کوی هغه د $2 له مخې د خپرولو لپاره ګڼل کېږي (د لانورو تفصيلاتو لپاره $1 وګورۍ). که تاسې نه غواړۍ چې په ليکنو کې مو په بې رحمۍ سره لاسوهنې (سمونې) وشي او د نورو په غوښتنه پسې لانورې هم خپرې شي، نو دلته يې مه ځای پر ځای کوی..<br />
@@ -793,7 +795,6 @@ $1',
 'template-protected' => '(ژغورلی)',
 'template-semiprotected' => '(نيم-ژغورلی)',
 'hiddencategories' => 'دا مخ د {{PLURAL:$1|1 پټې وېشنيزې|$1 پټو وېشنيزو}} يو غړی دی:',
-'nocreatetitle' => 'د مخ جوړول بريد ټاکلی دی',
 'nocreatetext' => '{{SITENAME}} د نوو مخونو د جوړولو وړتيا محدوده کړې.
 تاسو بېرته پر شا تللای شی او په شته مخونو کې سمونې ترسره کولای شی، او يا هم [[Special:UserLogin|غونډال ته ننوتلای او يو ګڼون جوړولای شی]].',
 'nocreate-loggedin' => 'تاسې د نوو مخونو د جوړولو پرېښله نلرۍ.',
@@ -815,7 +816,12 @@ $1',
 'edit-no-change' => 'ستاسې سمون بابېزه وګڼل شو، دا ځکه چې تاسې په متن کې کوم بدلون نه دی راوستلی.',
 'edit-already-exists' => 'په دې نوم يو نوی مخ جوړ نه شو.
 پدې نوم د پخوا نه يو مخ شته.',
-'defaultmessagetext' => 'تلوالیزه پيغام متن',
+'defaultmessagetext' => 'تلواليزه پيغام متن',
+
+# Content models
+'content-model-wikitext' => 'ويکي متن',
+'content-model-text' => 'ساده متن',
+'content-model-javascript' => 'جاواسکرېپټ',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''ګواښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
@@ -989,7 +995,7 @@ $1',
 
 # Preferences page
 'preferences' => 'غوره توبونه',
-'mypreferences' => 'زÙ\85ا ØºÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\87',
+'mypreferences' => 'غوره توبونه',
 'prefs-edits' => 'د سمونو شمېر:',
 'prefsnologin' => 'غونډال کې نه ياست ننوتي',
 'prefsnologintext' => 'د دې لپاره چې خپل غوره توبونه مو وټاکی، نو پکار ده چې لومړی تاسو غونډال کې <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ننوځی]</span>.',
@@ -1056,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' => 'ژبه:',
@@ -1161,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' => 'همدا مخ لوستل',
@@ -1200,7 +1209,7 @@ $1',
 'recentchanges-label-unpatrolled' => 'دغه سمون تر اوسه پورې نه دی څارل شوی',
 'rcnote' => "دلته لاندې {{PLURAL:$1|وروستی '''1''' بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په  {{PLURAL:$2| يوې ورځ|'''$2''' ورځو}} کې تر $4 نېټې او $5 بجو پېښ شوي.",
 'rcnotefrom' => "په همدې ځای کې لاندې هغه بدلونونه دي چې د '''$2''' نه راپدېخوا پېښ شوي (تر '''$1''' پورې ښکاره شوي).",
-'rclistfrom' => 'هغه بدلونونه ښکاره کړی چې له $1 نه پيلېږي',
+'rclistfrom' => 'هغه نوي بدلونونه ښکاره کول چې له $1 نه پيلېږي',
 'rcshowhideminor' => 'وړې سمونې $1',
 'rcshowhidebots' => 'روباټ $1',
 'rcshowhideliu' => 'غونډال کې ننوتي کارنان $1',
@@ -1350,7 +1359,7 @@ $1',
 'filehist' => 'د دوتنې پېښليک',
 'filehist-help' => 'په يوې نېټې/يوه وخت وټوکۍ چې د هماغه وخت او نېټې دوتنه چې په هماغه وخت کې څنګه ښکارېده هماغسې درښکاره شي.',
 'filehist-deleteall' => 'ټول ړنګول',
-'filehist-deleteone' => 'همدا ړنګول',
+'filehist-deleteone' => 'ړنګول',
 'filehist-revert' => 'په څټ ګرځول',
 'filehist-current' => 'اوسنی',
 'filehist-datetime' => 'نېټه/وخت',
@@ -1373,6 +1382,7 @@ $1',
 'filepage-nofile-link' => 'په دې نوم کومه دوتنه نشته، خو تاسې يې [$1 پورته کولی شی].',
 'uploadnewversion-linktext' => 'د همدغې دوتنې نوې بڼه پورته کول',
 'shared-repo-from' => 'د $1 لخوا',
+'upload-disallowed-here' => 'تاسې د دې دوتنې دپاسه نشی ليکلی.',
 
 # File reversion
 'filerevert-comment' => 'سبب:',
@@ -1392,6 +1402,7 @@ $1',
 ** د رښتو نه غاړه غړونه
 ** کټ مټ دوه ګونې دوتنه',
 'filedelete-edit-reasonlist' => 'د ړنګولو سببونه سمول',
+'filedelete-maintenance-title' => 'دوتنه نه شي ړنګېدی',
 
 # MIME search
 'mimesearch' => 'MIME پلټنه',
@@ -1428,10 +1439,11 @@ $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 ورځو}} کې فعاله ونډه لرلې',
-'statistics-mostpopular' => 'تر ټولو ډېر کتل شوي مخونه',
+'statistics-mostpopular' => 'ډېر کتل شوي مخونه',
 
 'disambiguations' => 'د مبهمو مخونو سره تړلي مخونه',
 'disambiguationspage' => 'Template:ناجوت',
@@ -1460,15 +1472,15 @@ $1',
 'ntransclusions' => 'په $1 {{PLURAL:$1|مخ|مخونو}} کارېدلی',
 'specialpage-empty' => 'د دې راپور لپاره کومې پايلې نشته.',
 'lonelypages' => 'يتيم مخونه',
-'uncategorizedpages' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Ù\8a Ù\85Ø®Ù\88Ù\86Ù\87',
-'uncategorizedcategories' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Û\90 Ù\88Û\90Ø´Ù\86Ù\8aزÛ\90',
-'uncategorizedimages' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Ù\8a Ø§Ù\86Ú\81Ù\88رÙ\86Ù\87',
-'uncategorizedtemplates' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Û\90 Ú©Ù\8aÙ\86Ú\89Û\8d',
+'uncategorizedpages' => 'ناوېشلي مخونه',
+'uncategorizedcategories' => 'ناوېشلې وېشنيزې',
+'uncategorizedimages' => 'ناوېشلي انځورنه',
+'uncategorizedtemplates' => 'ناوېشلې کينډۍ',
 'unusedcategories' => 'ناکارېدلې وېشنيزې',
 'unusedimages' => 'ناکارېدلې دوتنې',
 'popularpages' => 'نامتو مخونه',
 'wantedcategories' => 'غوښتلې وېشنيزې',
-'wantedpages' => 'غوښتل شوې پاڼې',
+'wantedpages' => 'غوښتلي مخونه',
 'wantedfiles' => 'غوښتلې دوتنې',
 'wantedtemplates' => 'غوښتلې کينډۍ',
 'mostlinked' => 'د ډېرو تړنو مخونه',
@@ -1506,7 +1518,7 @@ $1',
 
 # Book sources
 'booksources' => 'د کتاب سرچينې',
-'booksources-search-legend' => 'د Ú©ØªØ§Ø¨Ù\8a Ø³Ø±Ú\86Ù\8aÙ\86Ù\88 Ù\84Ù¼Ù\88Ù\86 Ù\88Ú©Ú\93Û\8d',
+'booksources-search-legend' => 'د Ú©ØªØ§Ø¨Ù\8a Ø³Ø±Ú\86Ù\8aÙ\86Ù\88 Ù¾Ù\84Ù¼Ù\86Ù\87',
 'booksources-go' => 'ورځه',
 'booksources-text' => 'دا لاندې د هغه وېبځايونو د تړنو لړليک دی چېرته چې نوي او زاړه کتابونه پلورل کېږي، او يا هم کېدای شي چې د هغه کتاب په هکله مالومات ولري کوم چې تاسو ورپسې لټېږۍ:',
 
@@ -1519,14 +1531,14 @@ $1',
 
 # Special:AllPages
 'allpages' => 'ټول مخونه',
-'alphaindexline' => '$1 نه تر $2 پورې',
+'alphaindexline' => '$1 تر $2',
 'nextpage' => 'بل مخ ($1)',
 'prevpage' => 'تېر مخ ($1)',
 'allpagesfrom' => 'هغه مخونه کتل چې پېلېږي په:',
 'allpagesto' => 'هغه مخونه کتل چې پای يې وي:',
 'allarticles' => 'ټول مخونه',
 'allinnamespace' => 'ټول مخونه ($1 نوم-تشيال)',
-'allnotinnamespace' => 'ټولې پاڼې (د $1 په نوم-تشيال کې نشته)',
+'allnotinnamespace' => 'ټول مخونه (د $1 نوم-تشيال پرته)',
 'allpagesprev' => 'پخواني',
 'allpagesnext' => 'راتلونکي',
 'allpagessubmit' => 'ورځه',
@@ -1535,6 +1547,9 @@ $1',
 'allpages-bad-ns' => '{{SITENAME}} د "$1" په نامه هېڅ کوم نوم-تشيال نه لري.',
 'allpages-hide-redirects' => 'مخ ګرځونې پټول',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'تر ټولو تازه کتل.',
+
 # Special:Categories
 'categories' => 'وېشنيزې',
 'categoriespagetext' => 'دا لاندينۍ {{PLURAL:$1|وېشنيزه|وېشنيزې}} مخونه يا رسنيزې دوتنې لري.
@@ -1571,10 +1586,6 @@ $1',
 'activeusers-hidesysops' => 'پازوالان پټول',
 'activeusers-noresult' => 'کارن و نه موندل شو.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'د کارن-نوم د جوړېدو يادښت',
-'newuserlogpagetext' => 'دا د کارن-نوم د جوړېدو يادښت دی',
-
 # Special:ListGroupRights
 'listgrouprights' => 'د کارن ډلو رښتې',
 'listgrouprights-group' => 'ډله',
@@ -1623,18 +1634,16 @@ $1',
 
 # Watchlist
 'watchlist' => 'زما کتنلړ',
-'mywatchlist' => 'زما کتنلړ',
+'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' => 'کتل',
 'watchthispage' => 'همدا مخ کتل',
@@ -1656,11 +1665,17 @@ $1',
 
 'enotif_mailer' => 'د {{SITENAME}} خبرتيايي برېښليک',
 'enotif_reset' => 'ټول مخونه کتل شوي نخښه کول',
-'enotif_newpagetext' => 'دا يوه نوې پاڼه ده.',
 'enotif_impersonal_salutation' => '{{SITENAME}} کارن',
-'changed' => 'بدلېدلی',
-'created' => 'جوړ شو',
-'enotif_subject' => 'د {{SITENAME}} مخ $PAGETITLE د  $PAGEEDITOR لخوا $CHANGEDORCREATED',
+'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',
@@ -1693,13 +1708,15 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 انګېرنې او نورې مرستې:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'جوړ شو',
+'changed' => 'بدلېدلی',
 
 # Delete
-'deletepage' => 'پاڼÙ\87 ړنګول',
+'deletepage' => 'Ù\85Ø® ړنګول',
 'confirm' => 'تاييد',
 'excontent' => 'د مخ مېنځپانګه دا وه: "$1"',
 'excontentauthor' => 'د مخ مېنځپانګه دا وه: "$1" (او يواځينی ونډه وال "[[Special:Contributions/$2|$2]]" وه)',
-'exblank' => 'دا مخ تش وه',
+'exblank' => 'مخ تش وه',
 'delete-confirm' => '"$1" ړنګوول',
 'delete-legend' => 'ړنګول',
 'historywarning' => "ګواښنه:''' تاسې چې د کوم مخ د ړنګېدو تکل لری، هغه د نژدې $1 {{PLURAL:$1|بڼې|بڼو}} يو پېښليک لري:",
@@ -1726,7 +1743,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 # Protect
 'protectlogpage' => 'د ژغورنې يادښت',
-'protectedarticle' => '"[[$1]]" وژغورلی شو',
+'protectedarticle' => '"[[$1]]" وژغورل شو',
 'modifiedarticleprotection' => 'د "[[$1]]" لپاره د ژغورنې کچه بدله شوه',
 'protect-title' => 'د "$1" لپاره د ژغورنې کچه بدلول',
 'prot_1movedto2' => '[[$1]]، [[$2]] ته ولېږدېده',
@@ -1803,9 +1820,9 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'blanknamespace' => '(آرنی)',
 
 # Contributions
-'contributions' => 'د کارن ونډې',
+'contributions' => '{{GENDER:$1|کارن}} ونډې',
 'contributions-title' => 'د $1 کارن ونډې',
-'mycontris' => 'زما ونډې',
+'mycontris' => 'ونډې',
 'contribsub2' => 'د $1 لپاره ($2)',
 'uctop' => '(سرپاڼه)',
 'month' => 'له مياشتې د (او پخواني):',
@@ -1818,7 +1835,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'sp-contributions-uploads' => 'پورته کېدنې',
 'sp-contributions-logs' => 'يادښتونه',
 'sp-contributions-talk' => 'خبرې اترې',
-'sp-contributions-search' => 'د Ù\88Ù\86Ú\89Ù\88 Ù\84Ù¼Ù\88Ù\86',
+'sp-contributions-search' => 'د Ù\88Ù\86Ú\89Ù\88 Ù¾Ù\84Ù¼Ù\86Ù\87',
 'sp-contributions-username' => 'IP پته يا کارن-نوم:',
 'sp-contributions-toponly' => 'يوازې هغه سمونونه چې تر ټولو تازه بڼې لري ښکاره کول',
 'sp-contributions-submit' => 'پلټل',
@@ -1838,7 +1855,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'whatlinkshere-hideredirs' => 'مخ ګرځونې $1',
 'whatlinkshere-hidetrans' => 'پايلې $1',
 'whatlinkshere-hidelinks' => 'تړنې $1',
-'whatlinkshere-hideimages' => '$1 د انځور تړنې',
+'whatlinkshere-hideimages' => 'د دوتنې تړنې $1',
 'whatlinkshere-filters' => 'چاڼګرونه',
 
 # Block/unblock
@@ -1894,7 +1911,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'ipblocklist-submit' => 'پلټل',
 'ipblocklist-localblock' => 'سيمه ايز بنديز',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|بل بنديز|نور بنديزونه}}',
-'infiniteblock' => 'Ù\84امحدوده',
+'infiniteblock' => 'Ù\86امحدوده',
 'expiringblock' => 'په $1 نېټه، $2 بجو پای ته رسېږي',
 'anononlyblock' => 'يواځې ورکنومی',
 'createaccountblock' => 'په ګڼون جوړولو بنديز لګېدلی',
@@ -1925,8 +1942,10 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'lockdb' => 'توکبنسټ تړل',
 'unlockdb' => 'توکبنسټ پرانيستل',
 'lockconfirm' => 'هو، زه د توکبنسټ تړل غواړم.',
+'unlockconfirm' => 'هو، زه د توکبنسټ پرانيستل غواړم.',
 'lockbtn' => 'توکبنسټ تړل',
 'unlockbtn' => 'توکبنسټ پرانيستل',
+'databasenotlocked' => 'توکبنسټ نه دی تړل شوی.',
 
 # Move page
 'move-page' => '$1 لېږدول',
@@ -2003,8 +2022,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 # Namespace 8 related
 'allmessages' => 'د غونډال پيغامونه',
 'allmessagesname' => 'نوم',
-'allmessagesdefault' => 'ټاکل شوی متن',
-'allmessagescurrent' => 'اوسنی متن',
+'allmessagesdefault' => 'تلواليزه پيغام متن',
+'allmessagescurrent' => 'اÙ\88سÙ\86Û\8c Ù¾Ù\8aغاÙ\85 Ù\85تÙ\86',
 'allmessagestext' => 'دا د مېډياويکي په نوم-تشيال کې د غونډال د پيغامونو لړليک دی.
 که چېرته تاسې د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [//www.mediawiki.org/wiki/Localisation د ويډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] نه ليدنه وکړۍ.',
 'allmessagesnotsupportedDB' => "'''Special:Allmessages''' ترېنه کار نه اخيستل کېږي ځکه چې '''\$wgUseDatabaseMessages''' مړ دی.",
@@ -2028,9 +2047,11 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'import-interwiki-namespace' => 'د موخې نوم-تشيال:',
 'import-upload-filename' => 'د دوتنې نوم:',
 'import-comment' => 'تبصره:',
+'import-revision-count' => '$1 {{PLURAL:$1|بڼه|بڼې}}',
 
 # Import log
 'importlogpage' => 'د واردولو يادښت',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|بڼه|بڼې}}',
 
 # JavaScriptTest
 'javascripttest' => 'د جاوا سکرېپټ آزمېښت',
@@ -2058,7 +2079,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-search' => '{{SITENAME}} پلټل',
 'tooltip-search-go' => 'په دې نوم د کټ مټ ورته مخ شتون په صورت کې، هماغه مخ ته ورځه',
 'tooltip-search-fulltext' => 'په مخونو کې دا متن وپلټه',
-'tooltip-p-logo' => 'لومړی مخ',
+'tooltip-p-logo' => 'لومړي مخ ته ورتلل',
 'tooltip-n-mainpage' => 'لومړي مخ ته ورتلل',
 'tooltip-n-mainpage-description' => 'آرنی مخ کتل',
 'tooltip-n-portal' => 'د پروژې په اړه، تاسې څه شيان او چېرته کولای شی چې وې مومۍ',
@@ -2082,7 +2103,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-ca-nstab-special' => 'دا يو ځانګړی مخ دی، تاسې په دې مخ کې سمون نه شی کولای.',
 'tooltip-ca-nstab-project' => 'د پروژې مخ کتل',
 'tooltip-ca-nstab-image' => 'د دوتنې مخ کتل',
-'tooltip-ca-nstab-mediawiki' => 'د ØºÙ\88Ù\86Ú\89اÙ\84 Ù¾Ù\8aغاÙ\85Ù\88Ù\86Ù\87 Ú\9aکارÙ\87 Ú©Ù\88ل',
+'tooltip-ca-nstab-mediawiki' => 'د ØºÙ\88Ù\86Ú\89اÙ\84 Ù¾Ù\8aغاÙ\85Ù\88Ù\86Ù\87 Ú©Øªل',
 'tooltip-ca-nstab-template' => 'کينډۍ کتل',
 'tooltip-ca-nstab-help' => 'د لارښود مخ کتل',
 'tooltip-ca-nstab-category' => 'د وېشنيزې مخ ښکاره کول',
@@ -2122,7 +2143,10 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'pageinfo-header-restrictions' => 'مخ ژغورنه',
 'pageinfo-header-properties' => 'د مخ ځانتياوې',
 'pageinfo-display-title' => 'ښکارېدونکی سرليک',
+'pageinfo-length' => 'مخ اوږدوالی (په بايټونو)',
 'pageinfo-article-id' => 'د مخ پېژند',
+'pageinfo-language' => 'د مخ د مېنځپانګې ژبه',
+'pageinfo-robot-policy' => 'د پلټن ماشين دريځ',
 'pageinfo-robot-index' => 'ليکلړوړ',
 'pageinfo-robot-noindex' => 'ليکلړوړ نه',
 'pageinfo-views' => 'د کتنو شمېر',
@@ -2130,7 +2154,14 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'pageinfo-redirects-name' => 'دې مخ ته ورګرځونې',
 'pageinfo-subpages-name' => 'دې مخ ته څېرمه مخونه',
 'pageinfo-firstuser' => 'مخ جوړونکی',
+'pageinfo-firsttime' => 'د مخ جوړېدنې نېټه',
+'pageinfo-lastuser' => 'وروستنی سمونګر',
 'pageinfo-edits' => 'د ټولو سمونونو شمېر',
+'pageinfo-toolboxlink' => 'د مخ مالومات',
+'pageinfo-redirectsto-info' => 'مالومات',
+'pageinfo-contentpage' => 'مېنځپانګيز مخ کې شمېرل شوی',
+'pageinfo-contentpage-yes' => 'هو',
+'pageinfo-protect-cascading-yes' => 'هو',
 
 # Skin names
 'skinname-standard' => 'کلاسيک',
@@ -2641,10 +2672,11 @@ $5
 'revdelete-content-unhid' => 'مېنځپانګه ښکاره شوی',
 'revdelete-uname-unhid' => 'ښکاره کارن-نوم',
 'logentry-move-move' => '$1 د $3 مخ $4 ته ولېږداوه',
-'logentry-newusers-newusers' => '$1 يو کارن ګڼون جوړ کړ',
-'logentry-newusers-create' => '$1 يو کارن ګڼون جوړ کړ',
+'logentry-newusers-newusers' => 'د $1 کارن ګڼون جوړ شو',
+'logentry-newusers-create' => 'د $1 کارن ګڼون جوړ شو',
 'logentry-newusers-autocreate' => 'د $1 ګڼون په اتوماتيک ډول جوړ شو',
 'newuserlog-byemail' => 'پټنوم مو برېښليک ته درولېږه',
+'rightsnone' => '(هېڅ)',
 
 # Feedback
 'feedback-subject' => 'سکالو:',
index 4ae5911..98d541b 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
@@ -357,7 +358,7 @@ $messages = array(
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
-'underline-default' => 'Usar a configuração do browser',
+'underline-default' => 'Aspeto ou padrão do browser',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Fonte de edição:',
@@ -442,7 +443,7 @@ $messages = array(
 'newwindow' => '(abre numa janela nova)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Mais...',
-'mypage' => 'Utilizador',
+'mypage' => 'Página',
 'mytalk' => 'Discussão',
 'anontalk' => 'Discussão para este IP',
 'navigation' => 'Navegação',
@@ -475,6 +476,7 @@ $messages = array(
 'namespaces' => 'Espaços nominais',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menu de navegação',
 'errorpagetitle' => 'Erro',
 'returnto' => 'Voltar para $1.',
 'tagline' => 'Da {{SITENAME}}',
@@ -628,11 +630,11 @@ Encontra uma lista das páginas especiais válidas em [[Special:SpecialPages|{{i
 'error' => 'Erro',
 'databaseerror' => 'Erro na base de dados',
 'dberrortext' => 'Ocorreu um erro sintáctico na pesquisa à base de dados.
-Isto pode indicar um defeito neste programa.
-A última tentativa de consulta à base de dados foi:
-<blockquote><tt>$1</tt></blockquote>
-na função "<tt>$2</tt>".
-A base de dados devolveu o erro "<tt>$3: $4</tt>".',
+Isto poderá indicar um defeito no software.
+A última pesquisa executada na base de dados foi:
+<blockquote><code>$1</code></blockquote>
+na função "<code>$2</code>".
+A base de dados devolveu o erro "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Ocorreu um erro sintáctico na pesquisa à base de dados.
 A última tentativa de consulta à base de dados foi:
 "$1"
@@ -685,7 +687,7 @@ Consulta: $2',
 'viewsource-title' => 'Mostrar código-fonte de $1',
 'actionthrottled' => 'Operação limitada',
 'actionthrottledtext' => 'Como medida anti-spam, está impedido de realizar esta operação demasiadas vezes num espaço de tempo curto e já excedeu esse limite. Tente de novo dentro de alguns minutos, por favor.',
-'protectedpagetext' => 'Esta página foi protegida contra novas edições.',
+'protectedpagetext' => 'Esta página foi protegida para prevenir a sua edição.',
 'viewsourcetext' => 'Pode ver e copiar o conteúdo desta página:',
 'viewyourtext' => "Pode ver e copiar o código-fonte das '''suas edições''' desta página:",
 'protectedinterface' => 'Esta página fornece o texto da interface ao software, e está protegida para prevenir abusos.',
@@ -717,9 +719,9 @@ 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.",
-'welcomecreation' => '== Bem-vindo, $1! ==
-A sua conta foi criada.
-Não se esqueça de personalizar as suas [[Special:Preferences|preferências na {{SITENAME}}]].',
+'welcomeuser' => 'Bem-vindo, $1!',
+'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:',
 'yourpasswordagain' => 'Repita a palavra-chave:',
@@ -1004,7 +1006,7 @@ Este ainda não foi gravado!",
 'note' => "'''Nota:'''",
 'previewnote' => "'''Lembre-se que esta é apenas uma antevisão do resultado.'''
 As modificações ainda não foram gravadas!",
-'continue-editing' => 'Continuar a editar',
+'continue-editing' => 'Ir para a área de edição',
 'previewconflict' => 'Esta antevisão do resultado apresenta o texto da caixa de edição acima tal como este aparecerá se escolher gravá-lo.',
 'session_fail_preview' => "'''Não foi possível processar a edição devido à perda dos dados da sua sessão.
 Tente novamente, por favor.
@@ -1064,7 +1066,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.',
@@ -1089,6 +1090,13 @@ 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',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Aviso: Esta página contém demasiadas chamadas de funções exigentes do analisador sintáctico.
@@ -1462,9 +1470,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:',
@@ -1613,12 +1621,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',
-'rightsnone' => '(nenhum)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta página',
@@ -1800,7 +1809,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.',
@@ -2016,7 +2025,7 @@ Talvez queira editar a descrição na [$2 página original de descrição do fic
 'uploadnewversion-linktext' => 'Carregar uma nova versão deste ficheiro',
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'um repositório partilhado',
-'upload-disallowed-here' => 'Infelizmente você não pode substituir essa imagem.',
+'upload-disallowed-here' => 'Você não pode substituir este ficheiro.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -2273,10 +2282,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.
@@ -2300,9 +2305,10 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações
 'mailnologin' => 'Não existe endereço de envio',
 'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e possuir um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio electrónico a outros utilizadores.',
 'emailuser' => 'Enviar correio electrónico a este utilizador',
+'emailuser-title-target' => 'Enviar correio eletrónico a {{GENDER:$1|este utilizador|esta utilizadora}}',
 'emailpage' => 'Enviar correio electrónico ao utilizador',
-'emailpagetext' => 'Pode usar o formulário abaixo para enviar uma mensagem por correio electrónico para este utilizador.
-O endereço de correio que introduziu nas suas [[Special:Preferences|preferências]] irá aparecer no campo do remetente da mensagem "De:", para que o destinatário lhe possa responder directamente.',
+'emailpagetext' => 'Pode usar o formulário abaixo para enviar uma mensagem por correio eletrónico para {{GENDER:$1|este utilizador|esta utilizadora}}.
+O endereço de correio que introduziu nas [[Special:Preferences|suas preferências]] irá aparecer no campo do remetente da mensagem "De:", para que o destinatário lhe possa responder diretamente.',
 'usermailererror' => 'O sistema de correio devolveu o erro:',
 'defemailsubject' => 'Correio electrónico da {{SITENAME}}, do utilizador "$1"',
 'usermaildisabled' => 'Correio electrónico do utilizador foi desactivado',
@@ -2370,20 +2376,13 @@ O nome desta página passará a aparecer a '''negrito''' na lista de [[Special:R
 
 'enotif_mailer' => 'Gerador de Notificações da {{SITENAME}}',
 'enotif_reset' => 'Marcar todas as páginas como visitadas',
-'enotif_newpagetext' => 'Esta é uma página nova.',
 'enotif_impersonal_salutation' => 'Utilizador da "{{SITENAME}}"',
-'changed' => 'alterada',
-'created' => 'criada',
-'enotif_subject' => '{{SITENAME}}: A página $PAGETITLE foi $CHANGEDORCREATED por $PAGEEDITOR',
 '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,
-
-
-A página $PAGETITLE da {{SITENAME}} foi $CHANGEDORCREATED a $PAGEEDITDATE por $PAGEEDITOR; consulte $PAGETITLE_URL para ver a versão actual.
+'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},
 
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resumo da edição: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2408,6 +2407,8 @@ $UNWATCHURL
 
 Para comentários e pedidos de ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criada',
+'changed' => 'alterada',
 
 # Delete
 'deletepage' => 'Eliminar página',
@@ -2561,7 +2562,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.",
@@ -2592,7 +2594,7 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contribuições do utilizador',
+'contributions' => 'Contribuições {{GENDER:$1|do utilizador|da utilizadora}}',
 'contributions-title' => 'Contribuições {{GENDER:$1|do utilizador|da utilizadora}} $1',
 'mycontris' => 'Contribuições',
 'contribsub2' => 'Para $1 ($2)',
@@ -2635,7 +2637,7 @@ Para referência é apresentado abaixo o último registo de bloqueio:',
 'whatlinkshere-hideredirs' => '$1 redireccionamentos',
 'whatlinkshere-hidetrans' => '$1 transclusões',
 'whatlinkshere-hidelinks' => '$1 links',
-'whatlinkshere-hideimages' => '$1 links para imagens',
+'whatlinkshere-hideimages' => '$1 links para ficheiros',
 'whatlinkshere-filters' => 'Filtros',
 
 # Block/unblock
@@ -2864,6 +2866,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',
@@ -3121,6 +3124,7 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
+'pageinfo-not-current' => 'Desculpe, é impossível fornecer esta informação para revisõe antigas.',
 'pageinfo-header-basic' => 'Informação básica',
 'pageinfo-header-edits' => 'Histórico de edições',
 'pageinfo-header-restrictions' => 'Proteção da página',
@@ -3128,6 +3132,7 @@ 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',
@@ -3147,6 +3152,11 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 'pageinfo-magic-words' => '{{PLURAL:$1|Palavra mágica|Palavras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}} ($1)',
 'pageinfo-toolboxlink' => 'Informações da página',
+'pageinfo-redirectsto' => 'Redireciona para',
+'pageinfo-redirectsto-info' => 'informação',
+'pageinfo-contentpage' => 'Contada como página de conteúdo',
+'pageinfo-contentpage-yes' => 'Sim',
+'pageinfo-protect-cascading-yes' => 'Sim',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -3201,6 +3211,8 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'file-info-size-pages' => '$1 × $2 pixels, tamanho do ficheiro: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}',
 'file-nohires' => 'Sem resolução maior disponível.',
 'svg-long-desc' => 'ficheiro SVG, de $1 × $2 pixels, tamanho: $3',
+'svg-long-desc-animated' => 'ficheiro SVG animado, de $1 × $2 pixels, tamanho: $3',
+'svg-long-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.',
@@ -3210,6 +3222,8 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'file-info-png-looped' => 'ciclo infinito',
 'file-info-png-repeat' => 'reproduzido $1 {{PLURAL:$1|vez|vezes}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogramas}}',
+'file-no-thumb-animation' => "'''Nota: Devido a limitações técnicas, miniaturas deste ficheiro não serão animadas.'''",
+'file-no-thumb-animation-gif' => "'''Nota: Devido a limitações técnicas, miniaturas de imagens GIF de alta resolução tais como esta não serão animadas.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria de novos ficheiros',
@@ -3228,7 +3242,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:
@@ -3976,17 +3993,19 @@ 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',
 '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 utilizador',
-'logentry-newusers-create' => '$1 criou uma conta de utilizador',
-'logentry-newusers-create2' => '$1 criou uma conta de utilizador $3',
+'logentry-newusers-newusers' => 'A conta de utilizador $1 foi criada',
+'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',
+'rightsnone' => '(nenhum)',
 
 # Feedback
 'feedback-bugornote' => 'Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].
index 48c68c1..2f5af33 100644 (file)
@@ -41,6 +41,7 @@
  * @author ManoDbo
  * @author McDutchie
  * @author MetalBrasil
+ * @author Opraco
  * @author Pedroca cerebral
  * @author Ppena
  * @author Rafael Vargas
@@ -361,7 +362,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,8 +447,8 @@ $messages = array(
 'newwindow' => '(abre em uma nova janela)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Mais...',
-'mypage' => 'Minha página',
-'mytalk' => 'Minha discussão',
+'mypage' => 'Página',
+'mytalk' => 'Discussão',
 'anontalk' => 'Discussão para este IP',
 'navigation' => 'Navegação',
 'and' => '&#32;e',
@@ -479,6 +480,7 @@ $messages = array(
 'namespaces' => 'Espaços nominais',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menu de navegação',
 'errorpagetitle' => 'Erro',
 'returnto' => 'Retornar para $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -576,7 +578,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 +691,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,8 +727,8 @@ 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.",
-'welcomecreation' => '== Bem-vindo(a), $1! ==
-A sua conta foi criada.
+'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:',
@@ -738,7 +744,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências no
 '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',
@@ -878,6 +884,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',
 
@@ -1003,7 +1010,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.
@@ -1060,7 +1067,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.',
@@ -1085,6 +1091,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".
@@ -1374,7 +1389,7 @@ Note que os índices do sistema de busca externo poderão conter referências de
 
 # Preferences page
 'preferences' => 'Preferências',
-'mypreferences' => 'Minhas preferências',
+'mypreferences' => 'Preferências',
 'prefs-edits' => 'Número de edições:',
 'prefsnologin' => 'Não autenticado',
 'prefsnologintext' => 'É necessário estar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autenticado]</span> para definir as suas preferências.',
@@ -1450,9 +1465,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:',
@@ -1601,12 +1616,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',
-'rightsnone' => '(nenhum)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta página',
@@ -1859,6 +1875,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.',
@@ -1875,7 +1892,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".',
@@ -2008,7 +2025,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',
@@ -2088,8 +2106,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.
@@ -2241,9 +2260,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 />
+Protocolos suportados: <code>$1</code> (o padrão é http://).',
 'linksearch-line' => '$2 possui links para $1',
 'linksearch-error' => "\"Caracteres mágicos\" (''wildcards'') só podem ser usados no início do endereço.",
 
@@ -2262,10 +2281,6 @@ Protocolos suportados: <code>$1</code> (não adicionado nenhum desses em sua pes
 '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.
@@ -2289,9 +2304,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',
@@ -2329,8 +2346,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',
@@ -2358,22 +2375,25 @@ Modificações futuras em tal página e páginas de discussão a ela associadas
 
 'enotif_mailer' => '{{SITENAME}} Email de Notificação',
 'enotif_reset' => 'Marcar todas páginas como visitadas',
-'enotif_newpagetext' => 'Esta é uma página nova.',
 'enotif_impersonal_salutation' => 'Usuário do projeto "{{SITENAME}}"',
-'changed' => 'alterada',
-'created' => 'criada',
-'enotif_subject' => '{{SITENAME}}: A página $PAGETITLE foi $CHANGEDORCREATED por $PAGEEDITOR',
+'enotif_subject_deleted' => 'A página $1 da {{SITENAME}} foi eliminada por {{gender:$2|$2}}',
+'enotif_subject_created' => 'A página $1 da {{SITENAME}} foi criada por {{gender:$2|$2}}',
+'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 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.',
+'enotif_body_intro_changed' => 'A página $1 da {{SITENAME}} foi alterada em $PAGEEDITDATE por {{gender:$2|$2}}, acesse $3 para ver a versão atual.',
 '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,
-
-
-A página $PAGETITLE da {{SITENAME}} foi $CHANGEDORCREATED a $PAGEEDITDATE por $PAGEEDITOR; consulte $PAGETITLE_URL para ver a versão atual.
+'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},
 
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
-Resumo da edição: $PAGESUMMARY $PAGEMINOREDIT
+Resumo do editor: $PAGESUMMARY $PAGEMINOREDIT
 
 Contate o editor:
 e-mail: $PAGEEDITOR_EMAIL
@@ -2385,7 +2405,7 @@ Você pode também reativar as notificações para todas páginas na sua lista d
 O seu sistema de notificação amigável da {{SITENAME}}
 
 --
-Para alterar as suas preferências das notificações por correio electrónico, visite
+Para alterar as suas preferências das notificações por correio electrônico, visite
 {{canonicalurl:{{#special:Preferences}}}}
 
 Para alterar as suas preferências das páginas vigiadas, visite
@@ -2396,6 +2416,8 @@ $UNWATCHURL
 
 Para comentários e pedidos de ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criada',
+'changed' => 'alterada',
 
 # Delete
 'deletepage' => 'Eliminar página',
@@ -2547,7 +2569,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.",
@@ -2578,9 +2601,9 @@ $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' => 'Minhas contribuições',
+'mycontris' => 'Contribuições',
 'contribsub2' => 'Para $1 ($2)',
 'nocontribs' => 'Não foram encontradas mudanças com este critério.',
 'uctop' => '(atual)',
@@ -2620,7 +2643,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
@@ -2841,6 +2864,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',
@@ -2953,7 +2977,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',
@@ -3087,13 +3113,16 @@ 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',
@@ -3112,7 +3141,7 @@ 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-toolboxlink' => 'Informações da página',
 'pageinfo-redirectsto' => 'Redirecionar para',
 'pageinfo-redirectsto-info' => 'informações',
@@ -3120,6 +3149,7 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 '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',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -3141,6 +3171,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',
@@ -3173,6 +3205,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.',
@@ -3182,6 +3216,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,6 +3237,7 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'hours' => '{{PLURAL:$1|uma hora|$1 horas}}',
 'days' => '{{PLURAL:$1|um dia|$1 dias}}',
 'ago' => '$1 atrás',
+'just-now' => 'agora mesmo',
 
 # Bad image list
 'bad_image_list' => 'O formato é o seguinte:
@@ -3703,6 +3740,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
@@ -3813,6 +3851,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.
@@ -3945,17 +3984,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-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 e975098..769b137 100644 (file)
@@ -59,6 +59,7 @@
  * @author Kizito
  * @author Klenje
  * @author Klutzy
+ * @author Krenair
  * @author Krinkle
  * @author Ktkaushik
  * @author Kwj2772
@@ -75,6 +76,7 @@
  * @author Meno25
  * @author Metalhead64
  * @author MichaelFrey
+ * @author Mido
  * @author Mihai
  * @author Minh Nguyen
  * @author Mormegil
@@ -157,7 +159,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}}",
@@ -290,9 +293,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',
@@ -329,7 +333,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',
 
@@ -342,12 +347,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...}}',
-'mytalk' => 'In the personal urls page section - right upper corner.',
-'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.',
+'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.
+
+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}}',
@@ -362,8 +389,10 @@ This can also appear in the credits page if the credits feature is enabled,for e
 {{Identical|Find}}',
 'qbbrowse' => '{{Identical|Browse}}',
 'qbedit' => '{{Identical|Edit}}',
-'qbmyoptions' => '{{Identical|My pages}}',
+'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.}}",
@@ -398,6 +427,7 @@ This can also appear in the credits page if the credits feature is enabled,for e
 'namespaces' => '{{Identical|Namespace}}',
 'variants' => 'Used by the Vector skin.',
 
+'navigation-heading' => 'Heading shown above the navigation menu (sidebar) for screen-readers (or in non-standard skins).',
 'errorpagetitle' => 'Message shown in browser title bar when encountering error operation.
 
 {{Identical|Error}}',
@@ -407,16 +437,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}}',
@@ -424,23 +466,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}}',
@@ -448,6 +508,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}}',
@@ -455,6 +519,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}}',
@@ -463,18 +531,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}}',
@@ -488,6 +568,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}}]].
 
@@ -495,6 +579,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].",
@@ -514,11 +599,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}}]].
@@ -526,18 +618,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.}}',
@@ -553,8 +667,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}}
@@ -563,7 +677,9 @@ 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).',
@@ -604,13 +720,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>.
@@ -622,8 +750,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.',
@@ -631,34 +767,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
@@ -669,7 +858,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#]
@@ -680,12 +872,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.
@@ -693,14 +885,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:
@@ -709,15 +931,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.
@@ -726,8 +954,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
@@ -735,13 +974,21 @@ 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',
-'welcomecreation' => 'The welcome message users see after registering a user account. $1 is the username of the new user.',
+'welcomeuser' => 'Text for a welcome heading that users see after registering a user account. $1 is the username of the new user. See [[bugzilla:42215]]',
+'welcomecreation-msg' => 'A welcome message users see after registering a user account, following a welcomeuser heading. $1 is the username of the new user. Replaces welcomecreation in 1.21wmf5,see [[bugzilla:42215]]',
 'yourname' => "In user preferences
 
 <nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.
@@ -754,12 +1001,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.
@@ -767,8 +1020,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}}',
@@ -779,13 +1039,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.",
@@ -795,13 +1059,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
 
@@ -809,6 +1076,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',
@@ -822,7 +1090,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]].
@@ -836,6 +1111,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.
 
@@ -846,14 +1131,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]].
 
@@ -862,6 +1151,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}}',
@@ -876,6 +1168,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.',
@@ -884,6 +1177,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:
@@ -901,8 +1195,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]].',
@@ -914,6 +1221,7 @@ Parameters:
 'changeemail-none' => "Probably appears in 'Current E-mail address' field when no address held, in [[Special:ChangeEmail]].
 
 {{Identical|None}}",
+'changeemail-password' => 'Label for password field in [[Special:ChangeEmail]].',
 'changeemail-submit' => 'Submit button on [[Special:ChangeEmail]]',
 'changeemail-cancel' => 'Cancel button on [[Special:ChangeEmail]]
 
@@ -958,20 +1266,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.',
@@ -979,6 +1326,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:
@@ -1001,14 +1351,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.
 
@@ -1038,22 +1405,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.',
@@ -1065,15 +1474,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}})
@@ -1108,15 +1571,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 [[: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|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:
+* {{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',
@@ -1156,9 +1640,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)
@@ -1175,6 +1673,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
@@ -1193,28 +1695,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}}',
@@ -1222,6 +1753,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
@@ -1238,9 +1778,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.',
@@ -1252,25 +1809,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.'",
@@ -1284,9 +1867,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}}
@@ -1311,15 +1900,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}}
@@ -1328,6 +1944,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
@@ -1337,9 +2027,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,
@@ -1359,6 +2056,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
@@ -1368,7 +2066,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}}
@@ -1393,6 +2096,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',
@@ -1408,6 +2123,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}}.
@@ -1418,9 +2140,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].
@@ -1428,17 +2153,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.
@@ -1446,22 +2213,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:".}}',
@@ -1481,7 +2254,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.',
@@ -1496,18 +2272,26 @@ This is a search result (and I guess search engine) dependent messages. I do not
 'preferences' => 'Title of the Special:Preferences page.
 
 {{Identical|Preferences}}',
-'mypreferences' => 'Action link label that leads to Special:Preferences; appears in the top menu (e.g. "Username My talk My preferences My watchlist My contributions Log out").
+'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",
@@ -1516,7 +2300,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".',
@@ -1526,15 +2311,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.
@@ -1550,13 +2354,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".',
@@ -1564,15 +2391,20 @@ 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.",
 'youremail' => 'Label of the e-mail text box of the "E-mail options" section of "Special:Preferences".
 
 {{Identical|E-mail}}',
-'username' => '{{Identical|Username}}',
-'uid' => '{{Identical|User ID}}',
-'prefs-memberingroups' => 'This message is shown on [[Special:Preferences]], first tab. See also {{msg-mw|prefs-memberingroups-type}}.',
+'username' => 'Username field in [[Special:Preferences]]. $1 is the current user name for GENDER distinction (depends on sex setting).
+
+{{Identical|Username}}',
+'uid' => 'User ID field in [[Special:Preferences]]. $1 is the current user name for GENDER distinction (depends on sex setting).
+
+{{Identical|User ID}}',
+'prefs-memberingroups' => 'This message is shown on [[Special:Preferences]], first tab. See also {{msg-mw|prefs-memberingroups-type}}. $2 is the user name for GENDER.',
 'prefs-memberingroups-type' => '{{optional}}
 Parameters:
 * $1 is list of group names
@@ -1597,20 +2429,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}}',
@@ -1638,6 +2490,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]])',
@@ -1648,15 +2504,16 @@ 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.
 
 Parameters:
 * $1 - the number of items in the list following the message, for PLURAL.
 * $2 - the user name, for GENDER.',
-'userrights-groupsmember-auto' => 'Used when editing user groups in [[Special:Userrights]]. The messsage is followed by a list of group names.
+'userrights-groupsmember-auto' => 'Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.
 "Implicit" is for groups that the user was automatically added to (such as "autoconfirmed"); cf. {{msg-mw|userrights-groupsmember}}
 
 Parameters
@@ -1676,11 +2533,11 @@ Parameters:
 See http://meta.wikimedia.org/w/index.php?title=Special%3ALog&type=rights for a usage of local databases: username@barwiki',
 'userrights-nologin' => "Error displayed on [[Special:UserRights]] when you aren't logged in. If you are logged in, but don't have the correct permission, you see {{msg|userrights-notallowed|pl=yes}}.",
 'userrights-notallowed' => "Error displayed on [[Special:UserRights]] when you don't have the permission.",
-'userrights-changeable-col' => 'Used when editing user groups in [[Special:Userrights]]. The messsage is the head of a column of group assignements.
+'userrights-changeable-col' => 'Used when editing user groups in [[Special:Userrights]]. The message is the head of a column of group assignements.
 
 Parameters:
 * $1 - optional, for PLURAL use, the number of items in the column following the message. Avoid PLURAL, if your language can do without.',
-'userrights-unchangeable-col' => 'Used when editing user groups in [[Special:Userrights]]. The messsage is the head of a column of group assignements.
+'userrights-unchangeable-col' => 'Used when editing user groups in [[Special:Userrights]]. The message is the head of a column of group assignements.
 
 Parameters:
 * $1 - optional, for PLURAL use, the number of items in the column following the message. Avoid PLURAL, if your language allows that.',
@@ -1727,15 +2584,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}}',
@@ -1743,11 +2601,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).',
@@ -1756,66 +2627,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}}',
@@ -1842,41 +2714,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
-*$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
-*$3 - username
-
-{{Logentry}}',
-'logentry-rights-autopromote' => '*$1 - username
-*$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}}',
@@ -1923,9 +2770,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}}',
@@ -1966,31 +2818,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]].',
@@ -1998,11 +2872,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]].',
@@ -2010,18 +2917,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.'')
@@ -2030,11 +2975,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.",
@@ -2044,45 +3153,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:
@@ -2098,6 +3323,8 @@ Extensions making use of it:
 * $1 is a storage path.',
 'backend-fail-delete' => 'Parameters:
 * $1 is a file path.',
+'backend-fail-describe' => 'Parameters:
+* $1 is a file path.',
 'backend-fail-alreadyexists' => 'Parameters:
 * $1 is a filename.',
 'backend-fail-store' => 'Parameters:
@@ -2109,10 +3336,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.',
@@ -2152,17 +3388,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]].',
@@ -2182,6 +3451,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\' ) {
@@ -2191,11 +3461,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.',
@@ -2261,6 +3594,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)',
@@ -2272,13 +3608,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}}",
@@ -2322,7 +3678,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
@@ -2332,10 +3695,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}}',
@@ -2350,8 +3716,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}}',
 
@@ -2368,10 +3743,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]].
@@ -2417,7 +3799,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]]',
@@ -2500,27 +3882,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
@@ -2566,11 +3982,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
@@ -2622,18 +4039,33 @@ You can apparently use 'URL' instead of 'hostname'.",
 
 # Special:ActiveUsers
 'activeusers' => 'Title of [[Special:ActiveUsers]]',
+'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 edit count in brackets ([]).
 * $1 is the number of recent edits
 * $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]].',
@@ -2661,20 +4093,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',
@@ -2685,6 +4130,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.',
@@ -2728,6 +4176,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]].
 
@@ -2738,37 +4190,135 @@ 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]].
 
-'enotif_reset' => "This should be translated as \"Mark all pages '''as''' visited\".",
-'enotif_newpagetext' => 'Part of text of a notification e-mail sent when a watched page has been created. See [[File:Screenshot_MediaWiki_e-mail_notifier.PNG|150px|right]]',
-'changed' => 'Possible value for $CHANGEDORCREATED in {{msg|enotif_subject}} and {{msg|enotif_body}}.',
-'created' => 'Possible value for $CHANGEDORCREATED in {{msg|enotif_subject}} and {{msg|enotif_body}}.',
-'enotif_subject' => '$CHANGEDORCREATED can be one of {{msg|changed}} and {{msg|created}}. Can also be {{msg-mw|blog-added}} or {{msg-mw|blog-edited}} from Wikia.',
+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 - 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:
 * $1 is a link to a diff, shown as a plain link.',
@@ -2776,7 +4326,36 @@ Similar to {{msg-mw|rcnote}} which is used on [[Special:RecentChanges]].
 * $1 is the anonymous user name (i.e. an IP address).',
 'enotif_body' => 'Text of a notification e-mail sent when a watched page has been edited or deleted.[[File:Screenshot_MediaWiki_e-mail_notifier.PNG|150px|right]]
 
-* <tt>$CHANGEDORCREATED</tt> can be one of {{msg-mw|changed}}, {{msg-mw|created}}, or {{msg-mw|deleted}}. Can also be {{msg-mw|blog-added}} or {{msg-mw|blog-edited}} from Wikia.',
+*$WATCHINGUSERNAME is the username of the user receiving the notification.
+*$PAGEINTRO is the first line of the message, saying what happened. It currently can be either of:
+**{{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 changed}} (for all the other cases).
+*$NEWPAGE consists of either
+**if the page is new (in older releases), {{msg-mw|enotif newpagetext}}
+**if the page has a previous revision,
+***{{msg-mw|enotif lastdiff}}
+***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}}
+*{{msg-mw|enotif subject created}}
+*{{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
@@ -2792,7 +4371,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}}',
@@ -2801,8 +4387,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}}',
@@ -2812,25 +4400,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
@@ -2851,12 +4460,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:
@@ -2866,12 +4482,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.
@@ -2880,6 +4511,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 />
@@ -2911,7 +4547,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.",
@@ -2931,33 +4571,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
@@ -2966,6 +4631,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}}',
@@ -2973,24 +4639,77 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 
 {{Identical|View}}
 {{Identical|Restore}}',
-'undeleteviewlink' => 'ਦੇਖੋ',
+'undeleteviewlink' => 'First part of {{msg-mw|undeletelink}}',
 'undeletereset' => 'Shown on [[Special:Undelete]] as button caption.
 {{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}}',
-'undelete-error' => 'Page title when a page could not be undeleted',
-'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.
-* <code>$3</code> is the time of the displayed revision.
+'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.
+* <code>$3</code> is the time of the displayed revision.
 
 {{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}})
@@ -3000,7 +4719,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".
@@ -3015,51 +4735,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}}',
@@ -3097,6 +4904,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]].
@@ -3106,15 +4915,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.}}
@@ -3122,22 +4959,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]].',
@@ -3147,7 +5052,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]]
@@ -3157,6 +5067,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
@@ -3166,19 +5086,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)\").
@@ -3200,19 +5178,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.',
@@ -3220,17 +5274,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
@@ -3240,34 +5368,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.',
@@ -3275,9 +5543,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.',
@@ -3285,193 +5575,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-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.
 
-# 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]]',
-'export-submit' => 'Button name in [[Special:Export]].
+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.
 
-{{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]]',
+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].
 
-# 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]].
+Possible alternatives to the word \'content\' are \'subject matter\' or \'wiki subject\' or \'wiki purpose\'.
 
-{{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-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).
 
-{{Identical|Language}}',
-'allmessages-filter-submit' => 'Used on [[Special:Allmessages]].
+No GENDER-Support for performance reason.
 
-{{Identical|Go}}',
+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.
 
-# 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-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.
 
-# 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-special}}
+* {{msg-mw|Tooltip-ca-nstab-special}}',
+'tooltip-ca-nstab-project' => 'Used as tooltip for tab of Project 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-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).
+
 See also:
-* {{msg-mw|import-error-edit}}',
-'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-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.
 
-# 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-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.
 
-# 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-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.
 
-# 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|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.
 
-{{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|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.
 
-{{Identical|Log out}}',
-'tooltip-ca-talk' => "Tooltip shown when hovering over the \"[[MediaWiki:Talk/{{SUBPAGENAME}}|{{int:talk}}]]\" tab.
+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.
 
-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|Savearticle}}
+* {{msg-mw|Accesskey-save}}
+* {{msg-mw|Tooltip-save}}',
+'tooltip-preview' => 'Tooltip shown when hovering over {{msg-mw|Showpreview}} button.
 
-Possible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.
+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.
 
-{{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|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.
 
-{{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|Showdiff}}
+* {{msg-mw|Accesskey-diff}}
+* {{msg-mw|Tooltip-diff}}',
+'tooltip-compareselectedversions' => 'Tooltip of {{msg|compareselectedversions}} (which is used as button in history pages).
 
-Possible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.
+See also:
+* {{msg-mw|Compareselectedversions}}
+* {{msg-mw|Accesskey-compareselectedversions}}
+* {{msg-mw|Tooltip-compareselectedversions}}',
+'tooltip-watch' => 'Used as tooltip for checkbox in Editor page.
 
-{{Identical|Content page}}",
-'tooltip-ca-nstab-user' => 'Tooltip shown when hovering over {{msg|nstab-user}} (User namespace tab).
+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]]).
+
+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]]).
+
+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}}
@@ -3513,6 +6415,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.
@@ -3562,6 +6467,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:
@@ -3585,15 +6511,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]]).",
@@ -3614,10 +6541,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
@@ -3627,6 +6561,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}}
@@ -3641,12 +6585,75 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 'skinname-vector' => '{{optional}}',
 
 # Patrolling
-'markedaspatrolledtext' => '{{Identical|Markedaspatrolled}}',
+'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}}.',
@@ -3654,7 +6661,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.
 
@@ -3684,11 +6698,16 @@ Parameters:
 Start with a lowercase letter, unless the first word is “SVG”.',
 'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}.
 * $1 is the width in pixels
-* $2 is the height in pixels, and 
+* $2 is the height in pixels, and
 * $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:
@@ -3718,7 +6737,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'')
@@ -3763,11 +6787,20 @@ 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
 'bad_image_list' => 'This message only appears to guide administrators to add links with the right format. This will not appear anywhere else in MediaWiki.',
@@ -3890,15 +6923,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.',
@@ -3957,10 +6998,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].',
@@ -4003,7 +7050,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.',
@@ -4032,12 +7080,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].
 
@@ -4057,52 +7111,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}}.',
@@ -4138,11 +7272,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.
@@ -4177,10 +7317,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/',
@@ -4207,6 +7353,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}}',
@@ -4222,142 +7372,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',
@@ -4397,10 +7770,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]].',
@@ -4409,7 +7790,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.
@@ -4429,12 +7811,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]].
@@ -4472,18 +7862,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}}',
@@ -4499,17 +7919,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]]).',
 
@@ -4561,15 +8002,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]].
 
@@ -4579,16 +8048,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
@@ -4711,7 +8196,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]]
@@ -4723,6 +8208,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}}',
@@ -4730,6 +8217,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]]',
@@ -4746,14 +8235,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]].',
@@ -4787,10 +8280,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]].',
@@ -4804,14 +8303,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].
@@ -4845,16 +8352,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:
@@ -4944,12 +8517,40 @@ 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.',
+'logentry-newusers-autocreate' => '{{Logentry}}
+
 $4 is the gender of the target user.',
+'newuserlog-byemail' => 'Used as reason in [[Special:Log/newusers]].',
+'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.',
@@ -5025,7 +8626,20 @@ $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.',
 
+# Durations
+'duration-seconds' => '{{Related|Duration}}',
+'duration-minutes' => '{{Related|Duration}}',
+'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 8f151eb..3c2be5f 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,9 +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.",
-'welcomecreation' => '== Allinmi hamusqayki $1! ==
-Rakiqunaykiqa kicharisqañam.
-Ama qunqaychu [[Special:Preferences|{{SITENAME}} allinkachinaykikunata]] kikinchayta.',
+'welcomeuser' => 'Allinmi hamusqayki, $1!',
 'yourname' => 'Ruraq sutiyki:',
 'yourpassword' => 'Yaykuna rimayki',
 'yourpasswordagain' => 'Yaykuna rimaykita kutipayay',
@@ -981,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",
@@ -1005,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',
@@ -1366,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',
@@ -1515,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",
@@ -1882,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',
@@ -1972,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',
@@ -1987,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}}",
@@ -2015,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)",
@@ -2068,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",
@@ -2113,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.',
 
@@ -2132,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.
@@ -2159,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',
@@ -2192,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',
@@ -2227,19 +2228,23 @@ Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamayta
 
 'enotif_mailer' => '{{SITENAME}}pa chaski musyachina sirwiqnin',
 'enotif_reset' => "Tukuy p'anqakunata watukusqakama sananchay",
-'enotif_newpagetext' => "Musuq p'anqam.",
 'enotif_impersonal_salutation' => '{{SITENAME}}pa ruraqnin',
-'changed' => 'hukchasqa',
-'created' => 'kamarirqan',
-'enotif_subject' => '{{SITENAME}}pi $PAGETITLE sutiyuq p\'anqaqa $PAGEEDITOR-pa $CHANGEDORCREATED-nñam',
+'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
 
@@ -2247,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
 
@@ -2263,6 +2268,8 @@ $UNWATCHURL
 
 Yanapasunaykipaq:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kamarirqan',
+'changed' => 'hukchasqa',
 
 # Delete
 'deletepage' => "Kay p'anqata qulluy",
@@ -2299,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.
@@ -2327,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',
@@ -2341,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)',
@@ -2435,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)',
@@ -2477,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
@@ -2623,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.
@@ -2695,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",
@@ -2773,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.",
@@ -2804,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",
@@ -2938,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',
@@ -2967,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",
@@ -2999,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.',
@@ -3026,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:
@@ -3756,11 +3801,12 @@ 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 d992057..d9b8e65 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' => 'Mia pagina da 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,9 +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.",
-'welcomecreation' => '==Bainvegni, $1! ==
-Tes conto è vegni creà.
-Betg emblida da midar tias [[Special:Preferences|preferenzas da {{SITENAME}}]].',
+'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',
@@ -470,7 +471,7 @@ Betg emblida da midar tias [[Special:Preferences|preferenzas da {{SITENAME}}]].'
 'userlogin' => "T'annunziar / registrar",
 'userloginnocreate' => "T'annunziar",
 'logout' => 'Sortir',
-'userlogout' => 'Sortir',
+'userlogout' => 'sortir',
 'notloggedin' => "Betg s'annunzià",
 'nologin' => "Anc nagin conto? '''$1'''.",
 'nologinlink' => "Crear in conto d'utilisader",
@@ -611,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',
 
@@ -795,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.",
@@ -819,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. 
@@ -988,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',
@@ -1022,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',
@@ -1084,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',
@@ -1101,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' => 'Mias 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.',
@@ -1139,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:',
@@ -1169,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. 
@@ -1289,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',
@@ -1309,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',
@@ -1321,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',
@@ -1354,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",
@@ -1363,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}}',
@@ -1394,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',
@@ -1447,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.',
@@ -1461,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.',
@@ -1472,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. 
@@ -1503,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:',
@@ -1516,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',
@@ -1536,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.',
@@ -1545,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.',
@@ -1554,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",
@@ -1562,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>
@@ -1623,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',
@@ -1661,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',
@@ -1712,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.
@@ -1719,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',
@@ -1736,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}}',
@@ -1756,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)',
@@ -1810,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",
@@ -1827,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à)',
@@ -1841,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.
@@ -1876,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à',
@@ -1907,16 +2061,16 @@ L'adressa dad e-mail che ti has endatà en [[Special:Preferences|tias preferenza
 'usermessage-editor' => 'Messenger dal sistem',
 
 # Watchlist
-'watchlist' => "Mia glista d'observaziun",
-'mywatchlist' => "Mia 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',
@@ -1944,19 +2098,23 @@ 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_newpagetext' => 'Quaii è ina nova pagina.',
 'enotif_impersonal_salutation' => 'Utilisader da {{SITENAME}}',
-'changed' => 'midada',
-'created' => 'creada',
-'enotif_subject' => 'La pagina $PAGETITLE da {{SITENAME}} è vegnida $CHANGEDORCREATED da $PAGEEDITOR',
+'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
 
@@ -1964,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}}
@@ -1982,6 +2139,8 @@ $UNWATCHURL
 
 Resuns ed agid chattas qua:
 {{fullurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'midada',
 
 # Delete
 'deletepage' => 'Stizzar la pagina',
@@ -2001,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:',
@@ -2011,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.",
@@ -2023,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:',
@@ -2051,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.",
@@ -2096,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',
@@ -2106,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' => 'Mias contribuziuns',
+'mycontris' => 'Contribuziuns',
 'contribsub2' => 'Per $1 ($2)',
 'nocontribs' => 'Chattà naginas modificaziuns che correspundan a quests criteris.',
 'uctop' => '(actual)',
@@ -2155,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",
@@ -2180,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",
@@ -2190,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',
@@ -2204,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',
@@ -2211,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',
@@ -2233,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.
@@ -2241,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',
@@ -2252,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.
@@ -2288,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 />
@@ -2296,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"',
@@ -2311,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
@@ -2362,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',
@@ -2441,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]].
@@ -2477,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',
@@ -2494,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",
@@ -2596,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',
@@ -2624,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à',
@@ -2635,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',
@@ -2668,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.',
@@ -2698,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:
@@ -2802,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)',
@@ -2945,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',
@@ -2954,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à',
@@ -3047,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)',
@@ -3165,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
@@ -3274,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. 
@@ -3416,11 +3722,15 @@ 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 e85a226..78120ca 100644 (file)
@@ -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,7 +434,8 @@ pe titlul secțiunii (JavaScript)',
 'newwindow' => '(se deschide într-o fereastră nouă)',
 'cancel' => 'Revocare',
 'moredotdotdot' => 'Mai mult…',
-'mypage' => 'Pagina mea',
+'morenotlisted' => 'Mai multe nu sunt enumerate...',
+'mypage' => 'Pagină',
 'mytalk' => 'Discuții',
 'anontalk' => 'Discuția pentru această adresă IP',
 'navigation' => 'Navigare',
@@ -467,6 +468,7 @@ pe titlul secțiunii (JavaScript)',
 'namespaces' => 'Spații de nume',
 'variants' => 'Variante',
 
+'navigation-heading' => 'Meniu de navigare',
 'errorpagetitle' => 'Eroare',
 'returnto' => 'Înapoi la $1.',
 'tagline' => 'De la {{SITENAME}}',
@@ -677,7 +679,7 @@ Interogarea: $2',
 'actionthrottled' => 'Acțiune limitată',
 'actionthrottledtext' => 'Ca o măsură anti-spam, aveți permisiuni limitate în a efectua această acțiune de prea multe ori într-o perioadă scurtă de timp, iar dv. tocmai ați depășit această limită.
 Vă rugăm să încercați din nou în câteva minute.',
-'protectedpagetext' => 'Această pagină este protejată împotriva modificărilor.',
+'protectedpagetext' => 'Această pagină este protejată împotriva modificărilor sau a altor acțiuni.',
 'viewsourcetext' => 'Se poate vizualiza și copia conținutul acestei pagini:',
 'viewyourtext' => "Se poate vizualiza și copia conținutul '''modificărilor dumneavoastră''' efectuate asupra acestei pagini:",
 'protectedinterface' => 'Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.
@@ -712,9 +714,9 @@ Administratorul care a efectuat blocarea a furnizat explicația: „$3”.',
 
 Sesiunea dumneavoastră la {{SITENAME}} a fost închisă. Puteți continua să folosiți {{SITENAME}} ca utilizator anonim, sau puteți să vă <span class='plainlinks'>[$1 reautentificați]</span> ca același sau ca alt utilizator.
 Țineți minte că anumite pagini pot fi în continuare afișate ca și când ați fi autentificat până când curățați memoria cache a navigatorului.",
-'welcomecreation' => '==Bun venit, $1!==
-
-Contul dumneavoatră a fost creat. Nu uitați să vă personalizați [[Special:Preferences|preferințele]] în {{SITENAME}}.',
+'welcomeuser' => 'Bun venit, $1!',
+'welcomecreation-msg' => 'Contul dumneavoastră a fost creat.
+Nu uitați să vă modificați [[Special:Preferences|preferințele]] pentru {{SITENAME}}.',
 'yourname' => 'Nume de utilizator:',
 'yourpassword' => 'Parolă:',
 'yourpasswordagain' => 'Repetați parola:',
@@ -806,6 +808,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',
@@ -867,6 +870,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',
 
@@ -1050,7 +1054,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.',
@@ -1064,7 +1067,7 @@ Puteți edita o pagină deja existentă sau puteți să vă [[Special:UserLogin|
 Asigurați-vă că este oportună recrearea acestei pagini.
 Jurnalul ștergerilor și al mutărilor pentru această pagină este disponibil:",
 'moveddeleted-notice' => 'Această pagină a fost ștearsă.
-Jurnalul ștergerilor și al mutărilor este disponibil mai jos.',
+Jurnalul ștergerilor și al redenumirilor este disponibil mai jos.',
 'log-fulllog' => 'Vezi tot jurnalul',
 'edit-hook-aborted' => 'Modificarea a fost abandonată din cauza unui hook.
 Nicio explicație furnizată.',
@@ -1183,7 +1186,7 @@ Ca administrator puteți vedea în continuare această diferență dinte versiun
 Ca administrator puteți vedea în continuare această diferență dinte versiuni; detalii puteți găsi în [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jurnalul suprimărilor].",
 'rev-delundel' => 'șterge/recuperează',
 'rev-showdeleted' => 'arată',
-'revisiondelete' => 'Șterge/recuperează versiuni',
+'revisiondelete' => 'Ștergere/recuperare versiuni',
 'revdelete-nooldid-title' => 'Versiune invalidă',
 'revdelete-nooldid-text' => 'Fie nu ați specificat versiunea pentru a efectua această
 funcție, fie versiunea specificată nu există, ori sunteți pe cale să ascundeți versiunea curentă.',
@@ -1447,9 +1450,9 @@ Acțiunea nu este reversibilă.',
 'prefs-emailconfirm-label' => 'Confirmare e-mail:',
 'prefs-textboxsize' => 'Mărime căsuță de modificare',
 'youremail' => 'Adresa de e-mail:',
-'username' => 'Nume de utilizator:',
-'uid' => 'ID utilizator:',
-'prefs-memberingroups' => 'Membru în {{PLURAL:$1|grupul|grupurile}}:',
+'username' => '{{GENDER:$1|Nume de utilizator}}:',
+'uid' => 'ID {{GENDER:$1|utilizator|utilizatoare}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Membru|Membră}} în {{PLURAL:$1|grupul|grupurile}}:',
 'prefs-registration' => 'Data înregistrării:',
 'yourrealname' => 'Nume real:',
 'yourlanguage' => 'Interfață în limba:',
@@ -1520,7 +1523,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'group-bot' => 'Roboți',
 'group-sysop' => 'Administratori',
 'group-bureaucrat' => 'Birocrați',
-'group-suppress' => 'Oversights',
+'group-suppress' => 'Supervizori',
 'group-all' => '(toți)',
 
 'group-user-member' => '{{GENDER:$1|utilizator|utilizatoare|utilizator}}',
@@ -1528,14 +1531,14 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'group-bot-member' => '{{GENDER:$1|robot}}',
 'group-sysop-member' => '{{GENDER:$1|administrator}}',
 'group-bureaucrat-member' => '{{GENDER:$1|birocrat}}',
-'group-suppress-member' => '{{GENDER:$1|supraveghetor}}',
+'group-suppress-member' => '{{GENDER:$1|supervizor}}',
 
 'grouppage-user' => '{{ns:project}}:Utilizatori',
 'grouppage-autoconfirmed' => '{{ns:project}}:Utilizator autoconfirmați',
 'grouppage-bot' => '{{ns:project}}:Boți',
 'grouppage-sysop' => '{{ns:project}}:Administratori',
 'grouppage-bureaucrat' => '{{ns:project}}:Birocrați',
-'grouppage-suppress' => '{{ns:project}}:Oversight',
+'grouppage-suppress' => '{{ns:project}}:Supervizori',
 
 # Rights
 'right-read' => 'Citește pagini',
@@ -1599,15 +1602,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ă',
@@ -1836,6 +1837,7 @@ Dacă problema persistă, contactați un [[Special:ListUsers/sysop|administrator
 'backend-fail-notsame' => 'Un fișier diferit există deja pentru $1.',
 'backend-fail-invalidpath' => '$1 nu este o cale validă de stocare.',
 'backend-fail-delete' => 'Imposibil de șters fișierul $1.',
+'backend-fail-describe' => 'Imposibil de modificat metadatele pentru fișierul „$1”.',
 'backend-fail-alreadyexists' => 'Fișierul $1 există deja.',
 'backend-fail-store' => 'Imposibil de stocat fișierul $1 în $2.',
 'backend-fail-copy' => 'Imposibil de copiat fișierul $1 în $2.',
@@ -2236,7 +2238,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.',
 
@@ -2255,10 +2257,6 @@ Protocoale suportate: <code>$1</code> (se trece implicit la http:// dacă nu est
 '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.
@@ -2325,7 +2323,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',
@@ -2353,19 +2351,22 @@ Modificările viitoare efectuate asupra acestei pagini dar și asupra paginii de
 
 'enotif_mailer' => 'Sistemul de notificare {{SITENAME}}',
 'enotif_reset' => 'Marchează toate paginile vizitate',
-'enotif_newpagetext' => 'Aceasta este o pagină nouă.',
 'enotif_impersonal_salutation' => 'Utilizator {{SITENAME}}',
-'changed' => 'modificată',
-'created' => 'creată',
-'enotif_subject' => 'Pagina $PAGETITLE de la {{SITENAME}} a fost $CHANGEDORCREATED de $PAGEEDITOR',
+'enotif_subject_deleted' => 'Pagina $1 de la {{SITENAME}} a fost ștearsă de către {{gender:$2|$2}}',
+'enotif_subject_created' => 'Pagina $1 de la {{SITENAME}} a fost creată de către {{gender:$2|$2}}',
+'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.',
+'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ă.',
+'enotif_body_intro_changed' => 'Pagina $1 de la {{SITENAME}} a fost modificată la $PAGEEDITDATE de către {{gender:$2|$2}}; vedeți $3 pentru versiunea actuală.',
 'enotif_lastvisited' => 'Vedeți $1 pentru toate modificările de la ultima dvs. vizită.',
 'enotif_lastdiff' => 'Apasă $1 pentru a vedea această schimbare.',
 'enotif_anon_editor' => 'utilizator anonim $1',
 'enotif_body' => 'Domnule/Doamnă $WATCHINGUSERNAME,
-
-Pagina $PAGETITLE de la {{SITENAME}} a fost $CHANGEDORCREATED în data de $PAGEEDITDATE de către $PAGEEDITOR. Vedeți la $PAGETITLE_URL versiunea curentă.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Descrierea lăsată de utilizator: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2373,8 +2374,7 @@ Puteți contacta utilizatorul:
 e-mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Nu veți mai primi notificări în cazul unor viitoare modificări până când nu veți vizitați pagina. 
-Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
+Nu veți mai primi notificări în cazul unor viitoare modificări până când nu veți vizitați pagina. Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
 
              Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}}
 
@@ -2390,6 +2390,8 @@ $UNWATCHURL
 
 Asistență și suport:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creată',
+'changed' => 'modificată',
 
 # Delete
 'deletepage' => 'Șterge pagina',
@@ -2458,6 +2460,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ă:',
@@ -2474,9 +2478,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',
@@ -2572,7 +2576,7 @@ $1',
 'blanknamespace' => 'Articole',
 
 # Contributions
-'contributions' => 'Contribuții utilizator',
+'contributions' => 'Contribuții {{GENDER:$1|utilizator}}',
 'contributions-title' => 'Contribuțiile utilizatorului $1',
 'mycontris' => 'Contribuții',
 'contribsub2' => 'Pentru $1 ($2)',
@@ -2781,8 +2785,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!'''
@@ -2965,6 +2968,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.',
@@ -3125,6 +3129,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',
@@ -3133,6 +3138,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',
@@ -3155,6 +3164,8 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'markedaspatrollederror' => 'Nu se poate marca ca verificat',
 'markedaspatrollederrortext' => 'Trebuie să specificați o versiune care să fie marcată ca verificată.',
 'markedaspatrollederror-noautopatrol' => 'Nu puteți marca propriile modificări ca verificate.',
+'markedaspatrollednotify' => 'Această modificare la $1 a fost marcată ca patrulată.',
+'markedaspatrollederrornotify' => 'Marcarea ca patrulată a eșuat.',
 
 # Patrol log
 'patrol-log-page' => 'Jurnal verificări',
@@ -3189,6 +3200,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.',
@@ -3218,7 +3230,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Formatul este următorul:
@@ -3772,15 +3787,15 @@ Vă rugăm să confirmați faptul că într-adevăr doriți să recreați acest
 # Watchlist editor
 'watchlistedit-numitems' => 'Lista ta de pagini urmărite conține {{PLURAL:$1|1 titlu|$1 titluri}}, excluzând paginile de discuții.',
 'watchlistedit-noitems' => 'Lista de pagini urmărite este goală.',
-'watchlistedit-normal-title' => 'Modificarea listei paginilor urmărite',
+'watchlistedit-normal-title' => 'Modificare listă pagini urmărite',
 'watchlistedit-normal-legend' => 'Ștergere titluri din lista de urmărire',
 'watchlistedit-normal-explain' => 'Lista de mai jos cuprinde paginile pe care le urmăriți.
 Pentru a elimina un titlu, bifați-l și apăsați „{{int:Watchlistedit-normal-submit}}”.
 Puteți modifica și direct [[Special:EditWatchlist/raw|lista brută]].',
 'watchlistedit-normal-submit' => 'Șterge titluri',
 'watchlistedit-normal-done' => '{{PLURAL:$1|1 titlu a fost șters|$1 titluri au fost șterse}} din lista de urmărire:',
-'watchlistedit-raw-title' => 'Modificarea listei brute a paginilor urmărite',
-'watchlistedit-raw-legend' => 'Modifică lista brută de pagini urmărite',
+'watchlistedit-raw-title' => 'Modificarea listă brută de pagini urmărite',
+'watchlistedit-raw-legend' => 'Modificare listă brută de pagini urmărite',
 'watchlistedit-raw-explain' => 'Lista de mai jos cuprinde paginile pe care le urmăriți. O puteți modifica adăugînd sau ștergînd titluri (cîte un titlu pe rînd).
 După ce terminați apăsați „{{int:Watchlistedit-raw-submit}}”.
 Puteți folosi în schimb [[Special:EditWatchlist|editorul standard]].',
@@ -3962,11 +3977,15 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'logentry-move-move_redir-noredirect' => '$1 a redenumit pagina $3 în $4 înlocuind redirecționarea și fără a lăsa o redirecționare în loc',
 'logentry-patrol-patrol' => '$1 a marcat versiunea $4 a paginii $3 ca patrulată',
 'logentry-patrol-patrol-auto' => '$1 a marcat automat versiunea $4 a paginii $3 ca patrulată',
-'logentry-newusers-newusers' => '$1 a creat un cont de utilizator',
-'logentry-newusers-create' => '$1 a creat un cont de utilizator',
-'logentry-newusers-create2' => '$1 a creat un cont de utilizator $3',
+'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-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].
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 c0628ab..7d35436 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,8 +163,9 @@ $messages = array(
 'newwindow' => "(iapre jndr'à 'na fenestra nova)",
 'cancel' => 'Scangìlle',
 'moredotdotdot' => 'De cchiù...',
-'mypage' => "'A pàgene meje",
-'mytalk' => 'Ngazzaminde mie',
+'morenotlisted' => "Otre non jndr'à l'elenghe...",
+'mypage' => "'A pàgena meje",
+'mytalk' => "'Ngazzaminde mie",
 'anontalk' => "'Ngazzaminde pe quiste IP",
 'navigation' => 'Naveghesce',
 'and' => '&#32;e',
@@ -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,8 +450,8 @@ 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.",
-'welcomecreation' => "== Bovegne, $1! ==
-'U cunde tue ha state ccrejete.
+'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:',
@@ -554,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",
@@ -613,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',
 
@@ -743,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.
@@ -804,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.',
@@ -828,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',
@@ -1128,7 +1136,7 @@ Però fa attenzione purcè l'indice lore sus a {{SITENAME}} ponne condenè pàgg
 
 # Preferences page
 'preferences' => 'Me piece accussì',
-'mypreferences' => 'Me piece accussì',
+'mypreferences' => 'Me piace accussì',
 'prefs-edits' => 'Numere de cangiaminde:',
 'prefsnologin' => 'Non ge sinde colleghete',
 'prefsnologintext' => 'Tu a essere <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} colleghete]</span> pe \'mbostà le preferenze de l\'utinde.',
@@ -1204,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',
@@ -1359,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',
@@ -1614,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.",
@@ -2007,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.",
 
@@ -2027,10 +2037,6 @@ Protocolle supportate: <code>$1</code> (no sce aggiungenne nisciune de chiste jn
 '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.
@@ -2059,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",
@@ -2092,15 +2098,15 @@ L'indirizze e-mail ca tu è 'nzerite jndr'à le [[Special:Preferences|preferenze
 
 # Watchlist
 'watchlist' => 'Pàggene condrollete',
-'mywatchlist' => 'Pàggene condrollete',
+'mywatchlist' => 'Pàggene condrollate',
 'watchlistfor2' => 'Pe $1 $2',
 'nowatchlist' => "Non ge tine pàggene jndr'à liste de le pàggene condrollete.",
 'watchlistanontext' => 'Pe piacere $1 pe vedè o cangià le vosce sus a liste de le pàggene condrollete.',
 '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',
@@ -2128,44 +2134,49 @@ 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_newpagetext' => "Queste è 'na pàgena nove.",
 'enotif_impersonal_salutation' => 'Utende de {{SITENAME}}',
-'changed' => 'cangete',
-'created' => 'ccrejete',
-'enotif_subject' => '\'A pàgene de {{SITENAME}} $PAGETITLE ha state $CHANGEDORCREATED da $PAGEEDITOR',
+'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,
 
-\'A pàgene $PAGETITLE de {{SITENAME}} ha state $CHANGEDORCREATED \'u $PAGEEDITDATE da $PAGEEDITOR, vide $PAGETITLE_URL pa revisione corrende.
+\$PAGEINTRO \$NEWPAGE
 
-$NEWPAGE
+Riepileghe de le cangiaminde: \$PAGESUMMARY \$PAGEMINOREDIT
 
-Riepileghe de le cangiaminde: $PAGESUMMARY $PAGEMINOREDIT
+Condatte l'editore:
+mail: \$PAGEEDITOR_EMAIL
+uicchi: \$PAGEEDITOR_WIKI
 
-Condatte l\'editore:
-mail: $PAGEEDITOR_EMAIL
-uicchi: $PAGEEDITOR_WIKI
+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.
 
-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",
@@ -2239,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:',
@@ -2255,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",
@@ -2359,7 +2372,7 @@ $1",
 'blanknamespace' => '(Prengepàle)',
 
 # Contributions
-'contributions' => "Condrebbute de l'utende",
+'contributions' => "Condrebbute de l'{{GENDER:$1|utende}}",
 'contributions-title' => "Condrebbute de l'utende pe $1",
 'mycontris' => 'Condrebbute mie',
 'contribsub2' => 'Pe $1 ($2)',
@@ -2401,7 +2414,7 @@ L'urteme archivije de le bloccaminde se iacche aqquà sotte pe referimende:",
 'whatlinkshere-hideredirs' => '$1 ridirezionaminde',
 'whatlinkshere-hidetrans' => '$1 transclusiune',
 'whatlinkshere-hidelinks' => '$1 collegaminde',
-'whatlinkshere-hideimages' => '$1 collegaminde a immaggine',
+'whatlinkshere-hideimages' => "$1 collegaminde a 'u file",
 'whatlinkshere-filters' => 'Filtre',
 
 # Block/unblock
@@ -2561,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]].
@@ -2638,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",
@@ -2753,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.',
@@ -2908,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",
@@ -2916,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',
@@ -2936,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',
@@ -2960,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',
@@ -2994,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.',
@@ -3028,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:
@@ -3623,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
@@ -3830,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.
@@ -3969,11 +4005,15 @@ Le immaggine sonde fatte vedè jndr'à resoluziona megghie, otre tipe de file re
 'logentry-move-move_redir-noredirect' => "$1 pàgena spustate $3 a $4 sus a 'nu redirezionamende senze lassà 'nu redirezionamende",
 'logentry-patrol-patrol' => '$1 revisione marcate $4 de pàgene condrollate $3',
 'logentry-patrol-patrol-auto' => '$1 automaticamende revisione marcate $4 de pàgene condrollate $3',
-'logentry-newusers-newusers' => "$1 ccrejate 'nu cunde utende",
-'logentry-newusers-create' => "$1 ccrejate 'nu cunde utende",
-'logentry-newusers-create2' => "$1 ccrejate 'nu cunde utende $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 {{GENDER:$2|ccrejate}} {{GENDER:$4|'nu cunde utende}} $3",
 '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].
index cc3e1ba..e75dc71 100644 (file)
  * @author Alexandr Efremov
  * @author Amikeco
  * @author Amire80
+ * @author Anonim.one
  * @author Askarmuk
  * @author Assele
  * @author Bouron
  * @author Chilin
  * @author Claymore
  * @author Comp1089
+ * @author Cryptocoryne
  * @author DCamer
  * @author Daniyar
  * @author Dim Grits
@@ -41,6 +43,7 @@
  * @author HalanTul
  * @author Huuchin
  * @author Illusion
+ * @author Iltever
  * @author Incnis Mrsi
  * @author Iniquity
  * @author Innv
@@ -516,11 +519,11 @@ $messages = array(
 'category-empty' => "''Эта категория в данный момент пуста.''",
 'hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытые категории}}',
 'hidden-category-category' => 'Скрытые категории',
-'category-subcat-count' => '{{PLURAL:$2|Ð\94аннаÑ\8f ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\81одеÑ\80жиÑ\82 Ñ\82олÑ\8cко Ñ\81ледÑ\83Ñ\8eÑ\89Ñ\83Ñ\8e Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80иÑ\8e.|{{PLURAL:$1|Ð\9fоказана $1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80иÑ\8f\9fоказано $1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ии|Ð\9fоказано $1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ий}} Ð¸Ð· $2.}}',
+'category-subcat-count' => '{{PLURAL:$2|ЭÑ\82а ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\81одеÑ\80жиÑ\82 Ñ\82олÑ\8cко Ñ\81ледÑ\83Ñ\8eÑ\89Ñ\83Ñ\8e Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80иÑ\8e.|ЭÑ\82а ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\81одеÑ\80жиÑ\82 $1 {{PLURAL:$1|подкаÑ\82егоÑ\80иÑ\8e|подкаÑ\82егоÑ\80ии}} Ð¸Ð· $2 Ð²Ñ\81его.}}',
 'category-subcat-count-limited' => 'В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегории|$1 подкатегорий}}.',
-'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} этой категории из $2.}}',
+'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
 'category-article-count-limited' => 'В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц}}.',
-'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файла|Показано $1 файлов}} этой категории  из $2.}}',
+'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|В этой категории {{PLURAL:$1|показан $1 файл|показано $1 файла|показано $1 файлов}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
 'category-file-count-limited' => 'В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов}}.',
 'listingcontinuesabbrev' => '(продолжение)',
 'index-category' => 'Индексируемые страницы',
@@ -532,8 +535,9 @@ $messages = array(
 'newwindow' => '(в новом окне)',
 'cancel' => 'Отменить',
 'moredotdotdot' => 'Далее…',
-'mypage' => 'Личная страница',
-'mytalk' => 'Моя страница обсуждения',
+'morenotlisted' => 'Больше ничего нету...',
+'mypage' => 'Страница',
+'mytalk' => 'Обсуждение',
 'anontalk' => 'Обсуждение для этого IP-адреса',
 'navigation' => 'Навигация',
 'and' => '&#32;и',
@@ -559,12 +563,13 @@ $messages = array(
 'vector-view-create' => 'Создание',
 'vector-view-edit' => 'Правка',
 'vector-view-history' => 'История',
-'vector-view-view' => 'Чтение',
+'vector-view-view' => 'Читать',
 'vector-view-viewsource' => 'Просмотр разметки',
 'actions' => 'Действия',
 'namespaces' => 'Пространства имён',
 'variants' => 'Варианты',
 
+'navigation-heading' => 'Навигация',
 'errorpagetitle' => 'Ошибка',
 'returnto' => 'Возврат к странице $1.',
 'tagline' => 'Материал из {{grammar:genitive|{{SITENAME}}}}',
@@ -597,7 +602,7 @@ $messages = array(
 'talkpage' => 'Обсудить эту страницу',
 'talkpagelinktext' => 'обсуждение',
 'specialpage' => 'Служебная страница',
-'personaltools' => 'Ð\9bиÑ\87ные инструменты',
+'personaltools' => 'Ð\9fеÑ\80Ñ\81оналÑ\8cные инструменты',
 'postcomment' => 'Новый раздел',
 'articlepage' => 'Просмотреть статью',
 'talk' => 'Обсуждение',
@@ -633,7 +638,7 @@ $1',
 'aboutsite' => 'Описание {{grammar:genitive|{{SITENAME}}}}',
 'aboutpage' => 'Project:Описание',
 'copyright' => 'Содержимое доступно в соответствии с $1.',
-'copyrightpage' => '{{ns:project}}:Ð\90вÑ\82оÑ\80Ñ\81кое Ð¿Ñ\80аво',
+'copyrightpage' => '{{ns:project}}:Ð\90вÑ\82оÑ\80Ñ\81кие Ð¿Ñ\80ава',
 'currentevents' => 'Текущие события',
 'currentevents-url' => 'Project:Текущие события',
 'disclaimers' => 'Отказ от ответственности',
@@ -644,7 +649,7 @@ $1',
 'mainpage' => 'Заглавная страница',
 'mainpage-description' => 'Заглавная страница',
 'policy-url' => 'Project:Правила',
-'portal' => 'СообÑ\89еÑ\81Ñ\82во',
+'portal' => 'Ð\9fоÑ\80Ñ\82ал Ñ\81ообÑ\89еÑ\81Ñ\82ва',
 'portal-url' => 'Project:Портал сообщества',
 'privacy' => 'Политика конфиденциальности',
 'privacypage' => 'Project:Политика конфиденциальности',
@@ -672,7 +677,7 @@ $1',
 'viewsourceold' => 'просмотреть исходный код',
 'editlink' => 'править',
 'viewsourcelink' => 'просмотреть исходный код',
-'editsectionhint' => 'Ð\9fÑ\80авиÑ\82Ñ\8c Ñ\81екÑ\86иÑ\8e «$1»',
+'editsectionhint' => 'РедакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\80аздел «$1»',
 'toc' => 'Содержание',
 'showtoc' => 'показать',
 'hidetoc' => 'убрать',
@@ -761,7 +766,7 @@ $1',
 'delete-hook-aborted' => 'Правка отменена процедурой-перехватчиком.
 Дополнительных пояснений не приведено.',
 'badtitle' => 'Недопустимое название',
-'badtitletext' => 'Ð\97апÑ\80аÑ\88иваемое Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð½ÐµÐ¿Ñ\80авилÑ\8cно, Ð¿Ñ\83Ñ\81Ñ\82о, Ð»Ð¸Ð±Ð¾ Ð½ÐµÐ¿Ñ\80авилÑ\8cно указано межъязыковое или интервики название. Возможно, в названии используются недопустимые символы.',
+'badtitletext' => 'Ð\97апÑ\80аÑ\88иваемое Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð½ÐµÐ¿Ñ\80авилÑ\8cно, Ð¿Ñ\83Ñ\81Ñ\82о, Ð»Ð¸Ð±Ð¾ Ð½ÐµÐ²ÐµÑ\80но указано межъязыковое или интервики название. Возможно, в названии используются недопустимые символы.',
 'perfcached' => 'Следующие данные взяты из кэша и могут не учитывать последних изменений. В кэше хранится не более $1 {{PLURAL:$1|записи|записей|записей}}.',
 'perfcachedts' => 'Следующие данные взяты из кэша, последний раз он обновлялся в $1. В кэше хранится не более $4 {{PLURAL:$4|записи|записей|записей}}.',
 'querypage-no-updates' => 'Обновление этой страницы сейчас отключено.
@@ -773,7 +778,7 @@ $1',
 'viewsource-title' => 'Просмотр исходного текста страницы $1',
 'actionthrottled' => 'Ограничение по скорости',
 'actionthrottledtext' => 'В качестве меры борьбы со спамом, установлено ограничение на многократное применение данного действия в течение короткого промежутка времени. Пожалуйста, повторите попытку через несколько минут.',
-'protectedpagetext' => 'Эта страница закрыта для редактирования.',
+'protectedpagetext' => 'Эта страница защищена для предотвращения её редактирования или совершений других действий.',
 'viewsourcetext' => 'Вы можете просмотреть и скопировать исходный текст этой страницы:',
 'viewyourtext' => "Вы можете просмотреть и скопировать исходный текст '''ваших правок''' на этой странице:",
 'protectedinterface' => 'Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.
@@ -808,10 +813,10 @@ $2',
 
 Вы можете продолжить участие в {{grammar:genitive|{{SITENAME}}}} анонимно или <span class='plainlinks'>[$1 представиться заново]</span> под тем же или другим именем.
 Некоторые страницы могут продолжать отображаться в том виде, как будто вы всё ещё представлены системе. Для борьбы с этим явлением обновите кэш браузера.",
-'welcomecreation' => '== Добро пожаловать, $1! ==
-Ваша учётная запись создана.
-Не забудьте провести [[Special:Preferences|персональную настройку]] сайта.',
-'yourname' => 'Имя участника:',
+'welcomeuser' => 'Добро пожаловать, $1!',
+'welcomecreation-msg' => 'Ваша учётная запись создана.
+Не забудьте провести [[Special:Preferences|персональную настройку]] сайта {{SITENAME}}.',
+'yourname' => 'Имя учётной записи:',
 'yourpassword' => 'Пароль:',
 'yourpasswordagain' => 'Повторный набор пароля:',
 'remembermypassword' => 'Помнить мою учётную запись на этом компьютере (не более $1 {{PLURAL:$1|дня|дней|дней}})',
@@ -827,9 +832,9 @@ $2',
 'logout' => 'Завершение сеанса',
 'userlogout' => 'Завершение сеанса',
 'notloggedin' => 'Вы не представились системе',
-'nologin' => "Нет учётной записи? '''$1'''.",
+'nologin' => 'Нет учётной записи? $1.',
 'nologinlink' => 'Создать учётную запись',
-'createaccount' => 'Ð\97аÑ\80егиÑ\81Ñ\82Ñ\80иÑ\80оваÑ\82Ñ\8c Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ\83Ñ\87аÑ\81Ñ\82ника',
+'createaccount' => 'СоздаÑ\82Ñ\8c Ñ\83Ñ\87Ñ\91Ñ\82нÑ\83Ñ\8e Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c',
 'gotaccount' => "Вы уже зарегистрированы? '''$1'''.",
 'gotaccountlink' => 'Представьтесь',
 'userlogin-resetlink' => 'Забыли данные для входа?',
@@ -907,7 +912,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' => 'Изменение пароля',
@@ -975,6 +981,7 @@ $2
 'changeemail-oldemail' => 'Текущий адрес электронной почты:',
 'changeemail-newemail' => 'Новый адрес электронной почты:',
 'changeemail-none' => '(нет)',
+'changeemail-password' => 'Ваш пароль для проекта «{{SITENAME}}»:',
 'changeemail-submit' => 'Изменить адрес',
 'changeemail-cancel' => 'Отмена',
 
@@ -992,9 +999,9 @@ $2
 'nowiki_sample' => 'Вставьте сюда текст, который не нужно форматировать',
 'nowiki_tip' => 'Игнорировать вики-форматирование',
 'image_tip' => 'Встроенный файл',
-'media_tip' => 'Ссылка на медиа-файл',
+'media_tip' => 'Ссылка на файл',
 'sig_tip' => 'Ваша подпись и момент времени',
-'hr_tip' => 'Горизонтальная линия (не используйте часто)',
+'hr_tip' => 'Ð\93оÑ\80изонÑ\82алÑ\8cнаÑ\8f Ð»Ð¸Ð½Ð¸Ñ\8f (не Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е Ñ\81лиÑ\88ком Ñ\87аÑ\81Ñ\82о)',
 
 # Edit pages
 'summary' => 'Описание изменений:',
@@ -1006,8 +1013,8 @@ $2
 'showpreview' => 'Предварительный просмотр',
 'showlivepreview' => 'Быстрый предпросмотр',
 'showdiff' => 'Внесённые изменения',
-'anoneditwarning' => "'''Внимание:''' Вы не представились системе.
аш IP-адрес будет записан в историю изменений этой страницы.",
+'anoneditwarning' => "'''Внимание!''' Вы не авторизовались на сайте.
 истории изменений этой страницы будет записан ваш IP-адрес.",
 'anonpreviewwarning' => "''Вы не представились системе. Сохранение приведёт к записи вашего IP-адреса в историю изменений страницы.''",
 'missingsummary' => "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «{{int:savearticle}}», ваши изменения будут сохранены без комментария.",
 'missingcommenttext' => 'Пожалуйста, введите ниже ваше сообщение.',
@@ -1061,7 +1068,7 @@ $2
 'newarticle' => '(Новая)',
 'newarticletext' => "Вы перешли по ссылке на страницу, которой пока не существует.
 Чтобы её создать, наберите текст в окне, расположенном ниже (подробнее см. [[{{MediaWiki:Helppage}}|справочную страницу]]).
-Если вы оказались здесь по ошибке, просто нажмите кнопку '''назад''' вашего браузера.",
+Если вы оказались здесь по ошибке, просто нажмите кнопку '''назад''' своего браузера.",
 'anontalkpagetext' => "----''Эта страница обсуждения принадлежит анонимному участнику, который ещё не создал учётной записи, или не использует её.
 Поэтому для идентификации используется цифровой IP-адрес.
 Этот же адрес может соответствовать нескольким другим участникам.
@@ -1151,14 +1158,13 @@ $2
 'cascadeprotectedwarning' => "'''Предупреждение:''' Данную страницу могут редактировать только участники группы «Администраторы», поскольку она включена {{PLURAL:$1|в следующую страницу, для которой|в следующие страницы, для которых}} включена каскадная защита:",
 'titleprotectedwarning' => "'''Предупреждение.  Это название защищено. Создать эту страницу могут только участники с [[Special:ListGroupRights|соответствующими правами]].'''
 Ниже для справки приведена последняя запись журнала:",
-'templatesused' => '{{PLURAL:$1|Шаблон, Ð¸Ñ\81полÑ\8cзованнÑ\8bй|ШаблонÑ\8b, Ð¸Ñ\81полÑ\8cзованнÑ\8bе}} Ð½Ð° Ñ\82екÑ\83Ñ\89ей Ð²ÐµÑ\80Ñ\81ии Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b:',
+'templatesused' => '{{PLURAL:$1|Шаблон, Ð¸Ñ\81полÑ\8cзованнÑ\8bй|ШаблонÑ\8b, Ð¸Ñ\81полÑ\8cзованнÑ\8bе}} Ð½Ð° Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86е:',
 'templatesusedpreview' => '{{PLURAL:$1|Шаблон, используемый|Шаблоны, используемые}} в предпросматриваемой странице:',
 'templatesusedsection' => '{{PLURAL:$1|Шаблон, используемый|Шаблоны, использованные}} в этом разделе:',
 'template-protected' => '(защищено)',
 'template-semiprotected' => '(частично защищено)',
-'hiddencategories' => 'Эта страница относится к $1 {{PLURAL:$1|скрытой категории|скрытым категориям|скрытым категориям}}:',
+'hiddencategories' => 'Эта страница относится к $1 {{PLURAL:$1|скрытой категории|скрытым категориям}}:',
 'edittools' => '<!-- Расположенный здесь текст будет показываться под формой редактирования и формой загрузки. -->',
-'nocreatetitle' => 'Создание страниц ограничено',
 'nocreatetext' => 'На этом сайте ограничена возможность создания новых страниц.
 Вы можете вернуться назад и отредактировать существующую страницу, [[Special:UserLogin|представиться системе или создать новую учётную запись]].',
 'nocreate-loggedin' => 'У вас нет разрешения создавать новые страницы.',
@@ -1166,7 +1172,7 @@ $2
 'sectioneditnotsupported-text' => 'На этой странице не поддерживается редактирование разделов',
 'permissionserrors' => 'Ошибки прав доступа',
 'permissionserrorstext' => 'У вас нет прав на выполнение этой операции по {{PLURAL:$1|следующей причине|следующим причинам}}:',
-'permissionserrorstext-withaction' => "У вас нет разрешения на «'''$2'''» по {{PLURAL:$1|следующей причине|следующим причинам}}:",
+'permissionserrorstext-withaction' => 'У вас нет прав на $2 по {{PLURAL:$1|следующей причине|следующим причинам}}:',
 'recreate-moveddeleted-warn' => "'''Внимание. Вы пытаетесь воссоздать страницу, которая ранее удалялась.'''
 
 Проверьте, действительно ли вам нужно воссоздавать эту страницу.
@@ -1194,9 +1200,9 @@ $2
 'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => 'Внимание. Эта страница содержит слишком много вызовов ресурсоёмких функций.
+'expensive-parserfunction-warning' => "'''Внимание!''' Эта страница содержит слишком много вызовов ресурсоёмких функций.
 
\9eгÑ\80аниÑ\87ение Ð½Ð° ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82во Ð²Ñ\8bзовов Ñ\83Ñ\81Ñ\82ановлено Ð½Ð° Ñ\83Ñ\80овне $2 {{PLURAL:$2|вÑ\8bзова|вÑ\8bзовов|вÑ\8bзовов}}, Ð² Ð´Ð°Ð½Ð½Ð¾Ð¼ Ñ\81лÑ\83Ñ\87ае Ñ\82Ñ\80ебÑ\83еÑ\82Ñ\81Ñ\8f Ñ\81делаÑ\82Ñ\8c $1 {{PLURAL:$1|вÑ\8bзов|вÑ\8bзова|вÑ\8bзовов}}.',
\94олжно Ð±Ñ\8bÑ\82Ñ\8c Ð½Ðµ Ð±Ð¾Ð»ÐµÐµ $2 {{PLURAL:$2|вÑ\8bзова|вÑ\8bзовов}}, Ð² Ñ\82о Ð²Ñ\80емÑ\8f ÐºÐ°Ðº Ñ\81ейÑ\87аÑ\81 Ð·Ð´ÐµÑ\81Ñ\8c $1 {{PLURAL:$1|вÑ\8bзов|вÑ\8bзова|вÑ\8bзовов}}.",
 'expensive-parserfunction-category' => 'Страницы со слишком большим количеством вызовов ресурсоёмких функций',
 'post-expand-template-inclusion-warning' => 'Предупреждение: суммарный размер включаемых шаблонов слишком велик.
 Некоторые шаблоны не будут включены.',
@@ -1352,7 +1358,7 @@ $1",
 ** Потенциально клеветнические сведения',
 'revdelete-otherreason' => 'Другая/дополнительная причина:',
 'revdelete-reasonotherlist' => 'Другая причина',
-'revdelete-edit-reasonlist' => 'Ð\9fÑ\80авить список причин',
+'revdelete-edit-reasonlist' => 'РедакÑ\82иÑ\80овать список причин',
 'revdelete-offender' => 'Автор версии страницы:',
 
 # Suppression log
@@ -1402,7 +1408,7 @@ $1",
 'diff-multi-manyusers' => '(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показаны $1 промежуточных версий}}, сделанные более чем $2 {{PLURAL:$2|участником|участниками}})',
 'difference-missing-revision' => '{{PLURAL:$2|$2 версия|$2 версии|$2 версий}} для этого сравнения ($1) {{PLURAL:$2|не обнаружена|не обнаружены}}.
 
-ЭÑ\82о Ð¾Ð±Ñ\8bÑ\87но Ð±Ñ\8bваеÑ\82, ÐµÑ\81ли Ð¿Ð¾Ñ\81ледоваÑ\82Ñ\8c Ð¿Ð¾ Ñ\83Ñ\81Ñ\82аÑ\80евÑ\88ей Ñ\81Ñ\81Ñ\8bлке Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, которая была удалена.
+ЭÑ\82о Ð¾Ð±Ñ\8bÑ\87но Ð±Ñ\8bваеÑ\82, ÐµÑ\81ли Ð¿ÐµÑ\80ейÑ\82и Ð¿Ð¾ Ñ\83Ñ\81Ñ\82аÑ\80евÑ\88ей Ñ\81Ñ\81Ñ\8bлке Ñ\81Ñ\80авнениÑ\8f Ð²ÐµÑ\80Ñ\81ий Ð´Ð»Ñ\8f Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b, которая была удалена.
 Подробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].',
 
 # Search results
@@ -1411,7 +1417,7 @@ $1",
 'searchresulttext' => 'Для получения более подробной информации о поиске на страницах проекта, см. [[{{MediaWiki:Helppage}}|справочный раздел]].',
 'searchsubtitle' => 'По запросу «[[:$1]]» ([[Special:Prefixindex/$1|страницы, начинающиеся с этого названия]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ссылающиеся на это название]])',
 'searchsubtitleinvalid' => 'По запросу «$1»',
-'toomanymatches' => 'Найдено слишком много соответствий, пожалуйста, попробуйте другой запрос',
+'toomanymatches' => 'Найдено слишком много соответствий; пожалуйста, попробуйте сформулировать запрос иначе',
 'titlematches' => 'Совпадения в названиях страниц',
 'notitlematches' => 'Нет совпадений в названиях страниц',
 'textmatches' => 'Совпадения в текстах страниц',
@@ -1423,7 +1429,7 @@ $1",
 'shown-title' => 'Показывать $1 {{PLURAL:$1|запись|записи|записей}} на странице',
 'viewprevnext' => 'Просмотреть ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Настройки поиска',
-'searchmenu-exists' => "'''Ð\92 Ñ\8dÑ\82ом Ð²Ð¸ÐºÐ¸-пÑ\80оекÑ\82е есть страница «[[:$1]]»'''",
+'searchmenu-exists' => "'''Ð\92 Ñ\8dÑ\82ой Ð²Ð¸ÐºÐ¸ есть страница «[[:$1]]»'''",
 'searchmenu-new' => "'''Создать страницу «[[:$1]]» в этом вики-проекте!'''",
 'searchhelp-url' => 'Help:Содержание',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Показать страницы с этим префиксом]]',
@@ -1435,10 +1441,10 @@ $1",
 'searchprofile-articles-tooltip' => 'Поиск в $1',
 'searchprofile-project-tooltip' => 'Поиск в $1',
 'searchprofile-images-tooltip' => 'Поиск файлов',
-'searchprofile-everything-tooltip' => 'Поиск на всех страницах (включая страницы обсуждения)',
+'searchprofile-everything-tooltip' => 'Поиск на всех страницах (включая страницы обсуждений)',
 'searchprofile-advanced-tooltip' => 'Искать в заданных пространствах имён',
 'search-result-size' => '$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 слов}})',
-'search-result-category-size' => '$1 {{PLURAL:$1|член|члена|членов}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}}).',
+'search-result-category-size' => '$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}}).',
 'search-result-score' => 'Релевантность: $1%.',
 'search-redirect' => '(перенаправление с $1)',
 'search-section' => '(раздел «$1»)',
@@ -1540,7 +1546,7 @@ $1",
 'timezoneregion-europe' => 'Европа',
 'timezoneregion-indian' => 'Индийский океан',
 'timezoneregion-pacific' => 'Тихий океан',
-'allowemail' => 'Разрешить приём электронной почты от других участников',
+'allowemail' => 'Разрешить получение электронной почты от других участников',
 'prefs-searchoptions' => 'Поиск',
 'prefs-namespaces' => 'Пространства имён',
 'defaultns' => 'Иначе искать в следующих пространствах имён:',
@@ -1554,11 +1560,11 @@ $1",
 'prefs-emailconfirm-label' => 'Подтверждение электронной почты:',
 'prefs-textboxsize' => 'Размер окна редактирования',
 'youremail' => 'Электронная почта:',
-'username' => 'Регистрационное имя:',
-'uid' => 'Ð\98денÑ\82иÑ\84икаÑ\82оÑ\80 Ñ\83Ñ\87аÑ\81Ñ\82ника:',
-'prefs-memberingroups' => 'Член {{PLURAL:$1|группы|групп}}:',
+'username' => '{{GENDER:$1|Имя участника|Имя участницы}}:',
+'uid' => 'Ð\9aод {{GENDER:$1|Ñ\83Ñ\87аÑ\81Ñ\82ника|Ñ\83Ñ\87аÑ\81Ñ\82ниÑ\86Ñ\8b}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Член|Член}} {{PLURAL:$1|группы|групп}}:',
 'prefs-registration' => 'Время регистрации:',
-'yourrealname' => 'Ð\92аÑ\88е Ð½астоящее имя:',
+'yourrealname' => 'Ð\9dастоящее имя:',
 'yourlanguage' => 'Язык интерфейса:',
 'yourvariant' => 'Вариант языка содержания:',
 'prefs-help-variant' => 'Предпочитаемый для отображения содержимого страниц вики вариант языка или орфография.',
@@ -1577,7 +1583,7 @@ $1",
 'prefs-help-realname' => 'Настоящее имя (необязательное поле).
 Если вы укажете его, то оно будет использовано для того, чтобы показать, кем была внесена правка страницы.',
 'prefs-help-email' => 'Адрес электронной почты указывать необязательно, но он будет необходим в том случае, если вы забудете пароль.',
-'prefs-help-email-others' => 'Он также позволит другим участникам связаться с вами через ссылку на вашей личной странице без необходимости раскрытия адреса вашей электронной почты.',
+'prefs-help-email-others' => 'Он также позволит другим участникам связаться с вами по электронной почте с помощью ссылки на вашей персональной странице или на вашей странице обсуждения. При этом ваш адрес электронной почты не будет никому раскрыт.',
 'prefs-help-email-required' => 'Необходимо указать адрес электронной почты.',
 'prefs-info' => 'Основные сведения',
 'prefs-i18n' => 'Интернационализация',
@@ -1596,22 +1602,22 @@ $1",
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => 'Выглядит корректно',
-'email-address-validity-invalid' => 'ТÑ\80ебÑ\83еÑ\82Ñ\81Ñ\8f ÐºÐ¾Ñ\80Ñ\80екÑ\82нÑ\8bй Ð°Ð´Ñ\80еÑ\81!',
+'email-address-validity-invalid' => 'Ð\92ведиÑ\82е ÐºÐ¾Ñ\80Ñ\80екÑ\82нÑ\8bй Ð°Ð´Ñ\80еÑ\81 Ñ\8dлекÑ\82Ñ\80онной Ð¿Ð¾Ñ\87Ñ\82Ñ\8b!',
 
 # User rights
 'userrights' => 'Управление правами участника',
 'userrights-lookup-user' => 'Управление группами участников',
-'userrights-user-editname' => 'Введите имя участника:',
+'userrights-user-editname' => 'Введите имя учётной записи:',
 'editusergroup' => 'Изменить членство в группах',
 'editinguser' => "Изменение прав {{GENDER:$1|участника|участницы}} '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Изменение членства в группах',
 'saveusergroups' => 'Сохранить группы участника',
-'userrights-groupsmember' => 'Член Ð³Ñ\80Ñ\83пп:',
-'userrights-groupsmember-auto' => 'Неявный член:',
+'userrights-groupsmember' => 'СоÑ\81Ñ\82оиÑ\82 Ð² Ð³Ñ\80Ñ\83ппаÑ\85:',
+'userrights-groupsmember-auto' => 'Неявно состоит в группах:',
 'userrights-groups-help' => 'Вы можете изменить группы, в которые входит этот участник.
 * Если около названия группы стоит отметка, значит участник входит в эту группу.
 * Если отметка не стоит — участник не относится к соответствующей группе.
-* Знак * отмечает, что вы не можете удалить из группы участника, если добавите его в неё или наоборот.',
+* Знак * отмечает, что вы не сможете удалить участника из группы, если добавите его в неё, или наоборот.',
 'userrights-reason' => 'Причина:',
 'userrights-no-interwiki' => 'У вас нет разрешения изменять права участников на других вики.',
 'userrights-nodatabase' => 'База данных $1 не существует или не является локальной.',
@@ -1655,7 +1661,7 @@ $1",
 'right-move-subpages' => 'переименование страниц с их подстраницами',
 'right-move-rootuserpages' => 'переименование корневых страниц участников',
 'right-movefile' => 'переименование файлов',
-'right-suppressredirect' => 'не создаётся перенаправление со старого имени при переименовании страницы',
+'right-suppressredirect' => 'не создавать перенаправление со старого имени при переименовании страницы',
 'right-upload' => 'загрузка файлов',
 'right-reupload' => 'запись файлов поверх существующих',
 'right-reupload-own' => 'перезапись файлов тем же участником',
@@ -1677,19 +1683,19 @@ $1",
 'right-undelete' => 'восстановление страниц',
 'right-suppressrevision' => 'просмотр и восстановление скрытых от администраторов версий страниц',
 'right-suppressionlog' => 'просмотр частных журналов',
-'right-block' => 'Ñ\83Ñ\81Ñ\82ановка Ð·Ð°Ð¿Ñ\80еÑ\82а Ð½Ð° Ñ\80едакÑ\82иÑ\80ование Ð´Ñ\80Ñ\83гим Ñ\83Ñ\87аÑ\81Ñ\82никам',
+'right-block' => 'Ñ\83Ñ\81Ñ\82ановка Ð¾Ð³Ñ\80аниÑ\87ений Ð½Ð° Ñ\80едакÑ\82иÑ\80ование Ð´Ð»Ñ\8f Ð´Ñ\80Ñ\83гиÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников',
 'right-blockemail' => 'установка запрета на отправку электронной почты',
 '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' => 'импорт страниц из других вики',
@@ -1699,38 +1705,36 @@ $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:$1|был автоматически переведён|была автоматически переведена}} из $4 в $5',
-'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' => 'оÑ\82меÑ\82ка этой правки как малой',
+'action-createaccount' => 'создание этой учётной записи',
+'action-minoredit' => 'помеÑ\82кÑ\83 этой правки как малой',
 'action-move' => 'переименование этой страницы',
 'action-move-subpages' => 'переименование этой страницы со всеми её подстраницами',
 'action-move-rootuserpages' => 'переименование корневых страниц участников',
 'action-movefile' => 'переименовать этот файл',
-'action-upload' => 'загрузка этого файла',
+'action-upload' => 'загрузку этого файла',
 'action-reupload' => 'перезапись существующего файла',
 'action-reupload-shared' => 'перекрытие файла из общего хранилища',
-'action-upload_by_url' => 'загрузка этого файла с адреса URL',
+'action-upload_by_url' => 'загрузку этого файла с адреса URL',
 'action-writeapi' => 'использование API для правок',
 'action-delete' => 'удаление этой страницы',
 'action-deleterevision' => 'удаление этой версии страницы',
@@ -1739,9 +1743,9 @@ $1",
 'action-undelete' => 'восстановление этой страницы',
 'action-suppressrevision' => 'просмотр и восстановление этой скрытой версии страницы',
 'action-suppressionlog' => 'просмотр этого частного журнала',
-'action-block' => 'блокиÑ\80овка участника',
+'action-block' => 'огÑ\80аниÑ\87иваÑ\82Ñ\8c Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82Ñ\8c Ñ\80едакÑ\82иÑ\80ованиÑ\8f Ð´Ð»Ñ\8f Ñ\8dÑ\82ого участника',
 'action-protect' => 'изменение уровня защиты этой страницы',
-'action-rollback' => 'быстрый откат изменений последнего пользователя, который редактировал страницу',
+'action-rollback' => 'быстрый откат изменений участника, который последним редактировал страницу',
 'action-import' => 'импорт этой страницы из другой вики',
 'action-importupload' => 'импорт этой страницы из загруженного файла',
 'action-patrol' => 'отметка чужих правок как отпатрулированных',
@@ -1758,13 +1762,13 @@ $1",
 'recentchanges' => 'Свежие правки',
 'recentchanges-legend' => 'Настройки свежих правок',
 'recentchanges-summary' => 'Ниже в хронологическом порядке перечислены последние изменения на страницах {{grammar:genitive|{{SITENAME}}}}.',
-'recentchanges-feed-description' => 'Ð\9eÑ\82Ñ\81леживаÑ\82Ñ\8c Ð¿Ð¾Ñ\81ледние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ð² Ð²Ð¸ÐºÐ¸ Ð² Ñ\8dÑ\82ом Ð¿Ð¾Ñ\82оке.',
+'recentchanges-feed-description' => 'Ð\9eÑ\82Ñ\81леживаÑ\82Ñ\8c Ð² Ñ\8dÑ\82ом Ð¿Ð¾Ñ\82оке Ð¿Ð¾Ñ\81ледние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ð² Ð²Ð¸ÐºÐ¸.',
 'recentchanges-label-newpage' => 'Этой правкой была создана новая страница.',
 'recentchanges-label-minor' => 'Это незначительное изменение',
 'recentchanges-label-bot' => 'Эта правка сделана ботом',
-'recentchanges-label-unpatrolled' => 'Эту правку ещё не отпатрулировали',
+'recentchanges-label-unpatrolled' => 'Эта правку ещё никем не патрулировалась',
 'rcnote' => "{{PLURAL:$1|Последнее '''$1''' изменение|Последние '''$1''' изменения|Последние '''$1''' изменений}} за '''$2''' {{PLURAL:$2|день|дня|дней}}, на момент времени $5 $4.",
-'rcnotefrom' => 'Ниже перечислены изменения с <strong>$2</strong> (по <strong>$1</strong>).',
+'rcnotefrom' => "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
 'rclistfrom' => 'Показать изменения с $1.',
 'rcshowhideminor' => '$1 малые правки',
 'rcshowhidebots' => '$1 ботов',
@@ -1954,6 +1958,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 .',
@@ -2203,7 +2208,7 @@ $1',
 
 'withoutinterwiki' => 'Страницы без интервики-ссылок',
 'withoutinterwiki-summary' => 'Следующие страницы не имеют интервики-ссылок:',
-'withoutinterwiki-legend' => 'Ð\9fÑ\80иÑ\81Ñ\82авка',
+'withoutinterwiki-legend' => 'Ð\9fÑ\80еÑ\84икÑ\81',
 'withoutinterwiki-submit' => 'Показать',
 
 'fewestrevisions' => 'Страницы с наименьшим количеством версий',
@@ -2341,7 +2346,7 @@ $1',
 'linksearch-ok' => 'Найти',
 'linksearch-text' => 'Можно использовать подстановочные символы, например, <code>*.wikipedia.org</code>.
 Необходим по крайней мере домен верхнего уровня, например <code>*.org</code><br />
-Поддерживаемые протоколы: <code>$1</code> (не добавлять любой из них в вашем поиске)',
+Поддерживаемые {{PLURAL:$2|протокол|протоколы}}: <code>$1</code> (по умолчанию подставляется http://, если протокол явно не задан).',
 'linksearch-line' => 'Ссылка на $1 из $2',
 'linksearch-error' => 'Подстановочные символы могут использоваться только в начале адресов.',
 
@@ -2360,10 +2365,6 @@ $1',
 'activeusers-hidesysops' => 'Скрыть администраторов',
 'activeusers-noresult' => 'Не найдено участников.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал регистрации участников',
-'newuserlogpagetext' => 'Список недавно зарегистрировавшихся участников',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права групп участников',
 'listgrouprights-summary' => 'Ниже представлен список определённых в этой вики групп участников, указаны соответствующие им права доступа.
@@ -2373,7 +2374,7 @@ $1',
 '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',
@@ -2431,8 +2432,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' => 'Следить',
@@ -2460,19 +2461,23 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} Служба извещений по почте',
 'enotif_reset' => 'Отметить все страницы как просмотренные',
-'enotif_newpagetext' => 'Это новая страница.',
 'enotif_impersonal_salutation' => 'Участник {{grammar:genitive|{{SITENAME}}}}',
-'changed' => 'изменена',
-'created' => 'создана',
-'enotif_subject' => 'Страница проекта «{{SITENAME}}» $PAGETITLE была $CHANGEDORCREATED участником $PAGEEDITOR',
+'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' => '$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',
+'enotif_body_intro_changed' => '$PAGEEDITDATE {{gender:$2|участником|участницей}} $2 была изменена страница проекта «{{SITENAME}}» с именем «$1», см. текущую версию по ссылке: $3',
 'enotif_lastvisited' => 'См. $1 для просмотра всех изменений, произошедших с вашего последнего посещения.',
 'enotif_lastdiff' => 'См. $1 для ознакомления с изменением.',
 'enotif_anon_editor' => 'анонимный участник $1',
 'enotif_body' => 'Здравствуйте, $WATCHINGUSERNAME!
 
-$PAGEEDITDATE страница проекта «{{SITENAME}}» $PAGETITLE была $CHANGEDORCREATED участником $PAGEEDITOR, см. $PAGETITLE_URL для просмотра текущей версии.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Краткое описание изменения: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2480,8 +2485,7 @@ $NEWPAGE
 эл. почта: $PAGEEDITOR_EMAIL
 вики: $PAGEEDITOR_WIKI
 
-Если вы не посетите эту страницу, то в случае её дальнейших изменений уведомлений больше не будет.
-Вы можете также отключить опцию уведомления для всех страниц в вашем списке наблюдения.
+Если вы не посетите эту страницу, то в случае её дальнейших изменений уведомлений больше не будет. Вы можете также отключить опцию уведомления для всех страниц в вашем списке наблюдения.
 
              Система оповещения {{grammar:genitive|{{SITENAME}}}}
 
@@ -2497,6 +2501,8 @@ $UNWATCHURL
 
 Обратная связь и помощь
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'создана',
+'changed' => 'изменена',
 
 # Delete
 'deletepage' => 'Удалить страницу',
@@ -2567,6 +2573,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] переименована в [[$2]]',
 'protect-badnamespace-title' => 'Незащищаемое пространство имён',
 'protect-badnamespace-text' => 'Страницы в этом пространстве имён не могут быть защищены.',
+'protect-norestrictiontypes-text' => 'Эта страница не может быть защищена, как как для неё нет доступных типов ограничений.',
+'protect-norestrictiontypes-title' => 'Незащищаемая страница',
 'protect-legend' => 'Подтвердите установку защиты страницы',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Истекает:',
@@ -2679,12 +2687,12 @@ $1',
 'blanknamespace' => '(основное)',
 
 # Contributions
-'contributions' => 'Вклад участника',
+'contributions' => 'Вклад {{GENDER:$1|участника|участницы}}',
 'contributions-title' => 'Вклад {{GENDER:$1|участника|участницы}} $1',
-'mycontris' => 'Ð\9cой Ð²клад',
+'mycontris' => 'Ð\92клад',
 'contribsub2' => 'Вклад $1 ($2)',
 'nocontribs' => 'Изменений, соответствующих заданным условиям, найдено не было.',
-'uctop' => ' (последняя)',
+'uctop' => '(последняя)',
 'month' => 'С месяца (и ранее):',
 'year' => 'С года (и ранее):',
 
@@ -2715,13 +2723,13 @@ $1',
 'isredirect' => 'страница-перенаправление',
 'istemplate' => 'включение',
 'isimage' => 'файловая ссылка',
-'whatlinkshere-prev' => '{{PLURAL:$1|предыдущая|предыдущие|предыдущие}} $1',
-'whatlinkshere-next' => '{{PLURAL:$1|следующая|следующие|следующие}} $1',
+'whatlinkshere-prev' => '{{PLURAL:$1|предыдущая|предыдущие}} $1',
+'whatlinkshere-next' => '{{PLURAL:$1|следующая|следующие}} $1',
 'whatlinkshere-links' => '← ссылки',
 'whatlinkshere-hideredirs' => '$1 перенаправления',
 'whatlinkshere-hidetrans' => '$1 включения',
 'whatlinkshere-hidelinks' => '$1 ссылки',
-'whatlinkshere-hideimages' => '$1 Ñ\81Ñ\81Ñ\8bлки Ð´Ð»Ñ\8f Ð¸Ð·Ð¾Ð±Ñ\80ажений',
+'whatlinkshere-hideimages' => '$1 Ñ\84айловÑ\8bе Ñ\81Ñ\81Ñ\8bлки',
 'whatlinkshere-filters' => 'Фильтры',
 
 # Block/unblock
@@ -3002,7 +3010,7 @@ $1',
 'allmessages-filter-unmodified' => 'Неизменённые',
 'allmessages-filter-all' => 'Все',
 'allmessages-filter-modified' => 'Изменённые',
-'allmessages-prefix' => 'ФилÑ\8cÑ\82Ñ\80 Ð¿Ð¾ Ð¿Ñ\80иÑ\81Ñ\82авке:',
+'allmessages-prefix' => 'ФилÑ\8cÑ\82Ñ\80 Ð¿Ð¾ Ð¿Ñ\80еÑ\84икÑ\81Ñ\83:',
 'allmessages-language' => 'Язык:',
 'allmessages-filter-submit' => 'Перейти',
 
@@ -3063,6 +3071,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» подстраницы запрещены.',
@@ -3088,7 +3097,7 @@ $1',
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Ваша страница участника',
 'tooltip-pt-anonuserpage' => 'Страница участника для моего IP',
-'tooltip-pt-mytalk' => 'Ваша страница обсуждений',
+'tooltip-pt-mytalk' => 'Ваша страница обсуждения',
 'tooltip-pt-anontalk' => 'Страница обсуждений для моего IP',
 'tooltip-pt-preferences' => 'Ваши настройки',
 'tooltip-pt-watchlist' => 'Список страниц, изменения в которых вы отслеживаете',
@@ -3096,8 +3105,8 @@ $1',
 'tooltip-pt-login' => 'Здесь можно зарегистрироваться в системе, но это необязательно.',
 'tooltip-pt-anonlogin' => 'Здесь можно зарегистрироваться в системе, но это необязательно.',
 'tooltip-pt-logout' => 'Завершить сеанс работы',
-'tooltip-ca-talk' => 'Обсуждение содержания страницы',
-'tooltip-ca-edit' => 'ЭÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð·Ð¼ÐµÐ½Ñ\8fÑ\82Ñ\8c. Ð\98Ñ\81полÑ\8cзÑ\83йÑ\82е, Ð¿Ð¾Ð¶Ð°Ð»Ñ\83йÑ\81Ñ\82а, Ð¿Ñ\80едваÑ\80иÑ\82елÑ\8cнÑ\8bй Ð¿Ñ\80оÑ\81моÑ\82Ñ\80 Ð¿ÐµÑ\80ед Ñ\81оÑ\85Ñ\80анением',
+'tooltip-ca-talk' => 'Обсуждение основной страницы',
+'tooltip-ca-edit' => 'Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83. Ð\9fеÑ\80ед Ñ\82ем, ÐºÐ°Ðº Ð·Ð°Ð¿Ð¸Ñ\81аÑ\82Ñ\8c Ñ\81вои Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f, Ð²Ð¾Ñ\81полÑ\8cзÑ\83йÑ\82еÑ\81Ñ\8c, Ð¿Ð¾Ð¶Ð°Ð»Ñ\83йÑ\81Ñ\82а, ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ Ð¿Ñ\80едваÑ\80иÑ\82елÑ\8cного Ð¿Ñ\80оÑ\81моÑ\82Ñ\80а.',
 'tooltip-ca-addsection' => 'Создать новый раздел',
 'tooltip-ca-viewsource' => 'Эта страница защищена от изменений, но вы можете посмотреть и скопировать её исходный текст',
 'tooltip-ca-history' => 'Журнал изменений страницы',
@@ -3108,28 +3117,28 @@ $1',
 'tooltip-ca-move' => 'Переименовать страницу',
 'tooltip-ca-watch' => 'Добавить эту страницу в ваш список наблюдения',
 'tooltip-ca-unwatch' => 'Удалить эту страницу из вашего списка наблюдения',
-'tooltip-search' => 'Искать это слово',
+'tooltip-search' => 'Искать в {{grammar:genitive|{{SITENAME}}}}',
 'tooltip-search-go' => 'Перейти к странице, имеющей в точности такое название',
 'tooltip-search-fulltext' => 'Найти страницы, содержащие указанный текст',
-'tooltip-p-logo' => 'Ð\97аглавнаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а',
+'tooltip-p-logo' => 'Ð\9fеÑ\80ейÑ\82и Ð½Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ñ\83Ñ\8e Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83',
 'tooltip-n-mainpage' => 'Перейти на заглавную страницу',
 'tooltip-n-mainpage-description' => 'Перейти на заглавную страницу',
-'tooltip-n-portal' => 'О проекте, о том, что вы можете сделать, где что находится',
-'tooltip-n-currentevents' => 'СпиÑ\81ок Ñ\82екÑ\83Ñ\89иÑ\85 Ñ\81обÑ\8bÑ\82ий',
+'tooltip-n-portal' => 'О проекте, о том, чем здесь можно заниматься, а также — где что находится',
+'tooltip-n-currentevents' => 'Ð\98нÑ\84оÑ\80маÑ\86иÑ\8f Ð¾ Ñ\82екÑ\83Ñ\89иÑ\85 Ñ\81обÑ\8bÑ\82иÑ\8fÑ\85',
 'tooltip-n-recentchanges' => 'Список последних изменений',
-'tooltip-n-randompage' => 'Посмотреть случайную страницу',
-'tooltip-n-help' => 'СпÑ\80авоÑ\87ник Ð¿Ð¾ Ð¿Ñ\80оекÑ\82Ñ\83 Â«{{SITENAME}}»',
-'tooltip-t-whatlinkshere' => 'Список всех страниц, которые ссылаются на эту страницу',
+'tooltip-n-randompage' => 'Посмотреть случайно выбранную страницу',
+'tooltip-n-help' => 'Ð\9cеÑ\81Ñ\82о, Ð³Ð´Ðµ Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ð¾Ð»Ñ\83Ñ\87иÑ\82Ñ\8c Ñ\81пÑ\80авкÑ\83',
+'tooltip-t-whatlinkshere' => 'Список всех страниц, ссылающихся на данную',
 'tooltip-t-recentchangeslinked' => 'Последние изменения в страницах, на которые ссылается эта страница',
 'tooltip-feed-rss' => 'Трансляция в RSS для этой страницы',
 'tooltip-feed-atom' => 'Трансляция в Atom для этой страницы',
 'tooltip-t-contributions' => 'Список страниц, которые изменял этот участник',
 'tooltip-t-emailuser' => 'Отправить письмо этому участнику',
-'tooltip-t-upload' => 'Загрузить изображения или мультимедиа-файлы',
+'tooltip-t-upload' => 'Загрузить файлы',
 'tooltip-t-specialpages' => 'Список служебных страниц',
 'tooltip-t-print' => 'Версия этой страницы для печати',
 'tooltip-t-permalink' => 'Постоянная ссылка на эту версию страницы',
-'tooltip-ca-nstab-main' => 'СодеÑ\80жание Ñ\81Ñ\82аÑ\82Ñ\8cи',
+'tooltip-ca-nstab-main' => 'Ð\9fÑ\80оÑ\81моÑ\82Ñ\80 Ð¾Ñ\81новной Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b',
 'tooltip-ca-nstab-user' => 'Персональная страница участника',
 'tooltip-ca-nstab-media' => 'Медиа-файл',
 'tooltip-ca-nstab-special' => 'Это служебная страница, она недоступна для редактирования',
@@ -3141,7 +3150,7 @@ $1',
 'tooltip-ca-nstab-category' => 'Страница категории',
 'tooltip-minoredit' => 'Отметить это изменение как незначительное',
 'tooltip-save' => 'Сохранить ваши изменения',
-'tooltip-preview' => 'Предварительный просмотр страницы, пожалуйста, используйте перед сохранением!',
+'tooltip-preview' => 'Предварительный просмотр страницы; пожалуйста, используйте его перед сохранением!',
 'tooltip-diff' => 'Показать изменения, сделанные по отношению к исходному тексту.',
 'tooltip-compareselectedversions' => 'Посмотреть разницу между двумя выбранными версиями этой страницы.',
 'tooltip-watch' => 'Добавить эту страницу в свой список наблюдения',
@@ -3217,7 +3226,7 @@ The wiki server can't provide data in a format your client can read.",
 
 # Info page
 'pageinfo-title' => 'Сведения по «$1»',
-'pageinfo-not-current' => 'Ð\94аннÑ\8bе Ð¿Ñ\80едоÑ\81Ñ\82авлÑ\8fÑ\8eÑ\82Ñ\81Ñ\8f Ñ\82олÑ\8cко Ð´Ð»Ñ\8f Ñ\82екÑ\83Ñ\89ей Ð¿Ñ\80авки.',
+'pageinfo-not-current' => 'Ð\9a Ñ\81ожалениÑ\8e, Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ\80едоÑ\81Ñ\82авиÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8e Ð´Ð»Ñ\8f Ñ\81Ñ\82аÑ\80Ñ\8bÑ\85 Ð²ÐµÑ\80Ñ\81ий.',
 'pageinfo-header-basic' => 'Основные сведения',
 'pageinfo-header-edits' => 'История изменений',
 'pageinfo-header-restrictions' => 'Защита страницы',
@@ -3235,7 +3244,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-redirects-name' => 'Перенаправления на эту страницу',
 'pageinfo-redirects-value' => '$1',
 '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' => 'Последний редактор',
@@ -3247,11 +3256,19 @@ 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' => 'сведения',
+'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' => 'Классическое',
@@ -3273,6 +3290,8 @@ The wiki server can't provide data in a format your client can read.",
 'markedaspatrollederror' => 'Невозможно отметить как проверенную',
 'markedaspatrollederrortext' => 'Вы должны указать версию, которая будет отмечена как проверенная.',
 'markedaspatrollederror-noautopatrol' => 'Вам не разрешено отмечать собственные правки как проверенные.',
+'markedaspatrollednotify' => 'Это изменение на странице «$1» было отмечено как проверенное.',
+'markedaspatrollederrornotify' => 'Отметить изменение как проверенное не удалось.',
 
 # Patrol log
 'patrol-log-page' => 'Журнал патрулирования',
@@ -3307,6 +3326,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.',
@@ -3341,7 +3361,10 @@ $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' => 'только что',
 
 # Bad image list
 'bad_image_list' => 'Формат должен быть следующим:
@@ -3944,8 +3967,8 @@ $5
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Изменения на страницах из списка',
-'watchlisttools-edit' => 'Смотреть/править список',
-'watchlisttools-raw' => 'Ð\9fÑ\80авиÑ\82Ñ\8c ÐºÐ°Ðº текст',
+'watchlisttools-edit' => 'Смотреть и редактировать список',
+'watchlisttools-raw' => 'РедакÑ\82иÑ\80оваÑ\82Ñ\8c ÐºÐ°Ðº Ð¾Ð±Ñ\8bÑ\87нÑ\8bй текст',
 
 # Iranian month names
 'iranian-calendar-m1' => 'Фарвардин',
@@ -4149,15 +4172,15 @@ MediaWiki распространяется в надежде, что она бу
 'sqlite-no-fts' => '$1 без поддержки полнотекстового поиска',
 
 # New logging system
-'logentry-delete-delete' => '$1 {{GENDER:$1|удалил|удалила}} страницу $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|удалил|удалила}} страницу $3',
 'logentry-delete-restore' => '$1 {{GENDER:$1|восстановил|восстановила}} страницу $3',
-'logentry-delete-event' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей|$5 записей}} журнала на $3: $4',
-'logentry-delete-revision' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий|$5 версий}} на странице $3: $4',
+'logentry-delete-event' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей}} журнала на $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий}} на странице $3: $4',
 'logentry-delete-event-legacy' => '$1 {{GENDER:$1|изменил|изменила}} видимость записей журнала $3',
 'logentry-delete-revision-legacy' => '$1 {{GENDER:$1|изменил|изменила}} видимость версий на странице $3',
 'logentry-suppress-delete' => '$1 {{GENDER:$1|подавил|подавила}} страницу $3',
-'logentry-suppress-event' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей|$5 записей}} журнала на $3: $4',
-'logentry-suppress-revision' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий|$5 версий}} на странице $3: $4',
+'logentry-suppress-event' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей}} журнала на $3: $4',
+'logentry-suppress-revision' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий}} на странице $3: $4',
 'logentry-suppress-event-legacy' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость записей журнала $3',
 'logentry-suppress-revision-legacy' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость версий на странице $3',
 'revdelete-content-hid' => 'содержание скрыто',
@@ -4174,11 +4197,15 @@ MediaWiki распространяется в надежде, что она бу
 'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления и без оставления перенаправления',
 'logentry-patrol-patrol' => '$1 {{GENDER:$1|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
 'logentry-patrol-patrol-auto' => '$1 автоматически {{GENDER:$1|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
-'logentry-newusers-newusers' => '$1 {{GENDER:$1|создал|создала}} учётную запись участника',
-'logentry-newusers-create' => '$1 {{GENDER:$1|создал|создала}} учётную запись',
-'logentry-newusers-create2' => '$1 {{GENDER:$1|создал|создала}} учётную запись участника $3',
+'logentry-newusers-newusers' => 'Создана учётная запись $1',
+'logentry-newusers-create' => 'Создана учётная запись $1',
+'logentry-newusers-create2' => '$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» была автоматически переведена из $4 в $5',
+'rightsnone' => '(нет)',
 
 # Feedback
 'feedback-bugornote' => 'Если вы готовы подробно описать техническую проблему, пожалуйста, [$1 сообщите об ошибке].
index 0865153..535e695 100644 (file)
@@ -166,7 +166,7 @@ $messages = array(
 
 'underline-always' => 'Все',
 'underline-never' => 'Нїґда',
-'underline-default' => 'Хосновати наставлїня переглядача',
+'underline-default' => 'Хосновати наставлїня переглядача або взгляду',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Тіп писма в едітачнім полю:',
@@ -251,8 +251,8 @@ $messages = array(
 'newwindow' => '(отворить ся в новім окнї)',
 'cancel' => 'Зрушыти',
 'moredotdotdot' => 'Детайлнїше…',
-'mypage' => 'Ð\9cоÑ\8f Ñ\81торінка',
-'mytalk' => 'Ð\9cоÑ\8f Ð´іскузія',
+'mypage' => 'Сторінка',
+'mytalk' => 'Ð\94іскузія',
 'anontalk' => 'Діскузія к тїй IP-адресї',
 'navigation' => 'Навіґація',
 'and' => '&#32;і',
@@ -274,7 +274,7 @@ $messages = array(
 'vector-action-protect' => 'Всокотити',
 'vector-action-undelete' => 'Обновити',
 'vector-action-unprotect' => 'Змінити замок',
-'vector-simplesearch-preference' => 'Ð\9fоволиÑ\82и Ñ\80оÑ\81Ñ\88Ñ\8bÑ\80енÑ\8b Ð¿Ñ\80опозÑ\96Ñ\86Ñ\96Ñ\97 гляданя (лем взгляд Vector )',
+'vector-simplesearch-preference' => 'Ð\9fоволиÑ\82и Ñ\81пÑ\80оÑ\89ене Ð¿Ð¾Ð»Ðµ гляданя (лем взгляд Vector )',
 'vector-view-create' => 'Створити',
 'vector-view-edit' => 'Едітовати',
 'vector-view-history' => 'Видїти історію',
@@ -284,6 +284,7 @@ $messages = array(
 'namespaces' => 'Просторы назв',
 'variants' => 'Варіанты',
 
+'navigation-heading' => 'Навіґачне меню',
 'errorpagetitle' => 'Хыба',
 'returnto' => 'Навернутя до сторінкы «$1».',
 'tagline' => 'Матеріал з {{grammar:genitive|{{SITENAME}}}}',
@@ -491,12 +492,14 @@ $1',
 'viewsource-title' => 'Видїти жрідло сторінкы $1',
 'actionthrottled' => 'Акція была придушена',
 'actionthrottledtext' => 'Взглядом ку протиспамовым крокам не можете жадану акцію провести барз часто в короткім часї. Спробуйте то знову о пару мінут.',
-'protectedpagetext' => 'Тота сторінка была замкнута, также ся не дасть едітовати',
+'protectedpagetext' => 'Тота сторінка была замкнута, жебы не годен быв єй едітовати або інакше мінити.',
 'viewsourcetext' => 'Можете видїти і копіровати код той сторінкы:',
 'viewyourtext' => "Можете собі посмотрити і скопіровати жрідловый текст '''вашых змін''' той сторінкы:",
 'protectedinterface' => 'Тота сторінка є частёв інтрефейсу проґрамового забеспечіня той вікі і єй можуть едітовати лем адміністраторы проєкту.
 Жебы придати або змінити переклады, просиме хоснуйте [//translatewiki.net/ translatewiki.net], локалізачный проєкт MediaWiki.',
-'editinginterface' => "'''Увага:''' Едітуєте сторінку,котра є частинов текстового інтерфейсу. Зміны той сторінкы выкличуть зміну інтерфейсу про іншых хоснователїв. Про переклад увідомлїня хоснуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проєкт, што ся занимає локалізаціёв MediaWiki.",
+'editinginterface' => "'''Позірь:''' Едітуєте сторінку,котра є частинов текстового інтерфейсу.
+Зміны той сторінкы выкличуть зміну інтерфейсу про іншых хоснователїв той вікі. 
+Додати ці змінити переклады на вшыткых вікі просиме хоснуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проєкт, што ся занимать локалізаціов MediaWiki.",
 'sqlhidden' => '(SQL запрос скрытый)',
 'cascadeprotected' => 'Сторінка є замнкута, бо є вложена до  {{PLURAL:$1|наслїдуючой сторінкы замкнуты|наслїдуючіх сторінок замнкнутых|наслїдуючіх сторінок замнкнутых}} каскадовым замком:
 $2',
@@ -522,9 +525,9 @@ $2',
 'logouttext' => "'''Нынї сьте одголошеный(а).'''
 
 Можете продовжовати в анонімнім перезераню і едітації {{grammar:2sg|{{SITENAME}}}}, або ся можете <span class='plainlinks'>[$1 зясь приголосити]</span> як тот самый або як іншый хоснователь. Даякы сторінкы ся можуть зображовати як кібы сьте были дотеперь приголошены, покы не змажете кеш переглядача.",
-'welcomecreation' => '== Вітаєме вас, $1! ==
-Ваше конто было вытворене.
-Не забудьте змінити свої [[Special:Preferences|наставлїня сайту]].',
+'welcomeuser' => 'Вітайте, $1!',
+'welcomecreation-msg' => 'Ваше конто было вытворене.
+Не забудьте змінити свої [[Special:Preferences|наставлїня {{grammar:2sg|{{SITENAME}}}}]].',
 'yourname' => 'Імя хоснователя:',
 'yourpassword' => 'Гесло:',
 'yourpasswordagain' => 'Повторяйте гесло:',
@@ -680,6 +683,7 @@ $2
 'changeemail-oldemail' => 'Теперїшня імейлова адреса:',
 'changeemail-newemail' => 'Нова імейлова адреса:',
 'changeemail-none' => '(жадне)',
+'changeemail-password' => 'Ваше гесло на портал {{SITENAME}}:',
 'changeemail-submit' => 'Змінити імейл',
 'changeemail-cancel' => 'Сторно',
 
@@ -768,9 +772,8 @@ $2
 Можете [[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>, но вы не мате права створити тоту сторінку.',
 'missing-revision' => 'Ревізія #$1 сторінкы з назвов „{{PAGENAME}}“ не є.
 
 Гевсе звычайно запрічінене так, же наслїдовали сьте застарїлый історічный одказ на сторінку, котра была уж змазана.
@@ -781,7 +784,6 @@ $2
 Послїднїй запис в лоґах блоковань є такый:',
 'clearyourcache' => "'''Позначка: По уложіню мусите вымазати кеш вашого перезерача, інакше зміны не будете видїти.'''
 '''Mozilla / Firefox / Safari:''' При кликнутю на ''Актуалізовати'' тримайте ''Shift'', або стиснийте ''Ctrl-F5'' або ''Ctrl-R'' (на Macintosh ''Command-R'');
-'''Konqueror''': Кликнийте на ''Актуалізовати'' або стиснийте ''F5'';
 '''Opera:''' Вымажте обсяг кеш в меню ''Інштрументы → Наставлїня'';
 '''Internet Explorer:''' При кликнутю на ''Актуалізовати'' тримайте ''Ctrl'', або стиснийте ''Ctrl-F5''.",
 'usercssyoucanpreview' => "'''Тіп:''' Хоснуйте ґомбічку „{{int:showpreview}}“ про тестованя вашого нового CSS перед уложінём.",
@@ -798,7 +800,7 @@ $2
 'note' => "'''Позначка:'''&nbsp;",
 'previewnote' => "'''Памятайте, же то лем нагляд.'''
 Зміны іщі не суть уложены!",
-'continue-editing' => 'Продовжыти едітованя',
+'continue-editing' => 'Перейти на поле едітованя',
 'previewconflict' => 'Тот нагляд зображує текст так, як буде вызерати по уложіню сторінкы.',
 'session_fail_preview' => "'''Вашу пожадавку ся не удало спрацовати, бо были страчены дата сеансу.
 Просиме, спробуйте то зясь.
@@ -850,7 +852,6 @@ $2
 'template-protected' => '(всокочена)',
 'template-semiprotected' => '(частково всокочене)',
 'hiddencategories' => 'Тота сторінка належыть до $1 {{PLURAL:$1|схованa катеґорія|схованы катеґорії|схованых катеґорій}}:',
-'nocreatetitle' => 'Створїня сторінок обмеджено',
 'nocreatetext' => 'На {{grammar:6sg|{{SITENAME}}}} є можливость створїна новых сторінок обмеджена.
 Можете ся вернути і едітовати уж екзістуючу сторінку, або [[Special:UserLogin|ся приголосити ці ся реґістровати]].',
 'nocreate-loggedin' => 'Не маєте права створёвати новы сторінкы.',
@@ -873,6 +874,15 @@ $2
 'edit-no-change' => 'Ваша едітація была іґнорована, бо ся не зробила жадна зміна тексту.',
 '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' => 'Увага: Тота сторінка обсягує дуже много кликаня выконово тяжкых функцій парсера.
@@ -1236,9 +1246,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' => 'Язык:',
@@ -1388,12 +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',
-'rightsnone' => '(жадне)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'прочітати тоту сторінку',
@@ -1613,6 +1624,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.',
@@ -1760,6 +1772,7 @@ $1',
 'uploadnewversion-linktext' => 'Наладовати нову верзію того файлу',
 'shared-repo-from' => 'з $1',
 'shared-repo' => 'здїляного усховіща',
+'upload-disallowed-here' => 'Вы не годны переписовати тот файл.',
 
 # File reversion
 'filerevert' => 'Вернути назад $1',
@@ -1867,6 +1880,7 @@ $1',
 # 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|ревізія|ревізії|ревізій}}',
@@ -1895,6 +1909,7 @@ $1',
 'mostlinkedtemplates' => 'Найужыванїшы шаблоны',
 'mostcategories' => 'Сторінкы з найвекшым чіслом катеґорій',
 'mostimages' => 'Найужыванїшы файлы',
+'mostinterwikis' => 'Сторінкы з найвекшым чіслом міджіязыковых одказів',
 'mostrevisions' => 'Сторінкы з найвеце ревізіями',
 'prefixindex' => 'Вшыткы сторінкы з початком назв',
 'prefixindex-namespace' => 'Вшыткы сторінкы з префіксом (простор назв $1)',
@@ -1994,7 +2009,7 @@ $1',
 'linksearch-ok' => 'Глядати',
 'linksearch-text' => 'Може хосновати заступны сімболы, наприклад „*.wikipedia.org“.<br />
 Повиннов є передовшыткым домена найвысшой уровни, напр. „*.org“.<br />
-Підпорованы протоколы: <code>$1</code>',
+Підпорованы протоколы: <code>$1</code> (кідь не є шпеціфікованый та http://).',
 'linksearch-line' => '$2 одказує на $1',
 'linksearch-error' => 'Заступны сімболы може хосновати лем на початку доменового мена.',
 
@@ -2013,10 +2028,6 @@ $1',
 'activeusers-hidesysops' => 'Сховати адміністраторів',
 'activeusers-noresult' => 'Ненайдженый жаден хоснователь.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Лоґ вытварянь хоснователїв',
-'newuserlogpagetext' => 'Тото є список ново реґістрованых хоснователїв.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права ґруп хоснователїв',
 'listgrouprights-summary' => 'Тото є список ґруп хоснователїв дефінованых на тій вікіi і&nbsp;їх приступовых прав.
@@ -2041,9 +2052,11 @@ $1',
 'mailnologin' => 'Без адресы одосланя',
 'mailnologintext' => 'Кідь хочете посылати ел. пошту іншым хоснователям, мусите ся [[Special:UserLogin|приголосити]] і мати платну адресу ел. пошты в своїм [[Special:Preferences|наставлїню]].',
 'emailuser' => 'Послати імейл тому хоснователёви',
+'emailuser-title-target' => 'Загнати імейл {{GENDER:$1|тому хоснователёви|тій хосновательцї}}',
+'emailuser-title-notarget' => 'Загнати імейл хоснователёви',
 'emailpage' => 'Пошлийте е-пошту',
-'emailpagetext' => 'Ð\9fомоÑ\87ов Ð½Ð¸Ð¶Ðµ Ð·Ð¾Ð±Ñ\80аженого Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8f Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\82омÑ\83 Ñ\85оÑ\81новаÑ\82елÑ\91ви Ð¿Ð¾Ñ\81лати повідомлїня ел. поштов.
\90дÑ\80еÑ\81а ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\83 Ð¼Ð°Ñ\82е Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\83 Ð² [[Special:Preferences|наÑ\81Ñ\82авлÑ\97нÑ\8f]],Ñ\81Ñ\8f Ð¾Ð±Ñ\8fвиÑ\82Ñ\8c Ñ\8fк Ð°Ð´Ñ\80еÑ\81а Ð¾Ð´Ð¾Ñ\81Ñ\8bлаÑ\82елÑ\8f Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, Ð¶ÐµÐ±Ñ\8b Ð²Ð°Ð¼ Ð°Ð´Ñ\80еÑ\81аÑ\82 Ð¼Ñ\96г Ð¾Ð´Ð¿Ð¾Ð²Ñ\96Ñ\81Ñ\82и Ð¿Ñ\80Ñ\8fмо.',
+'emailpagetext' => 'Ð\97 Ð½Ð¸Ð¶Ðµ Ð·Ð¾Ð±Ñ\80аженÑ\8bм Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\91м Ð³Ð¾Ð´Ð½Ð¾ {{GENDER:$1|Ñ\82омÑ\83 Ñ\85оÑ\81новаÑ\82елÑ\91ви|Ñ\82Ñ\96й Ñ\85оÑ\81новаÑ\82елÑ\8cÑ\86Ñ\97}} Ð·Ð°Ð³Ð½ати повідомлїня ел. поштов.
\90дÑ\80еÑ\81а ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\83 Ð¼Ð°Ñ\82е Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\83 Ð² [[Special:Preferences|наÑ\81Ñ\82авлÑ\97нÑ\8f]],Ñ\81Ñ\8f Ð¾Ð±Ñ\8fвиÑ\82Ñ\8c Ñ\8fк Ð°Ð´Ñ\80еÑ\81а Ð¾Ð´Ð¾Ñ\81Ñ\8bлаÑ\82елÑ\8f Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, Ð¶ÐµÐ±Ñ\8b Ð²Ð°Ð¼ Ð°Ð´Ñ\80еÑ\81аÑ\82 Ð¼Ñ\96г Ð±ÐµÑ\81поÑ\81еÑ\80еднÑ\91 Ð¾Ð´Ð¿Ð¾Ð²Ñ\96Ñ\81Ñ\82и.',
 'usermailererror' => 'Хыба поштового проґраму:',
 'defemailsubject' => '{{SITENAME}}: лист од "$1"',
 'usermaildisabled' => 'Посыланя ел. пошты є выпнуте',
@@ -2081,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' => 'Слїдовати',
@@ -2110,42 +2123,48 @@ $1',
 
 'enotif_mailer' => 'Засылач нотіфікацій {{grammar:2sg|{{SITENAME}}}}',
 'enotif_reset' => 'Означіти вшытко як навщівене',
-'enotif_newpagetext' => 'Тото є нова сторінка.',
 'enotif_impersonal_salutation' => 'Хоснователь {{grammar:genitive|{{SITENAME}}}}',
-'changed' => 'змінена',
-'created' => 'створена',
-'enotif_subject' => '$PAGEEDITOR змінив сторінку $PAGETITLE на {{grammar:6sg|{{SITENAME}}}}.',
+'enotif_subject_deleted' => '$2 {{gender:$2|змазав|змазала}} сторінку $1 на {{grammar:6sg|{{SITENAME}}}}',
+'enotif_subject_created' => '$2 {{gender:$2|створив|створила}} сторінку $1 на {{grammar:6sg|{{SITENAME}}}}',
+'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_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 .',
+'enotif_body_intro_changed' => 'В $PAGEEDITDATE {{gender:$2|змінив|змінила}} $2 на {{grammar:6sg|{{SITENAME}}}} сторінку $1, посмотьте актуалну верзію на $3 .',
 'enotif_lastvisited' => 'Видьте $1 про список вшыткых змін од минулой навщівы.',
 'enotif_lastdiff' => 'Тоту зміну видьте на $1',
 'enotif_anon_editor' => 'анонімный хоснователь $1',
-'enotif_body' => 'Ð\94оÑ\80огый хоснователю $WATCHINGUSERNAME,
+'enotif_body' => 'ЧеÑ\81Ñ\82ованый хоснователю $WATCHINGUSERNAME,
 
-У $PAGEEDITDATE была хоснователём $PAGEEDITOR $CHANGEDORCREATED сторінка $PAGETITLE, смотьте актуалну верзію на $PAGETITLE_URL .
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
-Куртый опис змін: $PAGESUMMARY $PAGEMINOREDIT
+Згорнутя едітованя: $PAGESUMMARY $PAGEMINOREDIT
 
-Хоснователя, котрый учінив зміну, можете контактовати:
+Хоснователя, котрый зміну учінив, можете контактовати:
 імейлом: $PAGEEDITOR_EMAIL
 на вікі: $PAGEEDITOR_WIKI
 
-Покы сторінку не навщівите, не будуть вам посыланы далшы повідомлїя о змінах той сторінкы.
-Припадно собі можете вынуловати флачы у своїм списку слїдованых сторінок.
+Покы сторінку не навщівите, не будуть вам заганяны далшы повідомлїня о змінах той сторінкы. Тыж собі можете вынуловати признакы у своїм списку слїдованых сторінок.
 
-       Ð\9fоздÑ\80авÑ\83Ñ\94 Ð²Ð°Ñ\88 Ð¿Ð¾Ñ\81Ñ\8bлаÑ\87 Ð¿Ð¾Ð²Ñ\96домлÑ\97нÑ\8c {{grammar:2sg|{{SITENAME}}}}
+       Ð\9fоздÑ\80авÑ\83Ñ\94 Ð²Ð°Ñ\81 Ð²Ð°Ñ\88 Ð¿Ð¾Ñ\81Ñ\8bлаÑ\87 Ð³Ð¾Ð»Ð¾Ñ\88Ñ\96нÑ\8f {{grammar:2sg|{{SITENAME}}}}
 
 --
\97мÑ\96ниÑ\82и Ð½Ð°Ñ\81Ñ\82авлÑ\97ня імейловых повідомлїнь можете на
\97мÑ\96ниÑ\82и Ð½Ð°Ñ\88Ñ\82елÑ\91ваня імейловых повідомлїнь можете на
 {{canonicalurl:{{#special:Preferences}}}}
 
\9dаÑ\81Ñ\82авлÑ\97ня слїдованых сторінок можете змінити на
\9dаÑ\88Ñ\82елÑ\91ваня слїдованых сторінок можете змінити на
 {{canonicalurl:Special:Watchlist/edit}}
 
-Сторінку можете із своїх слїдованых вылучіти на
+Сторінку можете зо своїх слїдованых вышмарити на
 $UNWATCHURL
 
 Порада і контакт:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створена',
+'changed' => 'змінена',
 
 # Delete
 'deletepage' => 'Змазати сторінку',
@@ -2291,7 +2310,8 @@ $UNWATCHURL
 'undeletedrevisions' => '{{PLURAL:$1|Обновлена $1 верзія|Обновлены $1 верзії|Обновленых $1 верзій}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|Обновлена єдна верзія|Обновлены $1 верзії|Обновленых $1 верзій}} і $2 {{PLURAL:$2|файл|файлы|файлів}}.',
 'undeletedfiles' => '{{PLURAL:$1|обновленый $1 файл|обновлены $1 файлы|обновленых $1 файлів}}',
-'cannotundelete' => 'Обновлїня ся не вдало; правдоподобно  дахто другый обновив сторінку скоре як вы.',
+'cannotundelete' => 'Обновлїня ся не вдало:
+$1',
 'undeletedpage' => "'''$1 была обновлена'''
 
 Запис о послїднїх мазанях і обновлїнях найдете в  [[Special:Log/delete|книзї змазаных сторінок]].",
@@ -2322,9 +2342,9 @@ $1',
 'blanknamespace' => '(Основный)',
 
 # Contributions
-'contributions' => 'Ð\9fÑ\80иÑ\81пÑ\96вок Ñ\85оÑ\81новаÑ\82елÑ\8f',
+'contributions' => 'Ð\9fÑ\80иÑ\81пÑ\96вкÑ\8b {{GENDER:$1|Ñ\85оÑ\81новаÑ\82елÑ\8f\85оÑ\81новаÑ\82елÑ\8cкÑ\8b}}',
 'contributions-title' => 'Приспівок хоснователя $1',
-'mycontris' => 'Ð\9cоÑ\97 Ð¿риспівкы',
+'mycontris' => 'Ð\9fриспівкы',
 'contribsub2' => 'Приспівок $1 ($2)',
 'nocontribs' => 'Ненайджены жадны зміны за тыма крітеріями.',
 'uctop' => ' (послїдня)',
@@ -2365,7 +2385,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 напрямлїня',
 'whatlinkshere-hidetrans' => '$1 вложіня',
 'whatlinkshere-hidelinks' => '$1 одказы',
-'whatlinkshere-hideimages' => '$1 Ð²Ð»Ð¾Ð¶Ñ\96нÑ\8f Ñ\84айлÑ\83',
+'whatlinkshere-hideimages' => '$1 Ð¾Ð´ÐºÐ°Ð· Ð½Ð° Ñ\84айл',
 'whatlinkshere-filters' => 'Філтры',
 
 # Block/unblock
@@ -2592,6 +2612,7 @@ $1',
 'immobile-target-namespace-iw' => 'Міджіязыковый одказ не є валідный ціль про переменованя сторінкы.',
 'immobile-source-page' => 'Тота сторінка ся не дасть переменовати.',
 'immobile-target-page' => 'Сторінка ся не дасть переменовати на дану назву.',
+'bad-target-model' => 'Желаный цїль хоснує другый модел обсягу. Не годен перевести $1 на $2.',
 'imagenocrossnamespace' => 'Не дасть ся переменовати файл мімо простор назв файлів',
 'nonfile-cannot-move-to-file' => 'До простору назв  {{ns:file}} ся не дають переменовати сторінкы неналежачі ку файлу',
 'imagetypemismatch' => 'Нове росшырїня файлу не одповідать ёго тіпу',
@@ -2668,6 +2689,7 @@ $1',
 'import-interwiki-templates' => 'Загорнути вшыткы шаблоны',
 'import-interwiki-submit' => 'Імпортовати',
 'import-interwiki-namespace' => 'Цілёвый простор назв:',
+'import-interwiki-rootpage' => 'Цїлёва корїнёва сторінка (необовязково):',
 'import-upload-filename' => 'Назва файлу:',
 'import-comment' => 'Коментарь:',
 'importtext' => 'Просиме Вас, експортуйте сторінку з іншой вікі помочов [[Special:Export|інштрументу на експорт]], уложте файл на ваш діск а потім го заладуйте гев.',
@@ -2699,6 +2721,10 @@ $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» не дозволены підсторінкы',
 
 # Import log
 'importlogpage' => 'Книга імпортів',
@@ -2814,18 +2840,43 @@ $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-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|Маґічне слово|Маґічны слова}} ($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' => 'Каскадна охорона ся почінать гев',
 
 # Patrolling
 'markaspatrolleddiff' => 'Означіти як перевірене',
@@ -2837,6 +2888,8 @@ $1',
 'markedaspatrollederror' => 'Не дасть ся означіти як перевірене',
 'markedaspatrollederrortext' => 'Мусите зволити ревізію, котра має быти означена як перевірена.',
 'markedaspatrollederror-noautopatrol' => 'Не маєте дозволене означовати властны едітованя як перевірены.',
+'markedaspatrollednotify' => 'Гевся зміна сторінкы $1 была означена як одпратролована.',
+'markedaspatrollederrornotify' => 'Не вдало ся поставити позначку про патролёваня',
 
 # Patrol log
 'patrol-log-page' => 'Книга перевіреных едітовань',
@@ -2870,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.',
@@ -2879,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' => 'Ґалерія новых файлів',
@@ -2898,6 +2955,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 година|$1 годины|$1 годин}}',
 'days' => '{{PLURAL:$1|$1 день|$1 днї|$1 днїв}}',
 'ago' => '$1 тому',
+'just-now' => 'акурат теперь',
 
 # Bad image list
 'bad_image_list' => 'Формат має быти наступным:
@@ -3390,6 +3448,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[Вкладаня шаблон міджі вікі є выпнуте]',
 'scarytranscludefailed' => '[Не вдало ся натягнути шаблону про $1]',
+'scarytranscludefailed-httpstatus' => '[Не вдало ся наладовати шаблону про $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL дуже довгый]',
 
 # Delete conflict
@@ -3499,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.
@@ -3637,11 +3697,15 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 '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' => '$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 8348886..264720a 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,9 +680,9 @@ $2',
 
 भवान् {{SITENAME}} इत्येतत् अनामतया प्रयोक्तुं शक्नोति, अथवा भवान् तेनैव प्रयोक्तृनाम्ना, भिन्नप्रयोक्तृनाम्ना वा  <span class='plainlinks'>[$1 पुनः प्रवेष्टुं शक्नोति]</span>।
 इदानीमपि कानिचन पृष्ठानि पूर्ववदेव दृश्येरन् । अस्य वारणाय विचरकस्य स्मृतिसञ्चयः रिक्तीक्रियताम् ।",
-'welcomecreation' => '==स्वागतम्‌, $1!==
-भवता सदस्यता प्राप्ता अस्ति।
-भवतà¤\83 [[Special:Preferences|{{SITENAME}} à¤\87षà¥\8dà¤\9fतमानि]]  à¤\87तà¥\8dयसà¥\8dय à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤¨ विस्मर्यताम्।',
+'welcomeuser' => 'स्वागतं, हे $1!',
+'welcomecreation-msg' => 'भवतः लेखा रचिताऽस्ति।
+सà¥\8dवà¤\95à¥\80यानाà¤\82 [[Special:Preferences|{{SITENAME}} à¤\87षà¥\8dà¤\9fतमानाà¤\82]]. à¤¨à¤¿à¤\97दनà¤\82 à¤®à¤¾ विस्मर्यताम्।',
 'yourname' => 'योजकनामन्:',
 'yourpassword' => 'कूटशब्दः',
 'yourpasswordagain' => 'कूटशब्दः पुनः लिख्यताम् ।',
@@ -840,6 +841,7 @@ $2
 'changeemail-oldemail' => 'प्रचलितः विद्युन्मानपत्रसङ्केतः ।',
 'changeemail-newemail' => 'नूतनः विद्युन्मानसङ्केतः ।',
 'changeemail-none' => 'असत्',
+'changeemail-password' => 'भवतः {{SITENAME}} कूटशब्दः:',
 'changeemail-submit' => 'विद्युन्मानपत्रसङ्केतं परिवर्तयतु ।',
 'changeemail-cancel' => 'निवर्तयते',
 
@@ -1012,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' => 'विभागसम्पादनं न पोषितम् ।',
@@ -1035,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' => "'''प्रबोधः :''' अस्मिन् पृष्ठे प्रभूतानि जटिलानि पार्सर्-फ़ंक्शन्-आह्वानानि सन्ति।
@@ -1533,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' => 'एतत्पुटं पठतु ।',
@@ -1766,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 मध्ये प्रतिकृतिः कर्तुं नैव शक्यते ।',
@@ -2175,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]]',
@@ -2272,15 +2279,23 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 
 'enotif_mailer' => '{{SITENAME}} सूचितः विद्युन्मानपत्रप्रेषकः ।',
 'enotif_reset' => 'सन्दर्शितानि इति सर्वपुटानि अङ्कयतु ।',
-'enotif_newpagetext' => 'इदम् एकं नवीनपृष्ठम्',
 'enotif_impersonal_salutation' => '{{SITENAME}} योजक',
-'changed' => 'परिवर्तितम् ।',
-'created' => 'सृष्टम् ।',
-'enotif_subject' => '{{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' => 'आत्मीय $ अवलोकनबन्धो',
+'created' => 'सृष्टम् ।',
+'changed' => 'परिवर्तितम् ।',
 
 # Delete
 'deletepage' => 'पृष्ठं निराकरोतु।',
@@ -2736,6 +2751,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'immobile-target-namespace-iw' => 'पुटचालनार्थम् अन्तर्विक्यानुबन्धः मान्यं लक्ष्यं न ।',
 'immobile-source-page' => 'एतत्पुटं चालनयोग्यं न ।',
 'immobile-target-page' => 'तत् लक्षितशीर्षकं प्रति चालयितुं न शक्यते ।',
+'bad-target-model' => 'अभीष्टगन्तव्ये तु भिन्नमेकं सामग्रीप्रतिमानं प्रयुज्यते। $1 इत्यस्य $2 इत्यस्मिन् परिवर्तनं न शक्यम्।',
 'imagenocrossnamespace' => 'सञ्चिकां  अनामस्थाने स्थानान्तरितं कर्तुं नैव शक्यते ।',
 'nonfile-cannot-move-to-file' => 'असञ्चिकायाः सञ्चिकानामस्थाने स्थानान्तरं न शक्यते ।',
 'imagetypemismatch' => 'नूतपुटविस्तारः तस्य प्रकाण सह मेलं न  प्राप्नोति ।',
@@ -2962,6 +2978,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # Info page
 'pageinfo-title' => '"$1" कृते सूचनाः ।',
+'pageinfo-not-current' => 'क्षम्यताम्, पुरातनाभ्यः आवृत्तिभ्यः एषा सूचना दातुं न शक्यते।',
 'pageinfo-header-basic' => 'मूलसूचनाः ।',
 'pageinfo-header-edits' => 'इतिहासः सम्पाद्यताम्',
 'pageinfo-header-restrictions' => 'पृष्ठसंरक्षणम्',
@@ -2970,6 +2987,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'pageinfo-default-sort' => 'संविभागकीलकं पूर्वनिर्दिष्टं क्रियताम्',
 'pageinfo-length' => 'पृष्ठदैर्घ्यम् (बैट्स्द्वारा)',
 'pageinfo-article-id' => 'पृष्ठाभिज्ञापकम्',
+'pageinfo-language' => 'पृष्ठसामग्र्याः भाषा',
 'pageinfo-robot-policy' => 'चालकयन्त्रस्थितिः अन्विष्यताम्',
 'pageinfo-robot-index' => 'अङ्कनयोग्यम्',
 'pageinfo-robot-noindex' => 'अङ्कनायोग्यम्',
@@ -2989,6 +3007,14 @@ $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' => 'अधोलिखितेभ्यः संरक्षणविधिः सोपानवत् गच्छति',
 
 # Skin names
 'skinname-standard' => 'पूर्व',
@@ -3008,6 +3034,8 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'markedaspatrollederror' => 'आरक्षितमिति अङ्कितं न भवति ।',
 'markedaspatrollederrortext' => 'आरक्षितमिति सूचयितुं पुनरावृत्तिं विशेषयतु ।',
 'markedaspatrollederror-noautopatrol' => 'स्वस्य परिवर्तनानि आरक्षितं कर्तुं भवान् नानुमतः ।',
+'markedaspatrollednotify' => '$1 इत्यस्य एतत् परिवर्तनं समीक्षितम् इति अङ्कितम्।',
+'markedaspatrollederrornotify' => 'समीक्षितम् इति चिह्नीकरणं विफलम्।',
 
 # Patrol log
 'patrol-log-page' => 'आरक्षणसूचिका ।',
@@ -3039,6 +3067,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 ।',
@@ -3069,6 +3098,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'hours' => '{{PLURAL:$1|$1होरा|$1 होराः}}',
 'days' => '{{PLURAL:$1|$1 दिनम्|$1 दिनानि}}',
 'ago' => '$1 पूर्वम्',
+'just-now' => 'अधुनैव',
 
 # Bad image list
 'bad_image_list' => 'रूपम् एवम् अस्ति -
@@ -3672,6 +3702,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 सर्वजनसामान्यम् अनुज्ञापत्रं पश्यतु ।
@@ -3813,9 +3844,13 @@ $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 3c24068..eff6726 100644 (file)
@@ -91,7 +91,7 @@ $messages = array(
 
 'underline-always' => 'Куруук',
 'underline-never' => 'Аннынан тардыма',
-'underline-default' => 'Браузер настройкатынан',
+'underline-default' => 'Браузер туруоруутунан',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Эрэдээксийэлиир түннүк бичигэ:',
@@ -176,7 +176,7 @@ $messages = array(
 'newwindow' => '(атын түннүккэ арыллар)',
 'cancel' => 'Алҕас',
 'moredotdotdot' => 'Өссө...',
-'mypage' => 'Ð\91Ñ\8dйÑ\8dм Ñ\82Ñ\83Ñ\81пÑ\83нан',
+'mypage' => 'СиÑ\80Ñ\8dй',
 'mytalk' => 'Кэпсэтэр сирим',
 'anontalk' => 'Бу IP-га ырытыы',
 'navigation' => 'Навигация',
@@ -209,6 +209,7 @@ $messages = array(
 'namespaces' => 'Аат даллара',
 'variants' => 'Барыллар',
 
+'navigation-heading' => 'Навигация',
 'errorpagetitle' => 'Сыыһа',
 'returnto' => 'Төттөрү $1 сирэйгэ.',
 'tagline' => '{{SITENAME}} диэн сиртэн ылыллыбыт',
@@ -307,6 +308,7 @@ $1',
 'newmessagesdifflink' => 'кэлиҥҥи уларытыы',
 'youhavenewmessagesfromusers' => 'Маны $1 {{PLURAL:$3|соҕотох кыттааччыттан|$3 кыттааччыттан}} туппуккун ($2).',
 'youhavenewmessagesmanyusers' => 'Маны $1 элбэх кыттааччыттан туппуккун ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|саҥа этии|саҥа этии}}',
 'newmessagesdifflinkplural' => 'тиһэх {{PLURAL:$1|уларытыы|уларытыылар}}',
 'youhavenewmessagesmulti' => '$1, саҥа суруктар кэллилэр',
 'editsection' => 'уларыт',
@@ -412,7 +414,7 @@ $1',
 'viewsource-title' => 'Бу сирэй $1 исходнигын көрүү',
 'actionthrottled' => 'Түргэнин хааччахтааһын',
 'actionthrottledtext' => 'Бу дьайыыны кылгас кэм иһигэр элбэхтик оҥорор бобуллар. Бу быраабыла спаамы утары охсуһарга көмөлөһөр. Аҕыйах мүнүүтэннэн өссө боруобалаар.',
-'protectedpagetext' => 'Бу сирэй уларытыллыбат.',
+'protectedpagetext' => 'Бу сирэй уларытыыттан уонна да атын дьайыылартан көмүскэммит.',
 'viewsourcetext' => 'Эн бу сирэй төрдүн көрүөххүн уонна төгүллүөххүн сөп:',
 'viewyourtext' => "'''Бэйэҥ көннөрүүлэриҥ''' исходнигын бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп:",
 'protectedinterface' => 'Бу сирэй бырагыраамма интерфейсын биллэриитин көрдөрөр, онон моһуогурууттан халытан хатанан турар.
@@ -448,9 +450,9 @@ $2',
 {{SITENAME}} ситим-сиргэ билигин урукку ааккынан буолбакка IP-аадырыһынан эрэ көстөҕүн.
 Салгыы ааккын ааттаабакка үлэлиэххин сөп, эбэтэр саҥаттан урукку ааккынан дуу, атын аатынан дуу <span class='plainlinks'>[$1 киириэххин]</span> сөп.
 Сорох сирэйдэр өссө даҕаны эйигин урукку ааккынан көрдөрүөхтэрин сөп, ону суох гыныаххын баҕардаххына интэриниэт көрдөрөөччүҥ кээһин ыраастаа.",
-'welcomecreation' => '== Нөрүөн нөргүй, $1! ==
-Эн манна бэлиэтэнниҥ.
-[[Special:Preferences|{{SITENAME}} туруорууларын]] бэйэҕэр сөп түбэһэр гына уларытаргын умнума.',
+'welcomeuser' => 'Нөрүөн нөргүй, $1!',
+'welcomecreation-msg' => 'Аатыҥ бэлиэтэннэ.
+{{SITENAME}} ситим-сиргэ үлэлииргэ табыгастаах буоллун диэн [[Special:Preferences|тус туруорууларгын]] уларытыаххын сөп.',
 'yourname' => 'Кыттааччы аатыҥ:',
 'yourpassword' => 'Киирии тыла:',
 'yourpasswordagain' => 'Киирии тылгын хатылаа:',
@@ -613,6 +615,7 @@ $2
 'changeemail-oldemail' => 'Билиҥҥи аадырыс:',
 'changeemail-newemail' => 'Саҥа аадырыс:',
 'changeemail-none' => '(суох)',
+'changeemail-password' => '{{SITENAME}} ситим-сиргэ киирэр тылыҥ:',
 'changeemail-submit' => 'Аадырыһы уларыт',
 'changeemail-cancel' => 'Тохтот',
 
@@ -710,6 +713,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' => 'Бу кыттааччы билигин бобуллубут.
@@ -718,7 +725,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}}»  баттаан тургутан көр.",
@@ -734,7 +740,7 @@ IP-аадырыһа эрэ көстөр.
 'note' => "'''Хос быһаарыы:'''",
 'previewnote' => "'''Бу барыллаан көрүү эрэ.'''
 Атын уларытыы бигэргэтиллэ илик!",
-'continue-editing' => 'Уларытыыны ситэр',
+'continue-editing' => 'Уларытар сиргэ',
 'previewconflict' => 'Этот предварительный просмотр отражает текст в верхнем окне редактирования так, как он будет выглядеть, если вы решите записать его.',
 'session_fail_preview' => "'''Сиэрбэр сессия идентификаторын сүтэрэн кэбиһэн эн уларытыыгын кыайан киллэрбэтэ.
 Өссө холонон көр.
@@ -788,7 +794,6 @@ IP-аадырыһа эрэ көстөр.
 'template-semiprotected' => '(хатаммыт аҥардаах)',
 'hiddencategories' => 'Бу сирэй кистэммит {{PLURAL:$1|1 категорияҕа|$1 категорияларга}} киирэр:',
 'edittools' => '<!-- Манна суруллубут сурук уларытыы уонна эбии пуормаларын анныгар суруллуо. -->',
-'nocreatetitle' => 'Сирэй оҥорор хааччахтаммыт',
 'nocreatetext' => '{{SITENAME}} саайтыгар саҥа сирэйи оҥорор хааччахтанар.
 Баар сирэйи уларытыаххын сөп, эбэтэр [[Special:UserLogin|манна  бэлиэтэниэххин эбэтэр атын аатынан киириэххин сөп]].',
 'nocreate-loggedin' => 'Эн саҥа сирэйи оҥорор кыаҕыҥ өссө суох.',
@@ -813,6 +818,14 @@ IP-аадырыһа эрэ көстөр.
 'edit-already-exists' => 'Саҥа сирэйи оҥорор табыллыбат.
 Маннык сирэй баар эбит.',
 'defaultmessagetext' => 'Туспа этиллибэтэҕинэ суруллар тиэкис',
+'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' => 'Болҕой. Бу сирэй наһаа элбэх көмпүүтэри ноҕуруускалыыр ресурсаларга сигэнэр.
@@ -830,8 +843,10 @@ IP-аадырыһа эрэ көстөр.
 'language-converter-depth-warning' => 'Тыл конвертерын дириҥин хааччаҕа куоһарыллыбыт ($1)',
 'node-count-exceeded-category' => 'Түмүктэрин ахсаана аһара барбыт сирэйдэр',
 'node-count-exceeded-warning' => 'Сирэй түмүгүн ахсаана таһынан барбыт',
+'expansion-depth-exceeded-category' => 'Аһыллыытын дириҥэ куоһарыллыбыт сирэйдэр',
 'expansion-depth-exceeded-warning' => 'Сирэйгэ угуллубут билэлэр аһара элбээбиттэр',
 'parser-unstrip-recursion-limit' => 'Рекурсия ахсаана таһынан барбыт ($1)',
+'converter-manual-rule-error' => 'Тылы уларытыы быраабылатын алҕаһа таҕыста',
 
 # "Undo" feature
 'undo-success' => 'Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.',
@@ -969,7 +984,8 @@ $1",
 'revdelete-only-restricted' => 'Алҕас таҕыста ($2 $1): Бу суругу дьаһабыллар көрбөттөрүн курдук оҥорорго кистээһин ханнык эмэ туруоруутун талыахха наада.',
 'revdelete-reason-dropdown' => '*Сотуу төрүөттэрэ сүнньүнэн
 ** Ааптар быраабын күөмчүлээһин
-** Тустаах киһи туһунан киэҥ эйгэҕэ тахсыбат билии',
+** Тустаах киһи туһунан киэҥ эйгэҕэ тахсыбат билии
+** Куорҕаллааһын курдук сыаналаныан сөп этии',
 'revdelete-otherreason' => 'Атын/эбии төрүөт:',
 'revdelete-reasonotherlist' => 'Атын төрүөт',
 'revdelete-edit-reasonlist' => 'Сотуу төрүөтүн уларыт',
@@ -1020,6 +1036,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' => 'Булулунна',
@@ -1094,7 +1114,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Уларытыылар',
-'mypreferences' => 'Туруорууларым',
+'mypreferences' => 'Туруоруулар',
 'prefs-edits' => 'Көннөрүү ахсаана:',
 'prefsnologin' => 'Ааккын эппэтиҥ',
 'prefsnologintext' => 'Эн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ааккын эттэххинэ]</span> эрэ кыттаачы туруорууларын уларытар кыахтаныаҥ.',
@@ -1157,7 +1177,7 @@ $1",
 'timezoneregion-indian' => 'Индия байҕала',
 'timezoneregion-pacific' => 'Чуумпу байҕал',
 'allowemail' => 'Атын кыттааччылартан сурук тутары көҥүллүүбүн',
-'prefs-searchoptions' => 'Көрдөөһүн туруоруулара',
+'prefs-searchoptions' => 'Көрдөөһүн',
 'prefs-namespaces' => 'Аат дала',
 'defaultns' => 'Атын ыйыллыбатаҕына бу аат далларыгар көрдүүргэ:',
 'default' => 'чопчу ыйыллыбатаҕына маннык',
@@ -1170,9 +1190,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' => 'Докумуонунан аатыҥ:',
@@ -1284,6 +1304,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'right-writeapi' => 'API-ны туттуу',
 'right-delete' => 'Сирэйдэри сотуу',
 'right-bigdelete' => 'Уһун историялаах сирэйдэри сотуу',
+'right-deletelogentry' => 'сурунаал сорох суруктарын сотуу уонна сөргүтүү.',
 'right-deleterevision' => 'Сирэй сорох торумнарын сотуу уонна хат киллэрии',
 'right-deletedhistory' => 'Сотуллубут тиэкиһи көрөөһүнэ суох сотуу историятын көрүү',
 'right-deletedtext' => 'Сотуллубут тиэкиһи уонна сотуллубут сирэйдэр бэйэ-бэйэлэрин ыккардыларыгар уратыларын көрүү',
@@ -1320,12 +1341,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' => 'бу сирэйи ааҕыы',
@@ -1580,7 +1602,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" хааччаҕын устар табыллыбата; кини хааччахтамматах.',
@@ -1708,6 +1735,7 @@ $1',
 'uploadnewversion-linktext' => 'Бу билэ саҥа барылын суруттар',
 'shared-repo-from' => 'мантан: $1',
 'shared-repo' => 'уопсай умуһах',
+'upload-disallowed-here' => 'Бу билэни хос суруттарар кыаҕыҥ суох эбит.',
 
 # File reversion
 'filerevert' => 'Төннөр $1',
@@ -1788,7 +1816,9 @@ $1',
 
 'disambiguations' => 'Элбэх суолталаах өйдөбүллэргэ сигэнэр сирэйдэр',
 'disambiguationspage' => 'Template:элбэх суолталаах өйдөбүллэр',
-'disambiguations-text' => "Маннык сирэйдэр '''омонимнар сирэйдэрин''' кытта сибээстээхтэр. Ол оннугар чуолаан теманы кытта сибээстэһиэхтээхтэр.<br />Өскө бу халыыбы [[MediaWiki:Disambiguationspage]] туттубут буоллахтарына, сирэй омонимнары суох оҥоруу курдук обработкаламмыт.",
+'disambiguations-text' => "Маннык сирэйдэр '''хас да суолталаах сирэйгэ''' сигэнэллэр. 
+Ол оннугар ханнык эрэ чопчу сирэйгэ сигэниэхтээхтэр.<br />
+Быһаарыы: [[MediaWiki:Disambiguationspage]] халыып баар сирэйдэрэ хас да суолталаах сирэй ахсааныгар киирэллэр.",
 
 'doubleredirects' => 'Хос көһөрөөһүн',
 'doubleredirectstext' => 'Бу сирэйгэ атын сиргэ утаарар хос утаарыылар тиһиктэрэ көстөр.
@@ -1813,6 +1843,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|барыллаах|барыл баар}}',
@@ -1841,6 +1872,7 @@ $1',
 'mostlinkedtemplates' => 'Саамай элбэхтик туттуллар халыыптар',
 'mostcategories' => 'Элбэх категорияҕа киирэр ыстатыйалар',
 'mostimages' => 'Саамай элбэхтик сигэниллэр билэлэр',
+'mostinterwikis' => 'Ордук элбэх интервики-сигэлээх сирэйдэр',
 'mostrevisions' => 'Саамай элбэхтик уларытыллыбыт ыстатыйалар',
 'prefixindex' => 'Мантан саҕаланар (префикстаах) сирэйдэр барыта',
 'prefixindex-namespace' => 'Сирэй саҕаланыытынан наардаан көрдөрүү ($1 аат далыгар)',
@@ -1939,8 +1971,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 саҕаланыытыгар эрэ туттуохха сөп.',
 
@@ -1959,10 +1991,6 @@ $1',
 'activeusers-hidesysops' => 'Дьаһабыллары көрдөрүмэ',
 'activeusers-noresult' => 'Кыттааччылар көстүбэтилэр.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Кыттааччылары бэлиэтиир сурунаал',
-'newuserlogpagetext' => 'Соторутааҕыта бэлиэтэммит кыттааччылар.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кыттааччылар бөлөхтөрүн бырааптара',
 'listgrouprights-summary' => 'Манна бу биикигэ баар бөлөхтөр уонна кинилэр киирэр бырааптара көстөллөр.
@@ -1986,10 +2014,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' => 'Кыттааччы эл почтата арахса сылдьар',
@@ -2020,15 +2050,15 @@ $1',
 
 # Watchlist
 'watchlist' => 'Мин кэтээһиним',
-'mywatchlist' => 'Кэтиир сирэйдэрим',
+'mywatchlist' => 'Кэтэбил тиһигэ',
 'watchlistfor2' => '$1 $2 аналлаах',
 'nowatchlist' => 'Эн кэтиир сирэйдэриҥ суохтар.',
 'watchlistanontext' => 'Кэтэбилиҥ сирэйин көрөргөр эбэтэр уларытаргар маны оҥор: $1.',
 'watchnologin' => 'Бэйэҕин билиһиннэр',
 'watchnologintext' => 'Бэйэҕин [[Special:UserLogin|билиһиннэрдэххинэ]] кэтэбил сирэйгин уларытыаххын сөп.',
 'addwatch' => 'Кэтэбил тиһигэр киллэр',
-'addedwatchtext' => '«[[:$1]]» сирэй [[Special:Watchlist|кэтэбилгэ]] киирдэ.
-Сирэй уларытыылара бүгүҥҥүттэн манна көстөр буолуохтара, эбиитин [[Special:RecentChanges|саҥа уларытыылар испииһэктэригэр]] модьу бичигинэн бэлиэтэнэн көстүөхтэрэ.',
+'addedwatchtext' => "«[[:$1]]» сирэй [[Special:Watchlist|кэтэбилгэ]] киирдэ.
+Сирэй уларытыылара уонна кинини кытта ситимнээх ырытыы сирэйин уларытыылара бүгүҥҥүттэн онно көстөр буолуохтара. Эбиитин [[Special:RecentChanges|саҥа уларытыы тиһигэр]] '''модьу''' бичигинэн бэлиэтэнэн көстүөхтэрэ.",
 'removewatch' => 'Кэтэбил тиһигиттэн сот',
 'removedwatchtext' => '[[:$1]]" сирэй [[Special:Watchlist|кэтэбилиҥ тиһигиттэн]] сотулунна.',
 'watch' => 'Кэтээ',
@@ -2056,11 +2086,7 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} Биллэрэр Сулууспата',
 'enotif_reset' => 'Бары сирэйдэри көрбүтүм курдук бэлиэтээ',
-'enotif_newpagetext' => 'Бу саҥа сирэй.',
 'enotif_impersonal_salutation' => '{{SITENAME}} кыттааччыта',
-'changed' => 'уларыппыт (уларытыллыбыт)',
-'created' => 'айыллыбыт',
-'enotif_subject' => '«{{SITENAME}}» $PAGETITLE кыттааччыга сыһыаннаах сирэйи $PAGEEDITOR кыттааччы $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Бутэһик киирииҥ кэнниттэн оҥоһуллубут уларыйыылары барытын көрөргө манна киир: $1.',
 'enotif_lastdiff' => 'Уларытыыны манна көрүҥ: $1.',
 'enotif_anon_editor' => 'ааттамматах кыттааччы $1',
@@ -2089,6 +2115,8 @@ $UNWATCHURL
 
 Көмөлөһүннэрэр уонна быһаартарар сир:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'айыллыбыт',
+'changed' => 'уларыппыт (уларытыллыбыт)',
 
 # Delete
 'deletepage' => 'Сирэйи сот',
@@ -2127,6 +2155,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]] уларытыыларын төннөрөр кыах суох;
@@ -2270,9 +2300,9 @@ $1',
 'blanknamespace' => '(Сүрүн)',
 
 # Contributions
-'contributions' => 'Кыттааччы суруйуута (вклад)',
+'contributions' => '{{GENDER:$1|Кыттааччы}} суруйуута (кылаата)',
 'contributions-title' => '$1 кыттааччы киллэрбит уларытыылара',
-'mycontris' => 'Суруйуум тиһигэ',
+'mycontris' => 'Суруйуу тиһигэ',
 'contribsub2' => 'Вклад $1 ($2)',
 'nocontribs' => 'Эппит критерийгэр эппиэттиир уларытыылар көстүбэтилэр.',
 'uctop' => '(бүтэһик)',
@@ -2312,7 +2342,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 утаарыы',
 'whatlinkshere-hidetrans' => '$1 киллэриилэр',
 'whatlinkshere-hidelinks' => '$1 сигэ (ыйынньык)',
-'whatlinkshere-hideimages' => '$1 Ð¾Ð¹Ñ\83Ñ\83 сигэтэ',
+'whatlinkshere-hideimages' => '$1 Ð±Ð¸Ð»Ñ\8d сигэтэ',
 'whatlinkshere-filters' => 'Фильтрдар',
 
 # Block/unblock
@@ -2624,6 +2654,7 @@ $1',
 'import-interwiki-templates' => 'Бары халыыптары киллэр',
 'import-interwiki-submit' => 'Импортаа',
 'import-interwiki-namespace' => 'Бу аат далыгар көһөрөргө:',
+'import-interwiki-rootpage' => 'Тирэх сирэйэ (булгуччута суох)',
 'import-upload-filename' => 'Билэ аата:',
 'import-comment' => 'Хос быһаарыы:',
 'importtext' => 'Сирэйи [[Special:Export|экспорт үнүстүрүмүөнүн]] көмөтүнэн бастакы биикиттэн экспортаа. 
@@ -2656,6 +2687,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' => 'Импорт сурунаала',
@@ -2780,11 +2814,37 @@ $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-contentpage-yes' => 'Сөп',
+'pageinfo-protect-cascading' => 'Каскаадынан көмүскэл мантан',
+'pageinfo-protect-cascading-yes' => 'Сөп',
+'pageinfo-protect-cascading-from' => 'Каскадынан көмүскэл мантан',
 
 # Skin names
 'skinname-standard' => 'Классика',
@@ -2836,6 +2896,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.',
@@ -2845,6 +2906,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' => 'Саҥа билэлэр галереялара',
@@ -3479,6 +3542,7 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'version-software' => 'Туруоруллубут бырагырааммалар',
 'version-software-product' => 'Бородуукта',
 'version-software-version' => 'Барыл (торум)',
+'version-entrypoints' => 'Киирэр аадырыстар (URL)',
 'version-entrypoints-header-entrypoint' => 'Киирии сирэ',
 'version-entrypoints-header-url' => 'URL',
 
@@ -3609,11 +3673,12 @@ 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-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 алҕас туһунан биллэр].
@@ -3651,7 +3716,8 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 '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 5c89ca8..11346a6 100644 (file)
@@ -396,9 +396,6 @@ $2',
 'virus-unknownscanner' => 'Baṅ urum anṭvayras:',
 
 # Login and logout pages
-'welcomecreation' => '== Johar $1! ==
-Amaḱ ekaunṭ do tearena.
-Amaḱ [[Special:Preferance {{SITENAME}} pạsindko]] thir dohoe lạgit́te alom hiṛińa.',
 'yourname' => 'Beoboharicaḱ ńutum',
 'yourpassword' => 'Uku namber',
 'yourpasswordagain' => 'Arhõ oku namber olme',
@@ -600,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',
@@ -799,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',
 
@@ -938,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',
index bc645bd..94897ca 100644 (file)
@@ -393,9 +393,6 @@ Podet èsser stadu burradu dae calicunu àteru.',
 
 Immoe podes sighire a impreare {{SITENAME}} in forma anònima, o ti podes <span class='plainlinks'>[$1 identificare torra]</span> comente su de prima o comente usuàriu diferente.
 Tene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas.",
-'welcomecreation' => "== Benènnidu, $1! ==
-S'account tuo est istadu creadu.
-No iscaressa de personalizare sas [[Special:Preferences|preferèntzias de {{SITENAME}}]].",
 'yourname' => 'Nùmene usuàriu',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'Repite sa password:',
@@ -556,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}}:',
@@ -776,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',
@@ -1014,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)',
@@ -1066,7 +1061,6 @@ Is mudàntzias de custa pàgina e de sa pàgina de cuntierras sua ant a bennere
 'watching' => 'Giunghende a sa watchlist...',
 'unwatching' => 'Boghende dae sa watchlist...',
 
-'enotif_newpagetext' => 'Custa est una pàgina noa.',
 'enotif_impersonal_salutation' => 'Usuàriu de {{SITENAME}}',
 'created' => 'creada',
 
@@ -1556,6 +1550,7 @@ Is acàpius chi sighint in sa matessi lìnia sunt cunsideraus comente eccetzione
 
 # New logging system
 'newuserlog-byemail' => 'password imbiada via e-mail',
+'rightsnone' => '(nisciunu)',
 
 # Search suggestions
 'searchsuggest-search' => 'Chirca',
index ee0e3f7..447c5dd 100644 (file)
@@ -10,6 +10,7 @@
  * @author Aushulz
  * @author Gmelfi
  * @author Kaganer
+ * @author Markos90
  * @author Melos
  * @author Omnipaedista
  * @author Santu
@@ -306,7 +307,7 @@ $messages = array(
 'returnto' => 'Ritorna a $1.',
 'tagline' => 'Di {{SITENAME}}',
 'help' => 'Aiutu',
-'search' => 'Trova',
+'search' => 'Arriscedi',
 'searchbutton' => "Va' cerca",
 'go' => 'Trova',
 'searcharticle' => 'Vai',
@@ -521,9 +522,7 @@ La mutivazzioni è chista: ''$2''.",
 
 Poi cuntinuari a usari {{SITENAME}} di manera anònima, o poi <span class='plainlinks'>[$1 tràsiri n'àutra vota]</span> cu lu stissu o cu n'àutru nomu d'utenti.
 Accura chi quarchi pàggina pò cuntinuari a èssiri ammustrata comu si nun avissi nisciutu nzinu a quannu tu nun scancelli tutta la mimoria dû tò browser.",
-'welcomecreation' => "== Bonvinutu, $1! ==
-
-L'account hà statu criatu currettamenti. Nun ti scurdari di pirsunalizzari li [[Special:Preferences|prifirenzi di {{SITENAME}}]].",
+'welcomeuser' => 'Bommegna, $1!',
 'yourname' => "Lu tò nomu d'utenti (''user name'')",
 'yourpassword' => "La tò ''password''",
 'yourpasswordagain' => "Scrivi la password n'àutra vota",
@@ -762,7 +761,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',
@@ -1233,11 +1231,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',
@@ -1717,10 +1717,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]].",
@@ -1796,11 +1792,7 @@ Protucolli suppurtati: <code>$1</code>',
 
 'enotif_mailer' => 'Sistema di nutìfica via e-mail di {{SITENAME}}',
 'enotif_reset' => 'Segna tutti li pàggini comu già visitati',
-'enotif_newpagetext' => 'Chista è na pàggina nova.',
 'enotif_impersonal_salutation' => 'Utenti di {{SITENAME}}',
-'changed' => 'canciatu',
-'created' => 'criatu',
-'enotif_subject' => 'La pàggina $PAGETITLE di {{SITENAME}} hà stata $CHANGEDORCREATED di $PAGEEDITOR',
 'enotif_lastvisited' => 'Cunzurta $1 pi vìdiri tutti li canciamenti dâ tò ùrtima vìsita.',
 'enotif_lastdiff' => 'Vìdiri $1 pi visualizzari lu canciamentu.',
 'enotif_anon_editor' => 'utenti anonimu $1',
@@ -1826,6 +1818,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',
@@ -2322,8 +2316,8 @@ Visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//trans
 'tooltip-ca-watch' => 'Agghiunci sta pàggina â tò lista di ossirvati spiciali',
 'tooltip-ca-unwatch' => 'Elìmina sta pàggina dâ tò lista di ossirvati spiciali',
 'tooltip-search' => "Cerca 'n {{SITENAME}}",
-'tooltip-search-go' => 'Vai a na pàggina cu chistu nomu esattu si asisti',
-'tooltip-search-fulltext' => 'Attrova pàggini pi chistu testu',
+'tooltip-search-go' => 'Vai a na pàggina cu chistu nomu esattu siddu asisti',
+'tooltip-search-fulltext' => 'Arriscedi pàggini pi chistu testu',
 'tooltip-p-logo' => 'Pàggina principali',
 'tooltip-n-mainpage' => 'Vìsita la pàggina principali',
 'tooltip-n-mainpage-description' => 'Talìa la pàggina principali',
@@ -2983,6 +2977,7 @@ Mèttiri lu nomu dû file senza lu prifissu "{{ns:file}}:"',
 '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 4b08c9c..7630872 100644 (file)
@@ -371,10 +371,6 @@ The grunds for this are: ''$2''.",
 
 Ye can continue to uise {{SITENAME}} namelessly, or ye can log in again as the same or as a different uiser.
 Mynd that some pages micht continue tae be displayed as if ye war aye loggit in, till ye clear yer brouser cache.",
-'welcomecreation' => '== Guid tae see ye, $1! ==
-
-Yer accoont haes been creatit.
-Mynd an chynge yer [[Special:Preferences|{{SITENAME}} preferences]].',
 'yourname' => 'Yer uiser name',
 'yourpassword' => 'Passwaird:',
 'yourpasswordagain' => 'Retype passwaird:',
@@ -599,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.',
@@ -812,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.',
@@ -1058,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)',
 
@@ -1098,10 +1093,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'unwatching' => 'Unwatchin...',
 
 'enotif_reset' => 'Merk aa pages visitit',
-'changed' => 'chynged',
-'created' => 'creatit',
-'enotif_subject' => '{{SITENAME}} page $PAGETITLE haes been $CHANGEDORCREATED bi $PAGEEDITOR',
 'enotif_lastvisited' => 'Hae a leuk at $1 for aa chynges sin yer last visit.',
+'created' => 'creatit',
+'changed' => 'chynged',
 
 # Delete
 'deletepage' => 'Delete page',
index 13f0764..880e9b5 100644 (file)
@@ -713,9 +713,8 @@ $1 {{PLURAL:$1|اکر|اکرن}} کان ننڍي هوڻ گھرجي.',
 'watching' => 'ٽيٽيندي...',
 'unwatching' => 'اڻ ٽيٽيندي...',
 
-'enotif_newpagetext' => 'هيءُ هڪ نئون صفحو آهي.',
-'changed' => 'تبديل ٿي ويو',
 'created' => 'ٺهي چڪو',
+'changed' => 'تبديل ٿي ويو',
 
 # Delete
 'deletepage' => 'صفحو ڊاهيو',
index 2037c5e..0c16f3c 100644 (file)
@@ -436,9 +436,6 @@ La rasgioni frunidda è ''$2''.",
 
 Si pò sighì a usà {{SITENAME}} cumenti utenti anònimu oppuru eseguì una noba intradda, cu' lu matessi innòmu utenti o un'innòmu dibessu.
 Zerthuni pàgini pudìani continuà a apparì cumenti si la iscidda nò fùssia avvinudda finaghì nò vèni puridda la mimória cache di lu propriu nabiggadori.",
-'welcomecreation' => '== Binvinuddu, $1! ==
-
-La registhrazioni è isthadda criadda currettamenti. No dimintiggà di passunarizzà li prifirenzi di {{SITENAME}}.',
 'yourname' => 'Innòmu utenti',
 'yourpassword' => "Paràura d'órdhini",
 'yourpasswordagain' => "Ripeti la paràura d'órdhini",
@@ -655,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',
@@ -910,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',
@@ -1245,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)',
 
@@ -1307,11 +1301,7 @@ Si daboi s'à gana d'eliminà la pàgina da la listha di l'abbaidaddi ippiziarii
 
 'enotif_mailer' => 'Sisthema di nutìfica via postha erettrònica di {{SITENAME}}',
 'enotif_reset' => 'Signa tutti li pàgini cumenti già visitaddi',
-'enotif_newpagetext' => 'Chistha è una pàgina nóba.',
 'enotif_impersonal_salutation' => 'Utenti di {{SITENAME}}',
-'changed' => 'ciambadda',
-'created' => 'criadda',
-'enotif_subject' => 'La pàgina $PAGETITLE di {{SITENAME}} è isthadda $CHANGEDORCREATED da $PAGEEDITOR',
 'enotif_lastvisited' => "Cunsultha $1 pa vidé tutti li mudìfigghi da l'ulthima visita tóia.",
 'enotif_lastdiff' => 'Vidé $1 pa visuarizzà la mudìfigga.',
 'enotif_anon_editor' => 'utenti anònimu $1',
@@ -1338,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',
@@ -2047,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 45e4e9b..31bd8ea 100644 (file)
@@ -385,9 +385,6 @@ $messages = array(
 'logouttext' => "'''Don leat dál loggen olggos {{GRAMMAR:elative|{{SITENAME}}}}s.'''
 
 Sáhtát joatkit {{GRAMMAR:genitive|{{SITENAME}}}} geavaheami anonyman dahje logget ođđasit sisa",
-'welcomecreation' => '== Bures boahtin, $1! ==
-Du geavaheaddjidovddaldat lea dál anus.
-Ále vajáldahte rievdadit {{GRAMMAR:genitive|{{SITENAME}}}} iežat ásahusaid.',
 'yourname' => 'Geavaheaddjidovddaldat',
 'yourpassword' => 'Suollemassátni:',
 'yourpasswordagain' => 'Čále suollemassáni ođđasit:',
@@ -522,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',
@@ -712,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}}',
@@ -1044,14 +1038,12 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{GRAMMAR:genitive|{{SITENAME}}}} siidu lea rievdaduvvon -almmuhus',
 'enotif_reset' => 'Merke buot siidduid gehččojuvvon',
-'enotif_newpagetext' => 'Dát lea ođđa siidu.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-geavaheaddji',
-'changed' => 'rievdadan siiddu',
-'created' => 'álggahan siiddu',
-'enotif_subject' => '$PAGEEDITOR on $CHANGEDORCREATED $PAGETITLE',
 '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',
@@ -1473,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 3b89821..7c4d997 100644 (file)
@@ -319,9 +319,6 @@ $2',
 
 Mecontinudad usadad {{SITENAME}} anon jïx me caápo dajcaitom ö jömcaitom.
 Páhinám pac continudad displayom dajme caápo, jánclearom mecachede browser.",
-'welcomecreation' => "== Q'$1! ==
-
-Mecaitom coccebj creatöx. Quiix hequáatlaácde {{SITENAME}} pos-poop.",
 'yourname' => 'Caitom ID:',
 'yourpassword' => 'Quimx canj:',
 'yourpasswordagain' => 'Vanquimx canj:',
@@ -507,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.',
@@ -662,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',
@@ -889,11 +882,10 @@ iitom e-iitomde diijömde caitóm.',
 'watching' => 'Cáminot...',
 'unwatching' => 'Necáminot...',
 
-'enotif_newpagetext' => 'Jan coccebj hunpáhina.',
 'enotif_impersonal_salutation' => '{{SITENAME}} caitom',
-'changed' => 'quiixöx',
-'created' => 'creacöx',
 'enotif_anon_editor' => 'caitom anoniimom $1',
+'created' => 'creacöx',
+'changed' => 'quiixöx',
 
 # Delete
 'deletepage' => 'Delatar páhina',
@@ -1064,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 a91db8d..e49f5b3 100644 (file)
@@ -394,9 +394,6 @@ Ožklausėms: $2',
 
 Galat ė tuoliau nauduotė {{SITENAME}} anuonimėškā aba <span class='plainlinks'>[$1 prisėjonkat]</span> ėš naujė šėtuo patiu a kėto nauduotuojė vardu.
 Pastebiejims: katruos nekatruos poslapiuos ė tuoliau gal ruodītė būktā būtomiet prisėjongės lėgė tuol, kumet ėšvalīsėt sava naršīklės dietovė (''cache'').",
-'welcomecreation' => '== Svēkė, $1! ==
-
-Tamstas paskīra bova sokorta. Neožmėrškėt pakeistė sava [[Special:Preferences|{{SITENAME}} nustatīmu]].',
 'yourname' => 'Nauduotuojė vards:',
 'yourpassword' => 'Slaptažuodis:',
 'yourpasswordagain' => 'Pakartuoket slaptažuodė:',
@@ -616,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',
@@ -880,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',
@@ -1229,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ė',
@@ -1290,10 +1284,9 @@ Jēgo bikumet ožsėnuorietomiet liautėis keravuotė straipsnė, spauskat \"neb
 'unwatching' => 'Šalėnama ėš keravuojamu sāraša...',
 
 'enotif_reset' => 'Pažīmietė vėsus poslapius kāp aplonkītus',
-'enotif_newpagetext' => 'Tas īr naus poslapis.',
-'changed' => 'pakeitė',
-'created' => 'sokūrė',
 'enotif_anon_editor' => 'anuonėminis nauduotuos $1',
+'created' => 'sokūrė',
+'changed' => 'pakeitė',
 
 # Delete
 'deletepage' => 'Trintė poslapi',
@@ -1970,5 +1963,6 @@ Tamsta tēpuogi galėt [[Special:EditWatchlist/raw|redagoutė grīnaji keravuoja
 '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 fe51c7c..4629ec4 100644 (file)
@@ -255,7 +255,7 @@ $messages = array(
 
 'underline-always' => 'Uvijek',
 'underline-never' => 'Nikad',
-'underline-default' => 'Po postavkama preglednika',
+'underline-default' => 'prema skinu ili postavkama preglednika',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stil slova područja uređivanja:',
@@ -340,8 +340,8 @@ $messages = array(
 'newwindow' => '(otvara se u novom prozoru)',
 'cancel' => 'Poništi',
 'moredotdotdot' => 'Još...',
-'mypage' => 'Moja stranica',
-'mytalk' => 'Moj razgovor',
+'mypage' => 'Stranica',
+'mytalk' => 'Razgovor',
 'anontalk' => 'Razgovor za ovu IP adresu',
 'navigation' => 'Navigacija',
 'and' => '&#32;i',
@@ -363,7 +363,7 @@ $messages = array(
 'vector-action-protect' => 'Zaštiti',
 'vector-action-undelete' => 'Vrati obrisano',
 'vector-action-unprotect' => 'Promijeni zaštitu',
-'vector-simplesearch-preference' => 'Omogući napredne sugestije pretrage (samo vector skin)',
+'vector-simplesearch-preference' => 'Omogući traku za pojednostavljenu pretragu (samo Vector skin)',
 'vector-view-create' => 'Napravi',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Pregled historije',
@@ -373,6 +373,7 @@ $messages = array(
 'namespaces' => 'Imenski prostori',
 'variants' => 'Varijante',
 
+'navigation-heading' => 'Navigacijski meni',
 'errorpagetitle' => 'Greška',
 'returnto' => 'Povratak na $1.',
 'tagline' => 'Izvor: {{SITENAME}}',
@@ -582,7 +583,7 @@ Pretraga: $2',
 'viewsource-title' => 'Prikaz izvora stranice $1',
 'actionthrottled' => 'Akcija je usporena',
 'actionthrottledtext' => 'Kao anti-spam mjera, ograničene su vam izmjene u određenom vremenu, i trenutačno ste dostigli to ograničenje. Pokušajte ponovo poslije nekoliko minuta.',
-'protectedpagetext' => 'Ova stranica je zaključana da bi se spriječilo uređivanje.',
+'protectedpagetext' => 'Ova stranica je zaključana kako bi se spriječilo uređivanje ili druge akcije.',
 'viewsourcetext' => 'Možete vidjeti i kopirati izvorni tekst ove stranice:',
 'viewyourtext' => "Možete da pogledate i kopirate izvor '''vaših izmjena''' na ovoj stranici:",
 'protectedinterface' => 'Ova stranica sadrži tekst interfejsa za softver na ovoj wiki, pa je zaključana kako bi se spriječile zloupotrebe. Kako bi dodali ili promijenili prijevode za sve wikije, molimo koristite [//translatewiki.net/ translatewiki.net], projekt lokalizacije MediaWikija.',
@@ -616,8 +617,8 @@ Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.'
 
 Možete nastaviti da koristite {{SITENAME}} anonimno, ili se ponovo <span class='plainlinks'>[$1 prijaviti]</span> kao isti ili kao drugi korisnik.
 Obratite pažnju da neke stranice mogu nastaviti da se prikazuju kao da ste još uvijek prijavljeni, dok ne očistite keš svog preglednika.",
-'welcomecreation' => '== Dobro došli, $1! ==
-Vaš korisnički račun je napravljen.
+'welcomeuser' => 'Dobro došli, $1!',
+'welcomecreation-msg' => 'Vaš korisnički račun je napravljen.
 Ne zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]].',
 'yourname' => 'Korisničko ime:',
 'yourpassword' => 'Lozinka/zaporka:',
@@ -880,7 +881,7 @@ Možete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] u drugim st
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretraživati srodne registre],
 ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu]</span>.',
 'noarticletext-nopermission' => 'Trenutno nema teksta na ovoj stranici.
-Možete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane registre]</span>.',
+Možete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane registre]</span>. alio nemate dozvolu za stvaranje ove stranice.',
 'missing-revision' => 'Ne mogu da pronađem izmenu br. $1 na stranici pod nazivom „{{PAGENAME}}“.
 
 Ovo se obično dešava kada pratite zastarjelu vezu do stranice koja je obrisana.
@@ -911,7 +912,7 @@ Ne zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr. {
 'note' => "'''Napomena:'''",
 'previewnote' => "'''Ne zaboravite da je ovo samo pregled'''
 Izmjene stranice nisu još sačuvane!",
-'continue-editing' => 'Nastavak uređivanja',
+'continue-editing' => 'Idi na područje uređivanja',
 'previewconflict' => 'Ovaj pretpregled reflektuje tekst u gornjem polju
 kako će izgledati ako pritisnete "Snimi stranicu".',
 'session_fail_preview' => "'''Izvinjavamo se! Nismo mogli obraditi vašu izmjenu zbog gubitka podataka o prijavi. Molimo pokušajte ponovno. Ako i dalje ne bude radilo, pokušajte se [[Special:UserLogout|odjaviti]] i ponovno prijaviti.'''",
@@ -967,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.',
@@ -992,6 +992,15 @@ Izgleda da je obrisana.',
 'edit-already-exists' => 'Stranica nije mogla biti kreirana.
 Izgleda da već postoji.',
 'defaultmessagetext' => 'Uobičajeni tekst poruke',
+'content-failed-to-parse' => 'Ne mogu da raščlanim sadržaj tipa $2 za model $1: $3',
+'invalid-content-data' => 'Neispravni podaci sadržaja',
+'content-not-allowed-here' => 'Sadržaj modela „$1“ 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 poziva opterećujućih parserskih funkcija.
@@ -1285,7 +1294,7 @@ Uzmite u obzir da njegovi indeksi za ovu Wiki ne moraju biti ažurirani.',
 
 # Preferences page
 'preferences' => 'Postavke',
-'mypreferences' => 'Moje postavke',
+'mypreferences' => 'Postavke',
 'prefs-edits' => 'Broj izmjena:',
 'prefsnologin' => 'Niste prijavljeni',
 'prefsnologintext' => 'Da biste mogli podešavati korisničke postavke, morate <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} biti prijavljeni]</span>.',
@@ -1348,7 +1357,7 @@ Ovdje su navedene neke nasumično odabrane vrijednosti koje možete koristiti: $
 'timezoneregion-indian' => 'Indijski okean',
 'timezoneregion-pacific' => 'Tihi okean',
 'allowemail' => 'Dozvoli e-mail od ostalih korisnika',
-'prefs-searchoptions' => 'Opcije pretrage',
+'prefs-searchoptions' => 'Pretraga',
 'prefs-namespaces' => 'Imenski prostori',
 'defaultns' => 'Inače tražite u ovim imenskim prostorima:',
 'default' => 'standardno',
@@ -1514,12 +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',
-'rightsnone' => '(nema)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitanje ove stranice',
@@ -1752,6 +1762,7 @@ Ako se problem ne riješi, kontaktirajte [[Special:ListUsers/sysop|administrator
 'backend-fail-notsame' => 'Već postoji neistovetna datoteka – $1.',
 'backend-fail-invalidpath' => '$1 nije ispravna putanja za skladištenje.',
 'backend-fail-delete' => 'Ne može se izbrisati datoteka "$1".',
+'backend-fail-describe' => 'Ne mogu promijeniti metapodatke za datoteku "$1".',
 'backend-fail-alreadyexists' => 'Datoteka $1 već postoji.',
 'backend-fail-store' => 'Ne mogu da smestim datoteku $1 u $2.',
 'backend-fail-copy' => 'Ne može se kopirati "$1" na "$2".',
@@ -1903,7 +1914,7 @@ Njen opis možete da izmenite na [$2 odgovarajućoj stranici].',
 'uploadnewversion-linktext' => 'Postavite novu verziju ove datoteke/fajla',
 'shared-repo-from' => 'iz $1',
 'shared-repo' => 'zajednička ostava',
-'upload-disallowed-here' => 'Nažalost, ne možete da zamenite ovu sliku.',
+'upload-disallowed-here' => 'Ne možete da zamenite ovu datoteku.',
 
 # File reversion
 'filerevert' => 'Vrati $1',
@@ -2141,9 +2152,9 @@ Vidi također [[Special:WantedCategories|zatražene kategorije]].',
 'linksearch-pat' => 'Šema pretrage:',
 'linksearch-ns' => 'Imenski prostor:',
 'linksearch-ok' => 'Traži',
-'linksearch-text' => 'Mogu se koristiti džokeri poput „*.wikipedia.org“.<br />
-Potreban je najviši domen, kao „*.org“.<br />
-Podržani protokoli: <code>$1</code> (ne stavljajte u pretragu)',
+'linksearch-text' => 'Mogu se koristiti džokeri poput "*.wikipedia.org".<br />
+Potreban je najviši domen, na primjer "*.org".<br />
+Podržani protokoli: <tt>$1</tt> (zadaje http:// ako ne navedete protokol).',
 'linksearch-line' => '$1 je povezan od $2',
 'linksearch-error' => 'Džokeri se mogu pojavljivati samo na početku naziva servera.',
 
@@ -2162,10 +2173,6 @@ Podržani protokoli: <code>$1</code> (ne stavljajte u pretragu)',
 '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.
@@ -2192,8 +2199,8 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 'emailuser-title-target' => 'Slanje e-maila {{GENDER:$1|korisniku|korisnici|korisniku}}',
 'emailuser-title-notarget' => 'Slanje e-maila korisniku',
 'emailpage' => 'Pošalji e-mail ovom korisniku',
-'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka 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.',
+'emailpagetext' => 'Možete da koristite donji obrazac da pošaljete e-mail {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku|}}.
+E-mail koju ste uneli u vašim [[Special:Preferences|postavkama]] će se prikazati u polju "Od:", tako da će primalac moći da vam odgovori direktno.',
 'usermailererror' => 'Objekat maila je vratio grešku:',
 'defemailsubject' => '{{SITENAME}} e-mail od korisnika "$1"',
 'usermaildisabled' => 'Korisnički e-mail onemogućen',
@@ -2224,7 +2231,7 @@ E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim posta
 
 # Watchlist
 'watchlist' => 'Moj spisak praćenja',
-'mywatchlist' => 'Moj spisak praćenja',
+'mywatchlist' => 'Spisak praćenja',
 'watchlistfor2' => 'Za $1 $2',
 'nowatchlist' => 'Nemate ništa na svom spisku praćenih članaka.',
 'watchlistanontext' => 'Molimo da $1 da možete vidjeti ili urediti stavke na Vašem spisku praćenja.',
@@ -2260,20 +2267,23 @@ Buduće promjene ove stranice i njoj pridružene stranice za razgovor će biti n
 
 'enotif_mailer' => '{{SITENAME}} obavještenje o pošti',
 'enotif_reset' => 'Označi sve strane kao posjećene',
-'enotif_newpagetext' => 'Ovo je nova stranica.',
 'enotif_impersonal_salutation' => '{{SITENAME}} korisnik',
-'changed' => 'promijenjena',
-'created' => 'napravljena',
-'enotif_subject' => '{{SITENAME}} strana $PAGETITLE je bila $CHANGEDORCREATED od strane $PAGEEDITOR',
+'enotif_subject_deleted' => '{{SITENAME}} stranicu $1 {{gender:|je izbrisao|je izbrisala|je izbrisao}} $2',
+'enotif_subject_created' => '{{SITENAME}} stranicu $1 {{gender:|je napravio|je napravila|je napravio}} $2',
+'enotif_subject_moved' => '{{SITENAME}} stranicu $1 {{gender:|je premijestio|je premjestila|je premjestio}} $2',
+'enotif_subject_restored' => '{{SITENAME}} stranicu $1 {{gender:|je obnovio|je obnovila|je obnovio}} $2',
+'enotif_subject_changed' => '{{SITENAME}} stranicu $1 {{gender:|je promijenio|je promijenila|je promijenio}} $2',
+'enotif_body_intro_deleted' => '{{SITENAME}} stranica $1 je izbrisana na $PAGEEDITDATE od {{GENDER:|korisnika|korisnice|korisnika}} $2, v. $3 za trenutnu verziju.',
+'enotif_body_intro_created' => '{{SITENAME}} stranica $1 je stvorena na $PAGEEDITDATE od {{GENDER:|korisnika|korisnice|korisnika}} $2, v. $3 za trenutnu verziju.',
+'enotif_body_intro_moved' => '{{SITENAME}} stranica $1 je premještena na $PAGEEDITDATE od {{GENDER:|korisnika|korisnice|korisnika}} $2, v. $3 za trenutnu verziju.',
+'enotif_body_intro_restored' => '{{SITENAME}} stranica $1 je obnovljena na $PAGEEDITDATE od {{GENDER:|korisnika|korisnice|korisnika}} $2, v. $3 za trenutnu verziju.',
+'enotif_body_intro_changed' => '{{SITENAME}} stranica $1 je izmijenjena na $PAGEEDITDATE od {{GENDER:|korisnika|korisnice|korisnika}} $2, v. $3 za trenutnu verziju.',
 'enotif_lastvisited' => 'Pogledajte $1 za sve izmjene od vaše posljednje posjete.',
 'enotif_lastdiff' => 'Vidi $1 da pregledate ovu promjenu.',
 'enotif_anon_editor' => 'anonimni korisnik $1',
 'enotif_body' => 'Poštovani $WATCHINGUSERNAME,
 
-
-Stranica {{SITENAME}} sa naslovom $PAGETITLE je bila $CHANGEDORCREATED dana $PAGEEDITDATE od strane $PAGEEDITOR, pogledajte $PAGETITLE_URL za trenutnu reviziju.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Sažetak urednika: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2298,6 +2308,8 @@ $UNWATCHURL
 
 Povratne informacije i daljnja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'promijenjena',
 
 # Delete
 'deletepage' => 'Izbrišite stranicu',
@@ -2453,8 +2465,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 uspelo:
+$1',
 'undeletedpage' => "'''$1 je vraćena'''
 
 Provjerite [[Special:Log/delete|evidenciju brisanja]] za zapise najskorijih brisanja i vraćanja.",
@@ -2486,9 +2498,9 @@ $1',
 'blanknamespace' => '(Glavno)',
 
 # Contributions
-'contributions' => 'Doprinosi korisnika',
+'contributions' => 'Doprinosi {{GENDER:|korisnika|korisnice|korisnika}} $1',
 'contributions-title' => 'Korisnički doprinosi od $1',
-'mycontris' => 'Moji doprinosi',
+'mycontris' => 'Doprinosi',
 'contribsub2' => 'Za $1 ($2)',
 'nocontribs' => 'Nisu nađene promjene koje zadovoljavaju ove uslove.',
 'uctop' => '(vrh)',
@@ -2529,7 +2541,7 @@ Posljednje stavke zapisnika blokiranja možete pogledati ispod:',
 'whatlinkshere-hideredirs' => '$1 preusmjerenja',
 'whatlinkshere-hidetrans' => '$1 uključenja',
 'whatlinkshere-hidelinks' => '$1 linkove',
-'whatlinkshere-hideimages' => '$1 linkove slika',
+'whatlinkshere-hideimages' => '$1 veze do datoteke',
 'whatlinkshere-filters' => 'Filteri',
 
 # Block/unblock
@@ -2764,6 +2776,7 @@ Da li je želite obrisati kako bi ste mogli izvršiti premještanje?',
 'immobile-target-namespace-iw' => 'Međuwiki link nije valjano odredište premještanja stranice.',
 'immobile-source-page' => 'Ova stranica se ne može premještati.',
 'immobile-target-page' => 'Ne može se preusmjeriti na taj odredišni naslov.',
+'bad-target-model' => 'Željeno odredište koristi drugačiji model sadržaja. Ne mogu da pretvorim iz $1 u $2.',
 'imagenocrossnamespace' => 'Ne može se premjestiti datoteka u nedatotečni imenski prostor',
 'nonfile-cannot-move-to-file' => 'Ne mogu se premjestiti podaci u datotečni imenski prostor',
 'imagetypemismatch' => 'Ekstenzija nove datoteke ne odgovara njenom tipu',
@@ -3001,6 +3014,7 @@ Ovo je vjerovatno izazvano vezom ka vanjskoj nepoželjnoj stranici.',
 
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
+'pageinfo-not-current' => 'Na žalost, nemoguće je pribaviti ove podatke za starije izmjene.',
 'pageinfo-header-basic' => 'Osnovne informacije',
 'pageinfo-header-edits' => 'Historija izmjena',
 'pageinfo-header-restrictions' => 'Zaštita stranice',
@@ -3009,6 +3023,7 @@ Ovo je vjerovatno izazvano vezom ka vanjskoj nepoželjnoj stranici.',
 'pageinfo-default-sort' => 'Podrazumijevani ključ sortiranja',
 'pageinfo-length' => 'Dužina stranice (u bajtovima)',
 'pageinfo-article-id' => 'ID stranice',
+'pageinfo-language' => 'Jezik sadržaja stranice',
 'pageinfo-robot-policy' => 'Status tražilice',
 'pageinfo-robot-index' => 'Stranicu je moguće indeksirati',
 'pageinfo-robot-noindex' => 'Ne može se indeksirati',
@@ -3028,6 +3043,14 @@ Ovo je vjerovatno izazvano vezom ka vanjskoj nepoželjnoj stranici.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magična riječ|Magične 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' => 'Računa se kao stranica sa sadržajem',
+'pageinfo-contentpage-yes' => 'Da',
+'pageinfo-protect-cascading' => 'Prenosiva zaštita stranica važi odavde',
+'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-protect-cascading-from' => 'Stranice sa prenosivom zaštitom od',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označi kao patrolirano',
@@ -3039,6 +3062,8 @@ Ovo je vjerovatno izazvano 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 stranice $1 označena je kao patrolirana.',
+'markedaspatrollederrornotify' => 'Nije uspjelo označavanje ove stranice kao patrolirane.',
 
 # Patrol log
 'patrol-log-page' => 'Evidencija patroliranja',
@@ -3072,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.',
@@ -3102,6 +3128,7 @@ Njegovim izvršavanjem možete da ugrozite Vaš sistem.",
 'hours' => '{{PLURAL:$1|$1 sat|$1 sata|$1 sati}}',
 'days' => '{{PLURAL:$1|$1 dan|$1 dana|$1 dana}}',
 'ago' => 'prije $1',
+'just-now' => 'upravo sada',
 
 # Bad image list
 'bad_image_list' => "Koristi se sljedeći format:
@@ -3603,6 +3630,7 @@ Ovaj kod za potvrdu će isteći u $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Međuwiki umetanje je isključeno]',
 'scarytranscludefailed' => '[Neuspješno preusmjerenje šablona na $1]',
+'scarytranscludefailed-httpstatus' => '[Ne mogu da preuzmem šablon $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL je predugačak]',
 
 # Delete conflict
@@ -3713,6 +3741,7 @@ Također možete [[Special:EditWatchlist|koristiti standardni uređivač]].',
 'version-license' => 'Licenca',
 'version-poweredby-credits' => "Ova wiki je zasnovana na '''[//www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
+'version-credits-summary' => 'Htjeli bismo da zahvalimo sljedećim osobama na njihovom doprinosu [[Special:Version|MediaWiki]].',
 'version-license-info' => 'Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija.
 
 Mediawiki se distriburia u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte GNU opću javnu licencu za više detalja.
@@ -3852,11 +3881,15 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'logentry-move-move_redir-noredirect' => '$1 premjesti stranicu $3 na $4 preko preusmjerenja bez ostavljanja preusmjerenja',
 'logentry-patrol-patrol' => '$1 označi izmjenu $4 pregledane stranice $3',
 'logentry-patrol-patrol-auto' => '$1 samostalno označi izmjenu $4 pregledane stranice $3',
-'logentry-newusers-newusers' => '$1 otvori korisnički račun',
-'logentry-newusers-create' => '$1 otvori korisnički račun',
-'logentry-newusers-create2' => '$1 otvori korisnički račun $3',
+'logentry-newusers-newusers' => 'Korisnički račun $1 je napravljen',
+'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].
@@ -3874,6 +3907,10 @@ U suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajat
 'feedback-bugcheck' => 'Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom "bugu"].',
 'feedback-bugnew' => 'Provereno. Prijavi novu grešku',
 
+# Search suggestions
+'searchsuggest-search' => 'Traži',
+'searchsuggest-containing' => 'sadrži...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nemate ovlasti da postavljate datoteke na ovoj wiki.',
 'api-error-badtoken' => 'Unutrašnja greška: token nije ispravan.',
index 602a15e..696c4fb 100644 (file)
@@ -366,9 +366,6 @@ Akks ad iskrt kra yaḍn',
 'virus-unknownscanner' => 'antivirus oritwsan',
 
 # Login and logout pages
-'welcomecreation' => '== Brrkat,  $1! ==
-lcont nek  tuyskar .
- Adur tut atbaddlt [[Special:Preferences|{{SITENAME}} issusmen]]',
 'yourname' => 'smiyt o-msxdam:',
 'yourpassword' => 'awal iḥdan:',
 'yourpasswordagain' => 'Зawd ara awal iḥdan:',
@@ -743,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',
@@ -909,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',
 
@@ -1356,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 8a97d5c..a7909c3 100644 (file)
@@ -241,7 +241,7 @@ $messages = array(
 
 'underline-always' => 'සැමවිටම කරන්න',
 'underline-never' => 'කිසිවිටෙක නොකරන්න',
-'underline-default' => 'බà·\8aâ\80\8dරà·\80à·\94à·\83රයà·\99à·\84à·\92 à¶´à·\99රනà·\92මà·\92ය à¶\85නà·\94à·\80ය',
+'underline-default' => 'à·\83ම à·\84à·\9d à¶\9cà·\80à·\9aà·\82à¶\9aයà·\99à·\84à·\92 à¶´à·\99රනà·\92මà·\92ය',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'අකුරු විලාසයන් සංස්කරණ පෙදෙස:',
@@ -328,8 +328,8 @@ $messages = array(
 'newwindow' => '(නව කවුළුවක විවෘතවේ)',
 'cancel' => 'අත් හරින්න',
 'moredotdotdot' => 'තවත්...',
-'mypage' => 'මà¶\9cà·\9a à¶´à·\92ටà·\94à·\80',
-'mytalk' => 'මà¶\9cà·\9a à·\83à·\8fà¶\9aචà·\8aඡà·\8f',
+'mypage' => 'පිටුව',
+'mytalk' => 'à·\83à·\8fà¶\9aචà·\8aඡà·\8fà·\80',
 'anontalk' => 'මෙම අයිපී ලිපිනය සඳහා සාකච්ඡාව',
 'navigation' => 'යාත්‍රණය',
 'and' => '&#32;සහ',
@@ -351,7 +351,7 @@ $messages = array(
 'vector-action-protect' => 'ආරක්‍ෂණය',
 'vector-action-undelete' => 'මකාදැමීම අවලංගු කරන්න',
 'vector-action-unprotect' => 'ආරක්ෂණ තත්වය වෙනස් කරන්න',
-'vector-simplesearch-preference' => 'à·\80à·\90ඩà·\92දà·\92යà·\94ණà·\94à¶\9aà·\85 à·\83à·\99à·\80à·\94මà·\8a à¶ºà·\9dජනà·\8f à·\83à¶\9aà·\8aâ\80\8dරà·\93ය à¶\9aරනà·\8aන (වෙක්ටර් තීමය සඳහා පමණි)',
+'vector-simplesearch-preference' => 'à·\83à·\94à·\85à·\94 à¶\9aà·\85 à·\83à·\99à·\80à·\94මà·\8a à¶¶à·\8fරය (වෙක්ටර් තීමය සඳහා පමණි)',
 'vector-view-create' => 'තනන්න',
 'vector-view-edit' => 'සංස්කරණය',
 'vector-view-history' => 'ඉතිහාසය නරඹන්න',
@@ -361,6 +361,7 @@ $messages = array(
 'namespaces' => 'නාමඅවකාශයන්',
 'variants' => 'ප්‍රභේද',
 
+'navigation-heading' => 'සංචාලන මෙනුව',
 'errorpagetitle' => 'දෝෂය',
 'returnto' => '$1 වෙත නැවත යන්න.',
 'tagline' => '{{SITENAME}} වෙතින්',
@@ -603,16 +604,16 @@ $2',
 
 ඔබට නිර්නාමිකව {{SITENAME}} කටයුතු කරගෙන යාහැක, නැතහොත් පෙර පරිශීලක ලෙස හෝ වෙනත් පරිශීලකයෙකු ලෙස <span class='plainlinks'>[$1 නැවත ගිණුමක‍ට පිවිසිය හැක]</span>.
 ඔබගේ බ්‍රවුසරයෙහි පූර්වාපේක්‍ෂී සංචිතය (කෑෂය) පිරිසිදුකරන තෙක්, සමහරක් පිටු විසින් ඔබ තවදුරටත් පිවිසී ඇති බවක් දිගටම පෙන්නුම් කිරීමට ඉඩ ඇත.",
-'welcomecreation' => '== ආයුබෝවන්, $1! ==
-
-ඔබ‍ගේ ගිණුම තනන ලදී.
-ඔබ‍ගේ [[Special:Preferences|{{SITENAME}} අභිරුචි ]] වෙනස් කිරීම අමතක නොකරන්න.',
+'welcomeuser' => 'ආයුබෝවන්, $1!',
+'welcomecreation-msg' => 'ඔබගේ ගිණුම තනා ඇත.
+ඔබගේ [[Special:Preferences|{{SITENAME}} අභිරුචීන්]] නෙස් කිරීමට අමතක නොකරන්න.',
 'yourname' => 'පරිශීලක නාමය:',
 'yourpassword' => 'මුරපදය:',
 'yourpasswordagain' => 'මුරපදය යළි ඇතුළු කරන්න:',
 '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' => 'අවලංගු කරන්න',
 
@@ -882,7 +885,7 @@ $2
 'note' => "'''සටහන:'''",
 'previewnote' => "'''මෙය පෙරදසුනක් පමණක් බව සිහිතබාගන්න.'''
 ඔබගේ වෙනස්කිරීම් තවමත් සුරැකීමට ලක් කොට නොමැත!",
-'continue-editing' => 'සංස්කරණය කරගෙනයන්න',
+'continue-editing' => 'සංස්කරණ කලාපය වෙත යන්න',
 'previewconflict' => 'ඔබ විසින් සුරැකීම තෝරාගත්තොත්,  ඉහළ පෙළ සංස්කරණ සරියෙහි,  පෙළ දර්ශනය විය හැකි අයුර මෙම පෙර-දසුනෙන් ආවර්ජනය වේ.',
 'session_fail_preview' => "'''කණගාටුයි! සැසි දත්ත හානියක් හේතුවෙන් අප විසින් ඔබගේ  සංස්කරණය ක්‍රියායයනය කිරීමට නොහැකි වී ඇත.
 කරුණාකර නැවත උත්සාහ කරන්න.
@@ -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) පමණට වඩා ඇත.
@@ -1242,7 +1252,7 @@ $1",
 
 # Preferences page
 'preferences' => 'අභිරුචි',
-'mypreferences' => 'මà¶\9cà·\9a à¶\85භà·\92රà·\94චà·\92',
+'mypreferences' => 'à¶\85භà·\92රà·\94චà·\93නà·\8a',
 'prefs-edits' => 'සංස්කරණයන් සංඛ්‍යාව:',
 'prefsnologin' => 'පිවිසී නැත (Not logged in)',
 'prefsnologintext' => 'පරිශීලක අභිරුචි සැකසීමට නම්, ඔබ  <span class="plainlinks">[{{fullurl:Special:Userlogin|returnto=$1}} ප්‍රවිෂ්ටවී]</span> සිටිය යුතුය.',
@@ -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' => 'මෙම පිටුව කියවන්න',
@@ -1937,9 +1949,9 @@ When filtered by user, only files where that user uploaded the most recent versi
 
 'disambiguations' => 'නිරාකරණ පිටු සඳහා සබැදෙන පිටු',
 'disambiguationspage' => 'Template:තේරුම් නිරාකරණය',
-'disambiguations-text' => "à¶\89දà·\92රà·\92 à¶´à·\92ටà·\94 '''à·\80à¶\9aà·\8aâ\80\8dරà·\9dතà·\8aතà·\92à·\84රණ à¶´à·\92ටà·\94à·\80'''à¶\9aට à·\83බà·\90â\80\8dඳà·\9a.
+'disambiguations-text' => "පà·\84ත à¶¯à·\90à¶\9aà·\8aà·\80à·\99න à¶´à·\92ටà·\94 à¶\85තර '''à·\80à¶\9aà·\8aâ\80\8dරà·\9dතà·\8aතà·\92à·\84රණ à¶´à·\92ටà·\94à·\80à¶\9aට''' à·\83බà·\90ඳà·\99න à¶\91à¶\9aà·\8a à·\83බà·\90ඳà·\92යà¶\9aà·\8a à·\84à·\9d à¶\87ත.
 ඒවා ඒ වෙනුවට අනුරූප මාතෘකාවට සබැඳිය යුතුය.<br />
-යම් පිටුවක් වක්‍රෝත්තිහරණ පිටුවක් ලෙස සලකනුයේ එය [[MediaWiki:Disambiguationspage]] වෙතින් සබැඳුනු සැකිල්ලක් භාවිතා කරන්නේ නම්ය",
+යම් පිටුවක් වක්‍රෝත්තිහරණ පිටුවක් ලෙස සලකනුයේ එය [[MediaWiki:Disambiguationspage]] වෙතින් සබැඳුනු සැකිල්ලක් භාවිතා කරන්නේ නම්ය.",
 
 'doubleredirects' => 'ද්විත්ව යළි-යොමුකිරීම්',
 'doubleredirectstext' => 'අනෙකුත් යළි-යොමුවීම් පිටුවලට යළි-යොමුවන පිටුවල ලැයිස්තුවක් මෙම පිටුවේ දැක්වේ.
@@ -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' => 'මෙම විකියේ අර්ථදක්වා ඇති පරිශීලක කාණ්ඩ ලැයිස්තුවක් ඔවුනට අදාළ ප්‍රවේශ හිමිකම්ද සමගින් මෙහි පහත ලැයිස්තුගත කොට ඇත.
@@ -2166,7 +2175,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 
 # Watchlist
 'watchlist' => 'මගේ මුර-ලැයිස්තුව',
-'mywatchlist' => 'මà\9cà·\9a à¶¸à·\94ර ලැයිස්තුව',
+'mywatchlist' => 'මà·\94ර-ලැයිස්තුව',
 'watchlistfor2' => '$1 සඳහා ($2)',
 'nowatchlist' => 'ඔබගේ මුර-ලැයිස්තුවේ කිසිදු අයිතමයක් නොමැත.',
 'watchlistanontext' => 'ඔබගේ මුර-ලැයිස්තුවෙහි අයිතම නැරඹීමට හෝ සංස්කරණය කිරීමට හෝ කරුණාකර $1 සපුරන්න.',
@@ -2202,11 +2211,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 
 'enotif_mailer' => '{{SITENAME}}හි නිවේදන යවන්නා',
 'enotif_reset' => 'පිවිසුනු සියළු පිටු සලකුණු කරන්න',
-'enotif_newpagetext' => 'මෙය නව පිටුවකි.',
 'enotif_impersonal_salutation' => '{{SITENAME}} පරිශීලක',
-'changed' => 'වෙනස්කරන ලදි',
-'created' => 'තනන ලදි',
-'enotif_subject' => '{{SITENAME}}හි  $PAGETITLE යන පිටුව  $PAGEEDITOR විසින්  $CHANGEDORCREATED කෙරිණි',
 'enotif_lastvisited' => 'ඔබගේ අවසාන පිවිසුමට පසු සිදුවූ සියළු වෙනස්වීම් නැරඹුමට $1 බලන්න.',
 'enotif_lastdiff' => 'මෙම වෙනස නැරඹීම සඳහා $1 බලන්න.',
 'enotif_anon_editor' => 'නිර්නාමික පරිශීලක $1',
@@ -2240,6 +2245,8 @@ $UNWATCHURL
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'තනන ලදි',
+'changed' => 'වෙනස්කරන ලදි',
 
 # Delete
 'deletepage' => 'පිටුව මකා දමන්න',
@@ -2327,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',
@@ -2427,9 +2434,9 @@ $1',
 'blanknamespace' => '(ප්‍රධාන)',
 
 # Contributions
-'contributions' => 'මෙම පරිශීලකගේ දායකත්වයන්',
+'contributions' => '{{GENDER:$1|පරිශීලකගේ}} දායකත්වයන්',
 'contributions-title' => ' $1 සඳහා පරිශීලක දායකත්වයන්',
-'mycontris' => 'මà¶\9cà·\9a à¶¯à·\8fයà¶\9aතà·\8aà·\80',
+'mycontris' => 'දායකත්ව',
 'contribsub2' => '$1 සඳහා ($2)',
 'nocontribs' => 'මෙම උපමානයන් හා ගැලපෙන වෙනස්වීම් හමුනොවිණි.',
 'uctop' => '(ඉහලම)',
@@ -2470,7 +2477,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 යළි-යොමුකරයි',
 'whatlinkshere-hidetrans' => '$1 අන්තර්ගතයන්',
 'whatlinkshere-hidelinks' => 'සබැඳියන් $1',
-'whatlinkshere-hideimages' => 'රà·\96ප සබැඳි $1',
+'whatlinkshere-hideimages' => 'à¶\9cà·\9cනà·\94 සබැඳි $1',
 'whatlinkshere-filters' => 'පෙරහන්',
 
 # Block/unblock
@@ -2786,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|නිර්යාත උපයුක්තය]] භාවිත කරමින් මූලාශ්‍ර විකිය මගින් ගොනුව නිර්යාත කරන්න .
@@ -2819,6 +2827,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'import-invalid-interwiki' => 'සඳහන් කර ඇති විකියෙන් ආයාත කිරීම සිදු කල නොහැක.',
 'import-error-edit' => '"$1" පිටුව ආයාත නොකරන ලදී මන්ද ඔබට එය සංස්කරණය කිරීමට ඉඩ නොදේ.',
 'import-error-create' => '"$1" පිටුව ආයාත නොකරන ලදී මන්ද ඔබට එය තැනීමට ඉඩ නොදේ.',
+'import-rootpage-invalid' => 'ලබා දුන් මූල පිටුව වැරදි ශීර්ෂයක් වේ.',
 
 # Import log
 'importlogpage' => 'ලඝු-සටහන් ආයාත කරන්න',
@@ -2957,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' => 'මෙම පිටුවට යළියොමු ගණන',
@@ -2972,11 +2985,16 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'pageinfo-lastuser' => 'අවසන් සංස්කාරක',
 'pageinfo-lasttime' => 'අවසන් සංස්කරණය වූ දිනය',
 'pageinfo-edits' => 'මුළු සංස්කරණ සංඛ්‍යාව',
-'pageinfo-authors' => 'ප්‍රභින්න කර්තෘවරුන් මුළු  සංඛ්‍යාව',
+'pageinfo-authors' => 'ප්‍රභින්න කර්තෘවරුන් මුළු සංඛ්‍යාව',
 'pageinfo-recent-edits' => 'මෑත සංස්කරණ සංඛ්‍යාව (අවසන් $1 තුලදී)',
 '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' => 'පරික්ෂාකර බැලූ ලෙස සලකුණු කරන්න',
@@ -3020,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.',
@@ -3052,6 +3071,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 පැය|$1 පැය}}',
 'days' => '{{PLURAL:$1|$1 දවස|$1 දවස්}}',
 'ago' => '$1 පෙර',
+'just-now' => 'මේ දැන්',
 
 # Bad image list
 'bad_image_list' => 'ආකෘතිය පහත පරිදි වේ:
@@ -3925,6 +3945,7 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 '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 4a26e3a..c07e914 100644 (file)
@@ -325,12 +325,12 @@ $messages = array(
 'tog-ccmeonemails' => 'Posielať mi kópie mojich emailov, ktoré pošlem ostatným používateľom',
 'tog-diffonly' => 'Nezobrazovať obsah stránky pod rozdielmi',
 'tog-showhiddencats' => 'Zobraziť skryté kategórie',
-'tog-noconvertlink' => 'Vypnúť konverziu názvov',
+'tog-noconvertlink' => 'Vypnúť konverziu názvov odkazov',
 'tog-norollbackdiff' => 'Vynechať rozdiel po vykonaní rollbacku',
 
 'underline-always' => 'Vždy',
 'underline-never' => 'Nikdy',
-'underline-default' => 'Štandardné nastavenie prehliadača',
+'underline-default' => 'Podľa nastavení prehliadača alebo témy vzhľadu',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Štýl písma oblasti na úpravy:',
@@ -415,8 +415,8 @@ $messages = array(
 'newwindow' => '(otvorí v novom okne)',
 'cancel' => 'Zrušiť',
 'moredotdotdot' => 'Viac...',
-'mypage' => 'Moja stránka',
-'mytalk' => 'Moja diskusia',
+'mypage' => 'Stránka',
+'mytalk' => 'Diskusia',
 'anontalk' => 'Diskusia k tejto IP adrese',
 'navigation' => 'Navigácia',
 'and' => '&#32;a',
@@ -532,7 +532,7 @@ $1',
 'privacy' => 'Ochrana osobných údajov',
 'privacypage' => 'Project:Ochrana osobných údajov',
 
-'badaccess' => 'Chyba povolenia',
+'badaccess' => 'Chyba oprávnenia',
 'badaccess-group0' => 'Nemáte povolenie na vykonanie požadovanej operácie.',
 'badaccess-groups' => 'Činnosť, ktorú požadujete, môže vykonať iba člen {{PLURAL:$2|skupiny|jednej zo skupín}}: $1.',
 
@@ -546,7 +546,7 @@ $1',
 'newmessagesdifflink' => 'posledná zmena',
 'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|iného používateľa|$3 iných používateľov}} ($2).',
 'youhavenewmessagesmanyusers' => 'Máte $1 od viacerých ďalších používateľov ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy|nových správ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|posledná zmena|posledné zmeny}}',
 'youhavenewmessagesmulti' => 'Máte nové správy na $1',
 'editsection' => 'upraviť',
@@ -640,7 +640,7 @@ Oznámte to prosím [[Special:ListUsers/sysop|správcovi]] a uveďte URL.',
 'badarticleerror' => 'Na tejto stránke túto činnosť nemožno vykonať.',
 'cannotdelete' => 'Nebolo možné zmazať stránku alebo súbor „$1“.
 Možno ju už zmazal nieto iný.',
-'cannotdelete-title' => 'Nemôžete zmazať stránku "$1"',
+'cannotdelete-title' => 'Nemôžete zmazať stránku „$1“',
 'delete-hook-aborted' => 'Zmazanie zrušila prídavná funkcia (prípojný bod syntaktického analyzátora).
 Neudala vysvetlenie.',
 'badtitle' => 'Neplatný nadpis',
@@ -669,7 +669,7 @@ $2',
 'namespaceprotected' => "Nemáte povolenie upravovať stránky v mennom priestore '''$1'''.",
 'customcssprotected' => 'Nemáte právo upravovať túto CSS stránku, pretože obsahuje osobné nastavenie iného používateľa.',
 'customjsprotected' => 'Nemáte právo upravovať túto JavaScript stránku, pretože obsahuje osobné nastavenie iného používateľa.',
-'ns-specialprotected' => 'Stránky v mennom pristore {{ns:special}} nie je možné upravovať.',
+'ns-specialprotected' => 'Stránky v mennom priestore {{ns:special}} nie je možné upravovať.',
 'titleprotected' => "Používateľ [[User:$1|$1]] zabránil vytváraniu stránky s týmto názvom.
 Udaný dôvod: ''$2''.",
 'filereadonlyerror' => 'Nebolo možné modifikovať súbor „$1“, pretože úložisko „$2“ je momentálne v režime len na čítanie.
@@ -690,10 +690,6 @@ Správca, ktorý ho zamkol ponúkol toto vysvetlenie: „$3“.',
 
 Odteraz môžete používať {{GRAMMAR:akuzatív|{{SITENAME}}}} ako anonymný používateľ alebo sa môžete opäť <span class='plainlinks'>[$1 prihlásiť]</span> pod rovnakým alebo odlišným používateľským menom.
 Uvedomte si, že niektoré stránky sa môžu naďalej zobrazovať ako keby ste boli prihlásený, až kým nevymažete vyrovnávaciu pamäť vášho prehliadača.",
-'welcomecreation' => '== Vitaj, $1! ==
-
-Vaše konto je vytvorené.
-Nezabudnite si nastaviť svoje [[Special:Preferences|používateľské nastavenia]].',
 'yourname' => 'Používateľské meno:',
 'yourpassword' => 'Heslo:',
 'yourpasswordagain' => 'Zopakujte heslo:',
@@ -703,9 +699,9 @@ Nezabudnite si nastaviť svoje [[Special:Preferences|používateľské nastaveni
 'password-change-forbidden' => 'Na tejto wiki si nemôžete zmeniť heslo.',
 'externaldberror' => 'Buď nastala chyba externej autentifikačnej databázy alebo vám nie je povolené aktualizovať váš externý účet.',
 'login' => 'Prihlásiť',
-'nav-login-createaccount' => 'Vytvorenie konta / prihlásenie',
+'nav-login-createaccount' => 'Prihlásenie / vytvorenie účtu',
 'loginprompt' => 'Na prihlásenie do {{GRAMMAR:genitív|{{SITENAME}}}} musíte mať zapnuté koláčiky (cookies).',
-'userlogin' => 'Vytvorenie konta / prihlásenie',
+'userlogin' => 'Prihlásenie / vytvorenie účtu',
 'userloginnocreate' => 'Prihlásiť',
 'logout' => 'Odhlásiť',
 'userlogout' => 'Odhlásiť',
@@ -720,7 +716,7 @@ Nezabudnite si nastaviť svoje [[Special:Preferences|používateľské nastaveni
 'createaccountreason' => 'Dôvod:',
 'badretype' => 'Zadané heslá nie sú rovnaké.',
 'userexists' => 'Zadané používateľské meno sa už používa.
-Zvoľte si prosím iné meno.',
+Prosím, zvoľte si iné meno.',
 'loginerror' => 'Chyba pri prihlasovaní',
 'createaccounterror' => 'Nepodarilo sa vytvoriť účet: $1',
 'nocookiesnew' => 'Používateľské konto bolo vytvorené, ale nie ste prihlásený. {{SITENAME}} používa cookies na prihlásenie. Máte cookies vypnuté. Zapnite ich a potom sa prihláste pomocou vášho nového používateľského mena a hesla.',
@@ -736,8 +732,8 @@ Skontrolujte preklepy alebo sa [[Special:UserLogin/signup|zaregistrujte ako nov
 'nosuchusershort' => 'V súčasnosti neexistuje používateľ s menom „$1“. Skontrolujte preklepy.',
 'nouserspecified' => 'Musíte uviesť meno používateľa.',
 'login-userblocked' => 'Tento používateľ je zablokovaný. Nie je mu dovolené prihlásiť sa.',
-'wrongpassword' => 'Zadané heslo je nesprávne. Skúste  znovu.',
-'wrongpasswordempty' => 'Zadané heslo bolo prázdne. Skúste prosím znova.',
+'wrongpassword' => 'Zadané heslo je nesprávne. Prosím, skúste to znova.',
+'wrongpasswordempty' => 'Zadané heslo bolo prázdne. Prosím, skúste to znova.',
 'passwordtooshort' => 'Heslo musí mať dĺžku aspoň $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'password-name-match' => 'Vaše heslo musí byť iné ako vaše používateľské meno.',
 'password-login-forbidden' => 'Použitie tohto používateľského mena a hesla bolo zakázané.',
@@ -767,9 +763,9 @@ Z tohto dôvodu nemôžu návštevníci z tejto IP adresy momentálne vytvoriť
 'emailauthenticated' => 'Vaša emailová adresa bola overená $2 $3.',
 'emailnotauthenticated' => 'Vaša e-mailová adresa ešte nebola overená. Preto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.',
 'noemailprefs' => 'Tieto nástroje budú prístupné po vyplnení emailovej adresy vo vašich nastaveniach.',
-'emailconfirmlink' => 'Potvrďte vašu e-mailovú adresu',
+'emailconfirmlink' => 'Potvrďte svoju e-mailovú adresu',
 'invalidemailaddress' => 'Emailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.',
-'cannotchangeemail' => 'Na tejto wiki nie je možné meniť e-mailové adresy používateľského konta.',
+'cannotchangeemail' => 'Na tejto wiki nie je možné meniť e-mailové adresy používateľského účtu.',
 'emaildisabled' => 'Táto lokalita nedokáže posielať emaily.',
 'accountcreated' => 'Účet vytvorený',
 'accountcreatedtext' => 'Používateľský účet $1 bol vytvorený.',
@@ -846,7 +842,7 @@ Dočasné heslo:$2',
 'passwordreset-emailerror-capture' => 'Bol vytvorený pripomienkový e-mail, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať používateľovi: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'Zmena e-mailovej adresy',
+'changeemail' => 'Zmeniť emailovú adresu',
 'changeemail-header' => 'Zmena e-mailovej adresy pre účet',
 'changeemail-text' => 'Vyplňte tento formulár na zmenu e-mailovej adresy. Zmenu budete musieť potvrdiť zadaním svojho hesla.',
 'changeemail-no-info' => 'Na prístup k tejto stránke musíte byť prihlásený.',
@@ -1034,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.',
@@ -1580,12 +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',
-'rightsnone' => '(žiadne)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čítať túto stránku',
@@ -1648,7 +1644,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'hist' => 'história',
 'hide' => 'skryť',
 'show' => 'zobraziť',
-'minoreditletter' => 'D',
+'minoreditletter' => 'd',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|sledujúci používateľ|sledujúci používatelia|sledujúcich používateľov}}]',
@@ -1971,7 +1967,7 @@ Možno chcete upraviť popis na jeho [$2 popisnej stránke súboru] tam.',
 'uploadnewversion-linktext' => 'Nahrať novú verziu tohto súboru',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'zdieľané úložisko',
-'upload-disallowed-here' => 'Tento súbor nie je možné prepísať.',
+'upload-disallowed-here' => 'Tento súbor nemôžete prepísať.',
 
 # File reversion
 'filerevert' => 'Obnoviť $1',
@@ -2208,7 +2204,7 @@ Pozri aj [[Special:WantedCategories|žiadané kategórie]].',
 'linksearch-ok' => 'Hľadať',
 'linksearch-text' => 'Je možné používať zástupné znaky, napr. „*.wikipedia.org“.
 Povinná je minimálne doména najvyššej úrovne, napr.. „*.org“.<br />
-Podporované protokoly: <code>$1</code> (nepridávajte ich do hľadania).',
+Podporované protokoly: <code>$1</code> (ak protokol nie je uvedený, použije sa <code>http://</code>).',
 'linksearch-line' => 'Na $1 odkazuje $2',
 'linksearch-error' => 'Zástupné znaky je možné použiť iba na začiatku názvu domény.',
 
@@ -2227,10 +2223,6 @@ Podporované protokoly: <code>$1</code> (nepridávajte ich do hľadania).',
 '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.
@@ -2257,9 +2249,8 @@ Môžete si prečítať [[{{MediaWiki:Listgrouprights-helppage}}|ďalšie inform
 'emailuser-title-target' => 'E-mail {{GENDER:$1|tomuto používateľovi|tejto používateľke}}',
 'emailuser-title-notarget' => 'E-mail používateľovi',
 'emailpage' => 'E-mail používateľovi',
-'emailpagetext' => 'Ak tento používateľ zadal platnú emailovú adresu vo svojich nastaveniach,
-môžete mu pomocou nasledovného formulára poslať email.
-Emailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach]] sa zobrazí ako adresa odosielateľa emailu, aby vám mohol príjemca priamo odpovedať.',
+'emailpagetext' => 'Pomocou nasledovného formulára môžete {{GENDER:$1|tomuto používateľovi|tejto používateľke}} poslať e-mailovú správu.
+Mailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach]] sa zobrazí ako adresa odosielateľa mailu, aby vám mohol príjemca priamo odpovedať.',
 'usermailererror' => 'Emailový program vrátil chybu:',
 'defemailsubject' => 'email {{GRAMMAR:genitív|{{SITENAME}}}} od používateľa „$1“',
 'usermaildisabled' => 'Používateľ má vypnuté používanie emailu',
@@ -2297,9 +2288,7 @@ Emailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniac
 '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ť',
@@ -2327,11 +2316,7 @@ Ak budete chcieť neskôr stránku odstrániť zo sledovaných stránok, kliknit
 
 'enotif_mailer' => 'Upozorňovač {{GRAMMAR:genitív|{{SITENAME}}}}',
 'enotif_reset' => 'Označiť všetky stránky ako „navštívené“',
-'enotif_newpagetext' => 'Toto je nová stránka.',
 'enotif_impersonal_salutation' => 'používateľ {{GRAMMAR:genitív|{{SITENAME}}}}',
-'changed' => 'zmene',
-'created' => 'vytvorení',
-'enotif_subject' => '{{SITENAME}} - stránka $PAGETITLE bola $CHANGEDORCREATED $PAGEEDITOR',
 'enotif_lastvisited' => 'Všetky zmeny od vašej poslednej návštevy uvidíte na $1.',
 'enotif_lastdiff' => 'Zmenu uvidíte v $1.',
 'enotif_anon_editor' => 'anonymný používateľ $1',
@@ -2360,6 +2345,8 @@ $UNWATCHURL
 
 Návrhy a ďalšia pomoc:
 {{canonicalurl:{{int:Helppage}}}}',
+'created' => 'vytvorení',
+'changed' => 'zmene',
 
 # Delete
 'deletepage' => 'Zmazať stránku',
@@ -2541,7 +2528,7 @@ $1',
 # Contributions
 'contributions' => 'Príspevky používateľa',
 'contributions-title' => 'Príspevky používateľa pre $1',
-'mycontris' => 'Moje príspevky',
+'mycontris' => 'Príspevky',
 'contribsub2' => 'Príspevky $1 ($2)',
 'nocontribs' => 'Neboli nájdené úpravy, ktoré by zodpovedali týmto kritériám.',
 'uctop' => '(posledná úprava)',
@@ -2581,7 +2568,7 @@ Nižšie si môžete pozrieť najnovšiu položku záznamu blokovaní:',
 'whatlinkshere-hideredirs' => '$1 presmerovania',
 'whatlinkshere-hidetrans' => '$1 transklúzie',
 'whatlinkshere-hidelinks' => '$1 odkazy',
-'whatlinkshere-hideimages' => '$1 odkazov na obrázok',
+'whatlinkshere-hideimages' => '$1 odkazov na súbor',
 'whatlinkshere-filters' => 'Filtre',
 
 # Block/unblock
@@ -3088,6 +3075,7 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 
 # Info page
 'pageinfo-title' => 'Informácie o „$1“',
+'pageinfo-not-current' => 'Ospravedlňujeme sa, túto informáciu nie je možné poskytnúť pre staré revízie.',
 'pageinfo-header-basic' => 'Základné údaje',
 'pageinfo-header-edits' => 'História úprav',
 'pageinfo-header-restrictions' => 'Ochrana stránky',
@@ -3096,6 +3084,7 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'pageinfo-default-sort' => 'Predvolený kľúč zoraďovania:',
 'pageinfo-length' => 'Dĺžka stránky (v bajtoch)',
 'pageinfo-article-id' => 'ID stránky',
+'pageinfo-language' => 'Jazyk obsahu stránok',
 'pageinfo-robot-policy' => 'Stav vyhľadávača',
 'pageinfo-robot-index' => 'Indexovať stránku',
 'pageinfo-robot-noindex' => 'Neindexovať stránku',
@@ -3116,6 +3105,13 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrytá kategória|Skryté kategórie}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Vložená šablóna|Vložené šablóny}} ($1)',
 'pageinfo-toolboxlink' => 'Informácie o stránke',
+'pageinfo-redirectsto' => 'Presmerovanie na',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Počíta sa ako obsah stránky',
+'pageinfo-contentpage-yes' => 'Áno',
+'pageinfo-protect-cascading' => 'Kaskádové zamknutie',
+'pageinfo-protect-cascading-yes' => 'Áno',
+'pageinfo-protect-cascading-from' => 'Zámky pochádzajú z kaskádových zamknutí',
 
 # Skin names
 'skinname-standard' => 'Klasický',
@@ -3138,6 +3134,8 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'markedaspatrollederror' => 'Nie je možné označiť ako strážené',
 'markedaspatrollederrortext' => 'Pre označenie ako strážený je potrebné uviesť revíziu, ktorá sa má označiť ako strážená.',
 'markedaspatrollederror-noautopatrol' => 'Nie je vám umožnené označiť vlastné zmeny za strážené.',
+'markedaspatrollednotify' => 'Táto zmena stránky $1 bola označená ako strážená.',
+'markedaspatrollederrornotify' => 'Označenie ako strážená zlyhalo.',
 
 # Patrol log
 'patrol-log-page' => 'Záznam strážení',
@@ -3201,6 +3199,7 @@ Jeho spustením môžete kompromitovať svoj systém.",
 'hours' => '{{PLURAL:$1|$1 hodina|$1 hodiny|$1 hodín}}',
 'days' => '{{PLURAL:$1|$1 deň|$1 dni|$1 dní}}',
 'ago' => 'pred: $1',
+'just-now' => 'Pred chvíľkou',
 
 # Bad image list
 'bad_image_list' => 'Formát je nasledovný:
@@ -3757,8 +3756,8 @@ Skúste obyčajný náhľad.',
 Skúste obyčajný náhľad.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'Zmeny novšie ako $1 {{PLURAL:$1|sekunda|sekundy|sekúnd}} nemožno v tomto zozname zobraziť.',
-'lag-warn-high' => 'Z dôvodu dlhej odozvy databázového servera zmeny novšie ako $1 {{PLURAL:$1|sekunda|sekundy|sekúnd}} nemožno v tomto zozname zobraziť.',
+'lag-warn-normal' => 'Úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} nemusia byť v tomto zozname zobrazené.',
+'lag-warn-high' => 'Kvôli dlhšej odozve databázového servera nemusia byť úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} v tomto zozname zobrazené.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Váš zoznam sledovaných stránok obsahuje {{PLURAL:$1|jednu stránku|$1 stránky|$1 stránok}} nepočítajúc diskusné stránky.',
@@ -3816,6 +3815,7 @@ Tiež môžete [[Special:EditWatchlist|použiť štandardný editor]].',
 'version-license' => 'Licencia',
 'version-poweredby-credits' => "Táto wiki beží na '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'ďalší',
+'version-credits-summary' => 'Nasledujúcim osobám by sme radi poďakovali za ich príspevky k vývoju [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki je slobodný softvér; môžete ho šíriť a / alebo modifikovať podľa podmienok GNU General Public License, ktorú vydala Free Software Foundation; a to buď verzie 2 tejto licencie alebo (podľa vášho uváženia) ktorejkoľvek neskoršej verzie. 
 
 MediaWiki je šírený v nádeji, že bude užitočný, avšak BEZ AKEJKOĽVEK ZÁRUKY; neposkytujú sa ani implicitné záruky PREDAJNOSTI alebo VHODNOSTI NA URČITÝ ÚČEL. Ďalšie informácie nájdete v GNU General Public License.
@@ -3955,11 +3955,15 @@ 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 8911498..198db24 100644 (file)
@@ -318,7 +318,8 @@ $messages = array(
 'newwindow' => '(odpre se novo okno)',
 'cancel' => 'Prekliči',
 'moredotdotdot' => 'Več ...',
-'mypage' => 'Moja stran',
+'morenotlisted' => 'Več ni navedenih ...',
+'mypage' => 'Stran',
 'mytalk' => 'Pogovor',
 'anontalk' => 'Pogovorna stran IP',
 'navigation' => 'Navigacija',
@@ -351,6 +352,7 @@ $messages = array(
 'namespaces' => 'Imenski prostori',
 'variants' => 'Različice',
 
+'navigation-heading' => 'Navigacijski meni',
 'errorpagetitle' => 'Napaka',
 'returnto' => 'Vrnite se na $1.',
 'tagline' => 'Iz {{GRAMMAR:rodilnik|{{SITENAME}}}}',
@@ -561,7 +563,7 @@ Poizvedba: $2',
 'actionthrottled' => 'Dejanje zaustavljeno',
 'actionthrottledtext' => 'Kot ukrep proti smetju, je število izvajanj tega dejanja v časovnem obdobju omejeno, in vi ste ta limit presegli.
 Prosimo, poskusite znova čez nekaj minut.',
-'protectedpagetext' => 'Ta stran je bila zaklenjena za preprečitev urejanja.',
+'protectedpagetext' => 'Ta stran je bila zaklenjena za preprečitev urejanja ali drugih dejanj.',
 'viewsourcetext' => 'Lahko si ogledate in kopirate vsebino te strani:',
 'viewyourtext' => "Lahko si ogledate in kopirate vsebino '''vaših urejanj''' te strani:",
 'protectedinterface' => 'Prikazana stran vsebuje besedilo vmesnika programja na tem wikiju in je zaradi preprečevanja zlorab zaščitena.
@@ -597,8 +599,8 @@ Administrator, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.',
 
 {{GRAMMAR:tožilnik|{{SITENAME}}}} lahko zdaj uporabljate neprijavljeni ali pa se <span class='plainlinks'>[$1 ponovno prijavite]</span> kot enak ali drug uporabnik.
 Morda bodo nekatere strani še naprej prikazane, kot da ste prijavljeni, dokler ne boste izpraznili predpomnilnika brskalnika.",
-'welcomecreation' => '== Dobrodošli, $1! ==
-Ustvarili ste račun.
+'welcomeuser' => '$1, dobrodošli!',
+'welcomecreation-msg' => 'Ustvarili ste račun.
 Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rodilnik|{{SITENAME}}}}]].',
 'yourname' => 'Uporabniško ime:',
 'yourpassword' => 'Geslo:',
@@ -702,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',
@@ -769,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',
 
@@ -948,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.',
@@ -1347,9 +1350,9 @@ Tega ni mogoče razveljaviti.',
 'prefs-emailconfirm-label' => 'Potrditev e-pošte:',
 'prefs-textboxsize' => 'Velikost urejevalnega polja',
 'youremail' => 'E-poštni naslov:',
-'username' => 'Uporabniško ime:',
-'uid' => 'ID uporabnika:',
-'prefs-memberingroups' => 'Član {{PLURAL:$1|naslednje skupine|naslednjih skupin|naslednjih skupin|naslednjih skupin|naslednjih skupin}}:',
+'username' => '{{GENDER:$1|Uporabniško|Uporabničino}} ime:',
+'uid' => 'ID {{GENDER:$1|uporabnika|uporabnice}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Član|Članica}} {{PLURAL:$1|naslednje skupine|naslednjih skupin}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Registriran od:',
 'yourrealname' => 'Pravo ime:',
@@ -1501,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',
@@ -1757,6 +1758,7 @@ Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 'backend-fail-notsame' => 'Različna datoteka že obstaja na $1.',
 'backend-fail-invalidpath' => '$1 ni veljavna skladiščna pot.',
 'backend-fail-delete' => 'Ne morem izbrisati datoteke $1.',
+'backend-fail-describe' => 'Nisem mogel spremeniti metapodatkov datoteke »$1«.',
 'backend-fail-alreadyexists' => 'Datoteka $1 že obstaja.',
 'backend-fail-store' => 'Ne morem shraniti datoteke $1 na $2.',
 'backend-fail-copy' => 'Ne morem kopirati datoteke $1 na $2.',
@@ -1881,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',
@@ -2148,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.',
 
@@ -2167,10 +2169,6 @@ Podprti protokoli: <code>$1</code> (če protokol ni določen, se privzame http:/
 '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.
@@ -2236,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',
@@ -2265,20 +2263,23 @@ Morebitne spremembe te strani in pripadajoče pogovorne strani bodo navedene tuk
 
 'enotif_mailer' => 'Obvestilni poštar {{GRAMMAR:rodilnik|{{SITENAME}}}}',
 'enotif_reset' => 'Označi vse strani kot prebrane',
-'enotif_newpagetext' => 'To je nova stran.',
 'enotif_impersonal_salutation' => 'Uporabnik {{GRAMMAR:rodilnik|{{SITENAME}}}}',
-'changed' => 'spremenil',
-'created' => 'ustvaril',
-'enotif_subject' => 'Stran {{GRAMMAR:rodilnik|{{SITENAME}}}} $PAGETITLE je $CHANGEDORCREATED $PAGEEDITOR',
+'enotif_subject_deleted' => '{{GENDER:$2|Uporabnik|Uporabnica}} $2 je {{GENDER:$2|izbrisal|izbrisala}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}',
+'enotif_subject_created' => '{{GENDER:$2|Uporabnik|Uporabnica}} $2 je {{GENDER:$2|ustvaril|ustvarila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}',
+'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}}}}; 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.',
+'enotif_body_intro_changed' => '{{GENDER:$2|uporabnik|uporabnica}} $2 je dne $PAGEEDITDATE {{GENDER:$2|spremenil|spremenila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}; za trenutno redakcijo glejte $3.',
 'enotif_lastvisited' => 'Za spremembe po vašem zadnjem obisku glejte $1.',
 'enotif_lastdiff' => 'Glej $1 za to spremembo.',
 'enotif_anon_editor' => 'brezimni uporabnik $1',
 'enotif_body' => '$WATCHINGUSERNAME,
 
-stran v {{GRAMMAR:dajalnik|{{SITENAME}}}} $PAGETITLE je dne $PAGEEDITDATE $CHANGEDORCREATED uporabnik $PAGEEDITOR,
-za trenutno redakcijo glejte $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Urejevalčev povzetek: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2286,8 +2287,7 @@ Navežite stik z urejevalcem:
 e-pošta: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Nadaljnjih obvestil do obiska strani ne boste prejemali.
-Na spisku nadzorov lahko tudi ponastavite zastavice obveščanj za vse spremljane strani.
+Nadaljnjih obvestil do obiska strani ne boste prejemali. Na spisku nadzorov lahko tudi ponastavite zastavice obveščanj za vse spremljane strani.
 
              Vaš opozorilni sistem {{GRAMMAR:rodilnik|{{SITENAME}}}}
 
@@ -2303,6 +2303,8 @@ $UNWATCHURL
 
 Povratna sporočila in pomoč:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ustvaril',
+'changed' => 'spremenil',
 
 # Delete
 'deletepage' => 'Briši stran',
@@ -2373,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:',
@@ -2389,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',
@@ -2491,7 +2495,7 @@ $1',
 'blanknamespace' => '(Osnovno)',
 
 # Contributions
-'contributions' => 'Uporabnikovi prispevki',
+'contributions' => '{{GENDER:$1|Uporabnikovi|Uporabničini}} prispevki',
 'contributions-title' => 'Prispevki uporabnika $1',
 'mycontris' => 'Prispevki',
 'contribsub2' => 'Uporabnik: $1 ($2)',
@@ -2698,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!'''
@@ -2885,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.',
@@ -3032,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',
@@ -3040,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',
@@ -3051,6 +3061,8 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 'markedaspatrollederror' => 'Ni mogoče označiti kot pregledano',
 'markedaspatrollederrortext' => 'Določite redakcijo, ki jo želite označiti kot pregledano.',
 'markedaspatrollederror-noautopatrol' => 'Svojih urejanj vam ni dovoljeno označiti kot nadzorovanih.',
+'markedaspatrollednotify' => 'Ta sprememba $1 je bila označena kot nadzorovana.',
+'markedaspatrollederrornotify' => 'Označevanje kot nadzorovano ni uspelo.',
 
 # Patrol log
 'patrol-log-page' => 'Dnevnik patrulje',
@@ -3085,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.',
@@ -3119,7 +3132,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Oblika je naslednja:
@@ -3883,6 +3899,10 @@ Ta stran se sooča s tehničnimi težavami.',
 'logentry-newusers-create2' => '$1 je ustvaril(-a) uporabniški račun $3',
 '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].
index 55f3980..274ddd3 100644 (file)
@@ -364,10 +364,6 @@ De Sperre wurde durch [[User:$1|$1]] miet der Begrindung ''„$2“'' eigerichte
 
 Du koast {{SITENAME}} jitz anonym wetter nutzen, oder diech erneut under damm selba oder a'm andern Nutzernoama <span class='plainlinks'>[$1 oamelda]</span>.
 Beachte, doas einige Seyta noo oazeiga kinna, doas du oagemeldet best, sulange du ne denn Browsercache gelaart host.",
-'welcomecreation' => '== Willkumma, $1! ==
-
-Dei Benutzerkonto wurde eigerichtet.
-Vergiss nä, denne [[Special:Preferences|{{SITENAME}}-Eistellunga]] oazupoassa.',
 'yourname' => 'Benutzernoame:',
 'yourpassword' => 'Passwort:',
 'yourpasswordagain' => 'Passwort wiederhola:',
@@ -601,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}}:',
@@ -961,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',
@@ -1364,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.
@@ -1438,9 +1432,6 @@ Wenn du de Seite wieder vu denner Beobachtungsliste entferna mechtest, klicke uf
 
 'enotif_mailer' => '{{SITENAME}}-E-Mail-Benoachrichtigungsdienst',
 'enotif_reset' => 'Olle Seyta ols besucht markiern',
-'enotif_newpagetext' => 'Doas ies anne neue Seite.',
-'created' => 'erzeugt',
-'enotif_subject' => '[{{SITENAME}}] De Seite "$PAGETITLE" wurde vu $PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => "Olle Änderunga uff a'n Blick: $1",
 'enotif_lastdiff' => 'Siehe $1 noach dieser Änderung.',
 'enotif_anon_editor' => 'Anonymer Nutzer $1',
@@ -1466,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',
index 7aafdc9..d69ce96 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Abshirdheere
  * @author Maax
  * @author Mimursal
  * @author Yariiska
@@ -137,6 +138,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'kont',
 'index-category' => 'Maqaalada indeksed',
 'noindex-category' => 'Maqaalada noindeksed',
+'broken-file-category' => 'Bog ka samaysan file aan jirin.',
 
 'about' => 'Ku saabsan',
 'article' => 'Qoraalka bogga oo kooban',
@@ -174,7 +176,9 @@ $messages = array(
 'vector-view-viewsource' => 'Itusi xogta',
 'actions' => 'Waxa dhacaayo',
 'namespaces' => 'Xarun magaceedyada',
+'variants' => 'Isbedelada',
 
+'navigation-heading' => 'Liiska laga galo',
 'errorpagetitle' => 'Qalad',
 'returnto' => 'Ku noqo $1.',
 'tagline' => 'Ka {{SITENAME}}',
@@ -254,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',
 
@@ -272,6 +276,10 @@ fiiri [[Special:Version|nooca bogga]].',
 'youhavenewmessages' => 'Waxaa heysataa $1 ($2).',
 'newmessageslink' => 'Fariimaha cusub',
 'newmessagesdifflink' => 'bedelkii ugu dambeeyay',
+'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',
@@ -288,11 +296,15 @@ fiiri [[Special:Version|nooca bogga]].',
 'viewdeleted' => 'Fiiri $1?',
 'restorelink' => '{{PLURAL:$1|halxabo oo bedelkii la tirtiray|$1 bedelyadii la tirtiray}}',
 'feedlinks' => 'Quudinta wararka:',
+'feed-invalid' => 'Habka aad uga soo qayb gashay masaxna.',
+'feed-unavailable' => 'Faallo diyaar maaha.',
 'site-rss-feed' => '$1 RSS quudiye',
 'site-atom-feed' => '$1 Atom quudiye',
 'page-rss-feed' => '"$1" RSS quudiye',
 'page-atom-feed' => '"$1" Atom quudiye',
 'red-link-title' => '$1 (Bogga ma jiro)',
+'sort-descending' => 'Habka hoos udhaca.',
+'sort-ascending' => 'Habka kor u kaca.',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Bog',
@@ -300,7 +312,7 @@ fiiri [[Special:Version|nooca bogga]].',
 'nstab-media' => 'Bogga wararka',
 'nstab-special' => 'Bogga khaaska ah',
 'nstab-project' => 'Bogga mashruuca',
-'nstab-image' => 'Fayl',
+'nstab-image' => 'Gal',
 'nstab-mediawiki' => 'Fariin',
 'nstab-template' => 'Tusmo',
 'nstab-help' => 'Bogga caawinaada',
@@ -308,6 +320,9 @@ fiiri [[Special:Version|nooca bogga]].',
 
 # Main script and global functions
 'nosuchaction' => 'Wax shaqo oo saas ah kama jiro',
+'nosuchactiontext' => 'Waxaad soo raacday URL aan sax ahayn.
+waxaa laga yaabaa URL inaad u qortay hab aan sax ahayn, ama aad soo raacday mid aan jirin.
+waxaa laga yaabaa inuu kani tilmaamayo cilad jirta  {{SITENAME}}.',
 'nosuchspecialpage' => 'Wax bog oo sidaas khaas u ah ma jirto.',
 'nospecialpagetext' => '<strong>Waxaana weydiisay bog khaas ah oosan jirin.</strong>
 
@@ -337,6 +352,7 @@ Fadlan u sheek [[Special:ListUsers/sysop|maamulaha]], kana digtooneesii URL-ka.'
 'filenotfound' => 'Ma oo san helin  faylka "$1".',
 'fileexistserror' => 'Ma ku qori karin faylka "$1": faylkan wuu jiraa.',
 'unexpected' => 'Qiimo loo maleeneenin: "$1"="$2".',
+'formerror' => 'Qalad: suura gal maaha in la diraa qoraalkaan',
 'badarticleerror' => 'Shaqadaan ma lagu sameyn karo boggaan.',
 'cannotdelete' => 'Boggaan ama file\'ka "$1" mala tirtiri karo.
 waxaa laga yaabaa in oo qof kale tirtiray .',
@@ -350,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.",
@@ -366,14 +385,13 @@ Sababta neh waxaa waaye "\'\'$2\'\'".',
 'logouttext' => "'''Hada waad ka baxday.'''
 
 Waad sii isticmaali kartaa {{SITENAME}} adoona lagu aqoon, ama <span class='plainlinks'>[$1 gudaha gal]</span> adiga oo isticmaalaya magacaagii hore ama mid ka duwan. OGEYSIIS waxaa lagayabaa bogyaasha qaarkood in ay yiraahdaan wali gudaha ayaad ku jirtaa, ilaa inta aad ka nadiifineesid browsahaaga Internetka.",
-'welcomecreation' => "== Soo dhawoow, $1! ==
-Akoon kaada  waa la sameeyay.
-Ha' hilmaamin in aad wax ka bedesho [[Special:Preferences|{{SITENAME}} dooqyadaada]].",
+'welcomeuser' => 'Soo dhowoow, $1',
 'yourname' => 'Magaca gudagalka:',
 'yourpassword' => 'Eraysir:',
 'yourpasswordagain' => 'Markale qor ereysirka:',
 'remembermypassword' => 'Kumbuyuutarkaan ku xasuusnaaw magaceyga gudagalka (ilaa  $1 {{PLURAL:$1|maalin|maalmood}})',
 'yourdomainname' => 'Magacaga shabakada',
+'password-change-forbidden' => 'Ma badali kartid Eraysir ee wiki.',
 'login' => 'Gudaha gal',
 'nav-login-createaccount' => 'Gudaha gal / sameyso akoon',
 'loginprompt' => "Waa in aad shidaa cookies'ka hadii aad rabto in aad soo gasho {{SITENAME}}.",
@@ -417,6 +435,7 @@ Sax hingaada, ama  [[Special:UserLogin/signup|samayso magac gudagale ah]].',
 'wrongpasswordempty' => 'Erayga sirta aad qortay wuxuu ahaa ebar. Fadlan iskuday markale.',
 'passwordtooshort' => 'Erayada sirta ah waa in oo ahaadaa ugu yaraan  {{PLURAL:$1|1 xaraf|$1 xarfood}} .',
 'password-name-match' => 'Eraygaaga sirta ah waa in oo ka badalnaadaa magacaaga gudagale',
+'password-login-forbidden' => 'Waxaa laga joojiyey adeegsiga magacaan iyo nambar sirtiisaba.',
 'mailmypassword' => 'E-mail iigu soo dir ereysir cusub',
 'passwordremindertitle' => 'Eraysir ku meelgaar ah oo loogu talagalay {{SITENAME}}',
 'passwordremindertext' => 'Qof (laga yaabo in aad adiga tahay, kana soo galay cinwaanka-IP-ka  $1) ayaa eraysir oo cusub u codsaday  {{SITENAME}}  ($4).
@@ -503,6 +522,7 @@ Ereysirka kumeelgaarka ah: $2',
 'changeemail-newemail' => 'Ciwaan e-mail oo cusub:',
 'changeemail-none' => '(waxna)',
 'changeemail-submit' => 'Bedel e-mailka',
+'changeemail-cancel' => 'Ka noqo',
 
 # Edit page toolbar
 'bold_sample' => 'Far butac ah',
@@ -561,6 +581,7 @@ fadlan ku soo dar faahfaahinta ku qoran kor su'aalo kasto oo sameyso.",
 'whitelistedittext' => 'Waa in aad $1 si aad wax uga bedeshid boggaga.',
 'confirmedittext' => 'Waa in aad xaqiijisaa e-mailkaada inta aadan bogaga wax ka bedelin.
 fadlan ku dar kuna xaqiiji e-mailkaada meesha  [[Special:Preferences|dooqyada gudagalahaaga]].',
+'nosuchsectiontitle' => 'Qaybtaan lama heli karo',
 'nosuchsectiontext' => 'Waxaa baroobeysay in aad wax ka bedesho maqaal jirin.
 Waxaa laga yaabaa in la wareejiyay ama la tirtiray adiga oo fiirinaayo bogga.',
 'loginreqtitle' => 'Waxaa loo baahanyahay gudagalid',
@@ -603,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.
@@ -632,11 +653,13 @@ Tirtiraha iyo wareejinta gudagalaha boggaan waxaad ka arki kartaa meeshaan:",
 'moveddeleted-notice' => 'Boggaan waa la tirtiray.
 Tirtiraha iyo wareejinta gudagalaha boggaan waxaad ka arki kartaa hoostaan.',
 'edit-conflict' => 'Wax bedel isku dhacay',
+'edit-already-exists' => 'Bog cusub lama samayn karo, wuu jiraa bogaan.',
 
 # Parser/template warnings
 '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]])',
@@ -705,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}}',
@@ -733,12 +756,14 @@ 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-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',
@@ -828,8 +853,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',
@@ -981,12 +1006,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:',
@@ -1004,14 +1031,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',
@@ -1033,9 +1060,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)',
 
@@ -1083,6 +1107,40 @@ 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_body_intro_created' => 'Bogga {{SITENAME}} ga $1 waxaa la sameeyey $PAGEEDITDATE qof {{gender:$2|$2}}, eeg $3 sida laga dhigay hadda.',
+'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'",
@@ -1105,7 +1163,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',
@@ -1133,6 +1194,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',
@@ -1199,6 +1261,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',
@@ -1290,8 +1355,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
@@ -1300,6 +1367,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 →',
@@ -1346,6 +1417,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!',
 
@@ -1359,6 +1433,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',
@@ -1376,12 +1457,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',
 
@@ -1389,6 +1473,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 efd1cb5..7ddf3e2 100644 (file)
@@ -350,7 +350,7 @@ $messages = array(
 'cancel' => 'Anulo',
 'moredotdotdot' => 'Më shumë...',
 'mypage' => 'Faqja ime',
-'mytalk' => 'Diskutimet e mia',
+'mytalk' => 'diskutimet',
 'anontalk' => 'Diskutimet për këtë IP',
 'navigation' => 'Shfleto',
 'and' => '&#32;dhe',
@@ -382,6 +382,7 @@ $messages = array(
 'namespaces' => 'Hapsirat e emrit',
 'variants' => 'Variante',
 
+'navigation-heading' => 'Menuja e navigimit',
 'errorpagetitle' => 'Gabim',
 'returnto' => 'Kthehuni tek $1',
 'tagline' => 'Nga {{SITENAME}}',
@@ -481,11 +482,11 @@ $1",
 'youhavenewmessagesfromusers' => 'Ju keni $1 nga {{Shumës:$3|përdorues tjetër|përdoruesit $3}} ($2).',
 'youhavenewmessagesmanyusers' => 'Ju keni 1$ nga shumë përdorues (2$).',
 'newmessageslinkplural' => '{{SHUMËS:1$|një porosi e re|porosi të reja}}',
-'newmessagesdifflinkplural' => 'i fundit {{SHUMËS:$1|ndryshimi|ndryshimet}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ndryshimi i|ndryshimet e}} fundit',
 'youhavenewmessagesmulti' => 'Ju keni mesazhe të reja në $1',
 'editsection' => 'redakto',
-'editold' => 'redaktoni',
-'viewsourceold' => 'Shiko tekstin',
+'editold' => 'redakto',
+'viewsourceold' => 'shiko tekstin',
 'editlink' => 'redakto',
 'viewsourcelink' => 'Shiko tekstin',
 'editsectionhint' => 'Redaktoni seksionin:
@@ -627,9 +628,9 @@ Administratori i cili e mbylli atë e dha këtë shpjegim: "$3".',
 
  Ju mund të vazhdoni të përdorni {{SITENAME}} në mënyrë anonime, ose mund të <span class='plainlinks'>[$1 identifikoheni përsëri]</span> si përdoruesi i mëparshëm ose si një përdorues tjetër. 
  Kini parasysh që disa faqe mund të shfaqen sikur të ishit i identifikuar derisa të fshini ''cache''-in e shfletuesit tuaj.",
-'welcomecreation' => '== Mirësevini, $1! == 
- Llogaria juaj është krijuar
- Mos harroni të ndryshoni [[Special:Preferences|{{SITENAME}} preferencat]] tuaja.',
+'welcomeuser' => 'Mirë se vini, $1!',
+'welcomecreation-msg' => 'Llogaria juaj u krijua
+Mos harroni të ndryshoni [[Special:Preferences|{{SITENAME}} preferencat]] tuaja.',
 'yourname' => 'Fusni nofkën tuaj',
 'yourpassword' => 'Fusni fjalëkalimin tuaj',
 'yourpasswordagain' => 'Fusni fjalëkalimin përsëri',
@@ -872,10 +873,8 @@ Kjo adresë IP mund të përdoret nga disa përdorues.
 Ju mund [[Special:Search/{{PAGENAME}}|ta kërkoni këtë titull]] në faqe tjera,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} të kërkoni ngjarjet e ngjashme në regjistër],
 ose [{{fullurl:{{FULLPAGENAME}}|action=edit}} të redaktoni këtë faqe]</span>.',
-'noarticletext-nopermission' => 'Momentalisht nuk ka tekst në këtë faqe.
-Ju mundeni [[Special:Search/{{PAGENAME}}|me kërku këtë titull]] në faqe tjera,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} me kërku në regjistrat tematikisht të afërm],
-apo [{{fullurl:{{FULLPAGENAME}}|action=edit}} me redaktu këtë faqe]</span>.',
+'noarticletext-nopermission' => 'Për momentin faqja e kërkuar është bosh.
+Ju mund të [[Special:Search/{{PAGENAME}}|kërkoni këtë titiull]] në faqet e tjera, ose të <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} këtkoni regjistrat e ngjashëm]</span>, por ju nuk mundeni ta krijoni këtë faqe.',
 'missing-revision' => 'Inspektimi #$1 i faqes me emrin "{{PAGENAME}}" nuk ekziston.
 
 Kjo zakonisht shkaktuar duke ndjekur një lidhje të vjetër tek një faqe që është fshirë. Hollësitë mund të gjenden në [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} regjistrin e fshirjeve].',
@@ -962,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',
@@ -986,6 +984,9 @@ Duket se është grisur.',
 Ajo tanimë ekziston.',
 'defaultmessagetext' => 'Teksti i porosisë së parazgjedhur',
 
+# Content models
+'content-model-text' => 'tekst i thejshtë',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Kujdes: Kjo faqe ka shumë kërkesa që kërkojnë analizë gramatikore të kushtueshme për sistemin.
 
@@ -1176,7 +1177,7 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 'mergelogpagetext' => 'Më poshtë jepet një listë e bashkimeve së fundmi nga historiku i një faqeje në historikun e një faqeje tjetër.',
 
 # Diffs
-'history-title' => 'Historiku i redaktimeve te "$1"',
+'history-title' => 'Historiku i redaktimeve të "$1"',
 'difference-title' => 'Ndryshimi mes inspektimeve të "$1"',
 'difference-title-multipage' => 'Ndryshimi mes faqeve "$1" dhe "$2"',
 'difference-multipage' => '(Ndryshimi midis faqeve)',
@@ -1487,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',
@@ -2119,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]].',
@@ -2215,11 +2213,7 @@ Në qoftë se dëshironi të hiqni një faqe nga lista mbikqyrëse më vonë, sh
 
 'enotif_mailer' => 'Postieri Njoftues i {{SITENAME}}',
 'enotif_reset' => 'Shëno të gjitha faqet e vizituara',
-'enotif_newpagetext' => 'Kjo është një faqe e re.',
 'enotif_impersonal_salutation' => 'Përdorues i {{SITENAME}}',
-'changed' => 'ndryshuar',
-'created' => 'u krijua',
-'enotif_subject' => '{{SITENAME}} faqja $PAGETITLE u $CHANGEDORCREATED prej $PAGEEDITOR',
 'enotif_lastvisited' => 'Shikoni $1 për të gjitha ndryshimet që prej vizitës tuaj të fundit.',
 'enotif_lastdiff' => 'Shikoni $1 për ndryshime.',
 'enotif_anon_editor' => 'përdorues anonim $1',
@@ -2275,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',
@@ -2455,9 +2451,9 @@ $1',
 'blanknamespace' => '(Artikujt)',
 
 # Contributions
-'contributions' => 'Kontributet',
+'contributions' => 'Kontributet e {{GENDER:$1|përdoruesit|përdorueses}}',
 'contributions-title' => 'Kontributet e përdoruesit për $1',
-'mycontris' => 'Redaktimet e mia',
+'mycontris' => 'Kontributet',
 'contribsub2' => 'Për $1 ($2)',
 'nocontribs' => 'Nuk ka asnjë ndryshim që përputhet me këto kritere.',
 'uctop' => ' (sipër)',
@@ -2498,7 +2494,7 @@ Bllokimi i funditë është më poshtë për referencë:',
 'whatlinkshere-hideredirs' => '$1 përcjellimet',
 'whatlinkshere-hidetrans' => '$1 përfshirjet',
 'whatlinkshere-hidelinks' => '$1 lidhjet',
-'whatlinkshere-hideimages' => '$1 lidhjet e figurave',
+'whatlinkshere-hideimages' => '$1 lidhjet me skedat',
 'whatlinkshere-filters' => 'Filtra',
 
 # Block/unblock
@@ -2597,7 +2593,7 @@ Regjistri i bllokimeve është poshtë për referncë:',
 'blocklogtext' => 'Ky është një regjistër bllokimesh dhe çbllokimesh të përdoruesve. IP-të e bllokuara automatikisht nuk janë të dhëna. Shikoni dhe [[Special:BlockList|listën e IP-ve të bllokuara]] për një listë të bllokimeve të tanishme.',
 'unblocklogentry' => 'çbllokoi "$1"',
 'block-log-flags-anononly' => 'vetëm anonimët',
-'block-log-flags-nocreate' => 'krijimi i kontove është pamundësuar',
+'block-log-flags-nocreate' => 'krijimi i llogarive është pamundësuar',
 'block-log-flags-noautoblock' => 'vetëbllokimi është pamundësuar',
 'block-log-flags-noemail' => 'posta elektronike është e bllokuar',
 'block-log-flags-nousertalk' => 'nuk mund të redaktojë faqen e tij të diskutimit',
@@ -3782,6 +3778,7 @@ Kjo faqe është duke përjetuar vështirësi teknike.',
 '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 8b3190b..cc8cbc7 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,10 +813,9 @@ $2',
 
 Можете да наставите с коришћењем овог викија као гост, или се <span class='plainlinks'>[$1 поново пријавите]</span> као други корисник.
 Имајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
-'welcomecreation' => '== Добро дошли, $1! ==
-
-Ваш налог је отворен.
-Не заборавите да прилагодите своја [[Special:Preferences|подешавања]].',
+'welcomeuser' => 'Добро дошли, $1!',
+'welcomecreation-msg' => 'Ваш налог је отворен.
+Не заборавите да промените своја [[Special:Preferences|подешавања]].',
 'yourname' => 'Корисничко име:',
 'yourpassword' => 'Лозинка:',
 'yourpasswordagain' => 'Потврда лозинке:',
@@ -974,6 +974,7 @@ $2
 'changeemail-oldemail' => 'Тренутна е-адреса:',
 'changeemail-newemail' => 'Нова е-адреса:',
 'changeemail-none' => '(ништа)',
+'changeemail-password' => 'Ваша лозинка:',
 'changeemail-submit' => 'Промени',
 'changeemail-cancel' => 'Откажи',
 
@@ -1020,14 +1021,14 @@ $2
 'blockedtitle' => 'Корисник је блокиран',
 'blockedtext' => "'''Ваше корисничко име или ИП адреса је блокирана.'''
 
-Блокирање је {{GENDER:$1|извршио|извршила|извршио}} $1.
+Блокирање је {{GENDER:$4|извршио|извршила|извршио}} $1.
 Разлог: ''$2''.
 
 * Датум блокирања: $8
 * Блокирање истиче: $6
 * Име корисника: $7
 
-Обратите се {{GENDER:$1|кориснику|корисници|кориснику}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.
+Обратите се {{GENDER:$4|кориснику|корисници|кориснику}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.
 Не можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].
 Ваша блокирана ИП адреса је $3, а ИБ $5.
 Наведите све податке изнад при стварања било каквих упита.",
@@ -1144,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' => "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.
@@ -1162,7 +1163,6 @@ $2
 'hiddencategories' => 'Ова страница је члан {{PLURAL:$1|једне скривене категорије|$1 скривене категорије|$1 скривених категорија}}:',
 'edittools' => '<!-- Овај текст ће бити приказан испод обрасца за уређивање и отпремање. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Прављење странице је ограничено',
 'nocreatetext' => 'На овом викију је ограничено прављење нових страница.
 Можете се вратити и уредити постојећу страницу, или се [[Special:UserLogin|пријавите или отворите налог]].',
 'nocreate-loggedin' => 'Немате дозволу да правите нове странице.',
@@ -1721,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' => 'читање ове странице',
@@ -1982,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.',
@@ -2130,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' => 'Викимедијина остава',
@@ -2395,10 +2394,6 @@ $1',
 'activeusers-hidesysops' => 'Сакриј администраторе',
 'activeusers-noresult' => 'Корисник није пронађен.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник нових корисника',
-'newuserlogpagetext' => 'Ово је историја нових корисника.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права корисничких група',
 'listgrouprights-summary' => 'Следи списак корисничких група на овом викију, заједно с правима приступа.
@@ -2498,11 +2493,17 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} е-обавештење',
 'enotif_reset' => 'Означи све странице као посећене',
-'enotif_newpagetext' => 'Ово је нова страница.',
 'enotif_impersonal_salutation' => '{{SITENAME}} корисник',
-'changed' => 'измењена',
-'created' => 'направљена',
-'enotif_subject' => '{{SITENAME}} страница $PAGETITLE је $CHANGEDORCREATED од стране $PAGEEDITOR',
+'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',
@@ -2536,6 +2537,8 @@ $UNWATCHURL
 
 Подршка и даља помоћ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'направљена',
+'changed' => 'измењена',
 
 # Delete
 'deletepage' => 'Обриши страницу',
@@ -3080,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' => 'Одредишни именски простор:',
@@ -3207,7 +3210,7 @@ $1',
 'tooltip-watchlistedit-raw-submit' => 'Ажурирај списак',
 'tooltip-recreate' => 'Поново направите страницу иако је обрисана',
 'tooltip-upload' => 'Започните отпремање',
-'tooltip-rollback' => 'Опција „Врати“ враћа измене последњег корисника',
+'tooltip-rollback' => '„Врати“ враћа измене последњег корисника једним кликом',
 'tooltip-undo' => 'Враћа ову измену и отвара образац за уређивање.',
 'tooltip-preferences-save' => 'Сачувај поставке',
 'tooltip-summary' => 'Унесите кратак опис',
@@ -3333,6 +3336,8 @@ $1',
 'markedaspatrollederror' => 'Не могу да означим као патролирано',
 'markedaspatrollederrortext' => 'Морате изабрати измену да бисте је означили као прегледану.',
 'markedaspatrollederror-noautopatrol' => 'Не можете да означите своје измене као патролиране.',
+'markedaspatrollednotify' => 'Ова измена на страници „$1“ је означена као прегледана.',
+'markedaspatrollederrornotify' => 'Није успешно означавање ове странице као прегледаном.',
 
 # Patrol log
 'patrol-log-page' => 'Дневник патролирања',
@@ -4329,6 +4334,10 @@ $5
 '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 9bd7e25..b96a139 100644 (file)
@@ -722,10 +722,6 @@ Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.'
 
 Možete da nastavite s korišćenjem ovog vikija kao gost, ili se <span class='plainlinks'>[$1 ponovo prijavite]</span> kao drugi korisnik.
 Imajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još prijavljeni, sve dok ne očistite privremenu memoriju svog pregledača.",
-'welcomecreation' => '== Dobro došli, $1! ==
-
-Vaš nalog je otvoren.
-Ne zaboravite da prilagodite svoja [[Special:Preferences|podešavanja]].',
 'yourname' => 'Korisničko ime:',
 'yourpassword' => 'Lozinka:',
 'yourpasswordagain' => 'Potvrda lozinke:',
@@ -930,14 +926,14 @@ Ako ponovo kliknete na „{{int:savearticle}}“, vaša izmena će biti sačuvan
 'blockedtitle' => 'Korisnik je blokiran',
 'blockedtext' => "'''Vaše korisničko ime ili IP adresa je blokirana.'''
 
-Blokiranje je {{GENDER:$1|izvršio|izvršila|izvršio}} $1.
+Blokiranje je {{GENDER:$4|izvršio|izvršila|izvršio}} $1.
 Razlog: ''$2''.
 
 * Datum blokiranja: $8
 * Blokiranje ističe: $6
 * Ime korisnika: $7
 
-Obratite se {{GENDER:$1|korisniku|korisnici|korisniku}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.
+Obratite se {{GENDER:$4|korisniku|korisnici|korisniku}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.
 Ne možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].
 Vaša blokirana IP adresa je $3, a IB $5.
 Navedite sve podatke iznad pri stvaranja bilo kakvih upita.",
@@ -1072,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.',
@@ -1631,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',
@@ -2305,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.
@@ -2408,11 +2397,7 @@ Ukoliko budete želeli da uklonite stranicu sa spiska nadgledanja, kliknite opet
 
 'enotif_mailer' => '{{SITENAME}} e-obaveštenje',
 'enotif_reset' => 'Označi sve stranice kao posećene',
-'enotif_newpagetext' => 'Ovo je nova stranica.',
 'enotif_impersonal_salutation' => '{{SITENAME}} korisnik',
-'changed' => 'izmenjena',
-'created' => 'napravljena',
-'enotif_subject' => '{{SITENAME}} stranica $PAGETITLE je $CHANGEDORCREATED od strane $PAGEEDITOR',
 'enotif_lastvisited' => 'Pogledajte $1 za sve izmene od vaše poslednje posete.',
 'enotif_lastdiff' => 'Pogledajte $1 da vidite ovu izmenu.',
 'enotif_anon_editor' => 'anoniman korisnik $1',
@@ -2446,6 +2431,8 @@ $UNWATCHURL
 
 Podrška i dalja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'izmenjena',
 
 # Delete
 'deletepage' => 'Obriši stranicu',
@@ -3243,6 +3230,8 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 'markedaspatrollederror' => 'Ne mogu da označim kao patrolirano',
 'markedaspatrollederrortext' => 'Morate izabrati izmenu da biste je označili kao pregledanu.',
 'markedaspatrollederror-noautopatrol' => 'Ne možete da označite svoje izmene kao patrolirane.',
+'markedaspatrollednotify' => 'Ova izmena na stranici „$1“ je označena kao pregledana.',
+'markedaspatrollederrornotify' => 'Nije uspešno označavanje ove stranice kao pregledanom.',
 
 # Patrol log
 'patrol-log-page' => 'Dnevnik patroliranja',
@@ -4239,6 +4228,10 @@ Slike su prikazane u punoj veličini, a druge vrste datoteka se pokreću pomoću
 '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 e419c7a..0b23f31 100644 (file)
@@ -442,9 +442,6 @@ Fu san ede: ''$2''.",
 
 Yu kan tan kebroiki {{SITENAME}} sondro nen, noso yu kan psa kon baka leki a srefi noso wan tra kebroikiman.
 Sabi taki a kan gersi leki yu psa kon ete, te leki yu leygi a cache fu yu browser.",
-'welcomecreation' => '== Welkom, $1! ==
-Yu account meki now.
-No fergiti fu kenki den seti fu yu gi {{SITENAME}}.',
 'yourname' => 'Kebroikiman nen:',
 'yourpassword' => 'Psa wortu:',
 'yourpasswordagain' => 'Psa wortu ete wan leysi:',
@@ -730,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}}',
@@ -1240,4 +1236,7 @@ Trawan o kibri.
 # Special:SpecialPages
 'specialpages' => 'Spesrutu papira',
 
+# New logging system
+'rightsnone' => '(no)',
+
 );
index 59d01a1..e420ab3 100644 (file)
@@ -444,10 +444,6 @@ Die Administrator, die dän Skrieuwtougriep speerde, roate foulgjenden Gruund an
 
 Du koast {{SITENAME}} nu anonym fääre benutsje, of die fonnäien unner dänsälge of n uur Benutsernoome wier <span class='plainlinks'>[$1 anmäldje]</span>.
 Beoachtje, dät eenige Sieden noch anwiese konnen, dät du oumälded bäst, soloange du nit din Browsercache loosmoaked hääst.",
-'welcomecreation' => '== Wäilkuumen, $1 ==
-
-Dien Benutserkonto wuude iengjucht.
-Ferjeet nit, dien [[Special:Preferences|{{SITENAME}}-Ienstaalengen]] antoupaasjen.',
 'yourname' => 'Benutsernoome:',
 'yourpassword' => 'Paaswoud:',
 'yourpasswordagain' => 'Paaswoud wierhoalje:',
@@ -740,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',
@@ -1259,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',
@@ -1833,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.
@@ -1932,11 +1924,7 @@ Wan du die Artikkel wier fon ju Foulgelieste ou hoalje moatest, klik ap ju Siede
 
 'enotif_mailer' => '{{SITENAME}} tält Beskeed uur Email',
 'enotif_reset' => 'Markier aal besoachte Sieden',
-'enotif_newpagetext' => 'Dit is ne näie Siede.',
 'enotif_impersonal_salutation' => '{{SITENAME}} Benutser',
-'changed' => 'annerd',
-'created' => 'näi anlaid',
-'enotif_subject' => '{{SITENAME}} Siede $PAGETITLE wuude $CHANGEDORCREATED fon $PAGEEDITOR',
 'enotif_lastvisited' => 'Aal Annerengen ap aan Blik: $1',
 'enotif_lastdiff' => '$1 wiest alle Annerengen mäd aan Glap.',
 'enotif_anon_editor' => 'Anonyme Benutser $1',
@@ -1968,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',
@@ -3297,6 +3287,7 @@ Ne [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie fon ju ''GNU General Public License''
 '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 dd44a09..e3a6f93 100644 (file)
@@ -264,7 +264,7 @@ $messages = array(
 'cancel' => 'Bolay',
 'moredotdotdot' => 'Deui...',
 'mypage' => 'Kaca kuring',
-'mytalk' => 'Obrolan kuring',
+'mytalk' => 'Obrolan',
 'anontalk' => 'Obrolan pikeun IP ieu',
 'navigation' => 'Pituduh',
 'and' => '&#32;jeung',
@@ -519,9 +519,6 @@ Pikeun alihbasa, mangga sumping ka [//translatewiki.net/wiki/Main_Page?setlang=e
 
 Anjeun bisa tetep migunakeun {{SITENAME}} bari anonim, atawa bisa <span class='plainlinks'>[$1 asup log deui]</span> salaku pamaké nu sarua atawa nu séjén deui.
 Mangkahadé, sababaraha kaca bakal tetep némbongkeun saolah-olah anjeun asup log kénéh nepi ka anjeun ngosongkeun ''cache'' panyungsi anjeun.",
-'welcomecreation' => '==Wilujeng sumping, $1!==
-Rekening anjeun geus dijieun.
-Tong hilap ngarobih [[Special:Preferences|{{SITENAME}} préferénsi]] anjeun.',
 'yourname' => 'Sandiasma:',
 'yourpassword' => 'Sandi anjeun',
 'yourpasswordagain' => 'Ketik deui sandi anjeun',
@@ -758,9 +755,8 @@ Mun anjeun ka dieu teu ngahaja, klik baé tombol '''back''' na panyungsi anjeun.
 Anjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali],
 atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} ngédit ieu kaca]</span>.',
-'noarticletext-nopermission' => 'Kiwari ieu kaca euweuh eusian.
-Anjeun bisa [[Special:Search/{{PAGENAME}}|milari judul ieu kaca]] di kaca séjén,
-atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pilari log nu tumali]</span>.',
+'noarticletext-nopermission' => 'Kiwari can aya téks dina ieu kaca.
+Anjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali]</span>, tapi teu wenang pikeun nyieun ieu kaca.',
 'userpage-userdoesnotexist' => 'Rekening pamaké "<nowiki>$1</nowiki>" tacan kadaptar. Mangga tilikan lamun anjeun hoyong ngadamel/ngédit kaca ieu.',
 'userpage-userdoesnotexist-view' => 'Rekening pamaké "$1" teu aya dina daptar.',
 'blocked-notice-logextract' => 'Ieu pamaké keur dipeungpeuk.
@@ -825,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.',
@@ -1104,7 +1099,7 @@ Coba susud dimimitian ku ''all:'' pikeun nyusud sakabéh kandunganana (kaasup ka
 
 # Preferences page
 'preferences' => 'Préferénsi',
-'mypreferences' => 'Préferénsi',
+'mypreferences' => 'Préferéns',
 'prefs-edits' => 'Jumlah éditan:',
 'prefsnologin' => 'Can asup log',
 'prefsnologintext' => 'Anjeun kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} asup log]</span> pikeun ngatur préferénsi pamaké.',
@@ -1314,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',
@@ -1820,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.
@@ -1907,11 +1899,7 @@ Jaga, parobahan na kaca ieu katut kaca obrolanana bakal dibéréndélkeun di din
 
 'enotif_mailer' => 'Surat Émbaran {{SITENAME}}',
 'enotif_reset' => 'Tandaan sadaya kaca nu geus dilongok',
-'enotif_newpagetext' => 'Kaca ieu anyar.',
 'enotif_impersonal_salutation' => 'Pamaké {{SITENAME}}',
-'changed' => 'geus robah',
-'created' => 'geus dijieun',
-'enotif_subject' => 'Kaca $PAGETITLE {{SITENAME}} geus $CHANGEDORCREATED ku $PAGEEDITOR',
 'enotif_lastvisited' => 'Tempo $1 pikeun sadaya parobahan ti saprak anjeun ninggalkeun ieu kaca.',
 'enotif_lastdiff' => 'Buka $1 pikeun nempo ieu parobahan.',
 'enotif_anon_editor' => 'pamaké anonim $1',
@@ -1936,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',
@@ -2085,7 +2075,7 @@ $1',
 # Contributions
 'contributions' => 'Kontribusi ti kontributor',
 'contributions-title' => 'Sumbangan tulisan ti $1',
-'mycontris' => 'Tulisan kuring',
+'mycontris' => 'Kontribusi',
 'contribsub2' => 'Pikeun $1 ($2)',
 'nocontribs' => 'Taya robahan nu kapanggih cocog jeung patokan ieu.',
 'uctop' => '(pangluhurna)',
@@ -2123,7 +2113,7 @@ Pikeun rujukan, éntri log panungtung dipidangkeun di handap:',
 'whatlinkshere-hideredirs' => '$1 alihan',
 'whatlinkshere-hidetrans' => '$1 transklusi',
 'whatlinkshere-hidelinks' => '$1 tutumbu',
-'whatlinkshere-hideimages' => '$1 tutumbu gambar',
+'whatlinkshere-hideimages' => '$1 tutumbu berkas',
 'whatlinkshere-filters' => 'Saringan',
 
 # Block/unblock
@@ -3053,6 +3043,7 @@ Coba ku sawangan normal.',
 '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 f330092..7bcea66 100644 (file)
@@ -454,8 +454,9 @@ $messages = array(
 'newwindow' => '(öppnas i ett nytt fönster)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Mer...',
+'morenotlisted' => 'Mer som inte är listad...',
 'mypage' => 'Min sida',
-'mytalk' => 'Min diskussion',
+'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionssida för denna IP-adress',
 'navigation' => 'Navigering',
 'and' => '&#32;och',
@@ -487,6 +488,7 @@ $messages = array(
 'namespaces' => 'Namnrymder',
 'variants' => 'Varianter',
 
+'navigation-heading' => 'Navigeringsmeny',
 'errorpagetitle' => 'Fel',
 'returnto' => 'Tillbaka till $1.',
 'tagline' => 'Från {{SITENAME}}',
@@ -693,7 +695,7 @@ Den kan innehålla ett eller flera tecken som inte får användas i sidtitlar.',
 'viewsource-title' => 'Visa källkod för $1',
 'actionthrottled' => 'Åtgärden stoppades',
 'actionthrottledtext' => 'Som skydd mot spam, finns det en begränsning av hur många gånger du kan utföra den här åtgärden under en viss tid. Du har överskridit den gränsen. Försök igen om några minuter.',
-'protectedpagetext' => 'Den här sidan har skrivskyddats för att förhindra redigering.',
+'protectedpagetext' => 'Den här sidan har skrivskyddats för att förhindra redigering eller andra åtgärder.',
 'viewsourcetext' => 'Du kan se och kopiera denna sidas källtext:',
 'viewyourtext' => "Du kan se och kopiera källan för '''dina redigeringar''' på denna sida:",
 'protectedinterface' => 'Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.
@@ -728,8 +730,8 @@ Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
 
 Du kan fortsätta att använda {{SITENAME}} anonymt, eller så kan du <span class='plainlinks'>[$1 logga in igen]</span> som samma eller som en annan användare.
 Observera att det, tills du tömmer din webbläsares cache, på vissa sidor kan se ut som att du fortfarande är inloggad.",
-'welcomecreation' => '== Välkommen, $1! ==
-Ditt konto har skapats.
+'welcomeuser' => 'Välkommen, $1!',
+'welcomecreation-msg' => 'Ditt konto har skapats.
 Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].',
 'yourname' => 'Användarnamn:',
 'yourpassword' => 'Lösenord:',
@@ -755,7 +757,7 @@ Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].
 'userlogin-resetlink' => 'Har du glömt dina inloggningsuppgifter?',
 'createaccountmail' => 'med e-post',
 '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',
@@ -823,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',
@@ -880,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',
 
@@ -1060,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.',
@@ -1385,7 +1388,7 @@ Notera dock att deras indexering av {{SITENAME}} kan vara något föråldrad.',
 
 # Preferences page
 'preferences' => 'Inställningar',
-'mypreferences' => 'Mina inställningar',
+'mypreferences' => 'Inställningar',
 'prefs-edits' => 'Antal redigeringar:',
 'prefsnologin' => 'Inte inloggad',
 'prefsnologintext' => 'Du måste vara <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} inloggad]</span> för att kunna ändra dina inställningar.',
@@ -1461,9 +1464,9 @@ Detta kan inte återställas.',
 'prefs-emailconfirm-label' => 'E-postbekräftelse:',
 'prefs-textboxsize' => 'Storlek på redigeringsrutan',
 'youremail' => 'E-post:',
-'username' => 'Användarnamn:',
-'uid' => 'Användar-ID:',
-'prefs-memberingroups' => 'Medlem av {{PLURAL:$1|gruppen|grupperna}}:',
+'username' => '{{GENDER:$1|Användarnamn}}:',
+'uid' => '{{GENDER:$1|Användar}}-ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Medlem}} av {{PLURAL:$1|gruppen|grupperna}}:',
 'prefs-registration' => 'Registreringstid:',
 'yourrealname' => 'Riktigt namn:',
 'yourlanguage' => 'Språk:',
@@ -1612,12 +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',
-'rightsnone' => '(inga)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'läsa denna sida',
@@ -1858,6 +1862,7 @@ Om problemet kvarstår, kontakta en [[Special:ListUsers/sysop|administratör]].'
 'backend-fail-notsame' => 'En icke-identisk fil redan finns på $1.',
 'backend-fail-invalidpath' => '$1 är inte en giltig sökväg för att spara.',
 'backend-fail-delete' => 'Kunde inte radera filen $1.',
+'backend-fail-describe' => 'Kunde inte att ändra metadata för filen "$1".',
 'backend-fail-alreadyexists' => 'Filen $1 finns redan.',
 'backend-fail-store' => 'Kunde inte spara filen $1 vid $2.',
 'backend-fail-copy' => 'Det gick inte att kopiera filen $1 till $2.',
@@ -2126,7 +2131,7 @@ En sida anses vara en förgreningssida om den inkluderar en mall som länkas til
 'lonelypagestext' => 'Följande sidor länkas inte till från någon annan sida på {{SITENAME}}.',
 'uncategorizedpages' => 'Ej kategoriserade sidor',
 'uncategorizedcategories' => 'Ej kategoriserade kategorier',
-'uncategorizedimages' => 'Filer utan kategori',
+'uncategorizedimages' => 'Ej kategoriserade filer',
 'uncategorizedtemplates' => 'Ej kategoriserade mallar',
 'unusedcategories' => 'Tomma kategorier',
 'unusedimages' => 'Oanvända filer',
@@ -2242,8 +2247,8 @@ Se även [[Special:WantedCategories|önskade kategorier]].',
 'linksearch-ns' => 'Namnrymd:',
 'linksearch-ok' => 'Sök',
 'linksearch-text' => 'Jokertecken (wildcards) som t.ex. "*.wikipedia.org" kan användas.
-Det krävs åtminstone en toppnivå-domän, t.ex. "*.org".<br />
-Protokoll som stöds: <code>$1</code> (lägg inte till något av dessa i din sökning).',
+Det krävs åtminstone en toppdomän, t.ex. "*.org".<br />
+{{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.',
 
@@ -2262,10 +2267,6 @@ Protokoll som stöds: <code>$1</code> (lägg inte till något av dessa i din sö
 '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.
@@ -2324,15 +2325,15 @@ Den e-postadress du har angivit i [[Special:Preferences|dina användarinställni
 
 # Watchlist
 'watchlist' => 'Bevakningslista',
-'mywatchlist' => 'Min bevakningslista',
+'mywatchlist' => 'Bevakningslista',
 'watchlistfor2' => 'För $1 $2',
 'nowatchlist' => 'Du har inga sidor i din bevakningslista.',
 'watchlistanontext' => 'Du måste $1 för att se eller redigera din bevakningslista.',
 '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',
@@ -2360,19 +2361,23 @@ Framtida ändringar av den här sidan och dess diskussionssida kommer att listas
 
 'enotif_mailer' => '{{SITENAME}}s system för att få meddelanden om förändringar per e-post',
 'enotif_reset' => 'Markera alla sidor som besökta',
-'enotif_newpagetext' => 'Detta är en ny sida.',
 'enotif_impersonal_salutation' => '{{SITENAME}}användare',
-'changed' => 'ändrad',
-'created' => 'skapad',
-'enotif_subject' => '{{SITENAME}}-sidan $PAGETITLE har blivit $CHANGEDORCREATED av $PAGEEDITOR',
+'enotif_subject_deleted' => '{{SITENAME}}sidan $1 har raderats av {{gender:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}}sidan $1 har skapats av {{gender:$2|$2}}',
+'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' => '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.',
+'enotif_body_intro_changed' => '{{SITENAME}}sidan $1 ändrades den $PAGEEDITDATE av {{gender:$2|$2}}, se $3 för den aktuella versionen.',
 'enotif_lastvisited' => 'På $1 återfinner du alla ändringar sedan ditt senaste besök.',
 'enotif_lastdiff' => 'Se denna ändring på $1',
 'enotif_anon_editor' => 'anonym användare $1',
-'enotif_body' => '$WATCHINGUSERNAME,
-
-{{SITENAME}}-sidan $PAGETITLE har blivit $CHANGEDORCREATED $PAGEEDITDATE av $PAGEEDITOR; se $PAGETITLE_URL för den nuvarande versionen.
+'enotif_body' => 'Hej $WATCHINGUSERNAME,
 
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Angiven sammanfattning av redigeringen: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2383,7 +2388,7 @@ wiki: $PAGEEDITOR_WIKI
 Såvida du inte besöker sidan, kommer du inte att få flera meddelanden om ändringar av sidan.
 Du kan också ta bort flaggan för meddelanden om ändringar på alla sidor i din bevakningslista.
 
-             Hälsningar från {{SITENAME}}s meddelandesystem
+Hälsningar från {{SITENAME}}s meddelandesystem
 
 --
 För att ändra inställningarna för dina uppdateringar via e-post, besök
@@ -2397,6 +2402,8 @@ $UNWATCHURL
 
 Feedback och ytterligare hjälp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'skapad',
+'changed' => 'ändrad',
 
 # Delete
 'deletepage' => 'Ta bort sida',
@@ -2463,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:',
@@ -2479,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',
@@ -2577,9 +2586,9 @@ $1',
 'blanknamespace' => '(Huvudnamnrymden)',
 
 # Contributions
-'contributions' => 'Användarbidrag',
+'contributions' => '{{GENDER:$1|Användarbidrag}}',
 'contributions-title' => 'Bidrag av $1',
-'mycontris' => 'Mina bidrag',
+'mycontris' => 'Bidrag',
 'contribsub2' => 'För $1 ($2)',
 'nocontribs' => 'Inga ändringar som motsvarar dessa kriterier hittades.',
 'uctop' => '(senaste)',
@@ -2656,7 +2665,7 @@ Ange orsak nedan (exempelvis genom att nämna sidor som blivit vandaliserade).',
 'ipbotherreason' => 'Annan/ytterligare anledning:',
 'ipbhidename' => 'Dölj användarnamnet från redigeringar och listor',
 'ipbwatchuser' => 'Bevaka användarens användarsida och diskussionssida',
-'ipb-disableusertalk' => 'Hindra denne användare från att redigera sina egna diskussionssida under blockeringen',
+'ipb-disableusertalk' => 'Hindra användaren från att redigera sina egna diskussionssida under blockeringen',
 'ipb-change-block' => 'Återblockera användaren med de här inställningarna',
 'ipb-confirm' => 'Bekräfta blockering',
 'badipaddress' => 'Du har inte skrivit IP-adressen korrekt.',
@@ -2780,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!'''
@@ -2962,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.',
@@ -3126,6 +3136,7 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'pageinfo-default-sort' => 'Standardsorteringsnyckel',
 'pageinfo-length' => 'Sidlängd (i byte)',
 'pageinfo-article-id' => 'Sid-ID',
+'pageinfo-language' => 'Språk för sidinnehåll',
 'pageinfo-robot-policy' => 'Sökmotordirektiv',
 'pageinfo-robot-index' => 'Indexerbar',
 'pageinfo-robot-noindex' => 'Inte indexerbar',
@@ -3145,12 +3156,19 @@ 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',
 'pageinfo-contentpage' => 'Räknas som en innehållssida',
 'pageinfo-contentpage-yes' => 'Ja',
+'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',
@@ -3173,6 +3191,8 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'markedaspatrollederror' => 'Kan inte markera som patrullerad',
 'markedaspatrollederrortext' => 'Det går inte att markera som patrullerad utan att ange version.',
 'markedaspatrollederror-noautopatrol' => 'Du har inte tillåtelse att markera dina egna redigeringar som patrullerade.',
+'markedaspatrollednotify' => 'Denna ändring till $1 har markerats som patrullerad.',
+'markedaspatrollederrornotify' => 'Markering som patrullerad misslyckades.',
 
 # Patrol log
 'patrol-log-page' => 'Patrulleringslogg',
@@ -3206,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.',
@@ -3236,7 +3257,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Listan fungerar enligt följande:
@@ -3834,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',
@@ -3848,6 +3872,7 @@ Du kan också [[Special:EditWatchlist|använda standardeditorn]].',
 'version-license' => 'Licens',
 'version-poweredby-credits' => "Den här wikin drivs av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andra',
+'version-credits-summary' => 'Vi skulle vilja tacka följande personer för deras bidrag till [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki är fri programvara; du kan distribuera det och/eller modifiera det under villkoren i GNU General Public License, publicerad av Free Software Foundation; antingen version 2 av licensen, eller (om du önskar) någon senare version. 
 
 MediaWiki distribueras i hopp om att det ska vara användbart, men UTAN NÅGON GARANTI, även utan underförstådd garanti om SÄLJBARHET eller LÄMPLIGHET FÖR ETT VISST SYFTE. Se GNU General Public License för fler detaljer. 
@@ -3987,11 +4012,15 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'logentry-move-move_redir-noredirect' => '$1 flyttade sidan $3 till $4 över en omdirigering utan att lämna en omdirigering',
 'logentry-patrol-patrol' => '$1 markerade versionen $4 av sidan $3 som patrullerad',
 'logentry-patrol-patrol-auto' => '$1 markerade automatiskt versionen $4 av sidan $3 som patrullerad',
-'logentry-newusers-newusers' => '$1 skapade ett användarkonto',
-'logentry-newusers-create' => '$1 skapade ett användarkonto',
-'logentry-newusers-create2' => '$1 skapade ett användarkonto $3',
+'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-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].
index ee81d3a..46077e5 100644 (file)
@@ -259,7 +259,7 @@ $messages = array(
 'cancel' => 'Batilisha',
 'moredotdotdot' => 'Zaidi...',
 'mypage' => 'Ukurasa wangu',
-'mytalk' => 'Majadiliano yangu',
+'mytalk' => 'Majadiliano',
 'anontalk' => 'Majadiliano ya IP hii',
 'navigation' => 'Urambazaji',
 'and' => '&#32;na',
@@ -291,6 +291,7 @@ $messages = array(
 'namespaces' => 'Maeneo ya wiki',
 'variants' => 'Vibadala',
 
+'navigation-heading' => 'Urambazaji',
 'errorpagetitle' => 'Hitilafu',
 'returnto' => 'Rudia $1.',
 'tagline' => 'Kutoka {{SITENAME}}',
@@ -520,16 +521,14 @@ Sababu zilizotolewa ni "\'\'$2\'\'".',
 
 # Virus scanner
 'virus-badscanner' => "Usanidi mbaya: kiskani virusi hakijulikani: ''$1''",
-'virus-scanfailed' => 'skani imeshindwa (kodi $1)',
+'virus-scanfailed' => 'skani imeshindwa (msimbo $1)',
 'virus-unknownscanner' => 'kipambana na virusi haijulikani:',
 
 # Login and logout pages
 'logouttext' => "'''Umetoka kwenye akaunti yako.'''
 
 Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza <span class='plainlinks'>[$1 kuingia tena]</span> kwenye akaunti yako. Kumbuka kwamba kurasa nyingine zitaendelea kuonekana kana kwamba bado hujatoka kwenye akaunti yako, hadi utakaposafisha kache ya kivinjari.",
-'welcomecreation' => '== Karibu, $1! ==
-Ushafunguliwa akaunti yako tayari.
-Usisahau kubadilisha mapendekezo yako ya [[Special:Preferences|{{SITENAME}}]].',
+'welcomeuser' => 'Karibu, $1!',
 'yourname' => 'Jina la mtumiaji:',
 'yourpassword' => 'Neno la siri:',
 'yourpasswordagain' => 'Andika tena neno la siri',
@@ -632,7 +631,7 @@ Tafadhali subiri kwanza kabla ya kujaribu tena.',
 
 # Change password dialog
 'resetpass' => 'Kubadilisha neno la siri',
-'resetpass_announce' => 'Umeingia na kodi za barua pepe za muda tu.
+'resetpass_announce' => 'Umeingia na msimbo wa barua pepe wa muda tu.
 Kumalizia kuingia ndani, ni lazima urekebishe neno la siri jipya hapa:',
 'resetpass_header' => 'Kubadilisha neno la siri la akaunti',
 'oldpassword' => 'Neno la siri la zamani',
@@ -778,7 +777,7 @@ Labda itakusumbua kwamba kuna maoni mengine yanawekwa hapa na unaamini kwamba ha
 'noarticletext' => 'Ukurasa huu haujaandikwa bado. [[Special:Search/{{PAGENAME}}|tafutia jina hili]] katika kurasa nyingine, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tafuta kumbukumbu zinazohusika], au [{{fullurl:{{FULLPAGENAME}}|action=edit}} hariri ukurasa huu]</span>.',
 'noarticletext-nopermission' => 'Kwa sasa hakuna maandishi katika ukurasa huu.
 Unaweza [[Special:Search/{{PAGENAME}}|kutafuta jina la ukurasa huu]] katika kurasa nyingine,
-au <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tafuta ingizo linalofanana]</span>.',
+au <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tafuta kumbukumbu zinazohusika]</span>, lakini huruhusiwi kuanzisha ukurasa huu.',
 'userpage-userdoesnotexist' => 'Akaunti ya mtumiaji "<nowiki>$1</nowiki>" haijasajilishwa.
 Ukitaka kuanzisha au kuhariri ukurasa huu tafadhali ucheki jina la akaunti.',
 'userpage-userdoesnotexist-view' => 'Akaunti ya mtumiaji "$1" haijasajilishwa.',
@@ -864,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',
@@ -887,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.",
@@ -1131,7 +1132,7 @@ Ujue lakini kwamba kumbukumbu za {{SITENAME}} kule Google labda zilipitwa na wak
 
 # Preferences page
 'preferences' => 'Mapendekezo',
-'mypreferences' => 'Mapendekezo yangu',
+'mypreferences' => 'Mapendekezo',
 'prefs-edits' => 'Idadi ya marekebisho:',
 'prefsnologin' => 'Hujaingia',
 'prefsnologintext' => 'Inabidi <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} uingie akaunti yako]</span> ili ubadilishe mapendekezo yako.',
@@ -1344,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',
@@ -1841,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',
@@ -1920,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.
@@ -1947,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.',
@@ -1980,7 +1982,7 @@ Anwani yako ya barua pepe ulioitaja katika [[Special:Preferences|mapendekezo yak
 
 # Watchlist
 'watchlist' => 'Maangalizi yangu',
-'mywatchlist' => 'Maangalizi yangu',
+'mywatchlist' => 'Maangalizi',
 'watchlistfor2' => 'Kwa ajili ya $1 $2',
 'nowatchlist' => 'Hamna vitu katika maangalizi yako.',
 'watchlistanontext' => 'Tafadhali $1 ili kutazama au kuhariri vitu vilivyopo katika orodha yako ya maangalizi.',
@@ -2020,11 +2022,7 @@ Ukitaka kufuta ukurasa huo kutoka maangalizi yako baadaye, bonyeza \"Acha kufuat
 
 'enotif_mailer' => 'Huduma ya taarifa ya barua pepe kutoka kwa {{SITENAME}}',
 'enotif_reset' => 'Weka alama kwa kurasa zote zilizotembelewa',
-'enotif_newpagetext' => 'Ukurasa huu ni mpya.',
 'enotif_impersonal_salutation' => 'Kwa mtumiaji wa {{SITENAME}}',
-'changed' => 'alibadilisha',
-'created' => 'alianzisha',
-'enotif_subject' => '$PAGEEDITOR $CHANGEDORCREATED ukurasa wa $PAGETITLE kwenye {{SITENAME}}',
 'enotif_lastvisited' => 'Tazama $1 kwa mabadiliko yote tangu ziara yako ya mwisho.',
 'enotif_lastdiff' => 'Tazama badiliko hili hapo $1.',
 'enotif_anon_editor' => 'mtumiaji bila jina $1',
@@ -2055,6 +2053,8 @@ $UNWATCHURL
 
 Kutoa maoni yako au kupata msaada mwingine:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'alianzisha',
+'changed' => 'alibadilisha',
 
 # Delete
 'deletepage' => 'Futa ukurasa',
@@ -2183,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',
@@ -2201,7 +2202,7 @@ $1',
 # Contributions
 'contributions' => 'Michango ya mtumiaji',
 'contributions-title' => 'Michango ya mtumiaji $1',
-'mycontris' => 'Michango yangu',
+'mycontris' => 'Michango',
 'contribsub2' => 'Kwa $1 ($2)',
 'nocontribs' => 'Mabadiliko yanayolingana na vigezo vilivyoulizwa hayakupatikana.',
 'uctop' => '(juu)',
@@ -2284,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',
@@ -2311,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
@@ -2478,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.',
 
@@ -2545,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.',
@@ -2566,9 +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',
@@ -2691,7 +2709,7 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi.
 'exif-keywords' => 'Maneno yahusika',
 'exif-worldregioncreated' => 'Eneo la dunia palipopigwa picha',
 'exif-countrycreated' => 'Nchi palipopigwa picha',
-'exif-countrycodecreated' => 'Kodi ya nchi picha palipopigwa',
+'exif-countrycodecreated' => 'Msimbo wa nchi picha palipopigwa',
 'exif-countrydest' => 'Nchi inayoonyeshwa',
 'exif-citydest' => 'Mji umeonyeshwa',
 'exif-objectname' => 'Jina fupi',
@@ -2887,7 +2905,7 @@ na kama *huja* sajili akaunti hii, fuata kiungo hiki ili kubatilisha uthibitisho
 
 $5
 
-Kodi hizi za uthibitisho zitaishia mnamo $4.',
+Msimbo huu wa uthibitisho utaishia mnamo $4.',
 'confirmemail_body_changed' => 'Kuna mtu, huenda ikawa wewe, kutoka anwani ya IP $1, ambaye amebadilisha anwani ya barua pepe ya akaunti "$2" iwe anwani ya barua pepe hii, kule {{SITENAME}}.
 
 Ili kuthibitisha ya kwamba akaunti hii inamilikiwa na wewe, pamoja na kuwezesha upya zana zinazotumia barua pepe kule {{SITENAME}}, ufungue kiungo hiki katika kivinjari chako:
@@ -3141,6 +3159,7 @@ Tovuti hii inapata matatatizo wakati huu.',
 '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:',
@@ -3168,6 +3187,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 350ba98..39c5d9b 100644 (file)
@@ -452,9 +452,6 @@ Administrator kery zawarł wćepał kůmyntorz: "$3".',
 
 Možeš dali sam sprowjać zajty we {{SITENAME}} kej ńyzalůgowany užytkowńik, abo <span class='plainlinks'>[$1 zalůgować śe nazod]</span> kej tyn som abo inkšy užytkowńik.
 Dej pozůr, co na ńykerych zajtach přeglůndarka može dali pokozywać co ježeś zalůgowany, a bydźe tak aže uodśwjyžyš jeij cache.",
-'welcomecreation' => '== Witej, $1! ==
-Uotwarli my sam lo Ćebje kůnto.
-Ńy zapomńij poštalować [[Special:Preferences|preferencyji lo {{GRAMMAR:D.lp|{{SITENAME}}}}]].',
 'yourname' => 'Mjano użytkowńika:',
 'yourpassword' => 'Hasło:',
 'yourpasswordagain' => 'Naszkryflej ausdruk zaś',
@@ -740,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.',
@@ -1184,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',
@@ -1631,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.
@@ -1715,11 +1709,7 @@ Na tyi liśće bydźeš mjou rejer přišuych sprowjyń tyi zajty i jeji zajty g
 
 'enotif_mailer' => 'Powjadomjyńe s {{GRAMMAR:D.lp|{{SITENAME}}}}',
 'enotif_reset' => 'Uoznoč wšyjstke zajty kej uodwjydzůne',
-'enotif_newpagetext' => 'To je nowo zajta.',
 'enotif_impersonal_salutation' => 'užytkowńik {{GRAMMAR:D.lp|{{SITENAME}}}}',
-'changed' => 'pomjyńono',
-'created' => 'utwořono',
-'enotif_subject' => 'Zajta $PAGETITLE we {{GRAMMAR:MS.lp|{{SITENAME}}}} zostoua $CHANGEDORCREATED bez užytkowńika $PAGEEDITOR',
 'enotif_lastvisited' => 'Uobejřij na zajće $1 wšyjstke půmjyńańo uod Twojej uostatńij wizyty.',
 'enotif_lastdiff' => 'Uobejřij na zajće $1 te pomjyńeńe.',
 'enotif_anon_editor' => 'užytkowńik anůnimowy $1',
@@ -1746,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',
@@ -2851,5 +2843,6 @@ Naškryflej sam mjano plika bez prefiksu „{{ns:file}}:”.',
 '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 f8fca7a..fd63bb0 100644 (file)
@@ -129,7 +129,7 @@ $messages = array(
 
 'underline-always' => 'எப்பொழுதும்',
 'underline-never' => 'எப்போதுமில்லை',
-'underline-default' => 'உலாவி இயல்பிருப்பு',
+'underline-default' => 'தà¯\8bலà¯\8d à®\85லà¯\8dலதà¯\81 à®\89லாவி à®\87யலà¯\8dபிரà¯\81பà¯\8dபà¯\81',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'தொகுத்தல் பெட்டி எழுத்துரு:',
@@ -214,8 +214,8 @@ $messages = array(
 'newwindow' => '(புதிய சாளரத்துள் திறக்கும்)',
 'cancel' => 'சேமிக்காமல் திரும்பு',
 'moredotdotdot' => 'மேலும்...',
-'mypage' => 'à®\8eனதà¯\81 à®ªà®\95à¯\8dà®\95à®®à¯\8d',
-'mytalk' => 'à®\8eனà¯\8d à®ªà¯\87à®\9aà¯\8dà®\9aà¯\81',
+'mypage' => 'பக்கம்',
+'mytalk' => 'பேச்சு',
 'anontalk' => 'இந்த ஐ.பி. முகவரிக்கான பேச்சு',
 'navigation' => 'வழிசெலுத்தல்',
 'and' => ' மற்றும்',
@@ -249,6 +249,7 @@ $messages = array(
 
 மாற்றுருவங்கள்',
 
+'navigation-heading' => 'வழிசெலுத்தல் பட்டி',
 'errorpagetitle' => 'தவறு',
 'returnto' => '$1 பக்கத்துக்குத் திரும்பு.',
 'tagline' => '{{SITENAME}} இருந்து',
@@ -345,6 +346,8 @@ $1',
 'youhavenewmessages' => 'உங்களுக்குப் $1 உள்ளன ($2).',
 'newmessageslink' => 'புதிய செய்திகள்',
 'newmessagesdifflink' => 'கடைசி மாற்றம்',
+'youhavenewmessagesfromusers' => 'உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).',
+'youhavenewmessagesmanyusers' => 'உங்களுக்கு பல பயனர்களிடமிருந்து $1 பதிய செய்திகள்  உள்ளன ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ஒரு புதிய செய்தி|புதிய செய்திகள்}}',
 'newmessagesdifflinkplural' => 'கடைசி {{PLURAL:$1|மாற்றம்|மாற்றங்கள்}}',
 'youhavenewmessagesmulti' => '$1 இல் உங்களுக்கு புதிய செய்திகள் காத்திருக்கின்றன',
@@ -479,8 +482,8 @@ MySQL returned error "$3: $4".',
 'logouttext' => "'''நீங்கள் இப்பொழுது விடுபதிகையில் உள்ளீர்கள்.'''
 
 நீங்கள் தொடர்ந்து {{SITENAME}} தளத்தை அனானியாகப் பயன்படுத்தலாம், அல்லது அதே பயனராகவோ வேறு பயனராகவோ <span class='plainlinks'>[$1 மீண்டும் புகுபதிகை]</span> செய்யலாம். உங்கள் உலாவியின் இடைமாற்று நீக்கப்படும் வரை சில பக்கங்கள் தொடர்ந்தும் புகுபதிகையில் உள்ளது போன்றே காட்சி தரும் என்பதைக் கவனிக்கவும்.",
-'welcomecreation' => '==நல்வரவு, $1!==
-உங்களுக்கான பயனர் கணக்கு உருவாக்கப்பட்டுள்ளது. உங்களுக்கேற்றவாறு [[Special:Preferences|{{SITENAME}} விருப்பத்தேர்வுகளை]] மாற்றிக் கொள்ள மறவாதீர்கள்.',
+'welcomeuser' => 'வருக $1',
+'welcomecreation-msg' => 'உங்களுக்கான பயனர் கணக்கு உருவாக்கப்பட்டுள்ளது. உங்களுக்கேற்றவாறு [[Special:Preferences|{{SITENAME}} விருப்பத்தேர்வுகளை]] மாற்றிக் கொள்ள மறவாதீர்கள்.',
 'yourname' => 'பயனர் பெயர்:',
 'yourpassword' => 'கடவுச்சொல்:',
 'yourpasswordagain' => 'கடவுச்சொல்லைத் திரும்ப தட்டச்சிடுக:',
@@ -629,6 +632,7 @@ $2
 'changeemail-oldemail' => 'தற்பொழுதுள்ள மின்னஞ்சல் முகவரி:',
 'changeemail-newemail' => 'புதிய மின்னஞ்சல் முகவரி:',
 'changeemail-none' => '(எதுவுமில்லை)',
+'changeemail-password' => 'உங்கள் {{SITENAME}} கடவுச்சொல்:',
 'changeemail-submit' => 'மின்னஞ்சலை மாற்று',
 'changeemail-cancel' => 'விட்டுவிடு',
 
@@ -681,7 +685,7 @@ $2
 * தடை செய்யப்பட்டவர்: $7
 
 $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage-sysop}}|நிர்வாகி]] ஒருவரையோ அனுகி தடைப் பற்றி கலந்துரையாடலாம். 'இப் பயனருக்கு மின்னஞ்சல் செய்' என்ற வசதியை நீங்கள் பயன்படுத்துவதுலிருந்து தடைச் செய்யப்பட்டிருந்தாலோ அல்லது [[Special:Preferences|என் விருப்பத்தேர்வுகள்]] பக்கத்தில் இயங்குநிலையிலுள்ள மின்னஞ்சல் முகவரியை தராத போதோ பயனருக்கு மின்னஞ்சல் செய்ய முடியாது. உங்களது தற்போதைய ஐ.பி. முகவரி $3 மற்றும் தடை எண்  #$5 என்பவற்றை கேள்விகள் கேட்கும் போது கட்டாயம் குறிப்பிடவும்.",
-'autoblockedtext' => '$1 ஆல் தடைச்செய்யப்பட்ட வேறு பயனரால் பயன்படுத்தபட்டதால், உங்கள் ஐ.பி. முகவரி தானியக்கமாக தடுக்கப்பட்டுள்ளது. அதற்கான காரணம் பின்வருமாறு:
+'autoblockedtext' => 'உங்கள் ஐ.பி. முகவரி தடை செய்யப்பட்டுள்ளது. அதே முகவரியைப் பயன்படுத்தித் தொக்குத்த யாரோ ஒரு பயனர் பின்வரும் காரணங்களுக்காகத் தடை செய்யப்பட்டுள்ளார். அதனால் உங்களால் தொகுக்க முடியவில்லை. அதற்கான காரணம் பின்வருமாறு:
 
 :\'\'$2\'\'
 
@@ -689,11 +693,11 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage
 * தடை முடிவு: $6
 * தடை செய்யப்பட்டவர்: $7
 
-$1 à®ªà®¯à®©à®°à¯\88யà¯\8b à®\85லà¯\8dலதà¯\81 à®µà¯\87à®±à¯\81 [[{{MediaWiki:Grouppage-sysop}}|நிரà¯\8dவாà®\95ி]] à®\92à®°à¯\81வரà¯\88யà¯\8b à®\85னà¯\81à®\95ி à®¤à®\9fைப் பற்றி கலந்துரையாடலாம்.
+$1 à®\8eனà¯\81à®®à¯\8d à®ªà®¯à®©à®°à¯\88யà¯\8b à®µà¯\87à®±à¯\81 [[{{MediaWiki:Grouppage-sysop}}|நிரà¯\8dவாà®\95ி]] à®\92à®°à¯\81வரà¯\88யà¯\8b à®\85னà¯\81à®\95ிதà¯\8d à®¤à®\9fà¯\88யைப் பற்றி கலந்துரையாடலாம்.
 
-"à®\87பà¯\8d à®ªà®¯à®©à®°à¯\81à®\95à¯\8dà®\95à¯\81 à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®\9aà¯\86யà¯\8d" à®\8eனà¯\8dà®± à®µà®\9aதியà¯\88 à®¨à¯\80à®\99à¯\8dà®\95ளà¯\8d à®ªà®¯à®©à¯\8dபà®\9fà¯\81தà¯\81வதிலிரà¯\81நà¯\8dதà¯\81 à®¤à®\9fà¯\88à®\9aà¯\8d à®\9aà¯\86யà¯\8dயபà¯\8dபà®\9fà¯\8dà®\9fிரà¯\81நà¯\8dதாலà¯\8b à®\85லà¯\8dலதà¯\81 [[Special:Preferences|à®\8eனà¯\8d à®µà®¿à®°à¯\81பà¯\8dபதà¯\8dதà¯\87à®°à¯\8dவà¯\81à®\95ளà¯\8d]] à®ªà®\95à¯\8dà®\95தà¯\8dதிலà¯\8d à®\87யà®\99à¯\8dà®\95à¯\81நிலà¯\88யிலà¯\81ளà¯\8dள à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®®à¯\81à®\95வரியà¯\88 à®¤à®°à®¾à®¤ போதோ பயனருக்கு மின்னஞ்சல் செய்ய முடியாது.
+"à®\87பà¯\8d à®ªà®¯à®©à®°à¯\81à®\95à¯\8dà®\95à¯\81 à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®\9aà¯\86யà¯\8d" à®\8eனà¯\8dà®± à®µà®\9aதியà¯\88 à®¨à¯\80à®\99à¯\8dà®\95ளà¯\8d à®ªà®¯à®©à¯\8dபà®\9fà¯\81தà¯\8dதà¯\81வதிலிரà¯\81நà¯\8dதà¯\81 à®¤à®\9fà¯\88à®\9aà¯\8d à®\9aà¯\86யà¯\8dயபà¯\8dபà®\9fà¯\8dà®\9fிரà¯\81நà¯\8dதாலà¯\8b à®\85லà¯\8dலதà¯\81 [[Special:Preferences|à®\8eனà¯\8d à®µà®¿à®°à¯\81பà¯\8dபதà¯\8dதà¯\87à®°à¯\8dவà¯\81à®\95ளà¯\8d]] à®ªà®\95à¯\8dà®\95தà¯\8dதிலà¯\8d à®\87யà®\99à¯\8dà®\95à¯\81நிலà¯\88யிலà¯\81ளà¯\8dள à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®®à¯\81à®\95வரியà¯\88தà¯\8d à®¤à®°à®¾à®¤போதோ பயனருக்கு மின்னஞ்சல் செய்ய முடியாது.
 
-à®\89à®\99à¯\8dà®\95ளதà¯\81 à®¤à®±à¯\8dபà¯\8bதà¯\88ய à®\90.பி. à®®à¯\81à®\95வரி $3 à®®à®±à¯\8dà®±à¯\81à®®à¯\8d à®¤à®\9fà¯\88 à®\8eணà¯\8d #$5 à®\8eனà¯\8dபவறà¯\8dà®±à¯\88 à®\95à¯\87ளà¯\8dவிà®\95ளà¯\8d à®\95à¯\87à®\9fà¯\8dà®\95à¯\81à®®à¯\8d à®ªà¯\8bதà¯\81 கட்டாயம் குறிப்பிடவும்.',
+à®\87தà¯\88பà¯\8d à®ªà®±à¯\8dறிய à®\89à®\99à¯\8dà®\95ளà¯\8d à®\95à¯\87ளà¯\8dவிà®\95ளà¯\88à®\95à¯\8d à®\95à¯\87à®\9fà¯\8dà®\95à¯\81à®®à¯\8dபà¯\8bதà¯\81 à®\89à®\99à¯\8dà®\95ளதà¯\81 à®¤à®±à¯\8dபà¯\8bதà¯\88ய à®\90.பி. à®®à¯\81à®\95வரி $3 à®®à®±à¯\8dà®±à¯\81à®®à¯\8d à®¤à®\9fà¯\88 à®\8eணà¯\8d #$5 à®\86à®\95ியவறà¯\8dà®±à¯\88à®\95à¯\8d கட்டாயம் குறிப்பிடவும்.',
 'blockednoreason' => 'காரணம் தரப்படவில்லை',
 'whitelistedittext' => 'நீங்கள் பக்கங்களத் தொகுக்க $1 செய்யவேண்டும்.',
 'confirmedittext' => 'நீங்கள் பக்கங்களைத் தொகுக்க முன்னர் மின்னஞ்சல் முகவரியை உறுதிப்படுத்த வேண்டும். உங்கள் [[Special:Preferences|விருப்பத்தேர்வுகள்]] பக்கத்தில் செல்லுபடியான மின்னஞ்சலைக் கொடுத்து அதனை உறுதிப்படுத்துங்கள்.',
@@ -715,7 +719,7 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage
 'noarticletext' => 'இப் பக்கத்தில் தற்பொழுது உள்ளடக்கம் எதுவுமில்லை. நீங்கள் இப்பக்க [[Special:Search/{{PAGENAME}}|தலைப்பை வேறு பக்கங்களில் தேடவோ]] அல்லது [{{fullurl:{{FULLPAGENAME}}|action=edit}} இப்பக்கத்தை தொகுக்கவோ] முடியும்.',
 'noarticletext-nopermission' => 'தற்பொழுது இப்பக்கத்தில் உரை எதுவும் இல்லை.
 நீங்கள் [[Special:Search/{{PAGENAME}}|பக்கத் தலைப்பை வைத்து]] அல்லது மற்ற பக்கங்களில்,
-or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} அல்லது தேடுதல் தொடர்பான பதிவுகளில் தேடவும்.]</span>.',
+அல்லது <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} அல்லது தேடுதல் தொடர்பான பதிவுகளில் தேடலாம்.]</span>, ஆனால் இந்தப் பக்கத்தை உருவாக்க அனுமதியில்லை.',
 'missing-revision' => "இந்த பரிசீலனை # $1  '' {{PAGENAME}}' பெயருள்ள பக்கத்தின் இல்லை.!N வேடிக்கையானN!இது தான் வழக்கமாக ஏற்பட்டிருக்கலாம் நீக்கப்பட்டுள்ளது பக்கத்திற்கு outdated வரலாறு இணைப்பை தொடர்ந்து.
 விவரங்கள் முடியும் கண்டறிய, [{{fullurl: {{# சிறப்பு: குறிப்பேடு}} / delete|page = {{FULLPAGENAMEE}}}} நீக்குதல் குறிப்பேடு].",
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" என்றக் கணக்கு இன்னமும் பதிவுச் செய்யப்படவில்லை. இதை உருவாக்க/தொகுக்க வேண்டுமா என்பதை உறுதிப்படுத்தவும்.',
@@ -790,7 +794,6 @@ or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'template-protected' => '(காக்கப்பட்டது)',
 'template-semiprotected' => '(பகுதியாகக் காக்கப்பட்டது)',
 'hiddencategories' => 'இப்பக்கம் {{PLURAL:$1|ஒரு மறைக்கப்பட்ட பகுப்பில்|$1 மறைக்கப்பட்ட பகுப்புகளில்}} அடங்குகிறது:',
-'nocreatetitle' => 'பக்கத் தொடக்கம் மட்டுப்படுத்தப்பட்டுள்ளது',
 'nocreatetext' => '{{SITENAME}} புதிய பக்கங்களை ஆக்குவதற்கான அனுமதியை மட்டுப்படுத்தியுள்ளது.
 நீங்கள் ஏற்கனவே இருக்கும் பக்கங்களைத் தொகுக்க முடியும் அல்லது [[Special:UserLogin|புகுபதிகை செய்யவும் அல்லது கணக்கொன்றை தொடங்குங்கள்]].',
 'nocreate-loggedin' => 'புதியப் பக்கங்களைத் தொடங்குவதற்கு உங்களுக்கு அனுமதி கிடையாது.',
@@ -817,6 +820,14 @@ or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 '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' => 'எச்சரிக்கை: இப்பக்கம் அதிகளவு இலக்கணப் பாகுபடுத்திச் சார்புகளைக் கொண்டுள்ளது.
@@ -862,7 +873,7 @@ or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'currentrevisionlink' => 'நடப்பிலுள்ள திருத்தம்',
 'cur' => 'நடப்பு',
 'next' => 'அடுத்தது',
-'last' => 'à®®à¯\81நà¯\8dதà¯\88ய',
+'last' => 'à®®à¯\81நà¯\8dதிய',
 'page_first' => 'முதல்',
 'page_last' => 'கடைசி',
 'histlegend' => 'வேறுபாட்டைக் காண வேண்டிய இரண்டு பத்திப்புக்களை தெரிவுச் செய்து கீழுள்ள பொத்தானை அழுத்தவும்.<br />
@@ -1039,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) பக்கங்களைப் பார்.',
@@ -1103,7 +1114,7 @@ $1",
 
 # Preferences page
 'preferences' => 'விருப்பங்கள்',
-'mypreferences' => 'à®\8eனà¯\8d à®µà®¿à®°à¯\81பà¯\8dபதà¯\8dதà¯\87à®°à¯\8dவà¯\81à®\95ளà¯\8d',
+'mypreferences' => 'விருப்பத்தேர்வுகள்',
 'prefs-edits' => 'தொகுப்புகளின் எண்ணிக்கை:',
 'prefsnologin' => 'புகுபதிகை செய்யப்படவில்லை',
 'prefsnologintext' => 'பயனர் விருப்பத்தேர்வுகளை அமைப்பதற்கு நீங்கள் <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} புகுபதிகை ]</span> செய்திருக்க வேண்டும்.',
@@ -1176,7 +1187,7 @@ $1",
 'prefs-emailconfirm-label' => 'மின்னஞ்சலை உறுதிசெய்தல்:',
 'prefs-textboxsize' => 'தொகுக்கும் சாளரத்தின் அளவு',
 'youremail' => 'மின்னஞ்சல்:',
-'username' => 'பயனர் பெயர்:',
+'username' => '{{GENDER:$1|பயனர் பெயர்}}:',
 'uid' => 'பயனர்:',
 'prefs-memberingroups' => 'பின்வரும் {{PLURAL:$1|குழு|குழுக்களில்}} உறுப்பினர்:',
 'prefs-registration' => 'பதிவு செய்யும் நேரம்:',
@@ -1329,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' => 'இப் பக்கத்தை வாசிக்கவும்',
@@ -1697,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 கோப்பை நீக்கு',
@@ -1816,6 +1828,7 @@ $1',
 'mostlinkedtemplates' => 'அதிகம் இணைக்கப்பட்ட வார்ப்புருக்கள்',
 'mostcategories' => 'பகுப்புகளுக்கு அதிகமாக இணைக்கப்பட்டவை',
 'mostimages' => 'படிமங்களுக்கு அதிகமாக இணைக்கப்பட்டவை',
+'mostinterwikis' => 'அதிக விக்கியிடை இணைப்பு கொண்ட பக்கங்கள்',
 'mostrevisions' => 'அதிக திருத்தங்களைக் கொண்ட கட்டுரைகள்',
 'prefixindex' => 'முன்னொட்டுச் சுட்டியுடன் உள்ள அனைத்துப் பக்கங்களும்',
 'prefixindex-namespace' => 'முன்னொட்டு ( $1  பயனர்வெளி)கொண்ட அனைத்து பக்கங்களும்',
@@ -1874,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' => 'பின்வரும் முன்னொட்டு உடைய பக்கங்களை காட்டு:',
@@ -1928,10 +1941,6 @@ $1',
 'activeusers-hidesysops' => 'நிர்வாகிகளை மறை',
 'activeusers-noresult' => 'எந்தவொரு பயனர்களும் காணப்படவில்லை.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'பயனர் உருவாக்கம் பற்றிய குறிப்பு',
-'newuserlogpagetext' => 'இது பயனர் படைப்புகளின் பதிவு ஆகும்.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'பயனர் குழு உரிமைகள்',
 'listgrouprights-key' => '<span class="listgrouprights-granted">உரிமை வழங்கப்பட்டது</span>
@@ -1954,6 +1963,7 @@ $1',
 'mailnologintext' => 'நீங்கள்[[Special:UserLogin|புகுபதிகை செய்திருப்பதுடன்]]
 ஏனைய பயனர்களுக்கு மின்னஞ்சல் அனுப்பக்கூடியத்தாக செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியொன்றும் உங்களுடைய  [[Special:Preferences|விருப்பத் தெரிவுகளில்]] கொடுபட்டிருக்கவேண்டும்.',
 'emailuser' => 'இப் பயனருக்கு மின்னஞ்சல் செய்',
+'emailuser-title-target' => '{{GENDER:$1|user}} என்ற பயனருக்கு மின்னஞ்சல் செய்',
 'emailuser-title-notarget' => 'பயனருக்கு மின்னஞ்சல் செய்',
 'emailpage' => 'மின்னஞ்சல் பயனர்',
 'emailpagetext' => 'நீங்கள் கீழ்வரும் படிவத்தை உபயோகித்து இந்த பயனருக்கு மின்னஞ்சல் செய்யலாம்.
@@ -1989,7 +1999,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'என் கவனிப்புப் பட்டியல்',
-'mywatchlist' => 'à®\8eனà¯\8d à®\95வனிபà¯\8dபà¯\81பà¯\8d à®ªà®\9fà¯\8dà®\9fியலà¯\8d',
+'mywatchlist' => 'கவனிப்புப் பட்டியல்',
 'watchlistfor2' => '$1 பயனரின் ($2)',
 'nowatchlist' => 'உங்களுடைய கவனிப்புப் பட்டியலில் ஒரு விடயமும் இல்லை.',
 'watchlistanontext' => 'உங்கள் கவனிப்புப் பட்டியலைப் பார்க்க அல்லது தொகுக்க அருள் கூர்ந்து $1 செய்யுங்கள்.',
@@ -2024,11 +2034,7 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} தளத்தின் அறிவித்தல் அஞ்சல்காரர்',
 'enotif_reset' => 'எல்லாப் பக்கங்களையும் பார்வையிட்டதாக குறித்துக்கொள்',
-'enotif_newpagetext' => 'இது ஒரு புதிய பக்கமாகும்.',
 'enotif_impersonal_salutation' => '{{SITENAME}} பயனர்',
-'changed' => 'மாற்றப்பட்டது',
-'created' => 'தொடக்கப்பட்டது',
-'enotif_subject' => '{{SITENAME}} தளத்தின் $PAGETITLE என்றத் தலைப்புடையப் பக்கம் $PAGEEDITOR பயனரால் $CHANGEDORCREATED',
 'enotif_lastvisited' => 'உங்கள் கடைசி வருகைக்குப் பின்னர் நடைபெற்றுள்ள மாற்றங்களைக் காண $1 பக்கத்தைப் பார்க்கவும்.',
 'enotif_lastdiff' => 'மாற்றங்களைக் காண  $1 பக்கத்தைப் பார்.',
 'enotif_anon_editor' => 'அடையாளம் காட்டாத பயனர் $1',
@@ -2056,6 +2062,8 @@ $NEWPAGE
 
 பின்னூட்டம், மேலதிக உதவிகளுக்கு:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'தொடக்கப்பட்டது',
+'changed' => 'மாற்றப்பட்டது',
 
 # Delete
 'deletepage' => 'பக்கத்தை நீக்கு',
@@ -2095,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]] இன் கடைசித் தொகுப்பை முன்நிலையாக்க முடியாது; வேறு யாரோ இப்பக்கத்தை ஏற்கெனவே தொகுத்தோ அல்லது முன்நிலையாக்கியோ உள்ளார்.
@@ -2192,7 +2201,7 @@ $NEWPAGE
 நீக்கப்பட்ட திருத்தங்களின் வாசகங்களை நிர்வாகிகள் மட்டுமே காணமுடியும்.',
 'undelete-revision' => '$3 செய்த $1 பக்கத்தின் ($4, $5 இல் உள்ளபடியான) நீக்கப்பட்ட திருத்தம்:',
 'undeleterevision-missing' => 'செல்லுபடியற்ற அல்லது காணப்படாத திருத்தம். நீங்கள் இங்கே வந்த இணைப்பு பழுதுள்ளதாக இருக்கலாம் அல்லது குறித்த திருத்தம் பரணிலிருந்து நீக்கப்பட்டோ அல்லது மீட்கபட்டோ இருக்கலாம்.',
-'undelete-nodiff' => 'à®®à¯\81நà¯\8dதà¯\88ய திருத்தங்கள் காணப்படவில்லை.',
+'undelete-nodiff' => 'à®®à¯\81நà¯\8dதிய திருத்தங்கள் காணப்படவில்லை.',
 'undeletebtn' => 'மீட்டெடு',
 'undeletelink' => 'பார்க்க/மீட்டெடு',
 'undeleteviewlink' => 'பார்வையிடு',
@@ -2234,12 +2243,12 @@ $1',
 # Contributions
 'contributions' => 'பயனர் பங்களிப்புக்கள்',
 'contributions-title' => '$1 இற்கான பயனர் பங்களிப்புகள்',
-'mycontris' => 'à®\8eனà¯\8d à®ªà®\99à¯\8dà®\95ளிபà¯\8dபà¯\81à®\95à¯\8dà®\95ளà¯\8d',
+'mycontris' => 'பங்களிப்புக்கள்',
 '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' => 'புதிய கணக்குகளுக்கு',
@@ -2269,13 +2278,13 @@ $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',
 'whatlinkshere-hidetrans' => 'உள்ளிடப்பட்டவைகளை $1',
 'whatlinkshere-hidelinks' => 'இணைப்புகள் $1',
-'whatlinkshere-hideimages' => '$1உருவ இணைப்புகள்',
+'whatlinkshere-hideimages' => '$1 கோப்பிணைப்புக்கள்',
 'whatlinkshere-filters' => 'வடிகட்டிகள்',
 
 # Block/unblock
@@ -2299,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' => 'தானியக்கமாக இப்பயனர் கடைசியாகப் பயன்படுத்திய ஐ.பி முகவரியையும் பங்களிக்க முயலும் ஐ.பி. முகவரிகளையும் தடை செய்',
@@ -2310,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' => 'செல்லுபடியற்ற ஐ.பி. முகவரி',
@@ -2365,7 +2374,7 @@ $1',
 தடுப்பு குறிப்பேடு ஒப்பீட்டிற்காக கீழே வழங்கப்பட்டுள்ளது:',
 'blocklog-showsuppresslog' => 'இந்த பயனர் முன்பே தடுக்கப்பட்டு மறைக்கப்பட்டுள்ளார்.
 தடுப்பு குறிப்பேடு ஒப்பீட்டிற்காக கீழே வழங்கப்பட்டுள்ளது:',
-'blocklogentry' => '$2, $3 அன்று காலாவதியாகும் வகையில் [[$1]] தடுக்கப்பட்டது',
+'blocklogentry' => 'பயனரால் $2 அன்று காலாவதியாகும் வகையில் [[$1]] தடுக்கப்பட்டது $3',
 'blocklogtext' => 'இது ஒரு பயனரின் தடுப்பு தடை நீக்கல் செயற்பாடுகளுக்கான பதிவாகும். தானியங்கி முறையில் தடுக்கப்படும் ஐபி முகவரிகள் இப்பட்டியலில் இடம்பெறா.  தற்போது செயற்பாட்டிலுள்ள தடைகளையும் முடக்கங்களையும் [[Special:BlockList|ஐ.பி. தடுப்பு பட்டியலில்]] பார்க்க.',
 'unblocklogentry' => '"$1" தொடர்பான தடுப்பு நீக்கப்பட்டது',
 'block-log-flags-anononly' => 'அடையாளம் காட்டாத பயனர் மட்டும்',
@@ -2717,14 +2726,29 @@ $1',
 'pageinfo-display-title' => 'காட்சித் தலைப்பு',
 'pageinfo-length' => 'பக்க நீளம் (எண்ணுண்மிகளில்)',
 'pageinfo-article-id' => 'பக்க அடையாள இலக்கம்',
+'pageinfo-language' => 'பக்க உள்ளடக்க மொழி',
 '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-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' => 'பயன்படுத்தப்பட்ட {{PLURAL:$1|வார்ப்புரு|வார்ப்புருக்கள்}} ($1)',
+'pageinfo-toolboxlink' => 'பக்கத் தகவல்',
+'pageinfo-redirectsto-info' => 'தகவல்',
+'pageinfo-contentpage' => 'உள்ளடக்கப் பக்கமாய்க் கணக்கிடப்பட்டது.',
+'pageinfo-contentpage-yes' => 'ஆம்',
+'pageinfo-protect-cascading-yes' => 'ஆம்',
 
 # Skin names
 'skinname-standard' => 'இயல்பான',
@@ -2741,6 +2765,7 @@ $1',
 'markedaspatrollederror' => 'ரோந்திட்டதாக குறிக்க முடியாது',
 'markedaspatrollederrortext' => 'ரோந்திட்டதாக குறிக்க நீங்கள் திருத்தமொன்றைக் குறிப்பிட வேண்டும்.',
 'markedaspatrollederror-noautopatrol' => 'உமது மாற்றங்களை நீரே ரோந்திட்டதாக குறிக்க அனுமதி கிடையாது.',
+'markedaspatrollednotify' => '$1 இல் மேற்கொள்ளப்பட்ட இம்மாற்றம் கண்காணிக்கப்பட்டதாய்க் குறிக்கப்பட்டது.',
 
 # Patrol log
 'patrol-log-page' => 'ரோந்துப் பதிகை',
@@ -2759,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
@@ -3305,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இற்கு செல்க',
@@ -3314,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 உள்ளடக்கங்களைக் காட்டு',
@@ -3533,6 +3558,7 @@ $5
 'logentry-newusers-create2' => '$3 பயனர் கணக்கினை $1 உருவாக்கினார்',
 'logentry-newusers-autocreate' => 'கணக்கு  $1   தானாக    உருவாக்கப்பட்டது',
 'newuserlog-byemail' => 'மின்னஞ்சல் மூலம் கடவுச்சொல் அனுப்பப்பட்டுவிட்டது',
+'rightsnone' => '(எதுவுமில்லை)',
 
 # Feedback
 'feedback-bugornote' => 'நீங்கள் ஒரு தொழில்நுட்பக் கோளாறு குறித்து விரிவாக விளக்க தாயாராக இருந்தால் தயவுசெய்து [ $1  ஒரு bug பற்றி கூறு].
index 4912779..6fad2e8 100644 (file)
@@ -358,9 +358,6 @@ $messages = array(
 'logouttext' => 'ಈರ್ ಇತ್ತೆ ಲಾಗ್ ಔಟ್ ಆತರ್.
 ಈರ್ {{SITENAME}} ನ್ ಅನಾಮಧೇಯರಾತ್ ಉಪಯೋಗ ಮಲ್ಪೊಲಿ,ಅಥವಾ ಕೂಡ ಉಂದುವೇ ಪುದರ್‘ಡ್ ಯಾ ಬೇತೆ ಪುದರ್‘ಡ್ ಉಪಯೋಗ ಮಲ್ಪೊಲಿ.
 ಗಮನಿಸಾಲೆ: ಈರೆನ ಬ್ರೌಸರ್‘ಡ್ ಮಾಜುನಾಡೆ ಮುಟ್ಟ ಕೆಲವು ಪುಟಕ್‘ಲು ಈರ್ ಇತ್ತೆಲಾ ಲಾಗ್ ಇನ್ ಆಯಿಲೆಕ್ಕನೇ ತೋಜಾವು.',
-'welcomecreation' => '== ಸುಸ್ವಾಗತೊ, $1! ==
-ಈರೆನೆ ಅಕೌಂಟ್‘ನ್  ಶುರು ಮಲ್ತ್‘ಂಡ್.
-ಈರೆನ [[Special:Preferences|{{SITENAME}} ಪ್ರಾಶಸ್ತ್ಯೊಲೆನ್]]  ಬದಲಾವಣೆ ಮಲ್ಪರೆ ಮರಪಡೆ',
 'yourname' => 'ಸದಸ್ಯೆರ್ನ ಪುದರ್:',
 'yourpassword' => 'ಪಾಸ್-ವರ್ಡ್:',
 'yourpasswordagain' => 'ಪಾಸ್ವರ್ಡ್ ಪಿರ ಟೈಪ್ ಮಲ್ಪುಲೆ',
@@ -638,6 +635,9 @@ $messages = array(
 'right-delete' => 'ಪುಟೊಕುಲೆನ್ ಮಾಜಾಲೆ',
 'right-undelete' => 'ಪುಟೊನ್ ಮಾಜಾವಡೆ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ಸದಸ್ಯ ರಚನೆ ಲಾಗ್',
+
 # User rights log
 'rightslog' => 'ಸದಸ್ಯೆರ್ನ ಹಕ್ಕು ದಾಖಲೆ',
 
@@ -774,9 +774,6 @@ $messages = array(
 'allarticles' => 'ಪೂರಾ ಲೇಖನೊಲು',
 'allpagessubmit' => 'ಪೋ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ಸದಸ್ಯ ರಚನೆ ಲಾಗ್',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(ಸದಸ್ಯೆರ್ನ ಪಟ್ಟಿ)',
 
index 4c08f5c..f1b9bba 100644 (file)
@@ -12,6 +12,7 @@
  * @author Jprmvnvijay5
  * @author Kaganer
  * @author Kiranmayee
+ * @author Malkum
  * @author Meno25
  * @author Mpradeep
  * @author Praveen Illa
@@ -191,7 +192,7 @@ $messages = array(
 
 'underline-always' => 'ఎల్లప్పుడూ',
 'underline-never' => 'ఎప్పటికీ వద్దు',
-'underline-default' => 'విహారిణి అప్రమేయం',
+'underline-default' => 'à°\85à°²à°\82à°\95ారపà±\81 à°²à±\87దా à°µà°¿à°¹à°¾à°°à°¿à°£à°¿ à°\85à°ªà±\8dà°°à°®à±\87à°¯à°\82',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'దిద్దుబాటు పెట్టె ఫాంటు శైలి:',
@@ -276,8 +277,8 @@ $messages = array(
 'newwindow' => '(కొత్త కిటికీలో వస్తుంది)',
 'cancel' => 'రద్దు',
 'moredotdotdot' => 'ఇంకా...',
-'mypage' => 'నా à°ªà±\87à°\9cà±\80',
-'mytalk' => 'నా à°\97à±\81à°°à°¿à°\82à°\9aà°¿ à°\9aà°°à±\8dà°\9a',
+'mypage' => 'à°ªà±\81à°\9f',
+'mytalk' => 'చర్చ',
 'anontalk' => 'ఈ ఐ.పి.కి సంబంధించిన చర్చ',
 'navigation' => 'మార్గదర్శకం',
 'and' => '&#32;మరియు',
@@ -543,10 +544,13 @@ $2',
 
 మీరు {{SITENAME}}ని అజ్ఞాతంగా వాడుతూండొచ్చు, లేదా ఇదే వాడుకరిగా కానీ లేదా వేరే వాడుకరిగా కానీ <span class='plainlinks'>[$1 మళ్ళీ ప్రవేశించవచ్చు]</span>.
 అయితే, మీ విహారిణిలోని కోశాన్ని శుభ్రపరిచే వరకు కొన్ని పేజీలు మీరింకా ప్రవేశించి ఉన్నట్లుగానే చూపించవచ్చని గమనించండి.",
-'welcomecreation' => '== స్వాగతం, $1! ==
-
-మీ ఖాతాని సృష్టించాం.
-మీ [[Special:Preferences|{{SITENAME}} అభిరుచులను]] మార్చుకోవడం మరువకండి.',
+'welcomeuser' => 'స్వాగతం, $1!',
+'welcomecreation-msg' => 'మీ ఖాతాని సృష్టించాం.
+మీ [[Special:Preferences|{{SITENAME}} అభిరుచులను]] మార్చుకోవడం మరువకండి.
+తెలుగు వికీపీడియాలో తెలుగులోనే రాయాలి. వికీలో రచనలు చేసే ముందు, కింది సూచనలను గమనించండి.
+తెలుగు {{SITENAME}}లో తెలుగులోనే రాయాలి. వికీలో రచనలు చేసే ముందు, కింది సూచనలను గమనించండి.
+*వికీని త్వరగా అర్థం చేసుకునేందుకు [[వికీపీడియా:5 నిమిషాల్లో వికీ|5 నిమిషాల్లో వికీ]] పేజీని చూడండి.
+*తెలుగులో రాసేందుకు ఇంగ్లీషు అక్షరాల ఉచ్ఛారణతో తెలుగు టైపు చేసే [[వికీపీడియా:టైపింగు సహాయం| టైపింగ్  సహాయం]] వాడవచ్చు. మరిన్ని ఉపకరణాల కొరకు [[కీ బోర్డు]] మరియు   తెరపై తెలుగు సరిగా లేకపోతే[[వికీపీడియా:Setting up your browser for Indic scripts|ఈ పేజీ]]  చూడండి.',
 'yourname' => 'వాడుకరి పేరు:',
 'yourpassword' => 'సంకేతపదం:',
 'yourpasswordagain' => 'సంకేతపదాన్ని మళ్ళీ ఇవ్వండి:',
@@ -714,7 +718,7 @@ $2
 'nowiki_sample' => 'ఫార్మాటు చేయకూడని పాఠ్యాన్ని ఇక్కడ చేర్చండి',
 'nowiki_tip' => 'వికీ ఫార్మాటును పట్టించుకోవద్దు',
 'image_tip' => 'పొదిగిన ఫైలు',
-'media_tip' => 'à°«à±\88à°²à±\81 à°²à°¿à°\82à°\95à±\81',
+'media_tip' => 'దసà±\8dà°¤à±\8dà°°à°ªà±\81 à°²à°\82à°\95à±\86',
 'sig_tip' => 'టైంస్టాంపుతో సహా మీ సంతకం',
 'hr_tip' => 'అడ్డగీత (అరుదుగా వాడండి)',
 
@@ -858,7 +862,6 @@ $2
 'template-protected' => '(సంరక్షితం)',
 'template-semiprotected' => '(సెమీ-రక్షణలో ఉంది)',
 'hiddencategories' => 'ఈ పేజీ {{PLURAL:$1|ఒక దాచిన వర్గంలో|$1 దాచిన వర్గాల్లో}} ఉంది:',
-'nocreatetitle' => 'పేజీని సృష్టించడాన్ని నియంత్రించాం.',
 'nocreatetext' => '{{SITENAME}}లో కొత్త పేజీలు సృష్టించడాన్ని నియంత్రించారు.
 మీరు వెనక్కి వెళ్ళి వేరే పేజీలు మార్చవచ్చు, లేదా [[Special:UserLogin|లోనికి ప్రవేశించండి లేదా ఖాతా సృష్టించుకోండి]].',
 'nocreate-loggedin' => 'కొత్త పేజీలను సృష్టించేందుకు మీకు అనుమతి లేదు.',
@@ -883,11 +886,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' => 'హెచ్చరిక: ఈ పేజీలో ఖరీదైన పార్సరు పిలుపులు చాలా ఉన్నాయి.
@@ -1162,7 +1167,7 @@ $1",
 
 # Preferences page
 'preferences' => 'అభిరుచులు',
-'mypreferences' => 'నా à°\85à°­à°¿à°°à±\81à°\9aà±\81à°²à±\81',
+'mypreferences' => 'అభిరుచులు',
 'prefs-edits' => 'దిద్దుబాట్ల సంఖ్య:',
 'prefsnologin' => 'లాగిన్‌ అయిలేరు',
 'prefsnologintext' => 'వాడుకరి అభిరుచులను మార్చుకోడానికి, మీరు <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} లోనికి ప్రవేశించి]</span> ఉండాలి.',
@@ -1384,12 +1389,15 @@ $1",
 '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 కి మార్చారు',
-'rightsnone' => '(ఏమీలేవు)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ఈ పేజీని చదవండి',
@@ -1608,6 +1616,7 @@ $1',
 'backend-fail-opentemp' => 'తాత్కాలిక దస్త్రాన్ని తెరవలేకపోతున్నాం.',
 'backend-fail-closetemp' => 'తాత్కాలిక దస్త్రాన్ని మూసివేయలేకపోయాం.',
 'backend-fail-read' => '$1 దస్త్రము చదువలేకపోతిమి.',
+'backend-fail-create' => '$1 ఫైలులో రాయలేకున్నాం.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'ఈ ఫైలును ZIP పరీక్ష కోసం తెరవబోతే, ఏదో తెలియని లోపం ఎదురైంది.',
@@ -1961,10 +1970,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'activeusers-hidesysops' => 'నిర్వాహకులను దాచు',
 'activeusers-noresult' => 'వాడుకరులెవరూ లేరు.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'కొత్త వాడుకరుల చిట్టా',
-'newuserlogpagetext' => 'ఇది వాడుకరి నమోదుల చిట్టా.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'వాడుకరి గుంపుల హక్కులు',
 'listgrouprights-summary' => 'కింది జాబితాలో ఈ వికీలో నిర్వచించిన వాడుకరి గుంపులు, వాటికి సంబంధించిన హక్కులు ఉన్నాయి.
@@ -1989,6 +1994,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'mailnologintext' => 'ఇతరులకు ఈ-మెయిలు పంపించాలంటే, మీరు [[Special:UserLogin|లాగిన్‌]] అయి ఉండాలి, మరియు మీ [[Special:Preferences|అభిరుచుల]]లో సరైన ఈ-మెయిలు చిరునామా ఇచ్చి ఉండాలి.',
 'emailuser' => 'ఈ వాడుకరికి ఈ-మెయిలుని పంపించండి',
 'emailuser-title-target' => 'ఈ {{GENDER:$1|వాడుకరికి}} ఈమెయిలు పంపించండి',
+'emailuser-title-notarget' => 'ఈ-మెయిలు వాడుకరి',
 'emailpage' => 'వాడుకరికి ఈ-మెయిలుని పంపించు',
 'emailpagetext' => 'వాడుకరికి ఈమెయిలు సందేశము పంపించుటకు క్రింది ఫారంను ఉపయోగించవచ్చు. [[Special:Preferences|మీ వాడుకరి అభిరుచుల]]లో మీరిచ్చిన ఈ-మెయిలు చిరునామా "నుండి" ఆ సందేశం వచ్చినట్లుగా ఉంటుంది, కనుక వేగుని అందుకునేవారు నేరుగా మీకు జవాబివ్వగలుగుతారు.',
 'usermailererror' => 'మెయిలు ఆబ్జెక్టు ఈ లోపాన్ని చూపింది:',
@@ -2020,7 +2026,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 
 # Watchlist
 'watchlist' => 'నా వీక్షణ జాబితా',
-'mywatchlist' => 'నా à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితా',
+'mywatchlist' => 'వీక్షణ జాబితా',
 'watchlistfor2' => '$1 కొరకు $2',
 'nowatchlist' => 'మీ వీక్షణ జాబితా ఖాళీగా ఉంది.',
 'watchlistanontext' => 'మీ వీక్షణ జాబితా లోని అంశాలను చూసేందుకు లేదా మార్చేందుకు మీరు $1.',
@@ -2055,11 +2061,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 
 'enotif_mailer' => '{{SITENAME}} ప్రకటన మెయిలు పంపునది',
 'enotif_reset' => 'అన్ని పేజీలను చూసినట్లుగా గుర్తించు',
-'enotif_newpagetext' => 'ఇది ఒక కొత్త పేజీ.',
 'enotif_impersonal_salutation' => '{{SITENAME}} వాడుకరి',
-'changed' => 'మార్చారు',
-'created' => 'సృష్టించారు',
-'enotif_subject' => '{{SITENAME}}లో $PAGETITLE అనే పేజీని $PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => 'మీ గత సందర్శన తరువాత జరిగిన మార్పుల కొరకు $1 చూడండి.',
 'enotif_lastdiff' => 'ఈ మార్పు చూసేందుకు  $1 కు వెళ్ళండి.',
 'enotif_anon_editor' => 'అజ్ఞాత వాడుకరి $1',
@@ -2089,6 +2091,8 @@ $UNWATCHURL కి వెళ్ళండి.
 
 మీ అభిప్రాయాలు చెప్పేందుకు మరియు మరింత సహాయానికై:
 {{canonicalurl:{{MediaWiki:helppage}}}}',
+'created' => 'సృష్టించారు',
+'changed' => 'మార్చారు',
 
 # Delete
 'deletepage' => 'పేజీని తొలగించు',
@@ -2262,7 +2266,7 @@ $UNWATCHURL కి వెళ్ళండి.
 # Contributions
 'contributions' => 'వాడుకరి రచనలు',
 'contributions-title' => '$1 యొక్క మార్పులు-చేర్పులు',
-'mycontris' => 'నా à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81-చేర్పులు',
+'mycontris' => 'మారà±\8dà°ªà±\81à°²à±\81 చేర్పులు',
 'contribsub2' => '$1 ($2) కొరకు',
 'nocontribs' => 'ఈ విధమైన మార్పులేమీ దొరకలేదు.',
 'uctop' => '(పైది)',
@@ -2303,7 +2307,7 @@ $UNWATCHURL కి వెళ్ళండి.
 'whatlinkshere-hideredirs' => 'దారిమార్పులను $1',
 'whatlinkshere-hidetrans' => '$1 ట్రాన్స్‌క్లూజన్లు',
 'whatlinkshere-hidelinks' => 'లింకులను $1',
-'whatlinkshere-hideimages' => '$1 à°¬à±\8aà°®à±\8dమల à°²à°¿à°\82à°\95à±\81లు',
+'whatlinkshere-hideimages' => '$1 à°¦à°¸à±\8dà°¤à±\8dరాల à°²à°\82à°\95à±\86లు',
 'whatlinkshere-filters' => 'వడపోతలు',
 
 # Block/unblock
@@ -2743,6 +2747,8 @@ $UNWATCHURL కి వెళ్ళండి.
 'pageinfo-watchers' => 'పేజీ వీక్షకుల సంఖ్య',
 'pageinfo-edits' => 'మొత్తం మార్పుల సంఖ్య',
 'pageinfo-toolboxlink' => 'పేజీ సమాచారం',
+'pageinfo-contentpage-yes' => 'అవును',
+'pageinfo-protect-cascading-yes' => 'అవును',
 
 # Skin names
 'skinname-standard' => 'సంప్రదాయ',
@@ -3292,7 +3298,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' => 'సరే',
@@ -3426,7 +3432,7 @@ $5
 * <span class="mw-specialpagecached">Cached ప్రత్యేక పుటలు (పాతబడి ఉండొచ్చు).</span>',
 'specialpages-group-maintenance' => 'నిర్వహణా నివేదికలు',
 'specialpages-group-other' => 'ఇతర ప్రత్యేక పేజీలు',
-'specialpages-group-login' => 'à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°\82à°¡à°¿ / à°¨à°®à±\8bà°¦à±\81à°\9aà±\87à°¸ుకోండి',
+'specialpages-group-login' => 'à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°\82à°¡à°¿ / à°\96ాతానà±\81 à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aుకోండి',
 'specialpages-group-changes' => 'ఇటీవలి మార్పులు మరియు దినచర్యలు',
 'specialpages-group-media' => 'మాధ్యమ నివేదికలు మరియు ఎగుమతులు',
 'specialpages-group-users' => 'వాడుకర్లు మరియు హక్కులు',
@@ -3516,6 +3522,7 @@ $5
 'logentry-newusers-create2' => '$1  వాడుకరి ఖాతా $3ను సృష్టించారు',
 'logentry-newusers-autocreate' => '$1 ఖాతాను ఆటోమెటిగ్గా సృష్టించారు',
 'newuserlog-byemail' => 'ఈ-మెయిలులో సంకేతపదం పంపించాం',
+'rightsnone' => '(ఏమీలేవు)',
 
 # Feedback
 'feedback-subject' => 'విషయం:',
index d4600e0..b614b9f 100644 (file)
@@ -156,7 +156,7 @@ $messages = array(
 'cancel' => 'Para',
 'moredotdotdot' => 'Barak liu...',
 'mypage' => "Ha'u-nia pájina",
-'mytalk' => "Ha'u-nia diskusaun",
+'mytalk' => 'Diskusaun',
 'anontalk' => "Diskusaun ba IP ne'e",
 'navigation' => 'Hatudu-dalan',
 'and' => '&#32;ho',
@@ -297,9 +297,6 @@ Lista ida pájina espesiál nian [[Special:SpecialPages|iha ne'e]].",
 'ns-specialprotected' => 'La ema ida bele edita pájina espesiál sira.',
 
 # Login and logout pages
-'welcomecreation' => "== Loron di'ak, $1! ==
-Agora Ita iha konta iha ne'e.
-La haluha muda Ita-nia [[Special:Preferences|preferénsia]].",
 'yourname' => "Naran uza-na'in:",
 'login' => 'Log in',
 'nav-login-createaccount' => 'Log in / kriar konta ida',
@@ -419,7 +416,7 @@ Ita-nia mudansa la armazenadu seidauk!",
 
 # Preferences page
 'preferences' => 'Preferénsia',
-'mypreferences' => "Ha'u-nia preferénsia",
+'mypreferences' => 'Preferénsia',
 'prefs-rc' => 'Mudansa foufoun sira',
 'prefs-watchlist' => 'Lista hateke',
 'prefs-editing' => 'Edita',
@@ -484,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",
@@ -630,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',
@@ -648,7 +643,7 @@ Ita-nia mudansa la armazenadu seidauk!",
 
 # Watchlist
 'watchlist' => "Ha'u-nia lista hateke",
-'mywatchlist' => "Ha'u-nia lista hateke",
+'mywatchlist' => 'Lista hateke',
 'removedwatchtext' => 'La hateke pájina "[[:$1]]" ona (haree [[Special:Watchlist|"lista hateke"]]).',
 'watch' => 'Hateke',
 'watchthispage' => "Hateke pájina ne'e",
@@ -660,11 +655,9 @@ Ita-nia mudansa la armazenadu seidauk!",
 'watching' => 'Hateke...',
 'unwatching' => 'La hateke...',
 
-'enotif_newpagetext' => "Ne'e pájina foun.",
 'enotif_impersonal_salutation' => "Uza-na'in {{SITENAME}} nian",
-'changed' => 'muda ona',
 'created' => 'kria ona',
-'enotif_subject' => '$PAGEEDITOR $CHANGEDORCREATED pájina $PAGETITLE iha {{SITENAME}}',
+'changed' => 'muda ona',
 
 # Delete
 'deletepage' => 'Halakon pájina',
@@ -721,7 +714,7 @@ Ita-nia mudansa la armazenadu seidauk!",
 # Contributions
 'contributions' => "Kontribuisaun uza-na'in",
 'contributions-title' => 'Kontribuisaun "$1" nian',
-'mycontris' => "Ha'u-nia kontribuisaun",
+'mycontris' => 'Kontribuisaun',
 'contribsub2' => 'Ba $1 ($2)',
 'uctop' => '(versaun atuál)',
 'month' => 'Fulan (ho molok):',
@@ -982,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 0cd2c9b..3b58018 100644 (file)
@@ -445,10 +445,6 @@ $1',
 
 Шумо метавонед гумном аз {{SITENAME}} истифодабариро идома диҳед, ё метавонед бо ҳамин номи корбариатон ва ё номи корбарии дигаре <span class='plainlinks'>[$1 боз вуруд кунед]</span>.
 Тавваҷӯҳ кунед, ки баъзе аз саҳифаҳо қаблан чи тавре намоиш шуда будан ҳамин тавр намоиш дода мешаванд, то даме ки шумо ҳофизаи мурургаратонро пок кунед.",
-'welcomecreation' => '== Хуш омадед, $1! ==
-
-Ҳисоби шумо эҷод шуд.
-Танзим кардани [[Special:Preferences|тарҷиҳоти {{SITENAME}}]] худро фаромӯш накунед.',
 'yourname' => 'Номи корбар',
 'yourpassword' => 'Калимаи убур\\пароль',
 'yourpasswordagain' => 'Калимаи убурро боз нависед',
@@ -672,7 +668,6 @@ $1',
 'template-protected' => '(ҳифзшуда)',
 'template-semiprotected' => '(нима-муҳофизатшуда)',
 'hiddencategories' => 'Ин саҳифа дар {{PLURAL:$1|1 гурӯҳи пинҳон|$1 гурӯҳҳои пинҳон}} қарор дорад:',
-'nocreatetitle' => 'Эҷоди саҳифа маҳдуд шудааст',
 'nocreatetext' => '{{SITENAME}} қобилияти эҷоди саҳифаҳои ҷадидро маҳдуд карда аст.
 Шумо метавонед бозгашта саҳифаи мавҷудбударо вироиш кунед, ё [[Special:UserLogin|ба систем вуруд кунед ё ҳисоби корбарӣ эҷод кунед]].',
 'nocreate-loggedin' => 'Шумо иҷозати эҷоди саҳифаи ҷадидро надоред.',
@@ -1010,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' => 'вироиши ин саҳифа',
@@ -1382,10 +1379,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Нишон додани',
 'listusers-noresult' => 'Ҳеҷ корбаре ёфт нашуд.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Гузориши эҷоди корбар',
-'newuserlogpagetext' => 'Ин гузориш аз номҳои корбарии тозасохташуда аст.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ихтиёроти гурӯҳҳои корбарӣ',
 'listgrouprights-group' => 'Гурӯҳ',
@@ -1451,11 +1444,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_mailer' => '{{SITENAME}} Иттилорасонӣ почтаи электронӣ',
 'enotif_reset' => 'Аломатрасони ҳамаи саҳифаҳо ба унвони боздидшуда',
-'enotif_newpagetext' => 'Ин саҳифаи нав аст',
 'enotif_impersonal_salutation' => 'Корбари {{SITENAME}}',
-'changed' => 'тағйирёфта',
-'created' => 'эҷод шуд',
-'enotif_subject' => 'Саҳифаи {{SITENAME}} $PAGETITLE аз тарафи $PAGEEDITOR $CHANGEDORCREATED шуд',
 'enotif_lastvisited' => 'Барои дидани ҳамаи тағйирот аз охирин боре, ки сар задаед $1ро бубинед.',
 'enotif_lastdiff' => 'Барои намоиши ин тағйир $1ро бубинед.',
 'enotif_anon_editor' => 'корбари ношинос $1',
@@ -1482,6 +1471,8 @@ $NEWPAGE
 
 Пешниҳодот ва кӯмаки бештар:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'эҷод шуд',
+'changed' => 'тағйирёфта',
 
 # Delete
 'deletepage' => 'Ҳазфи саҳифа',
@@ -2543,5 +2534,6 @@ $5
 'revdelete-restricted' => 'маҳдудиятҳо ба мудирон амалӣ шуданд',
 'revdelete-unrestricted' => 'маҳдудиятҳо аз мудирон бардошта шуданд',
 'newuserlog-byemail' => 'калимаи убур ба почтаи электронӣ фиристода шуд',
+'rightsnone' => '(ҳеҷ)',
 
 );
index bf09f81..359c5cd 100644 (file)
@@ -380,10 +380,6 @@ Daleli zikrşuda az in qaror ast ''$2''.",
 
 Şumo metavoned gumnom az {{SITENAME}} istifodabariro idoma dihed, jo metavoned bo hamin nomi korbariaton va jo nomi korbariji digare <span class='plainlinks'>[$1 boz vurud kuned]</span>.
 Tavvaçūh kuned, ki ba'ze az sahifaho qablan ci tavre namoiş şuda budan hamin tavr namoiş doda meşavand, to dame ki şumo hofizai mururgaratonro pok kuned.",
-'welcomecreation' => '== Xuş omaded, $1! ==
-
-Hisobi şumo eçod şud.
-Tanzim kardani [[Special:Preferences|tarçihoti {{SITENAME}}]] xudro faromūş nakuned.',
 'yourname' => 'Nomi korbar',
 'yourpassword' => 'Kalimai ubur\\parolь',
 'yourpasswordagain' => 'Kalimai uburro boz navised',
@@ -572,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.',
@@ -892,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',
@@ -1232,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,14 +1291,12 @@ Agar şumo dertar az fehristi nazarotaton in sahifaro hazv kardan xohed, dar men
 
 'enotif_mailer' => '{{SITENAME}} Ittilorasonī poctai elektronī',
 'enotif_reset' => 'Alomatrasoni hamai sahifaho ba unvoni bozdidşuda',
-'enotif_newpagetext' => 'In sahifai nav ast',
 'enotif_impersonal_salutation' => 'Korbari {{SITENAME}}',
-'changed' => 'taƣjirjofta',
-'created' => 'eçod şud',
-'enotif_subject' => 'Sahifai {{SITENAME}} $PAGETITLE az tarafi $PAGEEDITOR $CHANGEDORCREATED şud',
 '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',
@@ -2345,5 +2336,6 @@ Nişonai pajvandro biduni peşvand "{{ns:file}}:" vorid kuned.',
 '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 0314e0d..d79544b 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,30 +308,31 @@ $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' => 'ดูเพิ่ม...',
-'mypage' => 'หน้าของฉัน',
-'mytalk' => 'หน้าพูดคุยของฉัน',
+'morenotlisted' => 'มีที่ยังไม่แสดงอีก...',
+'mypage' => 'หน้า',
+'mytalk' => 'พูดคุย',
 'anontalk' => 'พูดคุยกับไอพีนี้',
 'navigation' => 'ป้ายบอกทาง',
 'and' => '&#32;และ',
@@ -347,11 +350,11 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'เพิ่มหัวข้อใหม่',
 '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าสำหรับพิมพ์',
+'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สำหรับพิมพ์',
 '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,42 +509,41 @@ $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' => 'ไวยากรณ์ในการค้นฐานข้อมูลผิดพลาด
 สาเหตุอาจเกิดจากบั๊กของซอฟต์แวร์
 การค้นฐานข้อมูลล่าสุดกระทำเมื่อ:
 <blockquote><tt>$1</tt></blockquote>
 จากฟังก์ชัน "<tt>$2</tt>"
-ฐานข้อมูลแจ้งข้อผิดพลาดว่า "<tt>$3: $4</tt>"',
+ฐานข้อมูลแจ้งข้อผิดพลาดว่า "<samp>$3: $4</samp>"',
 'dberrortextcl' => 'ไวยากรณ์ในการค้นฐานข้อมูลผิดพลาด
 การค้นฐานข้อมูลล่าสุดกระทำเมื่อ:
 "$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,35 +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''",
-'badtitle' => 'ชื่อหน้าไม่เหมาะสม',
-'badtitletext' => 'ชื่อหน้าที่ร้องขอไม่ถูกต้อง เป็นชื่อว่าง หรือชื่อที่ผิดพลาดเนื่องจากลิงก์ข้ามมาจากภาษาอื่น ชื่อที่ใช้อาจจะมีตัวอักษรที่ไม่สามารถถูกใช้เป็นชื่อได้',
-'perfcached' => 'ข้อมูลต่อไปนี้อาจเป็นข้อมูลเก่า ที่เก็บไว้ในแคชของระบบ A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'ข้อมูลต่อไปนี้ถูกเก็บไว้ในหน่วยความจำแคช, และได้รับการปรับปรุงครั้งสุดท้าย $1. ค่าสูงสุดของ {{PLURAL:$4|หนึ่งผลลัพธ์คือ|$4 ผลลัพธ์คือ}} จะสามารถเก็บไว้ในหน่วยความจำแคชได้',
-'querypage-no-updates' => 'ขณะนี้การปรับปรุงหน้านี้ถูกระงับ ข้อมูลในที่นี่จะไม่รีเฟรชเป็นข้อมูลปัจจุบัน',
+'delete-hook-aborted' => 'การลบถูกฮุกยกเลิก
+ไม่มีคำอธิบายสำหรับการยกเลิกนี้',
+'badtitle' => 'ชื่อไม่เหมาะสม',
+'badtitletext' => 'ชื่อหน้าที่ร้องขอไม่ถูกต้อง เป็นชื่อว่าง หรือชื่อที่ผิดพลาดเนื่องจากลิงก์ข้ามมาจากภาษาอื่น ชื่อที่ใช้อาจมีตัวอักษรที่ไม่สามารถปรากฏในชื่อได้',
+'perfcached' => 'ข้อมูลต่อไปนี้ถูกเก็บไว้ในแคช และอาจล้าสมัย มีผลการค้นหาสูงสุด $1 รายการในแคช',
+'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' => "หัวà¹\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' => 'หน้าหรือปฏิบัติการนี้กำหนดให้คุณล็อกอินเข้าสู่วิกินี้ก่อน',
 
@@ -588,38 +598,38 @@ $1',
 'virus-unknownscanner' => 'ไม่รู้จักโปรแกรมป้องกันไวรัสตัวนี้:',
 
 # Login and logout pages
-'logouttext' => "'''ขณะนี้คุณได้ล็อกเอาต์ออกจากระบบ'''
-
-คุณสามารถใช้งาน {{SITENAME}} ได้ต่อในฐานะผู้ใช้นิรนาม หรือคุณสามารถ<span class='plainlinks'>[$1 ล็อกอินกลับเข้าไป]</span>ด้วยชื่อผู้ใช้เดิมหรือชื่อผู้ใช้อื่นๆ
-อย่างไรก็ตามอาจจะมีบางหน้าที่ยังแสดงข้อความว่าคุณกำลังล็อกอินอยู่ จนกว่าคุณจะล้างแคชออกจากเว็บเบราว์เซอร์",
-'welcomecreation' => '== ยินดีต้อนรับ $1! ==
+'logouttext' => "'''ขณะนี้คุณได้ล็อกเอาต์แล้ว'''
 
-ชื่อบัญชีผู้ใช้ของคุณถูกสร้างขึ้นแล้ว
-อย่าลืมเข้าไป[[Special:Preferences|ตั้งค่าผู้ใช้สำหรับ {{SITENAME}}]]',
+คุณสามารถใช้งาน {{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' => 'ลืมรายละเอียดล็อกอินของคุณ?',
+'userlogin-resetlink' => 'ลืมรายละเอียดล็อกอินของคุณหรือ',
 'createaccountmail' => 'ผ่านทางอีเมล',
 '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',
@@ -630,50 +640,46 @@ $1',
 'noname' => 'คุณไม่ได้ใส่ชื่อผู้ใช้ที่ถูกต้อง',
 'loginsuccesstitle' => 'ล็อกอินสำเร็จ',
 'loginsuccess' => "'''ขณะนี้คุณล็อกอินเข้าสู่ {{SITENAME}} ด้วยชื่อ \"\$1\"'''",
-'nosuchuser' => 'à¹\84มà¹\88มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\8aืà¹\88อ "$1"
+'nosuchuser' => 'ไม่มีผู้ใช้ชื่อ "$1"
 อักษรใหญ่เล็กมีผลต่อชื่อผู้ใช้
-à¸\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" กรุณาตรวจสอบการสะกด',
+กรุณาตรวจการสะกดอีกครั้ง หรือ[[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' => 'คุณได้พยายามล็อกอินมากครั้งเกินไป
 กรุณารอสักครู่แล้วลองใหม่อีกครั้ง',
@@ -682,12 +688,13 @@ $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' => 'คุณล็อกอินผ่านรหัสอีเมลชั่วคราว คุณต้องใส่ค่ารหัสผ่านใหม่เพื่อเสร็จสิ้นขั้นตอนการล็อกอิน:',
+'resetpass_announce' => 'คุณใช้รหัสอีเมลชั่วคราวล็อกอิน คุณต้องกำหนดรหัสผ่านใหม่ตรงนี้ จึงจะเสร็จสิ้นขั้นตอนการล็อกอิน:',
+'resetpass_text' => '<!-- เพิ่มข้อความที่นี่ -->',
 'resetpass_header' => 'เปลี่ยนรหัสผ่าน',
 'oldpassword' => 'รหัสผ่านเดิม:',
 'newpassword' => 'รหัสผ่านใหม่:',
@@ -695,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' => 'รหัสผ่านชั่วคราวหรือปัจจุบันไม่ถูกต้อง
@@ -703,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' => 'ยกเลิก',
 
@@ -732,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
@@ -750,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
 เหตุผลที่ให้ไว้ในการบล็อกคือ:
 
@@ -789,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' => "'''ขออภัย ไม่สามารถดำเนินการแก้ไขต่อได้ เนื่องจากข้อมูลเชื่อมต่อสูญหาย
 ให้ทดลองแก้ไขอีกครั้งหนึ่ง ถ้ายังไม่สามารถทำได้ ให้ลองล็อกเอาต์และล็อกอินกลับมาอีกครั้ง'''",
@@ -848,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' => "'''คำเตือน: เว็บเบราว์เซอร์นี้ไม่สนับสนุนการใช้งานแบบยูนิโคด ตัวอักษรที่ไม่ใช่แบบแอสกีจะแสดงในกล่องการแก้ไขในลักษณะรหัสเลขฐานสิบหก'''",
@@ -880,7 +896,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'semiprotectedpagewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'cascadeprotectedwarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
-'titleprotectedwarning' => "'''คำเตือน:  หน้านี้ได้รับการป้องกันไว้ให้สร้างได้โดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
+'titleprotectedwarning' => "'''คำเตือน: หน้านี้ได้รับการป้องกันไว้ให้สร้างได้เฉพาะโดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'templatesused' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:',
 'templatesusedpreview' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในการแสดงตัวอย่าง:',
@@ -888,8 +904,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'template-protected' => '(ล็อก)',
 'template-semiprotected' => '(กึ่งล็อก)',
 'hiddencategories' => 'หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}} :',
-'edittools' => '<!-- ข้อความนี้จะแสดงผลด้านใต้การแก้ไขและฟอร์มสำหรับอัปโหลด -->',
-'nocreatetitle' => 'จำกัดการสร้างหน้าใหม่',
+'edittools' => '<!-- ข้อความนี้จะแสดงผลใต้ฟอร์มสำหรับการแก้ไขและอัปโหลด -->',
 'nocreatetext' => '{{SITENAME}} จำกัดการสร้างหน้าใหม่
 คุณสามารถย้อนกลับไปแก้ไขหน้าที่มีอยู่เดิม หรือ[[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]',
 'nocreate-loggedin' => 'คุณไม่ได้รับอนุญาตให้สร้างหน้าใหม่',
@@ -897,7 +912,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'sectioneditnotsupported-text' => 'ไม่สนับสนุนการแก้ไขหัวข้อย่อยในหน้านี้',
 'permissionserrors' => 'ข้อผิดพลาดในการใช้สิทธิ',
 'permissionserrorstext' => 'คุณไม่ได้รับสิทธิในการทำสิ่งนี้ เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
-'permissionserrorstext-withaction' => 'คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
+'permissionserrorstext-withaction' => 'คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุ|เหตุ}}ต่อไปนี้:',
 'recreate-moveddeleted-warn' => "'''คำเตือน: คุณกำลังสร้างหน้าซึ่งได้ถูกลบไปก่อนหน้านี้แล้วอีกครั้ง'''
 
 คุณควรพิจารณาว่าการแก้ไขหน้านี้ต่อไปเหมาะสมหรือไม่
@@ -913,40 +928,41 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'edit-no-change' => 'การแก้ไขของคุณถูกเพิกเฉย เพราะไม่มีการเปลี่ยนแปลงใด ๆ',
 'edit-already-exists' => 'ไม่สามารถสร้างหน้าใหม่ได้
 เพราะมีหน้านี้แล้ว',
+'defaultmessagetext' => 'ข้อความสารโดยปริยาย',
 
 # 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' => 'รุ่นปัจจุบัน',
@@ -960,115 +976,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|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน',
 
@@ -1076,16 +1094,16 @@ $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' => 'หัวเรื่องของหน้าต้นทางต้องตรงตามข้อกำหนด (เช่น ไม่มีตัวอักษรที่ไม่สามารถใช้ในหัวเรื่องได้)',
@@ -1099,61 +1117,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มีมากเกินไป กรุณาใช้คำค้นหาอื่น',
+'toomanymatches' => 'à¸\9eà¸\9aà¸\95รà¸\87à¸\81ัà¸\99มากเกินไป กรุณาใช้คำค้นหาอื่น',
 '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|ผลลัพธ์|ผลลัพธ์}}ต่อหน้า',
+'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' => 'สืบค้นในเนมสเปซทั้งหมด',
@@ -1162,8 +1180,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' => 'ค้นหาระดับสูง',
@@ -1174,7 +1192,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' => 'แถบพิเศษ',
@@ -1186,7 +1204,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>ก่อนเพื่อตั้งค่าส่วนตัว',
@@ -1196,15 +1214,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' => 'เปลี่ยนที่อยู่อีเมล',
@@ -1212,8 +1231,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' => 'แถว:',
@@ -1223,23 +1242,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' => 'มหาสมุทรแอตแลนติก',
@@ -1248,38 +1267,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' => 'ต้องการที่อยู่อีเมล',
@@ -1296,30 +1315,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' => 'กลุ่มที่คุณไม่สามารถเปลี่ยนได้',
@@ -1334,11 +1353,11 @@ $1",
 'group-suppress' => 'ผู้ดูแลระดับสูง',
 'group-all' => '(ทั้งหมด)',
 
-'group-user-member' => 'ผู้ใช้ใหม่',
+'group-user-member' => '{{GENDER:$1|ผู้ใช้ใหม่}}',
 'group-autoconfirmed-member' => 'ผู้ใช้ทั่วไป',
-'group-bot-member' => 'บอต',
-'group-sysop-member' => 'ผู้ดูแล',
-'group-bureaucrat-member' => 'ผู้ดูแลสิทธิแต่งตั้ง',
+'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}}:ผู้ใช้',
@@ -1349,71 +1368,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' => 'อ่านหน้านี้',
@@ -1423,7 +1445,7 @@ $1",
 'action-createaccount' => 'สร้างบัญชีผู้ใช้นี้',
 'action-minoredit' => 'เป็นการแก้ไขเล็กน้อย',
 'action-move' => 'ย้ายหน้านี้',
-'action-move-subpages' => 'ย้ายหน้านี้และหน้าย่อยของหน้านี้',
+'action-move-subpages' => 'ย้ายหน้านี้ รวมทั้งหน้าย่อย',
 'action-move-rootuserpages' => 'ย้ายหน้าผู้ใช้หลัก',
 'action-movefile' => 'ย้ายไฟล์นี้',
 'action-upload' => 'อัปโหลดไฟล์นี้',
@@ -1435,24 +1457,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' => 'ในหน้านี้เป็นรายการล่าสุดที่มีการปรับปรุง',
@@ -1461,7 +1483,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การแก้ไขเล็กน้อย',
@@ -1470,7 +1492,7 @@ $1",
 'rcshowhideanons' => '$1ผู้ใช้นิรนาม',
 'rcshowhidepatr' => '$1การแก้ไขที่ตรวจสอบแล้ว',
 'rcshowhidemine' => '$1การแก้ไขของฉัน',
-'rclinks' => 'แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา;<br />$3',
+'rclinks' => 'แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา<br />$3',
 'diff' => 'ต่าง',
 'hist' => 'ประวัติ',
 'hide' => 'ซ่อน',
@@ -1482,9 +1504,11 @@ $1",
 'number_of_watching_users_pageview' => '[$1 คนเฝ้าดู]',
 'rc_categories' => 'จำกัดเฉพาะหมวดหมู่ (แยกด้วย "|")',
 'rc_categories_any' => 'ใด ๆ',
+'rc-change-size-new' => '$1 ไบต์หลังปรับปรุง',
 'newsectionsummary' => '/* $1 */ หัวข้อใหม่',
-'rc-enhanced-expand' => 'à¹\81สà¸\94à¸\87รายละà¹\80อียà¸\94 (à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\83à¸\8aà¹\89à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8c)',
+'rc-enhanced-expand' => 'แสดงรายละเอียด (ต้องใช้จาวาสคริปต์)',
 'rc-enhanced-hide' => 'ซ่อนรายละเอียด',
+'rc-old-title' => 'เดิมถูกสร้างในชื่อ "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'ปรับปรุงที่เกี่ยวโยง',
@@ -1497,22 +1521,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>''' สำหรับการเชื่อมโยงไฟล์โดยตรง โดยไม่ปรากฏไฟล์นั้นออกมา",
@@ -1529,10 +1553,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)',
@@ -1547,7 +1571,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' => 'เกิดข้อผิดพลาดไม่ทราบสาเหตุ',
@@ -1584,9 +1608,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' => 'การอัปโหลดไฟล์ถูกปิดการใช้งาน',
@@ -1595,7 +1619,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',
@@ -1603,7 +1627,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' => 'ปัญหาการอัปโหลด',
@@ -1627,11 +1651,11 @@ $1',
 'backend-fail-backup' => 'ไม่สามารถสำรองข้อมูลไฟล์ $1.',
 'backend-fail-notexists' => 'ไม่พบไฟล์ $1 ที่ต้องการ',
 'backend-fail-delete' => 'ไม่สามารถลบไฟล์ $1 ได้',
-'backend-fail-alreadyexists' => 'à¹\84à¸\9fลà¹\8c $1 à¸¡à¸µอยู่แล้ว',
-'backend-fail-copy' => 'ไม่สามารถคัดลอกไฟล์ $1 ไปยัง $2 ได้',
-'backend-fail-move' => 'ไม่สามารถย้ายไฟล์ $1 ไปยัง $2 ได้',
-'backend-fail-read' => 'ไม่สามารถอ่านไฟล์ $1 ได้',
-'backend-fail-create' => 'à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¹\84à¸\9fลà¹\8c $1 à¹\84à¸\94à¹\89.',
+'backend-fail-alreadyexists' => 'มีà¹\84à¸\9fลà¹\8c "$1" อยู่แล้ว',
+'backend-fail-copy' => 'ไม่สามารถคัดลอกไฟล์ "$1" ไปยัง "$2" ได้',
+'backend-fail-move' => 'ไม่สามารถย้ายไฟล์ "$1" ไปยัง "$2" ได้',
+'backend-fail-read' => 'ไม่สามารถอ่านไฟล์ "$1" ได้',
+'backend-fail-create' => 'à¹\84มà¹\88สามารà¸\96à¹\80à¸\82ียà¸\99à¹\84à¸\9fลà¹\8c "$1" à¹\84à¸\94à¹\89',
 
 # ZipDirectoryReader
 'zip-unsupported' => 'ไฟล์ดังกล่าวเป็นไฟล์ ZIP ซึ่งใช้คุณสมบัติ ZIP ที่ไม่ได้รับการสนับสนุนโดย MediaWiki.
@@ -1650,7 +1674,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" ได้',
@@ -1691,9 +1715,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' => 'ชื่อ',
@@ -1705,7 +1729,7 @@ $1',
 # File description page
 'file-anchor-link' => 'ไฟล์',
 'filehist' => 'ประวัติไฟล์',
-'filehist-help' => 'กดเลือก วัน/เวลา เพื่อดูไฟล์ที่แสดงในวันนั้น',
+'filehist-help' => 'กดเลือกวัน/เวลา เพื่อดูไฟล์ที่ปรากฏในขณะนั้น',
 'filehist-deleteall' => 'ลบทั้งหมด',
 'filehist-deleteone' => 'ลบ',
 'filehist-revert' => 'ย้อน',
@@ -1720,29 +1744,33 @@ $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 หน้าไฟล์]ได้แสดงไว้ข้างล่างนี้',
 '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>',
@@ -1755,16 +1783,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' => 'ไม่สามารถลบไฟล์',
 
@@ -1775,7 +1803,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' => 'รายการหน้าเปลี่ยนทาง',
@@ -1787,7 +1815,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' => 'สุ่มหน้าเปลี่ยนทาง',
@@ -1795,30 +1823,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' => 'หน้านี้แสดงรายการชื่อที่เปลี่ยนทางไปยังหน้าเปลี่ยนทางอื่น
@@ -1838,13 +1866,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|หน้า|หน้า}}',
@@ -1854,8 +1882,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' => 'หน้าที่มีการเข้าดูมาก',
@@ -1869,41 +1897,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' => 'หัวเรื่องที่ได้รับการป้องกัน',
-'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',
+'protectedtitlestext' => 'หัวà¹\80รืà¹\88อà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84à¸\94à¹\89รัà¸\9aà¸\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' => 'ค้นหาหนังสือ',
@@ -1917,10 +1947,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าร (ระวัà¸\87อัà¸\81ษรภาษาอัà¸\87à¸\81ฤษà¸\9eิมà¸\9eà¹\8cà¹\80ลà¹\87à¸\81à¹\83หà¸\8dà¹\88)',
+'logempty' => 'à¹\84มà¹\88à¸\9eà¸\9aรายà¸\81ารà¸\95รà¸\87à¸\81ัà¸\99à¹\83à¸\99à¸\9bูม',
 'log-title-wildcard' => 'ค้นหาชื่อเรื่องด้วยคำขึ้นต้น',
+'showhideselectedlogentries' => 'แสดง/ซ่อนรายการปูมที่เลือก',
 
 # Special:AllPages
 'allpages' => 'ทุกหน้า',
@@ -1937,7 +1968,7 @@ $1',
 'allpagessubmit' => 'ค้นหา',
 'allpagesprefix' => 'แสดงหน้าที่ขึ้นต้นด้วย:',
 'allpagesbadtitle' => 'ชื่อเรื่องนี้ไม่ถูกต้อง อาจสะกดผิด ลิงก์มาจากภาษาอื่นหรือวิกิอื่น หรือมีตัวอักษรที่ไม่สามารถใช้เป็นชื่อเรื่องได้',
-'allpages-bad-ns' => '{{SITENAME}} ไม่มีเนมสเปซในชื่อ "$1"',
+'allpages-bad-ns' => '{{SITENAME}} ไม่มีเนมสเปซ "$1"',
 'allpages-hide-redirects' => 'ซ่อนการเปลี่ยนทาง',
 
 # Special:Categories
@@ -1947,7 +1978,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' => 'การแก้ไขที่ถูกลบ',
@@ -1960,8 +1991,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) อยู่หน้าชื่อโฮสต์ได้เท่านั้น',
 
@@ -1969,21 +2000,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|การแก้ไขล่าสุด|การแก้ไขล่าสุด $1 รายการ}} ใน{{PLURAL:$3|ช่วงวัน|ช่วง $3 วัน}}ที่ผ่านมา',
+'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|การแก้ไขล่าสุด|การแก้ไขล่าสุด $1 รายการ}} ในช่วง $3 วันที่ผ่านมา',
 'activeusers-from' => 'แสดงชื่อผู้ใช้โดยเริ่มจาก:',
 'activeusers-hidebots' => 'ซ่อนบอต',
 'activeusers-hidesysops' => 'ซ่อนผู้ดูแลระบบ',
 'activeusers-noresult' => 'ไม่พบชื่อผู้ใช้',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ปูมการสร้างบัญชีผู้ใช้ใหม่',
-'newuserlogpagetext' => 'นี่คือปูมการสร้างบัญชีผู้ใช้',
-
 # Special:ListGroupRights
 'listgrouprights' => 'สิทธิของกลุ่มผู้ใช้',
 'listgrouprights-summary' => 'รายชื่อกลุ่มผู้ใช้ต่อไปนี้ถูกกำหนดไว้บน {{SITENAME}} โดยมีสิทธิการเข้าถึงที่เกี่ยวข้อง และอาจมี[[{{MediaWiki:Listgrouprights-helppage}}|ข้อมูลเพิ่มเติม]]เกี่ยวกับสิทธิของแต่ละบุคคล',
@@ -1997,8 +2024,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' => 'ลบทุกกลุ่มออกจากชื่อผู้ใช้นี้',
 
@@ -2006,30 +2033,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
@@ -2037,34 +2067,32 @@ $1',
 'usermessage-editor' => 'ตัวส่งข้อความของระบบ',
 
 # Watchlist
-'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' => 'ตัวเลือกรายการเฝ้าดู',
 
@@ -2073,101 +2101,102 @@ $1',
 'unwatching' => 'เลิกเฝ้าดู...',
 
 'enotif_mailer' => 'แจ้งการแก้ไขจาก {{SITENAME}}',
-'enotif_reset' => 'กำหนดทุกหน้าว่าผ่านตาแล้ว',
-'enotif_newpagetext' => 'นี่คือหน้าใหม่',
+'enotif_reset' => 'ทำเครื่องหมายว่าชมทุกหน้าแล้ว',
 'enotif_impersonal_salutation' => 'ผู้ใช้งาน {{SITENAME}}',
-'changed' => 'ถูกเปลี่ยนแปลง',
-'created' => 'ถูกสร้าง',
-'enotif_subject' => '{{SITENAME}} หน้า $PAGETITLE ได้ $CHANGEDORCREATED โดย $PAGEEDITOR',
-'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
 
-ทางระบบจากเว็บ {{SITENAME}} ต้องการแจ้งให้ทราบว่า หน้า $PAGETITLE ได้ $CHANGEDORCREATED เมื่อ $PAGEEDITDATE โดย $PAGEEDITOR ดูรุ่นปัจจุบันได้ที่ $PAGETITLE_URL
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+คำอธิบายอย่างย่อของผู้เขียน: $PAGESUMMARY $PAGEMINOREDIT
 
-คำสรุปการแก้ไข: $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"',
@@ -2179,17 +2208,17 @@ $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-default' => 'อนุญาตผู้ใช้ทั้งหมด',
 'protect-fallback' => 'จำเป็นต้องใช้สิทธิในการ "$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' => 'à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a',
 'protect-summary-cascade' => 'สืบทอด',
 'protect-expiring' => 'หมดอายุ $1 (UTC)',
 'protect-expiring-local' => 'หมดอายุ $1',
@@ -2201,11 +2230,11 @@ $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 ชั่วโมง:1 hour,1 วัน:1 day,1 สัปดาห์:1 week,2 สัปดาห์:2 weeks,1 เดือน:1 month,3 เดือน:3 months,6 เดือน:6 months,1 ปี:1 year,ตลอดกาล:infinite',
 'restriction-type' => 'อนุญาต',
@@ -2226,45 +2255,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' => 'เกิดความผิดพลาดระหว่างการลบไฟล์:
@@ -2275,31 +2306,31 @@ $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' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก
@@ -2311,21 +2342,21 @@ $1',
 
 # 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
@@ -2335,8 +2366,8 @@ $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 หน้าที่ถูกก่อกวน)',
+'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à¹\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' => 'หมายเลขไอพีหรือชื่อผู้ใช้',
 'ipbexpiry' => 'หมดอายุ',
 'ipbreason' => 'เหตุผล:',
@@ -2350,10 +2381,10 @@ $1',
 ** ก่อกวนผู้อื่น
 ** ชื่อผู้ใช้ที่ไม่สุภาพหรือไม่ควรใช้',
 'ipb-hardblock' => 'ป้องกันไม่ให้ผู้ใช้ล็อกอินแก้ไขจากหมายเลขไอพีนี้',
-'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้',
+'ipbcreateaccount' => 'ป้องกันการสร้างบัญชี',
+'ipbemailban' => 'à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89สà¹\88à¸\87อีà¹\80มล',
+'ipbenableautoblock' => 'à¸\9aลà¹\87อà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eีลà¹\88าสุà¸\94à¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\83à¸\8aà¹\89 à¸\97ัà¹\89à¸\87à¸\97ุà¸\81หมายà¹\80ลà¸\82à¹\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 ชั่วโมง: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' => 'เลือกเวลา',
@@ -2366,29 +2397,29 @@ $1',
 'badipaddress' => 'หมายเลขไอพีไม่ถูกต้อง',
 'blockipsuccesssub' => 'บล็อกสำเร็จ',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ถูกบล็อก<br />
-ดู[[Special:BlockList|รายการบล็อกไอพี]]เพื่อตรวจสอบการบล็อก',
+ดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก',
 'ipb-blockingself' => 'คุณกำลังทำการบล็อกตัวคุณเอง คุณแน่ใจแล้วหรือว่าต้องการทำเช่นนั้น',
 'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก',
 'ipb-unblock-addr' => 'เลิกบล็อก $1',
 'ipb-unblock' => 'เลิกบล็อกผู้ใช้หรือหมายเลขไอพี',
 '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à¹\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' => 'สืบค้น',
@@ -2408,7 +2439,7 @@ $1',
 '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à¹\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' => 'ผู้ใช้นี้ถูกสกัดกั้นมาก่อน
 ปูมการสกัดกั้นแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:',
@@ -2416,7 +2447,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',
@@ -2430,10 +2461,10 @@ $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' => 'มีข้อผิดพลาด: หมายเลขไอพี $1 ไม่ได้ถูกระงับโดยตรงและไม่สามารถยกเลิกการระงับโดยตรงได้.  อย่างไรก็ตาม ไอพีนี้ถูกระงับในฐานะที่เป็นส่วนหนึ่งของหมายเลขไอพีในช่วง $2 ซึ่งสามารถยกเลิกการระงับได้',
@@ -2447,7 +2478,7 @@ $1',
 'sorbsreason' => 'หมายเลขไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์',
 'sorbs_create_account_reason' => 'หมายเลขไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน 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' => 'คุณไม่ได้รับอนุญาตให้ปลดบล็อกตนเอง',
 
@@ -2460,11 +2491,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' => 'ฐานข้อมูลไม่ได้ล็อก',
@@ -2472,14 +2503,17 @@ $1',
 # Move page
 'move-page' => 'ย้าย $1',
 'move-page-legend' => 'เปลี่ยนชื่อ',
-'movepagetext' => "ใช้แบบฟอร์มด้านล่างในการเปลี่ยนชื่อหน้า ซึ่งประวัติการแก้ไขของหน้านี้จะถูกย้ายตามไปด้วย
-นอกจากนี้ชื่อของหน้าเดิมจะถูกเปลี่ยนเป็นหน้าเปลี่ยนทาง ซึ่งหน้าที่ลิงก์มายังหน้าเก่าจะลิงก์ต่อมาที่หน้าใหม่ แต่ยังคงที่ชื่อเดิม
-อย่าลืมตรวจสอบหน้าเปลี่ยนทางซ้ำซ้อนที่อาจจะเกิดขึ้น
+'movepagetext' => "การใช้แบบด้านล่างจะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่
+ชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่
+ให้แน่ใจว่า ตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
+คุณจะเป็นผู้รับผิดชอบเพื่อให้แน่ใจว่าลิงก์ต่าง ๆ ยังชี้ไปยังที่ที่สมควร
 
-การเปลี่ยนชื่อจะ'''ไม่'''สามารถเปลี่ยนทับชื่อเดิมได้ หากหน้านั้นไม่ใช่หน้าว่างหรือหน้าเปลี่ยนทาง
+โปรดทราบว่าหน้าดังกล่าวจะ'''ไม่'''ถูกย้าย ถ้ามีหน้าที่ใช้ชื่อเรื่องใหม่อยู่แล้ว เว้นแต่เป็นหน้าว่างหรือหน้าเปลี่ยนทาง และไม่มีประวัติการแก้ไขในอดีต
+ซึ่งหมายความว่า คุณสามารถเปลี่ยนชื่อหน้ากลับเป็นชื่อเดิมได้หากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้
 
-<b>คำเตือน!</b>
-การเปลี่ยนชื่อจะมีผลอย่างมากกับสถิติของหน้านิยมที่มีคนเข้าดูมาก ให้แน่ใจว่าต้องการเปลี่ยนชื่อในครั้งนี้",
+'''คำเตือน!'''
+สิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม
+โปรดแน่ใจว่าคุณเข้าใจถึงผลลัพธ์นี้ก่อนที่จะดำเนินการต่อไป",
 'movepagetext-noredirectfixer' => "การใช้แบบด้านล่างจะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่
 ชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่
 ให้แน่ใจว่า ตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
@@ -2491,29 +2525,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 หน้า)',
@@ -2521,21 +2555,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 ได้',
@@ -2547,9 +2581,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]] มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง การย้ายไฟล์ที่มีชื่อเรื่องนี้อาจจะเป็นการเขียนทับไฟล์เดิมในคลังเก็บได้',
@@ -2589,7 +2623,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' => 'ไป',
 
@@ -2603,13 +2637,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' => 'นำเข้า',
@@ -2619,16 +2653,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' => 'อัปโหลดไฟล์ข้อมูลนำเข้าไม่สำเร็จ
@@ -2647,7 +2681,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|รุ่นการแก้ไข|รุ่นการแก้ไข}}',
@@ -2676,14 +2710,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' => 'เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา',
@@ -2691,36 +2725,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' => 'ใส่คำอธิบายอย่างย่อสั้น ๆ',
@@ -2738,6 +2773,11 @@ $1',
 'vector.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */',
 'print.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ข้อมูลส่งออกเป็นสิ่งพิมพ์ */',
 'handheld.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่อุปกรณ์เคลื่อนที่ โดยขึ้นอยู่กับสกินที่ตั้งค่าไว้ใน $wgHandheldStyle */',
+'noscript.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ปิดการใช้งานจาวาสคริปต์ */',
+'group-autoconfirmed.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทั่วไปเท่านั้น */',
+'group-bot.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่บอตเท่านั้น */',
+'group-sysop.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลเท่านั้น */',
+'group-bureaucrat.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลสิทธิแต่งตั้งเท่านั้น */',
 
 # Scripts
 'common.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทุกคนในทุกหน้า */',
@@ -2750,6 +2790,10 @@ $1',
 'simple.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินซิมเปิล */',
 'modern.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโมเดิร์น */',
 'vector.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */',
+'group-autoconfirmed.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทั่วไปเท่านั้น */',
+'group-bot.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่บอตเท่านั้น */',
+'group-sysop.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ดูแลเท่านั้น */',
+'group-bureaucrat.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ดูแลสิทธิแต่งตั้งเท่านั้น */',
 
 # Metadata
 'notacceptable' => 'เซิร์ฟเวอร์ของวิกิไม่สามารถให้ข้อมูลในรูปแบบที่ไคลเอนต์สามารถอ่านได้',
@@ -2776,10 +2820,40 @@ $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-category-info' => 'ข้อมูลหมวดหมู่',
+'pageinfo-category-pages' => 'จำนวนหน้า',
+'pageinfo-category-subcats' => 'จำนวนหมวดหมู่ย่อย',
+'pageinfo-category-files' => 'จำนวนไฟล์',
 
 # Skin names
 'skinname-standard' => 'คลาสสิก',
@@ -2794,7 +2868,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' => 'การตรวจสอบหน้าปรับปรุงล่าสุดปิดใช้งาน',
@@ -2804,19 +2878,19 @@ $1',
 'markedaspatrollederror-noautopatrol' => 'คุณไม่สามารถทำเครื่องหมายการแก้ไขของคุณเองว่าตรวจสอบแล้ว',
 
 # Patrol log
-'patrol-log-page' => 'à¸\9aัà¸\99à¸\97ึà¸\81การตรวจสอบ',
+'patrol-log-page' => 'à¸\9bูมการตรวจสอบ',
 'patrol-log-header' => 'หน้านี้คือบันทึกรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว',
-'log-show-hide-patrol' => '$1 à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¸\95รวà¸\88à¸\95รา',
+'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
@@ -2832,7 +2906,7 @@ $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',
 'show-big-image' => 'ความละเอียดสูงสุด',
 'show-big-image-other' => 'อื่นๆ {{PLURAL:$2|resolution|resolutions}}: $1.',
@@ -2841,7 +2915,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' => 'แกลลอรีภาพใหม่',
@@ -2856,7 +2930,18 @@ $1',
 'sp-newimages-showfrom' => 'แสดงภาพใหม่เริ่มต้นจาก $2, $1',
 
 # 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' => '$1 เดือน',
+'years' => '$1 ปี',
 'ago' => '$1 มาแล้ว',
+'just-now' => 'เมื่อสักครู่นี้',
 
 # Bad image list
 'bad_image_list' => 'รูปแบบแสดงต่อไปนี้:
@@ -2943,6 +3028,7 @@ $1',
 'exif-lightsource' => 'แสง',
 'exif-flash' => 'แฟลช',
 'exif-focallength' => 'ระยะโฟกัส',
+'exif-focallength-format' => '$1 มม.',
 'exif-subjectarea' => 'จุดวัตถุ',
 'exif-flashenergy' => 'พลังงานแฟลช',
 'exif-focalplanexresolution' => 'ความละเอียระนาบโฟกัส X',
@@ -3187,7 +3273,7 @@ $1',
 'confirmemail_send' => 'ส่งรหัสยืนยันผ่านทางอีเมล',
 'confirmemail_sent' => 'อีเมลยืนยันได้ส่งเรียบร้อย',
 'confirmemail_oncreate' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมล อย่างไรก็ตามรหัสนี้ไม่จำเป็นสำหรับการล็อกอิน เว้นเสียแต่ว่าต้องการใช้คำสั่งพิเศษในด้านอีเมลของวิกินี้',
-'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}}ภาษาไทยไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
+'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}} ไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
 กรุณาตรวจสอบอีเมลว่าถูกต้อง และไม่มีอักขระที่ไม่สามารถใช้ได้
 
 ข้อความตีกลับ: $1',
@@ -3247,7 +3333,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
@@ -3257,7 +3343,7 @@ $5
 
 # action=watch/unwatch
 'confirm-watch-button' => 'ตกลง',
-'confirm-watch-top' => 'เพิ่มหน้านี้เข้าไปยังรายการเฝ้าดูของคุณ?',
+'confirm-watch-top' => 'เพิ่มหน้านี้เข้าไปยังรายการเฝ้าดูของคุณหรือไม่',
 'confirm-unwatch-button' => 'ตกลง',
 'confirm-unwatch-top' => 'ลบหน้านี้ออกจากรายการเฝ้าดูของคุณ',
 
@@ -3289,7 +3375,23 @@ $5
 'size-bytes' => '$1 ไบต์',
 'size-kilobytes' => '$1 กิโลไบต์',
 'size-megabytes' => '$1 เมกะไบต์',
-'size-gigabytes' => '$1 กิกะไบต์',
+'size-gigabytes' => '$1 จิกะไบต์',
+'size-terabytes' => '$1 เทระไบต์',
+'size-petabytes' => '$1 เพตะไบต์',
+'size-exabytes' => '$1 เอกซะไบต์',
+'size-zetabytes' => '$1 เซตตะไบต์',
+'size-yottabytes' => '$1 ยอตตะไบต์',
+
+# Bitrate units
+'bitrate-bits' => '$1 บิตต่อวินาที',
+'bitrate-kilobits' => '$1 กิโลบิตต่อวินาที',
+'bitrate-megabits' => '$1 เมกะบิตต่อวินาที',
+'bitrate-gigabits' => '$1 จิกะบิตต่อวินาที',
+'bitrate-terabits' => '$1 เทระบิตต่อวินาที',
+'bitrate-petabits' => '$1 เพตะบิตต่อวินาที',
+'bitrate-exabits' => '$1 เอกซะบิตต่อวินาที',
+'bitrate-zetabits' => '$1 เซตตะบิตต่อวินาที',
+'bitrate-yottabits' => '$1 ยอตตะบิตต่อวินาที',
 
 # Live preview
 'livepreview-loading' => 'กำลังโหลด…',
@@ -3303,24 +3405,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' => 'ดูการเปลี่ยนแปลงที่เกี่ยวข้อง',
@@ -3352,16 +3454,18 @@ $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' => 'รุ่น',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath เส้นทางบทความ]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath เส้นทางสคริปต์]',
 
 # Special:FilePath
 'filepath' => 'พาธของไฟล์',
@@ -3387,10 +3491,10 @@ $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' => 'ผู้ใช้และสิทธิ',
@@ -3436,6 +3540,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' => 'วิกินี้กำลังประสบปัญหา',
@@ -3466,22 +3573,34 @@ $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' => 'ข้อความ:',
@@ -3495,6 +3614,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 1ed97e9..07ac792 100644 (file)
@@ -171,8 +171,8 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'newwindow' => '(täze penjirede açylýar)',
 'cancel' => 'Goýbolsun et',
 'moredotdotdot' => 'Has köp...',
-'mypage' => 'Sahypam',
-'mytalk' => 'Pikir alyşma sahypam',
+'mypage' => 'Sahypa',
+'mytalk' => 'Pikir alyşma',
 'anontalk' => 'Bu IP-niň habarlaşyklary',
 'navigation' => 'Nawigasiýa',
 'and' => '&#32;we',
@@ -193,7 +193,7 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'vector-action-move' => 'Adyny üýtget',
 'vector-action-protect' => 'Goraga al',
 'vector-action-undelete' => 'Öçürmäni yzyna al',
-'vector-action-unprotect' => 'Goragy aýyr',
+'vector-action-unprotect' => 'Goragy üýtget',
 'vector-simplesearch-preference' => 'Giňeldilen gözleg tekliplerini aç (Diňe Vector bezegi üçin)',
 'vector-view-create' => 'Döret',
 'vector-view-edit' => 'Redaktirle',
@@ -204,6 +204,7 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'namespaces' => 'At giňişlikleri',
 'variants' => 'Wariantlar',
 
+'navigation-heading' => 'Nawigasiýa menýusy',
 'errorpagetitle' => 'Säwlik',
 'returnto' => '$1.',
 'tagline' => '{{SITENAME}} saýtyndan',
@@ -229,7 +230,7 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'protect' => 'Goraga al',
 'protect_change' => 'üýtget',
 'protectthispage' => 'Sahypany gorag astyna al',
-'unprotect' => 'Goragy aýyr',
+'unprotect' => 'Goragy üýtget',
 'unprotectthispage' => 'Sahypanyň goragyny aýyr',
 'newpage' => 'Täze sahypa',
 'talkpage' => 'Sahypany ara alyp maslahatlaş',
@@ -311,6 +312,8 @@ Bu sahypany ulanmak üçin MediaWikiniň $1 wersiýasy talap edilýär. [[Specia
 'toc' => 'Mazmuny',
 'showtoc' => 'görkez',
 'hidetoc' => 'gizle',
+'collapsible-collapse' => 'Ýygna',
+'collapsible-expand' => 'Giňelt',
 'thisisdeleted' => '$1 görmek ýa-da dikeltmek isleýärsiňizmi?',
 'viewdeleted' => '$1 gör?',
 'restorelink' => '{{PLURAL:$1|bir öçürilen özgerdişi|$1 öçürilen özgerdişi}}',
@@ -423,10 +426,7 @@ Görkezilen sebäp: ''$2''.",
 
 Indi anonim ýagdaýda {{SITENAME}} saýtyny ulanyp bilersiňiz, ýa-da şol bir ýa-da başga bir at bilen <span class='plainlinks'>[$1 sessiýany ýaňadan]</span> açyp bilersiňiz.
 Web brauzeriňiziň keşini arassalaýançaňyz käbir sahypalar sessiýaňyzyň açyk wagtkysy ýaly görünip biler.",
-'welcomecreation' => '== Hoş geldiňiz, $1! ==
-
-Hasabyňyz açyldy.
-[[Special:Preferences|{{SITENAME}} saýtyndaky ileri tutmalaryňyzy]] üýtgetmegi ýatdan çykarmaň.',
+'welcomeuser' => 'Hoş geldiňiz, $1!',
 'yourname' => 'Ulanyjy adyňyz:',
 'yourpassword' => 'Parolyňyz:',
 'yourpasswordagain' => 'Paroly gaýtadan ýaz:',
@@ -530,10 +530,19 @@ Parolyňyzy eýýäm şowlulyk bilen üýtgeden ýa-da täze wagtlaýyn parol ta
 'resetpass-temp-password' => 'Wagtlaýyn parol:',
 
 # Special:PasswordReset
+'passwordreset' => 'Paroly nol et',
+'passwordreset-legend' => 'Paroly nol et',
 'passwordreset-username' => 'Ulanyjy ady:',
+'passwordreset-domain' => 'Domen:',
+'passwordreset-emailelement' => 'Ulanyjy ady: $1
+Wagtlaýyn parol: $2',
 
 # Special:ChangeEmail
+'changeemail' => 'E-poçta adresini üýtget',
+'changeemail-oldemail' => 'Häzirki e-poçta adresi:',
+'changeemail-newemail' => 'Täze e-poçta adresi:',
 'changeemail-none' => '(hiç biri)',
+'changeemail-submit' => 'E-poçtany üýtget',
 'changeemail-cancel' => 'Goýbolsun et',
 
 # Edit page toolbar
@@ -627,7 +636,7 @@ Bu ady başga sahypalarda [[Special:Search/{{PAGENAME}}|gözläp bilersiňiz]],
 ýa-da bu sahypany [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktirläp bilersiňiz]</span>.',
 'noarticletext-nopermission' => 'Häzirki wagtda bu sahypada tekst ýok.
 Bu sahypa adyny [[Special:Search/{{PAGENAME}}|başga sahypalarda gözläp]]
-ýa-da <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} degişli gündeliklerde gözleg geçirip bilersiňiz].</span>',
+ýa-da <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} degişli gündeliklerde gözleg geçirip bilersiňiz]</span>, ýöne bu sahypany döretmäge rugsadyňyz ýok.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" ulanyjy hasaby hasaba alynmandyr.
 Bu sahypany döretmek/redaktirlemek isleýän bolsaňyz, onda esewan boluň.',
 'userpage-userdoesnotexist-view' => '"$1" ulanyjy hasaby hasaba alynmandyr.',
@@ -664,6 +673,7 @@ Eger şonda-da bolmasa, onda [[Special:UserLogout|sessiýany ýapyň-da]] gaýta
 Sahypanyň tekstine zeper ýetmeginiň öňüni almak maksady bilen özgerdişiňiz ret edildi.
 Bu ýagdaý kämahal içi ýalňyşly anonim web proksileri ulanylanda ýüze çykýar.",
 'editing' => '$1 sahypasyny redaktirleýärsiňiz',
+'creating' => '"$1" sahypasy döredilýär',
 'editingsection' => '"$1" sahypasynda bölüm redaktirleýärsiňiz',
 'editingcomment' => '$1 redaktirlenýär (täze bölüm)',
 'editconflict' => 'Özgerdiş çaknyşmasy: $1',
@@ -706,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.',
@@ -731,6 +740,11 @@ Düşündiriş berilmedi.',
 'edit-already-exists' => 'Täze sahypa döredip bolanok.
 Ol eýýäm bar.',
 
+# Content models
+'content-model-wikitext' => 'wikitekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Duýduryş:''' Bu sahypada resurs talap ediji funksiýalara çakdanaşa köp çagyryş bar.
 
@@ -793,7 +807,7 @@ Wikiden öçürilen ýa-da adynyň üýtgedilen bolmagy ahmal.
 Baglanyşykly täze sahypalar üçin [[Special:Search|wikide gözleg geçirip]] görüň.',
 
 # Revision deletion
-'rev-deleted-comment' => '(teswir aýyryldy)',
+'rev-deleted-comment' => '(özgerdişiň gysgaça düşündirişi aýryldy)',
 'rev-deleted-user' => '(ulanyjy ady aýyryldy)',
 'rev-deleted-event' => '(gündelik işi aýyryldy)',
 'rev-deleted-user-contribs' => '[ulanyjy ady ýa-da IP adresi aýrylypdyr - özgerdiş goşantlardan gizlenildi]',
@@ -924,7 +938,7 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd
 'mergelogpagetext' => 'Aşakdaky sanaw sahypalaryň geçmişleriniň iň soňky birleşdirmelerini görkezýär.',
 
 # Diffs
-'history-title' => '"$1" sahypasynyň geçmişi',
+'history-title' => '"$1" — sahypa geçmişi',
 'difference-multipage' => '(Sahypalaryň arasyndaky tapawut)',
 'lineno' => 'Setir $1:',
 'compareselectedversions' => 'Saýlanan wersiýalary deňeşdir',
@@ -1008,7 +1022,7 @@ Emma olaryň {{SITENAME}} indeksleriniň möwriti geçen bolmagy mümkindir.',
 
 # Preferences page
 'preferences' => 'Ileri tutmalar',
-'mypreferences' => 'Ileri tutmalarym',
+'mypreferences' => 'Ileri tutmalar',
 'prefs-edits' => 'Özgerdiş sany:',
 'prefsnologin' => 'Sessiýa açmansyňyz',
 'prefsnologintext' => 'Ulanyjy ileri tutmalaryny üýtgetmek üçin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} sessiýa açmagyňyz gerek]</span>.',
@@ -1023,12 +1037,13 @@ Emma olaryň {{SITENAME}} indeksleriniň möwriti geçen bolmagy mümkindir.',
 'prefs-rc' => 'Soňky üýtgeşmeler',
 'prefs-watchlist' => 'Gözegçilik sanawy',
 'prefs-watchlist-days' => 'Gözegçilik sanawynda görkeziljek gün sany:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'Mmaksimum $1 {{PLURAL:$1|gün}}',
 'prefs-watchlist-edits' => 'Giňeldilen gözegçilik sanawynda görkeziljek üýtgeşmeleriň maksimum sany:',
 'prefs-watchlist-edits-max' => 'Maksimum san: 1000',
 'prefs-watchlist-token' => 'Gözegçilik sanawynyň alamaty:',
 'prefs-misc' => 'Başga',
 'prefs-resetpass' => 'Paroly üýtget',
+'prefs-changeemail' => 'E-poçta adresini üýtget',
 'prefs-email' => 'E-poçta opsiýalary',
 'prefs-rendering' => 'Daşky görnüş',
 'saveprefs' => 'Ýazdyr',
@@ -1068,7 +1083,7 @@ Gabat gelşine görä döredilen şu bahany ulanyp bilersiňiz: $1',
 'timezoneregion-indian' => 'Hindi okeany',
 'timezoneregion-pacific' => 'Ýuwaş okean',
 'allowemail' => 'Başga ulanyjylar maňa e-poçta iberip bilsin',
-'prefs-searchoptions' => 'Gözleg opsiýalary',
+'prefs-searchoptions' => 'Gözleg',
 'prefs-namespaces' => 'At giňişlikleri',
 'defaultns' => 'Bolmasa şu at giňişliklerinde gözleg geçiriň:',
 'default' => 'gaýybana',
@@ -1148,9 +1163,9 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 'group-suppress' => 'Esewançylar',
 'group-all' => '(ählisi)',
 
-'group-user-member' => 'Ulanyjy',
+'group-user-member' => '{{GENDER:$1|ulanyjy}}',
 'group-autoconfirmed-member' => 'Awtomatik tassyklanan ulanyjy',
-'group-bot-member' => 'Bot',
+'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => 'Administrator',
 'group-bureaucrat-member' => 'Býurokrat',
 'group-suppress-member' => 'Esewançy',
@@ -1222,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',
@@ -1772,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.
@@ -1828,7 +1841,7 @@ Goldanylýan protokollar: <code>$1</code>',
 
 # Watchlist
 'watchlist' => 'Gözegçilik sanawym',
-'mywatchlist' => 'Gözegçilik sanawym',
+'mywatchlist' => 'Gözegçilik sanawy',
 'watchlistfor2' => '$1 üçin  $2',
 'nowatchlist' => 'Gözegçilik sanawyňyzda hiçhili sahypa ýok.',
 'watchlistanontext' => 'Gözegçilik sanawyňyzdaky sahypalary görmek ýa-da redaktirlemek üçin $1.',
@@ -1864,11 +1877,7 @@ Aňsatlyk bilen saýlap almak üçin bolsa, [[Special:RecentChanges|soňky üýt
 
 'enotif_mailer' => '{{SITENAME}} Poçta Gullugy',
 'enotif_reset' => 'Ähli sahypalary barylyp görülen diýip belle',
-'enotif_newpagetext' => 'Bu täze sahypa.',
 'enotif_impersonal_salutation' => '{{SITENAME}} ulanyjysy',
-'changed' => 'üýtgedildi',
-'created' => 'döredildi',
-'enotif_subject' => '{{SITENAME}} sahypasy $PAGETITLE, $PAGEEDITOR tarapyndan $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Iň soňky gezek baryp göreliňiz bäri bolan ähli üýtgeşmeleri görmek üçin serediň: $1',
 'enotif_lastdiff' => 'Bu üýtgeşmäni görmek üçin serediň: $1',
 'enotif_anon_editor' => 'anonim ulanyjy $1',
@@ -1898,6 +1907,8 @@ $UNWATCHURL
 
 Seslenme we goşmaça kömek:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'döredildi',
+'changed' => 'üýtgedildi',
 
 # Delete
 'deletepage' => 'Sahypany öçür',
@@ -2081,7 +2092,7 @@ $1',
 # Contributions
 'contributions' => 'Ulanyjynyň goşantlary',
 'contributions-title' => '$1 üçin ulanyjy goşantlary',
-'mycontris' => 'Goşantlarym',
+'mycontris' => 'Goşantlar',
 'contribsub2' => '$1 ($2)',
 'nocontribs' => 'Bu kriteriýlere gabat gelýän üýtgeşme ýok.',
 'uctop' => '(iň soňky)',
@@ -2122,7 +2133,7 @@ Salgylanmak üçin iň soňky blokirleme gündeligi ýazgysy aşakda berilýär:
 'whatlinkshere-hideredirs' => 'gönükdirmeleri $1',
 'whatlinkshere-hidetrans' => 'Atanaklaýyn girizmeleri $1',
 'whatlinkshere-hidelinks' => 'çykgytlary $1',
-'whatlinkshere-hideimages' => 'surat çykgytlaryny $1',
+'whatlinkshere-hideimages' => 'Faýl çykgytlaryny $1',
 'whatlinkshere-filters' => 'Filtrler',
 
 # Block/unblock
@@ -3142,6 +3153,7 @@ Faýlyň adyny "{{ns:file}}:" pristawkasyz giriziň.',
 '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 45104e7..3d46a16 100644 (file)
@@ -195,7 +195,7 @@ $messages = array(
 
 'underline-always' => 'Palagi',
 'underline-never' => 'Hindi magpakailanman',
-'underline-default' => 'Tinakda ng pambasa-basa',
+'underline-default' => 'Tinakda ng pambasa-basa o balat',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Baguhin ang estilong pantitik ng lugar:',
@@ -284,7 +284,7 @@ $messages = array(
 'cancel' => 'Kanselahin',
 'moredotdotdot' => 'Damihan pa...',
 'mypage' => 'Pahina ko',
-'mytalk' => 'Usapan ko',
+'mytalk' => 'Usapan',
 'anontalk' => 'Usapan para sa IP na ito',
 'navigation' => 'Paglilibot (nabigasyon)',
 'and' => ',&#32;at',
@@ -567,9 +567,6 @@ 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'').",
-'welcomecreation' => '== Maligayang pagdating, $1! ==
-Nilikha na ang iyong kuwenta.
-Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SITENAME}}]].',
 'yourname' => 'Bansag:',
 'yourpassword' => 'Hudyat:',
 'yourpasswordagain' => 'Hudyat mo uli:',
@@ -865,10 +862,11 @@ Tandaang gumagamit ang pinasadyang mga pahinang .css at .js ng mga pamagat na ma
 'note' => "'''Paunawa:'''",
 'previewnote' => "'''Tandaan na isa lamang itong paunang tingin.'''
 Hindi pa nasasagip ang mga binago mo!",
-'continue-editing' => 'Ipagpatuloy ang pamamatnugot',
+'continue-editing' => 'Pumunta sa pook ng pamamatnugot',
 'previewconflict' => 'Ipinamamalas ng paunang tinging ito ang teksto sa loob ng pangitaas na pook-patnugutan ng teksto ayon sa lilitaw na anyo nito kapag pinili mo ang pagsagip.',
-'session_fail_preview' => "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng sesyon ng datos.
-Paki ulit muli. Kung hindi ito gumana, subukang umalis sa pagkalagda at bumalik muli.'''",
+'session_fail_preview' => "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.'''
+Pakiulit muli.
+Kung hindi ito gumana, subukang [[Special:UserLogout|umalis sa pagkalagda]] at bumalik muli.",
 'session_fail_preview_html' => "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.'''
 
 ''Dahil naka-andar ang hilaw na HTML sa {{SITENAME}}, nakatago ang paunang tingin bilang pag-iingat sa mga paglusob ng JavaScript.''
@@ -925,7 +923,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.',
@@ -951,6 +948,9 @@ Tila binura na ito.',
 Umiiral na ito.',
 'defaultmessagetext' => 'Nakatakdang teksto ng mensahe',
 
+# Content models
+'content-model-text' => 'purong teksto',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Babala: Naglalaman ang pahinang ito ng napakaraming mamahaling mga tawag na pantungkulin.
 
@@ -1238,7 +1238,7 @@ Subuking lagyan ng unlapi/paunang ''all:'' upang hanapin ang lahat ng mga nialal
 
 # Preferences page
 'preferences' => 'Mga kagustuhan',
-'mypreferences' => 'Mga nais ko',
+'mypreferences' => 'Mga nais',
 'prefs-edits' => 'Bilang ng mga pagbabago:',
 'prefsnologin' => 'Hindi nakalagda/nakatala',
 'prefsnologintext' => 'Kailangan mong <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} lumagda/tumala]</span> para makapagtakda ng mga kagustuhang ng tagagamit.',
@@ -1299,7 +1299,7 @@ Subuking lagyan ng unlapi/paunang ''all:'' upang hanapin ang lahat ng mga nialal
 'timezoneregion-indian' => 'Karagatang Indyano',
 'timezoneregion-pacific' => 'Karagatang Pasipiko',
 'allowemail' => 'Pahintulutan ang e-liham mula sa ibang mga tagagamit',
-'prefs-searchoptions' => 'Mga pagpipilian para sa paghahanap',
+'prefs-searchoptions' => 'Paghahanap',
 'prefs-namespaces' => 'Mga espasyo ng pangalan',
 'defaultns' => 'O kaya maghanap sa mga pangalan ng espasyong ito:',
 'default' => 'Likas na pagtatakda',
@@ -1467,12 +1467,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',
@@ -1713,6 +1714,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.',
@@ -2122,10 +2124,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.
@@ -2186,7 +2184,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.',
@@ -2222,11 +2220,7 @@ Makikita doon ang lahat ng mga susunod na pagbabago sa pahinang ito pati na ang
 
 'enotif_mailer' => 'Tagapagpadala ng mga Pahayag ng {{SITENAME}}',
 'enotif_reset' => 'Tatakan ang lahat ng pahina bilang nadalaw na',
-'enotif_newpagetext' => 'Isa itong bagong pahina.',
 'enotif_impersonal_salutation' => 'Tagagamit ng {{SITENAME}}',
-'changed' => 'binago',
-'created' => 'nilikha',
-'enotif_subject' => 'Ang pahinang $PAGETITLE sa {{SITENAME}} ay $CHANGEDORCREATED ni $PAGEEDITOR',
 'enotif_lastvisited' => 'Tingnan ang $1 para sa lahat ng mga pagbabago magmula noong huling pagdalaw mo.',
 'enotif_lastdiff' => 'Tingnan ang $1 para makita ang pagbabagong ito.',
 'enotif_anon_editor' => 'hindi nakikilalang tagagamit $1',
@@ -2260,6 +2254,8 @@ $UNWATCHURL
 
 Tugon at karagdagang tulong:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'nilikha',
+'changed' => 'binago',
 
 # Delete
 'deletepage' => 'Burahin ang pahina',
@@ -2444,9 +2440,9 @@ $1',
 'blanknamespace' => '(Pangunahin)',
 
 # Contributions
-'contributions' => 'Mga ambag ng tagagamit',
+'contributions' => 'Mga ambag ng {{GENDER:$1|tagagamit}}',
 'contributions-title' => 'Mga ambag ng tagagamit na si $1',
-'mycontris' => 'Mga ambag ko',
+'mycontris' => 'Mga ambag',
 'contribsub2' => 'Para kay $1 ($2)',
 'nocontribs' => 'Walang pagbabagong nakita sa binigay na kondisyon.',
 'uctop' => ' (itaas)',
@@ -2488,7 +2484,7 @@ Ang pinakahuling entrada sa talaan  ng pagharang ay ibinigay sa ibaba para sa pa
 'whatlinkshere-hideredirs' => '$1 mga pagturo/pagpapanuto',
 'whatlinkshere-hidetrans' => '$1 paglipat-sali (transklusyon)',
 'whatlinkshere-hidelinks' => '$1 mga kawing',
-'whatlinkshere-hideimages' => '$1 mga kawing ng/sa larawan',
+'whatlinkshere-hideimages' => '$1 kawing ng/sa talaksan',
 'whatlinkshere-filters' => 'Mga pansala',
 
 # Block/unblock
@@ -2984,6 +2980,7 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 
 # Info page
 'pageinfo-title' => 'Kabatiran para sa "$1"',
+'pageinfo-not-current' => 'Maaari lamang ipakita ang impormasyon para sa kasalukuyang rebisyon.',
 'pageinfo-header-basic' => 'Saligang kabatiran',
 'pageinfo-header-edits' => 'Kasaysayan ng pamamatnugot',
 'pageinfo-header-restrictions' => 'Pruteksiyon ng pahina',
@@ -4040,11 +4037,12 @@ Ipinapakita ang mga larawan sa buong kalinawan, tuwirang sinisimulan ang ibang u
 'logentry-move-move_redir-noredirect' => 'Inilipat ni $1 ang pahinang $3 papunta sa $4 sa ibabaw ng isang pagpapunta sa iba na hindi nag-iiwan ng isang pagpapapunta sa iba',
 'logentry-patrol-patrol' => 'Minarkahan ni $1 ang rebisyong $4 ng pahinang $3 bilang napatrolya na',
 'logentry-patrol-patrol-auto' => 'Kusang minarkahan ni $1 ang rebisyong $4 ng pahinang $3 bilang napatrolya na',
-'logentry-newusers-newusers' => 'Lumikha si $1 ng isang akawnt ng tagagamit',
-'logentry-newusers-create' => 'Lumikha si $1 ng isang akawnt ng tagagamit',
-'logentry-newusers-create2' => 'Lumikha si $1 ng isang akawnt ng tagagamit na $3',
+'logentry-newusers-newusers' => 'Nilikha ang kuwenta ng tagagamit na $1',
+'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 c405f16..e9d5c1b 100644 (file)
@@ -252,8 +252,8 @@ $messages = array(
 'newwindow' => '(нујә пенҹәдә окардеј)',
 'cancel' => 'Ләғв кардеј',
 'moredotdotdot' => 'Веј...',
-'mypage' => 'ЧÑ\8bмÑ\8b Ñ\81әһифә',
-'mytalk' => 'ЧÑ\8bмÑ\8b Ð¼Ñ\8bзокиÑ\80Ó\99 Ñ\81Ó\99һиÑ\84Ó\99',
+'mypage' => 'Сәһифә',
+'mytalk' => 'Ð\9cÑ\8bзокиÑ\80он',
 'anontalk' => 'Бо ын IP-унвони мызокирә',
 'navigation' => 'Навигасијә',
 'and' => '&#32;ијән',
@@ -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' => 'Сәһв',
@@ -486,6 +486,7 @@ $messages = array(
 'savearticle' => 'Сәһифә огәтеј',
 'preview' => 'Сыфтәнә нишо дој',
 'showpreview' => 'Сыфтәнә нишо дој',
+'showlivepreview' => 'Товинә сыфтәнә нишо дој',
 'showdiff' => 'Дәғандә быә дәгишон',
 'anoneditwarning' => "'''Дығғәт.''' Шымә ыштәни едәштәнијоне системәдә.
 Шымә IP-унвон бә ым сәһифә дәгишон тарых ғејд бәбе.",
@@ -563,6 +564,10 @@ $messages = array(
 'revdel-restore-deleted' => 'Рәдд кардә быә рәвојәтон',
 'revdel-restore-visible' => 'Чијә рәвојәтон',
 'pagehist' => 'Сәһифә тарых',
+'revdelete-reasonotherlist' => 'Ҹо сәбәб',
+
+# History merging
+'mergehistory-reason' => 'Сәбәб:',
 
 # Merge log
 'revertmerge' => 'Бахш кардеј',
@@ -583,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' => 'Мултимедијә',
@@ -600,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'''",
@@ -627,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-номә',
@@ -641,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' => 'Ым сәһифә сәрост кардеј',
 
@@ -766,9 +777,6 @@ $messages = array(
 # Special:LinkSearch
 'linksearch-line' => '$2-ку сәбон вардә бә $1',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Иштирокәкон ғеидијоти журнал',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(иштирокәкон сијоһи)',
 
@@ -777,7 +785,7 @@ $messages = array(
 
 # Watchlist
 'watchlist' => 'Чымы ноғо доә сијоһи',
-'mywatchlist' => 'Чымы ноғо доә сијоһи',
+'mywatchlist' => 'Чәшәвәно кардә сијоһи',
 'watchlistfor2' => 'Бо $1 $2',
 'watch' => 'Думотоно егыниеј',
 'unwatch' => 'Думотоно ныегыниеј',
@@ -812,9 +820,9 @@ $messages = array(
 'blanknamespace' => '(Әсос)',
 
 # Contributions
-'contributions' => 'Иштирокәкә гәнҹ',
+'contributions' => '{{GENDER:$1|Иштирокәкә}} гәнҹ',
 'contributions-title' => 'Иштирокәкә гәнҹ $1',
-'mycontris' => 'ЧÑ\8bмÑ\8b Ð³әнҹ',
+'mycontris' => 'Ð\93әнҹ',
 'contribsub2' => 'Гәнҹ $1 ($2)',
 'uctop' => '(охонәни)',
 'month' => 'Че мангику (һәнијән рә):',
@@ -845,7 +853,7 @@ $messages = array(
 'whatlinkshere-hideredirs' => '$1 бә тожә унвон вығандеј',
 'whatlinkshere-hidetrans' => '$1 әловон',
 'whatlinkshere-hidelinks' => '$1 сәбонон',
-'whatlinkshere-hideimages' => '$1 Ñ\81Ó\99бонон Ð±Ð¾ Ñ\88икилон',
+'whatlinkshere-hideimages' => '$1 Ñ\84аÑ\98линÓ\99 Ñ\81Ó\99бонон',
 'whatlinkshere-filters' => 'Филтрон',
 
 # Block/unblock
index c203762..afaeb6c 100644 (file)
@@ -262,9 +262,6 @@ For translations, please consider using [//translatewiki.net/wiki/Main_Page?setl
 
 E lava te ke hoko atu ʻo ngāueʻaki he {{SITENAME}} tatau mo e ʻetita taʻehingoa, pe te ke kau-ki-ai mo e hingoa tatau pe hingoa kehe.
 Tokanga, mahalo pē ʻe ʻi ai ha ngaahi peesi ʻoku ʻasi ko koe kei kau-ki-ai aʻu ki he taimi te ke fakaʻatā ʻa e fafaʻo fakapalausa.",
-'welcomecreation' => '== Tali fiefia, $1! ==
-
-Kuo fakatupu hoʻo tohi kau-ki-ai. ʻOua ʻe ngalo ke liliu hoʻo faʻiteliha {{SITENAME}}.',
 'yourname' => 'Hingoa ʻetita',
 'yourpassword' => 'Leatapu',
 'yourpasswordagain' => 'Toe ʻai leatapu',
@@ -388,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
@@ -499,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',
@@ -731,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',
@@ -781,9 +776,8 @@ 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...',
 
-'enotif_newpagetext' => 'Ko e peesi foʻou ia.',
-'changed' => 'ʻosi liliu',
 'created' => 'kuo fakatupu',
+'changed' => 'ʻosi liliu',
 
 # Delete
 'deletepage' => 'Tāmateʻi peesi',
@@ -1235,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 c05c6fd..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)',
@@ -653,12 +652,10 @@ Sapos yu laik rausim dispela pes long lukautbuk bilong yu bihain, paitim \"Pinis
 'unwatching' => 'Wet liklik, i raus nau long lukautbuk...',
 
 'enotif_reset' => 'Makim olgeta pes olsem mi lukim pinis',
-'enotif_newpagetext' => 'Dispela emi nupela pes.',
 'enotif_impersonal_salutation' => 'yusa long {{SITENAME}}',
-'changed' => 'i senisim',
-'created' => 'i kirapim',
-'enotif_subject' => '$PAGEEDITOR $CHANGEDORCREATED pes $PAGETITLE long {{SITENAME}}',
 'enotif_anon_editor' => 'IP yusa $1',
+'created' => 'i kirapim',
+'changed' => 'i senisim',
 
 # Delete
 'deletepage' => 'Rausim dispela pes',
@@ -885,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 143affb..a9b015f 100644 (file)
@@ -396,7 +396,7 @@ $messages = array(
 
 'underline-always' => 'Daima',
 'underline-never' => 'Asla',
-'underline-default' => 'Tarayıcı varsayılanı',
+'underline-default' => 'Tema ya da tarayıcı varsayılanı',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Düzenleme alanının yazı tipi:',
@@ -481,8 +481,8 @@ $messages = array(
 'newwindow' => '(yeni bir pencerede açılır)',
 'cancel' => 'İptal',
 'moredotdotdot' => 'Daha...',
-'mypage' => 'sayfam',
-'mytalk' => 'Mesaj sayfam',
+'mypage' => 'Sayfa',
+'mytalk' => 'Mesaj',
 'anontalk' => "Bu IP'nin iletileri",
 'navigation' => 'Gezinti',
 'and' => '&#32;ve',
@@ -514,6 +514,7 @@ $messages = array(
 'namespaces' => 'Ad alanları',
 'variants' => 'Türevler',
 
+'navigation-heading' => 'Dolaşım menüsü',
 'errorpagetitle' => 'Hata',
 'returnto' => '$1 sayfasına geri dön.',
 'tagline' => '{{SITENAME}} sitesinden',
@@ -722,7 +723,7 @@ Sorgu: $2',
 'actionthrottled' => 'Eylem kısılmışdır',
 'actionthrottledtext' => 'Anti-spam önlemleri nedeniyle, bir eylemi kısa bir zaman aralığında çok defa yapmanız kısıtlandı, ve siz sınırı aşmış bulunmaktasınız.
 Lütfen birkaç dakika sonra yeniden deneyin.',
-'protectedpagetext' => 'Bu sayfa değişiklik yapılmaması için koruma altına alınmıştır.',
+'protectedpagetext' => 'Bu sayfa değişiklik ya da diğer eylemlerin yapılmasını engellemek için koruma altına alınmıştır.',
 'viewsourcetext' => 'Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:',
 'viewyourtext' => "Bu sayfaya '''yaptığınız değişikliklerin''' kaynağını görünteleyip kopyalayabilirsiniz:",
 'protectedinterface' => "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır. Eklemek ya da bütün vikilerdeki çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
@@ -750,9 +751,8 @@ Verilen sebep: ''$2''.",
 
 Şimdi anonim olarak {{SITENAME}} sitesini kullanmaya devam edebilirsiniz ya da aynı kullanıcı adıyla ya da ister başka bir kullanıcı adıyla <span class='plainlinks'>[$1 yeniden oturum açabilirsiniz]</span>.
 Tarayıcınızın önbelleğini temizleyene kadar bazı sayfalar sanki hâlâ oturumunuz açıkmış gibi görünebilir.",
-'welcomecreation' => '== Hoş geldin, $1! ==
-
-Hesabınız açıldı.
+'welcomeuser' => 'Hoş geldin $1!',
+'welcomecreation-msg' => 'Hesabınız açıldı.
 [[Special:Preferences|{{SITENAME}} tercihlerinizi]] değiştirmeyi unutmayın.',
 'yourname' => 'Kullanıcı adı:',
 'yourpassword' => 'Parola:',
@@ -1075,7 +1075,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.',
@@ -1272,7 +1271,7 @@ Lütfen günlükleri kontrol edin.',
 # Suppression log
 'suppressionlog' => 'Gizleme kayıtları',
 'suppressionlogtext' => 'Aşağıdaki, hizmetlilerden gizlenen içerik içeren silinmelerin ve engellemelerin listesidir.
-Şu anda işlevsel olan yasak ve engellemelerin listesi için [[Special:BlockList|IP engelleme listesine]] bakın.',
+Şu anda işlevsel olan yasak ve engellemelerin listesi için [[Special:BlockList|engelleme listesine]] bakın.',
 
 # History merging
 'mergehistory' => 'Sayfa geçmişlerini takas et.',
@@ -1391,7 +1390,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 
 # Preferences page
 'preferences' => 'Tercihler',
-'mypreferences' => 'Tercihlerim',
+'mypreferences' => 'Tercihler',
 'prefs-edits' => 'Değişiklik sayısı:',
 'prefsnologin' => 'Oturum açık değil',
 'prefsnologintext' => 'Kullanıcı tercihlerinizi ayarlamak için <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} giriş yapmalısınız]</span>.',
@@ -1466,9 +1465,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 +1615,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',
@@ -1888,7 +1888,7 @@ Güvenlik denetimi uygun bir şekilde gerçekleştirilemiyor.',
 'img-auth-accessdenied' => 'Erişim engellendi',
 'img-auth-nopathinfo' => 'Eksik PATH_INFO.
 Sunucunuz bu bilgiyi geçirmek için ayarlanmamış.
-CGI-tabanlı olabilir ve img_auth desteklenmiyor olabilir.
+CGI-tabanlı ve img_auth desteklenmiyor olabilir.
 https://www.mediawiki.org/wiki/Manual:Image_Authorization sayfasına bakın.',
 'img-auth-notindir' => 'İstenen yol yapılandırılmış yükleme dizininde değil.',
 'img-auth-badtitle' => '"$1" ile geçerli bir başlık yapılamıyor.',
@@ -2082,6 +2082,7 @@ Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bayt|bayt}}',
 'ncategories' => '{{PLURAL:$1|kategori|kategoriler}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interviki|interviki}}',
 'nlinks' => '$1 {{PLURAL:$1|bağlantı|bağlantılar}}',
 'nmembers' => '{{PLURAL:$1|üye|üye}}',
 'nrevisions' => '{{PLURAL:$1|değişiklik|değişiklikler}}',
@@ -2223,10 +2224,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
 
 # Watchlist
 'watchlist' => 'İzleme listem',
-'mywatchlist' => 'İzleme listem',
+'mywatchlist' => 'İzleme listesi',
 'watchlistfor2' => '$1 için $2',
 'nowatchlist' => 'İzleme listesinde hiçbir madde bulunmuyor.',
 'watchlistanontext' => 'Lütfen izleme listenizdeki maddeleri görmek ya da değiştirmek için $1.',
@@ -2326,11 +2323,7 @@ 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_newpagetext' => 'Yeni bir sayfa.',
 'enotif_impersonal_salutation' => '{{SITENAME}} kullanıcı',
-'changed' => 'değiştirildi',
-'created' => 'oluşturuldu',
-'enotif_subject' => '{{SITENAME}} sayfası $PAGETITLE, $PAGEEDITOR tarafından $CHANGEDORCREATED',
 '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',
@@ -2359,6 +2352,8 @@ $UNWATCHURL
 
 Geri bildirim ve daha fazla yardım için:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oluşturuldu',
+'changed' => 'değiştirildi',
 
 # Delete
 'deletepage' => 'Sayfayı sil',
@@ -2510,7 +2505,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.",
@@ -2540,9 +2536,9 @@ $1',
 'blanknamespace' => '(Ana)',
 
 # Contributions
-'contributions' => 'Kullanıcının katkıları',
+'contributions' => '{{GENDER:$1|Kullanıcı}} katkıları',
 'contributions-title' => '$1 için kullanıcı katkıları',
-'mycontris' => 'Katkılarım',
+'mycontris' => 'Katkılar',
 'contribsub2' => '$1 ($2)',
 'nocontribs' => 'Bu kriterlere uyan değişiklik bulunamadı',
 'uctop' => '(son)',
@@ -2582,7 +2578,7 @@ Son engelleme günlüğü girdisi kaynak amacıyla aşağıda verilmiştir:',
 'whatlinkshere-hideredirs' => 'Yönlendirmeleri $1',
 'whatlinkshere-hidetrans' => 'Dönüştürmeleri $1',
 'whatlinkshere-hidelinks' => 'Bağlantıları $1',
-'whatlinkshere-hideimages' => 'Resim bağlantılarını $1',
+'whatlinkshere-hideimages' => 'Dosya bağlantılarını $1',
 'whatlinkshere-filters' => 'Süzgeçler',
 
 # Block/unblock
@@ -2621,8 +2617,8 @@ Son engelleme günlüğü girdisi kaynak amacıyla aşağıda verilmiştir:',
 'ipb-confirm' => 'Engeli onayla',
 'badipaddress' => 'Geçersiz IP adresi',
 'blockipsuccesssub' => 'IP adresi engelleme işlemi başarılı oldu',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] engellendi.
-<br />Engellemeleri gözden geçirmek için [[Special:BlockList|IP adresi engellenenler]] listesine bakınız.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] engellendi.<br />
+Engellemeleri gözden geçirmek için [[Special:BlockList|engel listesine]] bakınız.',
 'ipb-blockingself' => 'Kendinizi engellemek üzeresiniz! Bunu yapmak istediğinizden emin misiniz?',
 'ipb-confirmhideuser' => '"Kullanıcıyı gizle" seçiliyken bir kullanıcı engellemek üzeresiniz. Bu, kullanıcının adını tüm listeler ile günlük girişlerinde bastıracaktır. Bunu yapmak istediğinizden emin misiniz?',
 'ipb-edit-dropdown' => 'Engelleme nedenleri düzenle',
@@ -2673,7 +2669,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',
@@ -2923,6 +2919,7 @@ Geçici dosya kayıp.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript denemesi',
+'javascripttest-title' => '$1 testleri çalışıyor',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Kullanıcı sayfanız',
@@ -3033,6 +3030,7 @@ Geçici dosya kayıp.',
 'pageinfo-default-sort' => 'Varsayılan sıralama anahtarı',
 'pageinfo-length' => 'Sayfa uzunluğu (bayt cinsinden)',
 'pageinfo-article-id' => 'Sayfa ID',
+'pageinfo-language' => 'Sayfa içeriğinin dili',
 'pageinfo-robot-policy' => 'Arama motoru durumu',
 'pageinfo-robot-index' => 'İndekslenebilir',
 'pageinfo-robot-noindex' => 'İndekslenemez',
@@ -3058,6 +3056,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',
@@ -3108,6 +3109,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.',
@@ -3140,6 +3142,7 @@ Bunu çalıştırmak, sisteminizi tehlikeye atabilir.",
 'hours' => '{{PLURAL:$1|$1 saat|$1 saat}}',
 'days' => '{{PLURAL:$1|$1 gün|$1 gün}}',
 'ago' => '$1 önce',
+'just-now' => 'Hemen şimdi',
 
 # Bad image list
 'bad_image_list' => 'Biçim aşağıdaki gibidir:
@@ -3302,6 +3305,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',
@@ -3888,11 +3892,12 @@ Resimler tam çözünürlükte görüntülenir, diğer dosya tipleri ilgili prog
 'logentry-move-move-noredirect' => '$1 $3 sayfasını $4 sayfasına yönlendirme olmaksızın taşıdı',
 'logentry-move-move_redir' => '$1 $3 sayfasını $4 sayfasına yönlendirme üzerinden taşıdı',
 'logentry-patrol-patrol-auto' => '$1 $3 sayfasını $4 sürümü ile kontrol etti',
-'logentry-newusers-newusers' => '$1 kullanıcı hesabı oluşturdu',
-'logentry-newusers-create' => '$1 kullanıcı hesabı oluşturdu',
+'logentry-newusers-newusers' => 'Kullanıcı hesabı $1 oluşturdu',
+'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:',
index 2ff42ce..56aab08 100644 (file)
@@ -373,9 +373,6 @@ Hikwlaho ka xivangelo xa "\'\'$2\'\'".',
 
 Ungaya emahlweni utirhisa {{SITENAME}} handle ko tipaluxa, kumbe unga <span class='plainlinks'>[$1 pfula unghena nakambe]</span> tani hi mutirhisa un'wana kumbe kumbe hivuxokoxoko bya wena.
 Tsundzuka leswaku matluka man'wana mangaha komba onge upfule unghena eka wiki, loko ungasi sula tluka rakhompuyuta leri tsundzukaka matluka lawa uma vhakeleke.",
-'welcomecreation' => '== Hoyohoyo, eka Wena $1 ! ==
-Akhawunti yawena yitumbuluxiwile.
-Unda rivali ku cinca [[Special:Preferences|{{SITENAME}} minhlawulo ya wena]].',
 'yourname' => 'Vito ra vutirhisi',
 'yourpassword' => 'Vito-mpfungulo:',
 'yourpasswordagain' => 'Thlela u hoxa ritompfungulo ra wena:',
index 8c36d23..b7087c0 100644 (file)
@@ -345,7 +345,7 @@ $messages = array(
 'cancel' => 'Баш тарту',
 'moredotdotdot' => 'Дәвамы…',
 'mypage' => 'Шәхси битем',
-'mytalk' => 'Бәхәсем',
+'mytalk' => 'Бәхәс',
 'anontalk' => 'Бу IP адресы өчен бәхәс бите',
 'navigation' => 'Күчү',
 'and' => '&#32;һәм',
@@ -607,9 +607,6 @@ $2',
 
 Сез {{SITENAME}} проектында аноним рәвештә кала яисә шул ук яки башка исем белән яңадан <span class='plainlinks'>[$1 керә]</span> аласыз.
 Кайбер битләр Сез кергән кебек күрсәтелергә мөмкин. Моны бетерү өчен браузер кэшын чистартыгыз.",
-'welcomecreation' => '== Рәхим итегез, $1! ==
-Сез теркәлдегез.
-Сайтның шәхси [[Special:Preferences|көйләнмәләрен]] карарга онытмагыз.',
 'yourname' => 'Кулланучы исеме:',
 'yourpassword' => 'Серсүз:',
 'yourpasswordagain' => 'Серсүзне кабат кертү:',
@@ -850,8 +847,8 @@ $2
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} көндәлекләрдәге язмаларны] таба
 яки '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} шушындый исемле яңа бит төзи]'''</span> аласыз.",
 'noarticletext-nopermission' => 'Хәзерге вакытта бу биттә текст юк.
-Сез [[Special:Search/{{PAGENAME}}|бу исем кергән башка мәкаләләрне]],
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} көндәлекләрдәге язмаларны] таба аласыз.</span>',
+Сез [[Special:Search/{{PAGENAME}}|бу исем кергән башка мәкаләләрне]] башка битләрдә,
+яисә <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} көндәлекләрдәге язмаларны] таба аласыз.</span> Сезнең бу битне ясарга хакыгыз юк.',
 'userpage-userdoesnotexist' => '«<nowiki>$1</nowiki>» исемле хисап язмасы юк. Сез чынлап та бу битне ясарга яисә үзгәртергә телисезме?',
 'userpage-userdoesnotexist-view' => '"$1" исемле хисап язмасы юк.',
 'blocked-notice-logextract' => 'Бу кулланучы хәзергә тыелды.
@@ -929,7 +926,6 @@ $2
 'template-protected' => '(якланган)',
 'template-semiprotected' => '(өлешчә якланган)',
 'hiddencategories' => 'Бу бит $1 {{PLURAL:$1|яшерен төркемгә}} керә:',
-'nocreatetitle' => 'Битләр төзү чикләнгән',
 'nocreatetext' => '{{SITENAME}}: сайтта яңа битләр төзү чикләнгән.
 Сез артка кайтып, төзелгән битне үзгәртә аласыз. [[Special:UserLogin|Керергә яисә теркәлергә]] тәгъдим ителә.',
 'nocreate-loggedin' => 'Сезгә яңа битләр төзү хокукы бирелмәгән.',
@@ -1180,7 +1176,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Көйләнмәләр',
-'mypreferences' => 'Көйләнмәләрем',
+'mypreferences' => 'Көйләнмәләр',
 'prefs-edits' => 'Үзгәртүләр исәбе:',
 'prefsnologin' => 'Кермәгәнсез',
 'prefsnologintext' => 'Кулланучы көйләнмәләрене үзгәртү өчен, сез <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} керергә]</span> тиешсез.',
@@ -1347,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' => 'бу битне укырга',
@@ -1707,10 +1705,6 @@ PICT # төрле
 'activeusers-hidesysops' => 'Идарәчеләрне яшер',
 'activeusers-noresult' => 'Кулланучылар табылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Кулланучыларны теркәү көндәлеге',
-'newuserlogpagetext' => 'Яңа теркәлгән кулланучылар исемлеге',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кулланучы төркемнәренең хокуклары',
 'listgrouprights-group' => 'Төркем',
@@ -1720,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' => 'Бу кулланучы чын электрон әрҗә адресын күрсәтмәде.',
@@ -1742,7 +1739,7 @@ PICT # төрле
 
 # Watchlist
 'watchlist' => 'Күзәтү исемлегем',
-'mywatchlist' => 'Күзәтү исемлегем',
+'mywatchlist' => 'Күзәтү исемлеге',
 'watchlistfor2' => '$1 $2 өчен',
 'nowatchlist' => 'Күзәтү исемлегегездә битләр юк.',
 'watchnologin' => 'Кермәдегез',
@@ -1763,11 +1760,7 @@ PICT # төрле
 'watching' => 'Күзәтү исемлегемә өстәүе…',
 'unwatching' => 'Күзәтү исемлегемнән чыгаруы…',
 
-'enotif_newpagetext' => 'Бу яңа бит.',
 'enotif_impersonal_salutation' => '{{SITENAME}} кулланучы',
-'changed' => 'үзгәртелде',
-'created' => 'төзергән',
-'enotif_subject' => '{{SITENAME}} проектының $PAGETITLE бите $PAGEEDITOR тарафыннан $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Соңгы керүегездән соң булган барлык үзгәртүләрне күрер өчен, бу сылтама аша узыгыз: $1',
 'enotif_body' => 'Хөрмәтле $WATCHINGUSERNAME,
 
@@ -1797,6 +1790,8 @@ $UNWATCHURL
 
 Элемтә һәм ярдәм:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'төзергән',
+'changed' => 'үзгәртелде',
 
 # Delete
 'deletepage' => 'Битне бетерү',
@@ -1914,7 +1909,7 @@ $1',
 # Contributions
 'contributions' => 'Кулланучының кертеме',
 'contributions-title' => '$1 исемле кулланучының кертеме',
-'mycontris' => 'Кертемем',
+'mycontris' => 'Кертем',
 'contribsub2' => '$1 ($2) өчен',
 'uctop' => '(ахыргы)',
 'month' => 'Айдан башлап (һәм элегрәк):',
@@ -1946,7 +1941,7 @@ $1',
 'whatlinkshere-hideredirs' => 'юнәлтүләрне $1',
 'whatlinkshere-hidetrans' => 'кертүләрне $1',
 'whatlinkshere-hidelinks' => 'сылтамаларны $1',
-'whatlinkshere-hideimages' => 'рәсем сылтамаларын $1',
+'whatlinkshere-hideimages' => '$1 файл сылтамалары',
 'whatlinkshere-filters' => 'Фильтрлар',
 
 # Block/unblock
@@ -2537,6 +2532,7 @@ $1',
 'logentry-newusers-create2' => '$1 $3 кулланучы хисап язмасын төзеде',
 'logentry-newusers-autocreate' => 'Автоматик рәвештә $1 хисап язмасы төзелде.',
 'newuserlog-byemail' => 'серсүз электрон почта аша җибәрелде',
+'rightsnone' => '(юк)',
 
 # Feedback
 'feedback-bugornote' => 'Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].
index 5967e94..f09b370 100644 (file)
@@ -478,9 +478,6 @@ Ul kürsätkän säbäp: ''$2''.",
 
 Sez {{SITENAME}} proyektında anonim räweştä qala yäisä şul uq yäki başqa isem belän yañadan <span class='plainlinks'>[$1 kerä]</span> alasız.
 Qayber bitlär Sez kergän kebek kürsätelergä mömkin. Monı beterü öçen brauzer keşın çistartığız.",
-'welcomecreation' => '== Räxim itegez, $1! ==
-Sez terkäldegez.
-Saytnıñ şäxsi [[Special:Preferences|köylänmälären]] qararğa onıtmağız.',
 'yourname' => 'Qullanuçı iseme:',
 'yourpassword' => 'Sersüz:',
 'yourpasswordagain' => 'Sersüzne qabat kertü:',
@@ -734,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.',
@@ -1117,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ä',
@@ -1467,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',
@@ -1514,11 +1508,7 @@ Bu bittä häm anıñ bäxäslegendä barlıq bulaçaq üzgärtülär şunda kü
 'watching' => 'Küzätü isemlegemä östäwe…',
 'unwatching' => 'Küzätü isemlegemnän çığaruı…',
 
-'enotif_newpagetext' => 'Bu yaña bit.',
 'enotif_impersonal_salutation' => '{{SITENAME}} qullanuçı',
-'changed' => 'üzgärtelde',
-'created' => 'tözergän',
-'enotif_subject' => '{{SITENAME}} proyektınıñ $PAGETITLE bite $PAGEEDITOR tarafınnan $CHANGEDORCREATED',
 'enotif_lastvisited' => 'Soñğı kerüegezdän soñ bulğan barlıq üzgärtülärne kürer öçen, bu sıltama aşa uzığız: $1',
 'enotif_body' => 'Xörmätle $WATCHINGUSERNAME,
 
@@ -1545,6 +1535,8 @@ $UNWATCHURL
 
 Elemtä häm yärdäm:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'tözergän',
+'changed' => 'üzgärtelde',
 
 # Delete
 'deletepage' => 'Bitne beterü',
@@ -2195,5 +2187,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 db77b87..a8a7959 100644 (file)
@@ -83,7 +83,7 @@ $messages = array(
 
 'underline-always' => 'Кезээде',
 'underline-never' => 'Кажан-даа',
-'underline-default' => 'Ð\92еб-браузерниң ниити үнези',
+'underline-default' => 'Ð\9aеÑ\88Ñ\82иң Ð°Ð·Ñ\8b Ð²еб-браузерниң ниити үнези',
 
 # Font style option in Special:Preferences
 'editfont-default' => 'Веб-браузерниң ниити үнези',
@@ -148,7 +148,10 @@ $messages = array(
 'category-empty' => "''Амгы бо бөлүкте медиа база арыннар чок.''",
 'hidden-categories' => '{{PLURAL:$1|Чажыт бөлүк|Чажыт бөлүктер}}',
 'hidden-category-category' => 'Чажыт бөлүктер',
+'category-subcat-count' => '{{PLURAL:$2|Бо бөлүк чүгле дараазында адыр-бөлүклүг.|Бо бөлүктүң шупту $2 адыр-бөлүүнүң аразындан дараазында $1 адыр-бөлүктү көргүскен.}}',
 'category-subcat-count-limited' => 'Бо бөлүк {{PLURAL:$1|бир|$1}} адаккы бөлүктүү.',
+'category-article-count' => '{{PLURAL:$2|Бо бөлүк чүгле дараазында арыннарлыг.|Бо бөлүктүң шупту $2 арыннарының аразындан дараазында $1 арынын көргүскен.}}',
+'category-file-count' => '{{PLURAL:$2|Бо бөлүк чүгле чаңгыс файлдыг.|Бо бөлүктүң ниити $2 файлының $1 файлын көргүскен.}}',
 'listingcontinuesabbrev' => '(уланчы)',
 'noindex-category' => 'Индекстелбес арынар',
 'broken-file-category' => 'Ажылдавайн турар файл-шөлүлгелиг арыннар',
@@ -158,8 +161,8 @@ $messages = array(
 'newwindow' => '(чаа көзенээ ажыытынар)',
 'cancel' => 'Соксаары',
 'moredotdotdot' => 'Артык...',
-'mypage' => 'Ð\9cÑ\8dÑ\8dÒ£ Ð°Ñ\80Ñ\8bнÑ\8bм',
-'mytalk' => 'Ð\9cÑ\8dÑ\8dÒ£ Ñ\87Ñ\83гаам',
+'mypage' => 'Ð\90Ñ\80Ñ\8bн',
+'mytalk' => 'ЧÑ\83гаа',
 'anontalk' => 'Бо ИП-адрестиң чугаазы',
 'navigation' => 'Навигация',
 'and' => '&#32;болгаш',
@@ -184,10 +187,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' => 'Алдаг',
@@ -195,7 +198,7 @@ $messages = array(
 'tagline' => '{{SITENAME}} деп веб-сайттан',
 'help' => 'Дуза',
 'search' => 'Диле',
-'searchbutton' => 'Дилээри',
+'searchbutton' => 'Дилээр',
 'go' => 'Баары',
 'searcharticle' => 'Күүcедири',
 'history' => 'Арынның төөгүзү',
@@ -208,7 +211,7 @@ $messages = array(
 'create' => 'Чогаадыры',
 'editthispage' => 'Бо арынны өскертири',
 'create-this-page' => 'Бо арынны чогаадыры',
-'delete' => 'ЫÑ\80адÑ\8bры',
+'delete' => 'ЫÑ\80аары',
 'deletethispage' => 'Бо арынны ырадыры',
 'undelete_short' => '$1 {{PLURAL:$1|эдигни|эдиглерни}} катап үндүрери',
 'viewdeleted_short' => '{{PLURAL:$1|Бир ыраткан өскерлиишкинни|$1 ыраткан өскерлиишкиннерни}} көөрү',
@@ -219,12 +222,12 @@ $messages = array(
 'unprotectthispage' => 'Бо арынның камгалалын өскертири',
 'newpage' => 'Чаа арын',
 'talkpage' => 'Бо арын дугайында чугаалажыры',
-'talkpagelinktext' => 'Чугаалажыры',
+'talkpagelinktext' => 'Чугаа',
 'specialpage' => 'Тускай арын',
 'personaltools' => 'Хууда херекселдер',
 'postcomment' => 'Чаа салбыр',
 'articlepage' => 'Допчу арынны көөрү',
-'talk' => 'Чугаалажыры',
+'talk' => 'Чугаа',
 'views' => 'Көрүүшкүннери',
 'toolbox' => 'Херекселдер',
 'userpage' => 'Ажыглакчының арынын көөрү',
@@ -328,14 +331,14 @@ $messages = array(
 'internalerror' => 'Иштики алдаг',
 'internalerror_info' => 'Иштики алдаг: $1',
 'badtitle' => 'Багай ат',
+'badtitletext' => 'Негеттинип турар арын ады меге, куруг, чок болза дылдар аразында азы интервики ады шын эвес.
+Адында таарышпас демдектер бары чадапчок.',
 'viewsource' => 'Дөзүн көөрү',
 'actionthrottled' => 'Шеглээн дүрген',
 'sqlhidden' => '(SQL айтырыгны чажырган)',
+'exception-nologin' => 'Кирбес',
 
 # Login and logout pages
-'welcomecreation' => '== Кирип моорлаңар, $1! ==
-Силер бүрүткел бижик has been created.
-Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'yourname' => 'Aжыглакчының ады',
 'yourpassword' => 'Чажыт сөс',
 'yourpasswordagain' => 'Чажыт сөзүңерни катап бижиңер:',
@@ -386,6 +389,7 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'resetpass-temp-password' => 'Түр чажыт сөс:',
 
 # Special:PasswordReset
+'passwordreset' => 'Чажыт сөстү дүжүрү',
 'passwordreset-legend' => 'Чажыт атты дүжүр',
 'passwordreset-username' => 'Aжыглакчының ады:',
 'passwordreset-domain' => 'Домен:',
@@ -419,6 +423,7 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'image_tip' => 'Киир туткан файл',
 'media_sample' => 'Чижек.ogg',
 'media_tip' => 'Файлдың холбаазы',
+'sig_tip' => 'Шак-биле хол үжүңер',
 'hr_tip' => 'Доора шугум (көвей ажыглаваңар)',
 
 # Edit pages
@@ -430,6 +435,8 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'preview' => 'Чижеглей көөрү',
 'showpreview' => 'Чижеглей көөрү',
 'showdiff' => 'Өскерлиишкиннерни көргүзери',
+'anoneditwarning' => "'''Кичээңгейлиг!''' Силер сайтче авторжуттунмаан силер.
+Бо арынның өскертилге төөгүзүнче Силерниң IP-адрезиңер бижитинип каар.",
 'missingcommenttext' => 'Тайылбырни адаанда чогаадыңар.',
 'summary-preview' => 'Түңнелдү чижеглей көөрү:',
 'subject-preview' => 'Кол сөс чижеглей көөрү:',
@@ -455,6 +462,7 @@ Please check if you want to create/edit this page.',
 'templatesused' => 'Бо арында {{PLURAL:$1|Майык|Майыктар}} ажыглаттырган:',
 'template-protected' => '(камгалаан)',
 'template-semiprotected' => '(четпес камгалаан)',
+'hiddencategories' => 'Бо арын {{PLURAL:$1|$1 чажыт бөлүкке}} хамааржыр:',
 'permissionserrorstext-withaction' => "Мында «'''$2'''» силерниң эргеңер чок, {{PLURAL:$1|чылдагааны|чылдагааннары}}:",
 'moveddeleted-notice' => 'Бо арын ап каавыткан.
 Адаанда ап каавыткан биле өскээр адаан бижиктер шынзылгазын көргүскен.',
@@ -463,6 +471,8 @@ Please check if you want to create/edit this page.',
 'post-expand-template-inclusion-warning' => 'Сагындырыг: Кошкан майыктарның ниити хемчээли дендии улуг.
 Чамдык майыктар коштунмаан боор.',
 'post-expand-template-inclusion-category' => 'Кожар майыктарга чөшпээрээн хемчээлин ашкан арыннар',
+'post-expand-template-argument-warning' => "'''Кичээнгейлиг:''' бо арында тоң дора дээрге (по крайней мере) чаңгыс майыктыг, а ооң аргументизи эмин эрттир улуг калбаяр хемчээлдиг.
+Ындыг чергелиг аргументилерни эрттирип каан.",
 'post-expand-template-argument-category' => "Аргументилери салдынмаан майыктарлыг '''арыннар'''",
 
 # History pages
@@ -526,7 +536,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|бижик|бижик}}',
@@ -547,6 +557,7 @@ Please check if you want to create/edit this page.',
 'searchprofile-everything-tooltip' => 'Шупту арыннардан дилээри (сумележиишкиннерден база)',
 'searchprofile-advanced-tooltip' => 'Айыткан аттар делгемнеринден дилээри',
 'search-result-size' => '$1 ({{PLURAL:$2|$2 сөс}})',
+'search-result-category-size' => '{{PLURAL:$1|1 кежигүн|$1 кежигүн}} ({{PLURAL:$2|1 aдаккы бөлүк|$2 aдаккы бөлүк}}, {{PLURAL:$3|1 файл|$3 файл}})',
 'search-redirect' => '($1-н шиглелге)',
 'search-section' => '(«$1» деп салбыр)',
 'search-suggest' => 'Силер «$1» деп бодадыңар чадавас',
@@ -554,6 +565,7 @@ Please check if you want to create/edit this page.',
 'searcheverything-enable' => 'Шупту аттар делгемнеринден дилээри',
 'searchrelated' => 'холбаалыг',
 'searchall' => 'шупту',
+'showingresultsheader' => "«'''$4'''» дилээниниң {{PLURAL:$5|'''$3''' одуругдан '''$1''' түңнели|'''$3''' одуругдан '''$1—$2''' түңнелдери}}",
 'search-nonefound' => 'Айыткан негелдениң түңнели чок',
 'powersearch' => 'Advanced search',
 'powersearch-ns' => 'Аттар делгемнеринден дилээри:',
@@ -561,7 +573,7 @@ Please check if you want to create/edit this page.',
 
 # Preferences page
 'preferences' => 'Шилилгелер',
-'mypreferences' => 'Ð\9cÑ\8dÑ\8dÒ£ Ñ\88илилгелеÑ\80им',
+'mypreferences' => 'ШилилгелеÑ\80',
 'prefs-edits' => 'Өскерлиишкиннериңерниң саны:',
 'changepassword' => 'Чажыт сөстү өскертири',
 'prefs-skin' => 'Кеш',
@@ -612,6 +624,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'gender-female' => 'Кыс',
 'email' => 'Э-чагаа',
 'prefs-help-email' => 'Э-шуудаң адрезин айтыры албан эвес, ынчалза-даа, уруңуңар (парольуңар) чиде бээрге, ол херек апаар.',
+'prefs-help-email-others' => 'Ол харылзаа медээлели база өске киржикчилерге хуу азы чугаалажылга арныңарга э-шуудаңыңар (e-mail) таварыштыр Силерниң-биле харылзажырынга ажыктыг. Ооң кадында Силерниң э-шуудаң адрезиңер кымга-даа көзүлбес.',
 'prefs-info' => 'Кол медээлер',
 'prefs-signature' => 'Хол үжүү',
 'prefs-diffs' => 'Ылгалдар',
@@ -657,8 +670,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' => 'бо арынны номчууру',
@@ -706,11 +719,14 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'recentchangeslinked' => 'Хамааржыр өскерлиишкиннер',
 'recentchangeslinked-toolbox' => 'Хамааржыр өскерлиишкиннер',
 'recentchangeslinked-title' => '«$1» деп арынга хамаарыштырган өскерлиишкиннер',
+'recentchangeslinked-noresult' => 'Холбаштырган арыннарда айыткан үе иштинде кандыг-даа өскертилге турбаан.',
+'recentchangeslinked-summary' => "Айыткан арынның (азы айыткан бөлүкке хамаарышкан) шөлүлүглериниң чедер арыннарнының чаа өскерилгер даңзызы.
+[[Special:Watchlist|Силерниң хайгаарал даңзызынче]] кирип турар арыннарны '''ылгап каан'''.",
 'recentchangeslinked-page' => 'Арынның ады:',
 'recentchangeslinked-to' => 'Айыткан арынче шөлүп турар арыннарга өскерилгелерни көргүзер',
 
 # Upload
-'upload' => 'Файлды салыры',
+'upload' => 'Файл чүдүрер',
 'uploadbtn' => 'Файлды салыры',
 'uploadnologin' => 'Кирбес',
 'uploaderror' => 'Кииреринге алдаг',
@@ -746,6 +762,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 # File description page
 'file-anchor-link' => 'Файл',
 'filehist' => 'Файлдың төөгүзү',
+'filehist-help' => 'Ол үеде файлдың көстүрүн көөрде, дата/үеже базыптыңар.',
 'filehist-deleteall' => 'шуптуну ырадыры',
 'filehist-deleteone' => 'ырадыры',
 'filehist-revert' => 'эгидип тургузары',
@@ -758,7 +775,10 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'filehist-filesize' => 'Файл хемчээли',
 'filehist-comment' => 'Тайылбыр',
 'imagelinks' => 'Файлдың ажыглаашкыны',
+'linkstoimage' => 'Бердинген файлче дараазында {{PLURAL:$1|арын шөлүдүп тур|$1 арын шөлүдүп тур}}:',
 'nolinkstoimage' => 'Бердинген файлче шөлүп турар арыннар чок.',
+'sharedupload-desc-here' => 'Моон $1 алган файл өске төлевилелдерге ажыглаттынып болур.
+Ооң [$2 допчу тайылбыр арынындан] медеглели адаанда бердинген.',
 
 # File reversion
 'filerevert' => '$1 эгидип тургузары',
@@ -879,9 +899,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' => '(кежигүннүң даңзызы)',
@@ -898,7 +915,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 # Watchlist
 'watchlist' => 'Мээң хайгаарал даңзым',
-'mywatchlist' => 'Ð\9cÑ\8dÑ\8dÒ£ Ñ\85айгааÑ\80ал Ð´Ð°Ò£Ð·Ñ\8bм',
+'mywatchlist' => 'ХайгааÑ\80ал Ð´Ð°Ò£Ð·Ñ\8b',
 'watchlistfor2' => '$1, силерге $2',
 'nowatchlist' => 'Силерниң хайгаарал даңзыңар куруг.',
 'watchnologin' => 'Кирбес',
@@ -914,10 +931,9 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'watching' => 'Хайгаарап турар...',
 'unwatching' => 'Хайгааравайн турар...',
 
-'enotif_newpagetext' => 'Бо чаа арын-дыр.',
 'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} ажыглакчызы',
-'changed' => 'өскертти',
 'enotif_anon_editor' => 'ат эвес ажыглакчы $1',
+'changed' => 'өскертти',
 
 # Delete
 'deletepage' => 'Арынны ырадыры',
@@ -960,12 +976,13 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 # Namespace form on various pages
 'namespace' => 'Аттар делгеми:',
+'invert' => 'Шилээнин аңдарар. (Обратить выбранное)',
 'blanknamespace' => '(Кол)',
 
 # Contributions
-'contributions' => 'Ажыглакчыниң салыышкыннары',
+'contributions' => '{{GENDER:$1|Ажыглакчының}} салыышкыннары',
 'contributions-title' => '«$1» деп ажыглакчының салыышкыннары',
-'mycontris' => 'Ð\9cÑ\8dÑ\8dÒ£ Ñ\81алÑ\8bÑ\8bÑ\88кÑ\8bннаÑ\80Ñ\8bм',
+'mycontris' => 'СалÑ\8bÑ\8bÑ\88кÑ\8bннаÑ\80',
 'contribsub2' => '$1 ($2)',
 'uctop' => '(баш)',
 'month' => 'Айдан:',
@@ -996,7 +1013,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'whatlinkshere-hideredirs' => '$1-че шиглиглер',
 'whatlinkshere-hidetrans' => '$1 даңзылааннар',
 'whatlinkshere-hidelinks' => 'холбааларны $1',
-'whatlinkshere-hideimages' => 'Файлдың холбаалары $1',
+'whatlinkshere-hideimages' => 'Файлдың холбааларын $1',
 'whatlinkshere-filters' => 'Шүүрлер',
 
 # Block/unblock
@@ -1071,6 +1088,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-pt-userpage' => 'Силерниң ажыглакчы арыныңнар',
 'tooltip-pt-mytalk' => 'Силерниң чугаалажыр арыныңар',
 'tooltip-pt-preferences' => 'Силерниң шилилгеңер',
+'tooltip-pt-watchlist' => 'Карактап (хынап) турар өскертилгелерге хамааржыр арыннарның даңзызы',
 'tooltip-pt-mycontris' => 'Силерниң салыышкыннарыңарның даңзызы',
 'tooltip-pt-login' => 'Маңаа системаже киир бүрүткенип болур, ынчалза-даа ол албан эвес.',
 'tooltip-pt-logout' => 'Үнери',
@@ -1086,9 +1104,10 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-ca-watch' => 'Силерниң хайгаарал даңзызынга бо арынны немерелээри',
 'tooltip-ca-unwatch' => 'Силерниң хайгаарал даңзызындан бо арынны ырадыры',
 'tooltip-search' => '{{grammar:locative|{{SITENAME}}}} дилээри',
+'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' => 'Ам болуп турар таварылгалар даңзызы',
@@ -1117,9 +1136,11 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-minoredit' => 'Бо өскертилгени "биче" деп демдеглээр',
 'tooltip-save' => 'Силерниң өскерлиишкиннериңерни шыгжаары',
 'tooltip-preview' => 'Шыгжаар мурнунда силерниң өскерлиишкиннерин чижеглеп көрем!',
+'tooltip-diff' => 'Бо сөзүглелге хамаарыштыр кандыг өскертилгелерни кылган Силер - ону көргүзер.',
 'tooltip-compareselectedversions' => 'Бо арынның шилиттинген ийи хевиринниң ылгалын көөр.',
 'tooltip-watch' => 'Силерниң хайгаарал даңзызынга бо арынны немерелээри',
 'tooltip-rollback' => 'Сөөлгү киржикчиниң өскерилгелерин чаңгыс баскаш, ойталаар',
+'tooltip-undo' => 'Киирген эдигни казааш, ойталалдың чылдагаанын айтыр аргалыг мурнай көргүзүүн көргүзер.',
 'tooltip-summary' => 'Кысказы-биле бижиңер',
 
 # Attribution
@@ -1167,8 +1188,16 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'days' => '{{PLURAL:$1|$1 хүн|$1 хүн}}',
 'ago' => '$1 бурунгаар',
 
+# Bad image list
+'bad_image_list' => 'Формады мындыг боор ужурлуг:
+
+Чүгле даңзының идегеттери (элементилери) санатынар боор (* деп демдектен эгелээн одуруглар).
+Одуругнуң бирги шөлүдүү салдынмас чурумалче шөлүдүг болуру албан.
+Ол-ла одуругнуң арткан шөлүдүглери онзагай кылдыр азы чурумал капсырып болур чүүлдер кылдыр санаттынар.',
+
 # Metadata
 'metadata' => 'Чурумал дугайында медээлер',
+'metadata-help' => 'Бо файл немелде данныйларлыг:санныг камералар азы сканнерлер дугайында медеглел. Файл чаяанының соонда эдидип турган болза, чамдык параметрлери амгы чурумалга меге кылдыр хамааржып болур.',
 'metadata-fields' => 'Бо даңзыда айыткан чурумалдар метаданныйларның кезектери чурумалдың арынынга көстүп кээр, метаданныйлар таблицазын дүрүп каан болур. 
 Арткан кезектер аайлаан ёзугаар чажыт көстүр.
 * make
@@ -1208,6 +1237,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 # External editor support
 'edit-externally' => 'Бо файлды даштыкы капсырылга-биле эдер',
+'edit-externally-help' => '(Улаштыр тодарадырда бо [//www.mediawiki.org/wiki/Manual:External_editors кыстып алыр саавырны] көрүңер)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'шупту',
@@ -1298,6 +1328,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 9cd4547..523311d 100644 (file)
@@ -85,7 +85,7 @@ $messages = array(
 
 'underline-always' => 'دائىم',
 'underline-never' => 'ھەرگىز',
-'underline-default' => 'توركۆرگۈ كۆڭۈلدىكى',
+'underline-default' => 'تېرە ياكى توركۆرگۈ كۆڭۈلدىكى',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'تەھرىرلەش رايونىنىڭ خەت نۇسخا ئۇسلۇبى:',
@@ -206,6 +206,7 @@ $messages = array(
 'namespaces' => 'ئات بوشلۇقى',
 'variants' => 'ۋارىيانتلار',
 
+'navigation-heading' => 'يولباشچى تىزىملىكى',
 'errorpagetitle' => 'خاتالىق',
 'returnto' => '$1 غا قايت.',
 'tagline' => 'ئورنى {{SITENAME}}',
@@ -472,9 +473,8 @@ $2',
 
 سىز نامسىز ھالەتتە {{SITENAME}} نى ئىشلىتەلەيسىز ياكى ئوخشاش ۋە ياكى ئوخشاش بولمىغان ئىشلەتكۈچى سالاھىيىتىدە <span class='plainlinks'>[$1 تىزىمغا كىر]</span>ەلەيسىز.
 دىققەت، بەزى بەتلەر توركۆرگۈنىڭ غەملىكى تازىلانمىغۇچە يەنىلا سىزنى تىزىمغا كىرگەن ھالەتتە كۆرسىتىشى مۇمكىن.",
-'welcomecreation' => '==  $1! خۇش كەپسىز ==
-
-ھېساباتىڭىز قۇرۇلدى.
+'welcomeuser' => '$1، خۇش كەپسىز!',
+'welcomecreation-msg' => 'ھېساباتىڭىز قۇرۇلدى.
 
 [[Special:Preferences|{{SITENAME}} تەڭشىكىڭىزنى تەڭشەشنى ئۇنتۇپ قالماڭ]].',
 'yourname' => 'ئىشلەتكۈچى ئاتى:',
@@ -568,6 +568,7 @@ cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتن
 'emailconfirmlink' => 'ئېلخەت مەنزىلىڭىزنى جەزملەڭ',
 'invalidemailaddress' => 'ئېلخەت ئادرېس فورماتى خاتا.
 توغرا ئېلخەت ئادرېسى كىرگۈزۈڭ ياكى بۇ جاينى بوش قالدۇرۇڭ.',
+'cannotchangeemail' => 'بۇ wiki ھېساباتى تورخەت ئادرېسىنى ئۆزگەرتىشكە يول قويمايدۇ.',
 'emaildisabled' => 'بۇ تورتۇرا ئېلخەت يوللىيالمايدۇ.',
 'accountcreated' => 'ھېسابات قۇرۇلدى',
 'accountcreatedtext' => '$1 نىڭ ھېساباتى قۇرۇلدى.',
@@ -651,6 +652,7 @@ $2
 'changeemail-oldemail' => 'نۆۋەتتىكى ئېلخەت ئادرېسى:',
 'changeemail-newemail' => 'يېڭى ئېلخەت ئادرېسى:',
 'changeemail-none' => '(يوق)',
+'changeemail-password' => '{{SITENAME}} دىكى ئىم:',
 'changeemail-submit' => 'ئېلخەت ئۆزگەرت',
 'changeemail-cancel' => 'ۋاز كەچ',
 
@@ -758,10 +760,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 نى ئالدىن كۆزىتىۋاتىسىز.'''
@@ -778,7 +780,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' => "'''كەچۈرۈڭ! سىزنىڭ جەريان سانلىق مەلۇماتىڭىز يوقاپ كەتكەندە ئېلىپ بارغان تەھرىرىڭىزنى بىر تەرەپ قىلالمايمىز.'''
 قايتا سىناڭ.
@@ -836,9 +838,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' => 'يېڭى بەت قۇرۇش ھوقۇقىڭىز يوق.',
@@ -864,6 +865,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
@@ -1017,9 +1026,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' => 'ئۆچۈرۈش سەۋەبى تەھرىر',
@@ -1073,6 +1084,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' => 'ئىزدەش نەتىجىسى',
@@ -1149,7 +1164,7 @@ $1",
 
 # Preferences page
 'preferences' => 'مايىللىق',
-'mypreferences' => 'مايىللىق تەڭشىكىم',
+'mypreferences' => 'مايىللىق',
 'prefs-edits' => 'تەھرىر سانى:',
 'prefsnologin' => 'تىزىمغا كىرمىدى',
 'prefsnologintext' => 'سىز ئالدى بىلەن <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} تىزىمغا كىر]</span>سىڭىز ئاندىن ئىشلەتكۈچى مايىللىقنى تەڭشىيەلەيسىز.',
@@ -1160,11 +1175,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' => 'كۆزەت تىزىملىك نىشانى:',
@@ -1211,7 +1227,7 @@ $1",
 'timezoneregion-indian' => 'ھىندى ئوكيان',
 'timezoneregion-pacific' => 'تىنچ ئوكيان',
 'allowemail' => 'باشقا ئىشلەتكۈچىلەر ئېلخەت ئەۋەتىشنى قوزغات',
-'prefs-searchoptions' => 'ئىزدەش تاللانما',
+'prefs-searchoptions' => 'ئىزدەش',
 'prefs-namespaces' => 'ئات بوشلۇقى',
 'defaultns' => 'بولمىسا بۇ ئات بوشلۇقلىرىدىن ئىزدە:',
 'default' => 'كۆڭۈلدىكى',
@@ -1224,15 +1240,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' => 'ئەسلى ئىمزا خاتا.
@@ -1284,6 +1301,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'saveusergroups' => 'ئىشلەتكۈچى گۇرۇپپىسى ساقلا',
 'userrights-groupsmember' => 'ئەزاسى:',
 'userrights-groupsmember-auto' => 'مۇقىم ئەزاسى:',
+'userrights-groupsmember-type' => '$1',
 'userrights-groups-help' => 'سىز بۇ ئىشلەتكۈچى تەۋە گۇرۇپپىنى ئۆزگەرتەلەيسىز:\\n
 * تاللاش رامكىسى تاللاغلىق بولسا ئىشلەتكۈچى شۇ  گۇرۇپپىغا تەۋە:
 * تاللاش رامكىسى تاللاغلىق بولمىسا ئىشلەتكۈچى شۇ  گۇرۇپپىغا تەۋە ئەمەس.
@@ -1309,10 +1327,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}}:ئۆزلۈكىدىن جەزملەنگەن ئىشلەتكۈچىلەر',
@@ -1346,6 +1364,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'right-writeapi' => 'يېزىلغان API نى ئىشلەت',
 'right-delete' => 'بەتلەرنى ئۆچۈر',
 'right-bigdelete' => 'كۆپ مىقداردىكى تارىخ بېتى ئۆچۈر',
+'right-deletelogentry' => 'بەلگىلەنگەن خاتىرە تۈرىنى ئۆچۈرۈپ ۋە ئەسلىگە كەلتۈرىدۇ',
 'right-deleterevision' => 'ئۆچۈر ۋە قارشى ئۆچۈر بېتىدىكى بەلگىلەنگەن تۈزىتىلگەن نەشرى',
 'right-deletedhistory' => 'ئۆچۈرۈلگەن تۈرنى كۆرسەت، مۇناسىۋەتلىك تېكستنى ئۆز ئىچىگە ئالمايدۇ',
 'right-deletedtext' => 'ئۆچۈرۈلگەن تۈزىتىلگەن نەشرى ئارىسىدىكى ئۆچۈرۈلگەن تېكست ۋە ئۆزگەرتىشنى كۆرسەت',
@@ -1380,13 +1399,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' => 'بۇ بەتنى ئوقۇ',
@@ -1413,6 +1434,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'action-suppressionlog' => 'بۇ شەخسىي خاتىرىنى كۆرسەت',
 'action-block' => 'بۇ ئىشلەتكۈچىنىڭ تەھرىرىنى چەكلە',
 'action-protect' => 'بۇ بەتنىڭ قوغداش دەرىجىسىنى ئۆزگەرت',
+'action-rollback' => 'ئاخىرقى ئىشلەتكۈچىنىڭ ئالاھىدە بەتكە ئېلىپ بارغان تەھرىرىنى تېزلىكتە ئەسلىگە كەلتۈرىدۇ',
 'action-import' => 'باشقا wiki دىن بۇ بەتنى ئەكىر',
 'action-importupload' => 'يۈكلىگەن بىر ھۆججەتتىن بۇ بەتنى ئەكىر',
 'action-patrol' => 'باشقا تەھرىرگە چارلاش بەلگىسى قوي',
@@ -1422,6 +1444,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'action-userrights' => 'ھەممە ئىشلەتكۈچىنىڭ ھوقۇقىنى تەھرىرلە',
 'action-userrights-interwiki' => 'باشقا wiki دىكى ئىشلەتكۈچى ھوقۇقىنى تەھرىرلە',
 'action-siteadmin' => 'ساندان قۇلۇپلا ۋە قۇلۇپ ئاچ',
+'action-sendemail' => 'ئېلخەت يوللا',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
@@ -1455,9 +1478,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' => 'مۇناسىۋەتلىك ئۆزگەرتىشلەر',
@@ -1508,6 +1533,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'minlength1' => 'ھۆججەت ئاتى ئاز دېگەندە بىر ھەرپ بولۇشى لازىم.',
 'illegalfilename' => 'ھۆججەت ئاتى "$1"دا ماۋزۇدا چەكلىنىدىغان ھەرپ بار.
 ھۆججەت ئاتىنى ئۆزگەرتىپ ئاندىن يۈكلەشنى قايتا سىناڭ.',
+'filename-toolong' => 'ھۆججەت ئىسمى 240 بايتتىن ئاشمايدۇ.',
 'badfilename' => 'ھۆججەت ئاتى ئۆزگەرتىلدى "$1".',
 'filetype-mime-mismatch' => '".$1" ھۆججەت كېڭەيتىلگەن ئاتى ($2) ھۆججەتنىڭ MIME تىپى بىلەن ماسلاشمىدى.',
 'filetype-badmime' => 'ھۆججەتنىڭ MIME تىپى "$1" يۈكلەشكە يول قويىدىغان ھۆججەت شەكلى ئەمەس.',
@@ -1608,6 +1634,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 تەكشۈرۈشىدە بىر خاتالىققا يولۇقتى.',
@@ -1625,10 +1695,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',
@@ -1716,11 +1787,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 ئەسلىگە قايتۇر',
@@ -1750,6 +1827,7 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 ** تەكرار ھۆججەت',
 'filedelete-edit-reasonlist' => 'ئۆچۈرۈش سەۋەبى تەھرىر',
 'filedelete-maintenance' => 'ئاسرىلىۋاتقاندا ھۆججەت ئۆچۈرۈش ۋە ئەسلىگە كەلتۈرۈش ۋاقىتلىق چەكلىنىدۇ.',
+'filedelete-maintenance-title' => 'ھۆججەتنى ئۆچۈرگىلى بولمايدۇ',
 
 # MIME search
 'mimesearch' => 'MIME ئىزدە',
@@ -1799,9 +1877,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]] غا ئۇلانغان بولسا ئىككى بىسلىق بەت دەپ قارىلىدۇ.",
 
@@ -1828,6 +1906,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|تۈزىتىش|تۈزىتىش}}',
@@ -1848,14 +1927,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' => 'ئۇلىنىشى ئۈزۈلگەن بەت',
@@ -1899,13 +1982,14 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 
 # Special:Log
 'specialloguserlabel' => 'ئىشلەتكۈچى:',
-'speciallogtitlelabel' => 'ماۋزۇ:',
+'speciallogtitlelabel' => 'ماۋزۇ(تىما ياكى ئىشلەتكۈچى):',
 'log' => 'خاتىرە',
 'all-logs-page' => 'بارلىق ئاممىۋى خاتىرە',
 'alllogstext' => '{{SITENAME}} بارلىق ئىشلەتكىلى بولىدىغان خاتىرىنى ئۇنىۋېرسال كۆرسىتىدۇ.
 سىز خاتىرە تىپى، ئىشلەتكۈچى ئاتى (چوڭ كىچىك يېزىلىشنى پەرقلەندۈرىدۇ) نى تاللىيالايسىز ياكى مۇناسىۋەتلىك بەت (چوڭ كىچىك يېزىلىشنى پەرقلەندۈرىدۇ) ئارقىلىق ئىزدەش دائىرىسىنى كىچىكلىتەلەيسىز.',
 'logempty' => 'خاتىرىدە ماس كېلىدىغان تۈر يوق.',
 'log-title-wildcard' => 'بۇ تېكست بىلەن باشلانغان ماۋزۇنى ئىزدە',
+'showhideselectedlogentries' => 'تالغان خاتىرىسى كۈرسەت / يوشۇر',
 
 # Special:AllPages
 'allpages' => 'ھەممە بەت',
@@ -1924,6 +2008,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' => 'كاتېگورىيە',
@@ -1940,12 +2030,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' => 'ئورتاق بەلگەنى پەقەت ئاساسىي ئاپپارات ئاتىنىڭ باشىدىلا ئىشلەتكىلى بولىدۇ.',
 
@@ -1964,10 +2055,6 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'activeusers-hidesysops' => 'باشقۇرغۇچىنى يوشۇر',
 'activeusers-noresult' => 'ئىشلەتكۈچى تېپىلمىدى.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ئىشلەتكۈچى قۇرغان خاتىرە',
-'newuserlogpagetext' => '(چەكلەنگەن)',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ئىشلەتكۈچى گۇرۇپپا ھوقۇقى',
 'listgrouprights-summary' => 'تۆۋەندىكىسى بۇ wiki دا ئېنىقلىما بېرىلگەن ئىشلەتكۈچى ھوقۇق چېكى تىزىملىكى ۋە ئۇلارنىڭ زىيارەت ھوقۇق چېكى.
@@ -1978,6 +2065,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',
@@ -1992,8 +2080,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" ئىشلەتكۈچىنىڭ ئېلخەت',
@@ -2022,19 +2112,19 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 # User Messenger
 'usermessage-summary' => 'سىستېما ئۇچۇرىنى ساقلاپ قال',
 'usermessage-editor' => 'سىستېما خەۋەرچىسى',
+'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
 'watchlist' => 'كۆزەت تىزىملىكىم',
-'mywatchlist' => 'كۆزەت تىزىملىكىم',
+'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' => 'كۆزەت',
@@ -2051,7 +2141,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' => 'كۆزەت تىزىملىك تاللانما',
 
@@ -2062,21 +2152,25 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 
 'enotif_mailer' => '{{SITENAME}} ئېلخەت ئۇقتۇرغۇچ',
 'enotif_reset' => 'ھەممە بەتكە ئوقۇلدى بەلگىسى سال',
-'enotif_newpagetext' => 'بۇ يېڭى بەت.',
 'enotif_impersonal_salutation' => '{{SITENAME}} ئىشلەتكۈچى',
-'changed' => 'ئۆزگەردى',
-'created' => 'قۇرغان',
-'enotif_subject' => '{{SITENAME}} نىڭ $PAGETITLE بېتىنى $CHANGEDORCREATED ئۆزگەرتكۈچى$PAGEEDITOR',
+'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$
 
 بۇ تەھرىر بىلەن ئالاقىلىشىڭ:
 
@@ -2097,6 +2191,8 @@ $UNWATCHURL نى زىيارەت قىلىڭ
 
 قايتما ئىنكاس ياكى تېخىمۇ كۆپ ياردەمگە ئېرىشمەكچى بولسىڭىز:
 {{canonicalurl:{{MediaWiki:Helppage}}}} نى زىيارەت قىلىڭ',
+'created' => 'قۇرغان',
+'changed' => 'ئۆزگەردى',
 
 # Delete
 'deletepage' => 'بەت ئۆچۈر',
@@ -2135,6 +2231,8 @@ $UNWATCHURL نى زىيارەت قىلىڭ
 'rollback' => 'تەھرىر ئەسلىگە قايتۇر',
 'rollback_short' => 'ئەسلىگە قايتۇر',
 'rollbacklink' => 'ئەسلىگە قايتۇر',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر',
+'rollbacklinkcount-morethan' => '$1 دىن كۆپ {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر',
 'rollbackfailed' => 'ئەسلىگە قايتۇرۇش مەغلۇپ بولدى',
 'cantrollback' => 'تەھرىرنى ئەسلىگە كەلتۈرەلمىدى؛
 ئاخىرقى تۆھپىكار بۇ بەتنىڭ بىردىنبىر ئاپتورى.',
@@ -2163,7 +2261,10 @@ $2 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئۆزگەرتىل
 'unprotectedarticle' => '"[[$1]]" دىن قوغداشنى چىقىرىۋەتكەن',
 'movedarticleprotection' => 'قوغداش تەڭشىكى "[[$2]]" دىن "[[$1]]" غا يۆتكەلدى.',
 'protect-title' => '"$1" نىڭ قوغداش دەرىجىسىنى ئۆزگەرتىۋاتىدۇ',
+'protect-title-notallowed' => '"$1" نىڭ قوغداش دەرىجىسىنى كۆرسىتىدۇ',
 'prot_1movedto2' => '[[$1]] دىن [[$2]]غا يۆتكەلدى',
+'protect-badnamespace-title' => 'قوغداتقل بولمايدىغان ئىسىم بوشلۇق',
+'protect-badnamespace-text' => 'بۇ ئىسىم بوشلۇقىدىكى بەتنى قوغدىغىلى بولمايدۇ.',
 'protect-legend' => 'قوغداش جەزملە',
 'protectcomment' => 'سەۋەب:',
 'protectexpiry' => 'قەرەلى:',
@@ -2249,8 +2350,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|ئۆچۈرۈش خاتىرىسى]]دىن پايدىلىنىپ ئۆچۈر ۋە ئەسلىگە كەلتۈر خاتىرىسىنى كۆرۈڭ.",
@@ -2265,6 +2366,7 @@ $2 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئۆزگەرتىل
 'undelete-cleanup-error' => 'ئىشلىتىلمەيدىغان ئاخىپ ھۆججەت"$1"نى ئۆچۈرگەندە خاتالىق كۆرۈلدى.',
 'undelete-missing-filearchive' => 'ھۆججەت ئارخىپىنىڭ كىملىكى $1 سانداندا بولمىغاچقا، ھۆججەت ئارخىپىدىن ئەسلىگە كەلتۈرەلمەيدۇ.
 ئۇ ئەسلىگە كەلتۈرۈلگەن بولۇشى مۇمكىن.',
+'undelete-error' => 'بەت ئەسلىگە كەلتۈرۈشتە خاتا.',
 'undelete-error-short' => 'ھۆججەت قارشى ئۆچۈرگەندە خاتالىق كۆرۈلدى: $1',
 'undelete-error-long' => 'ھۆججەتنى قارشى ئۆچۈرۈۋاتقاندا خاتالىق كۆرۈلدى:
 
@@ -2282,9 +2384,9 @@ $1',
 'blanknamespace' => '(ئاساسىي)',
 
 # Contributions
-'contributions' => 'ئىشلەتكۈچى تۆھپىسى',
+'contributions' => '{{$1:GENDER|ئىشلەتكۈچى}} تۆھپىسى',
 'contributions-title' => '$1 نىڭ ئىشلەتكۈچى تۆھپىسى',
-'mycontris' => 'تۆھپەم',
+'mycontris' => 'تۆھپە',
 'contribsub2' => '$1 نىڭ تۆھپىسى ($2)',
 'nocontribs' => 'بۇ ئۆلچەمگە ماس كېلىدىغان ئۆزگەرتىش تېپىلمىدى.',
 'uctop' => '(ئۈستى)',
@@ -2325,7 +2427,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 قايتا نىشان بەلگىلە',
 'whatlinkshere-hidetrans' => '$1 ئۆز ئىچىگە ئالغان',
 'whatlinkshere-hidelinks' => '$1 ئۇلانما',
-'whatlinkshere-hideimages' => '$1 سۈرەت ئۇلانما',
+'whatlinkshere-hideimages' => '$1 ھۆججەت ئۇلانما',
 'whatlinkshere-filters' => 'سۈزگۈچلەر',
 
 # Block/unblock
@@ -2366,7 +2468,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' => 'سىز ئىشلەتكۈچىنى يوشۇرۇش ھوقۇقى بار ئىشلەتكۈچىنى چەكلىمەكچى. بۇنداق بولغاندا ھەممە تىزىمدىكى ئىشلەتكۈچىلەرنىڭ ئاتى ۋە خاتىرە تۈرلىرى چەكلىنىدۇ. راستىنلا مۇشۇنداق قىلامسىز؟',
@@ -2559,7 +2661,7 @@ $1',
 نىشان بەت "[[:$1]]" مەۋجۇد.
 يۆتكەشكە قولاي بولۇشى ئۈچۈن بۇ بەتنى ئۆچۈرەمسىز؟',
 'delete_and_move_confirm' => 'ھەئە، بۇ بەتنى ئۆچۈر',
-'delete_and_move_reason' => 'يۆتكەشكە قولاي بولۇشى ئۈچۈن ئۆچۈر',
+'delete_and_move_reason' => ' "[[$1]]" يۆتكەشكە قولاي بولۇشى ئۈچۈن ئۆچۈرۈۋېتىلدى',
 'selfmove' => 'ئەسلى ماۋزۇ بىلەن نىشان ماۋزۇ ئوخشاش؛
 بەتنى ئۆزىدىن ئۆزىگە يۆتكىگىلى بولمايدۇ.',
 'immobile-source-namespace' => 'ئات بوشلۇقى "$1" بولغان بەتنى يۆتكىگىلى بولمايدۇ.',
@@ -2567,6 +2669,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' => 'بۇ يېڭى كېڭەيتىلگەن ئات بىلەن باشقا تىپ ماسلاشمىدى.',
@@ -2592,6 +2695,7 @@ $1',
 'exportcuronly' => 'ھەممە تارىخنى ئەمەس بەلكى نۆۋەتتىكى تۈزىتىلگەن نەشرىنىلا ئۆز ئىچىگە ئالىدۇ.',
 'exportnohistory' => "----
 '''دىققەت:''' ئىقتىدار سەۋەبلىك بۇ جەدۋەلدىن ھەممە تارىخنى چىقىرىش چەكلەنگەن.",
+'exportlistauthors' => 'ھەر بىر بەت تۆھپىكارلارنىڭ تولۇق تىزىمىنى ئۆز ئىچىگە ئالىدۇ',
 'export-submit' => 'چىقار',
 'export-addcattext' => 'تۈردىن بەت قوش:',
 'export-addcat' => 'قوش',
@@ -2624,6 +2728,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' => 'نىشان مۇندەرىجە قۇرالمىدى',
@@ -2642,6 +2747,7 @@ $1',
 'import-interwiki-templates' => 'ھەممە قېلىپىنى ئۆز ئىچىگە ئالىدۇ',
 'import-interwiki-submit' => 'ئەكىر',
 'import-interwiki-namespace' => 'نىشان ئات بوشلۇقى:',
+'import-interwiki-rootpage' => 'نىشان غول بەت (تاللاشچان):',
 'import-upload-filename' => ':ھۆججەت ئاتى',
 'import-comment' => 'ئىزاھات:',
 'importtext' => '[[Special:Export|چىقىرىش ئىقتىدارى]]نى ئىشلىتىپ ئەسلى ۋىكىدىن ھۆججەت چىقىرىڭ .
@@ -2675,6 +2781,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' => 'ئەكىرىش خاتىرىسى',
@@ -2684,6 +2797,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 ماس كەلگەن ئىشلەتكۈچى بېتى',
@@ -2746,6 +2869,8 @@ $1',
 'tooltip-diff' => 'بۇ تېكستكە ئېلىپ بارغان ئۆزگەرتىشنى كۆرسەت',
 'tooltip-compareselectedversions' => 'بۇ بەتتە تاللانغان ئىككى نەشرىنىڭ پەرقىنى كۆرسەت',
 'tooltip-watch' => 'بۇ بەتنى كۆزەت تىزىملىكىگە قوش',
+'tooltip-watchlistedit-normal-submit' => 'ماۋزۇ چىقىرىۋەت',
+'tooltip-watchlistedit-raw-submit' => 'كۆزەت تىزىملىكى يېڭىلا',
 'tooltip-recreate' => 'ئۆچۈرۈلگەن بولسىمۇ بۇ بەتنى قايتا قۇر',
 'tooltip-upload' => 'يۈكلەشنى باشلا',
 'tooltip-rollback' => '"ئەسلىگە قايتۇر" بىر چېكىلسە ئالدىنقى تۆھپىكارنىڭ تەھرىرىلىگەن ھالىتىگە قايتۇرىدۇ.',
@@ -2811,20 +2936,48 @@ $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-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' => 'Classic',
@@ -2847,6 +3000,8 @@ $1',
 'markedaspatrollederror' => 'چارلاش بەلگىسى قويغىلى بولمايدۇ',
 'markedaspatrollederrortext' => 'مەلۇم نەشرىنى تاللىسىڭىز ئاندىن چارلاش بەلگىسى قويغىلى بولىدۇ.',
 'markedaspatrollederror-noautopatrol' => 'سىز ئۆزىڭىزنىڭ ئۆزگەرتىشىگە چارلاش بەلگىسى قويالمايسىز.',
+'markedaspatrollednotify' => '$1 نىڭ ئۆزگەرتىشىگە چارلاش بەلگىسى قويۇلدى.',
+'markedaspatrollederrornotify' => 'چارلىيالمىغانلىق بەلگىسى قويۇلدى.',
 
 # Patrol log
 'patrol-log-page' => 'چارلاش خاتىرىسى',
@@ -2879,15 +3034,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' => 'يېڭى ھۆججەت كارىدورى',
@@ -2907,6 +3066,13 @@ $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 كۈن}}',
+'years' => '{{PLURAL:$1|$1 يىل}}',
+'ago' => '$1 بۇرۇن',
+'just-now' => 'بايا',
 
 # Bad image list
 'bad_image_list' => 'تۆۋەندىكى فورماتتا يېزىڭ:
@@ -3166,9 +3332,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' => 'تەكشىلىك ئەندىزىسى',
@@ -3438,6 +3604,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[بېكەت ئاتلىغان كود ئايلاندۇرۇش چەكلەنگەن]',
 'scarytranscludefailed' => '[$1 نىڭ قېلىپىنى ئېلىش مەغلۇپ بولدى]',
+'scarytranscludefailed-httpstatus' => '[$1:HTTP $2 گە قېلىپ ئېرىشىش مەغلۇپ بولدى]',
 'scarytranscludetoolong' => '[URL بەك ئۇزۇن]',
 
 # Delete conflict
@@ -3522,6 +3689,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" نى قاپلىۋېتىدۇ.',
@@ -3546,6 +3716,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 ئاممىباپ ئاممىۋى ئىجازەتنامىدىن پايدىلىنىڭ.
@@ -3554,6 +3725,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' => 'ھۆججەت يولى',
@@ -3580,7 +3754,7 @@ 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' => 'ئىشلەتكۈچى ۋە ھوقۇقى',
@@ -3657,12 +3831,110 @@ 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 غا يۆتكىدى قايتا نىشانلاشنى قالدۇرمىدى',
+'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-autocreate' => 'ئىشلەتكۈچى $1 ئاپتوماتلىق قۇرۇلدى',
 'newuserlog-byemail' => 'ئىم ئىلخەتتە يوللاندى',
+'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-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 e6cf4ff..2963c19 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author A1
  * @author AS
+ * @author Aced
  * @author Ahonc
  * @author Aleksandrit
  * @author Alex Khimich
  * @author NickK
  * @author Olvin
  * @author Prima klasy4na
+ * @author RLuts
  * @author Riwnodennyk
  * @author Sodmy
  * @author Urhixidur
  * @author VolodymyrF
  * @author Vox
  * @author Yuriy Apostol
+ * @author Ата
  * @author Дар'я Козлова
  * @author Тест
  */
@@ -378,7 +381,7 @@ $messages = array(
 'tog-enotifusertalkpages' => 'Повідомляти електронною поштою про зміну моєї сторінки обговорення',
 'tog-enotifminoredits' => 'Надсилати мені електронного листа навіть при незначних редагуваннях сторінок та файлів',
 'tog-enotifrevealaddr' => 'Показувати мою поштову адресу в повідомленнях',
-'tog-shownumberswatching' => 'Показувати кількість користувачів, які додали сторінку до свого списку спостереження',
+'tog-shownumberswatching' => 'Показувати число користувачів, які додали сторінку до свого списку спостереження',
 'tog-oldsig' => 'Існуючий підпис:',
 'tog-fancysig' => 'Власна вікі-розмітка підпису (без автоматичного посилання)',
 'tog-externaleditor' => "Використовувати зовнішній редактор за умовчанням (тільки для досвідчених користувачів, вимагає спеціальних налаштувань вашого комп'ютера [//www.mediawiki.org/wiki/Manual:External_editors Детальніше.])",
@@ -400,7 +403,7 @@ $messages = array(
 
 'underline-always' => 'Завжди',
 'underline-never' => 'Ніколи',
-'underline-default' => 'Використати налаштування браузера',
+'underline-default' => 'Ð\92икоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83ваннÑ\8f Ð±Ñ\80аÑ\83зеÑ\80а',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Тип шрифту в полі редагування:',
@@ -479,6 +482,7 @@ $messages = array(
 'index-category' => 'Індексовані сторінки',
 'noindex-category' => 'Неіндексовані сторінки',
 'broken-file-category' => 'Сторінки, що посилаються на неіснуючі файли',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'linkprefix' => '/^(.*?)(„|«)$/sD',
 
@@ -487,8 +491,9 @@ $messages = array(
 'newwindow' => '(відкривається в новому вікні)',
 'cancel' => 'Скасувати',
 'moredotdotdot' => 'Детальніше…',
-'mypage' => 'Моя особиста сторінка',
-'mytalk' => 'Моя сторінка обговорення',
+'morenotlisted' => 'Більше немає нічого…',
+'mypage' => 'Сторінка',
+'mytalk' => 'Обговорення',
 'anontalk' => 'Обговорення для цієї IP-адреси',
 'navigation' => 'Навігація',
 'and' => '&#32;і',
@@ -520,6 +525,7 @@ $messages = array(
 'namespaces' => 'Простори назв',
 'variants' => 'Варіанти',
 
+'navigation-heading' => 'Навігаційне меню',
 'errorpagetitle' => 'Помилка',
 'returnto' => 'Повернення до сторінки «$1».',
 'tagline' => 'Матеріал з {{grammar:genitive|{{SITENAME}}}}',
@@ -733,7 +739,7 @@ $1',
 'viewsource-title' => 'Перегляд вихідного коду сторінки $1',
 'actionthrottled' => 'Обмеження за швидкістю',
 'actionthrottledtext' => 'Як захід боротьби зі спамом, установлено обмеження на багаторазове застосування цієї дії протягом короткого проміжку часу. Будь ласка, повторіть спробу через кілька хвилин.',
-'protectedpagetext' => 'Ця сторінка закрита для редагування.',
+'protectedpagetext' => 'Ця сторінка захищена від редагування та інших дій.',
 'viewsourcetext' => 'Ви можете переглянути та скопіювати початковий текст цієї сторінки:',
 'viewyourtext' => "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
 'protectedinterface' => 'Ця сторінка є частиною інтерфейсу програмного забезпечення цієї вікі і її можуть редагувати лише адміністратори проекту. Щоб додати або змінити переклади для усіх вікі, відвідайте [//translatewiki.net/ translatewiki.net], проект локалізації MediaWiki.',
@@ -762,9 +768,9 @@ $1',
 'logouttext' => "'''Тепер ви працюєте в тому ж режимі, який був до вашого входу до системи.'''
 
 Ви можете продовжувати використовувати {{grammar:accusative|{{SITENAME}}}} анонімно або знову <span class='plainlinks'>[$1 ввійти до системи]</span> як той самий або інший користувач. Деякі сторінки можуть відображатися, ніби ви ще представлені системі під іменем, щоб уникнути цього, оновіть кеш браузера.",
-'welcomecreation' => '== Вітаємо вас, $1! ==
-Ваш обліковий запис створено.
-Не забудьте змінити свої [[Special:Preferences|налаштування для сайту]].',
+'welcomeuser' => 'Вітаємо, $1!',
+'welcomecreation-msg' => 'Ваш акаунт було створено.
+Не забудьте змінити свої [[Special:Preferences|налаштування у {{GRAMMAR:genitive|{{SITENAME}}}}]].',
 'yourname' => "Ім'я користувача:",
 'yourpassword' => 'Пароль:',
 'yourpasswordagain' => 'Повторний набір пароля:',
@@ -866,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' => 'Змінити пароль',
@@ -923,6 +930,7 @@ $2
 'changeemail-oldemail' => 'Поточна адреса електронної пошти:',
 'changeemail-newemail' => 'Нова адреса електронної пошти:',
 'changeemail-none' => '(немає)',
+'changeemail-password' => 'Ваш пароль проекту {{SITENAME}}:',
 'changeemail-submit' => 'Змінити адресу електронної пошти',
 'changeemail-cancel' => 'Скасувати',
 
@@ -1110,7 +1118,6 @@ $2
 'hiddencategories' => 'Ця сторінка належить до $1 {{PLURAL:$1|прихованої категорії|прихованих категорій|прихованих категорій}}:',
 'edittools' => '<!-- Розміщений тут текст буде відображатися під формою редагування і формою завантаження. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Створення сторінок обмежено',
 'nocreatetext' => 'На цьому сайті обмежено можливість створення нових сторінок.
 Ви можете повернуться назад й змінити існуючу сторінку, [[Special:UserLogin|ввійти в систему, або створити новий обліковий запис]].',
 'nocreate-loggedin' => 'У вас нема дозволу створювати нові сторінки.',
@@ -1355,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}}}} журналу вилучень].',
@@ -1446,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|день|дні|днів}}',
@@ -1509,9 +1516,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-memberingroups-type' => '$1',
 'prefs-registration' => 'Час реєстрації:',
 'prefs-registration-date-time' => '$1',
@@ -1623,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' => 'Вилучення сторінок',
@@ -1665,12 +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',
-'rightsnone' => '(нема)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'перегляд цієї сторінки',
@@ -1918,6 +1926,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.',
@@ -2140,7 +2149,7 @@ $1',
 'statistics-pages-desc' => 'Усі сторінки у вікі, включаючи сторінки обговорень, перенаправлення тощо.',
 'statistics-files' => 'Завантажено файлів',
 'statistics-edits' => 'Кількість редагувань з моменту установки {{grammar:genitive|{{SITENAME}}}}',
-'statistics-edits-average' => 'СеÑ\80еднÑ\8f ÐºÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c редагувань на сторінку',
+'statistics-edits-average' => 'СеÑ\80еднÑ\94 Ñ\87иÑ\81ло редагувань на сторінку',
 'statistics-views-total' => 'Усього переглядів',
 'statistics-views-total-desc' => 'Перегляди неіснуючих та спеціальних сторінок не враховані',
 'statistics-views-peredit' => 'Переглядів на редагування',
@@ -2306,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дний Ð´Ð¾Ð¼ÐµÐ½ Ñ\8fкнайменÑ\88е Ð²ÐµÑ\80Ñ\85нÑ\8cого Ñ\80Ñ\96внÑ\8f, Ð½Ð°Ð¿Ñ\80иклад "*.org"<br />
-Підтримувані протоколи: <code>$1</code> (не додавайте жоден з них у вашому пошуку)',
+'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' => 'Підстановочні знаки можуть використовуватися лише на початку адрес.',
 
@@ -2327,10 +2336,6 @@ $1',
 'activeusers-hidesysops' => 'Приховати адміністраторів',
 'activeusers-noresult' => 'Не знайдено користувачів.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал нових користувачів',
-'newuserlogpagetext' => 'Список нещодавно зареєстрованих користувачів.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права груп користувачів',
 'listgrouprights-summary' => 'Нижче наведений список груп користувачів у цій вікі і права для кожної групи.
@@ -2356,11 +2361,11 @@ $1',
 'mailnologin' => 'Відсутня адреса для відправки',
 'mailnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]] і мати підтверджену адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.',
 'emailuser' => 'Надіслати листа',
-'emailuser-title-target' => 'Надіслати електронного листа користувачеві',
+'emailuser-title-target' => 'Надіслати електронного листа {{GENDER:$1|користувачеві|користувачці}}',
 'emailuser-title-notarget' => 'Надіслати електронного листа користувачеві',
 'emailpage' => 'Лист користувачеві',
-'emailpagetext' => 'Заповнивши наведену нижче форму, можна надіслати повідомлення цьому користувачу.
\95лекÑ\82Ñ\80онна Ð°Ð´Ñ\80еÑ\81а, Ñ\8fкÑ\83 Ð²и зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.',
+'emailpagetext' => 'Заповнивши наведену нижче форму, можна надіслати повідомлення {{GENDER:$1|цьому користувачу|цій користувачці}}.
\95лекÑ\82Ñ\80онна Ð°Ð´Ñ\80еÑ\81а, Ñ\8fкÑ\83 Ð\92и зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.',
 'usermailererror' => 'При відправці повідомлення електронної пошти сталася помилка:',
 'defemailsubject' => '{{SITENAME}} - електронний лист від користувача " $1 "',
 'usermaildisabled' => 'Електронне листування між користувачами вимкнене',
@@ -2400,7 +2405,7 @@ $1',
 'watchnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]], щоб мати можливість змінювати список спостереження.',
 'addwatch' => 'Додати до списку спостереження',
 'addedwatchtext' => "Сторінку «[[:$1]]» додано до вашого [[Special:Watchlist|списку спостереження]].
-Подальші редагування цієї сторінки (та пов'язаної з нею сторінки обговорення) відображатимуться в цьому списку. Також їх буде виділено '''жирним шрифтом''' на сторінці зі [[Special:RecentChanges|списком останніх редагувань]], щоб їх було легше помітити.",
+Подальші редагування цієї сторінки (та пов'язаної з нею сторінки обговорення) відображатимуться в цьому списку.",
 'removewatch' => 'Видалити зі списку спостереження',
 'removedwatchtext' => 'Сторінка «[[:$1]]» вилучена з вашого [[Special:Watchlist|списку спостереження]].',
 'watch' => 'Спостерігати',
@@ -2428,20 +2433,23 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}} Служба сповіщення поштою',
 'enotif_reset' => 'Позначити всі сторінки як переглянуті',
-'enotif_newpagetext' => 'Це нова сторінка.',
 'enotif_impersonal_salutation' => 'Користувач {{grammar:genitive|{{SITENAME}}}}',
-'changed' => 'змінена',
-'created' => 'створена',
-'enotif_subject' => 'Сторінка проекту «{{SITENAME}}» $PAGETITLE була $CHANGEDORCREATED користувачем $PAGEEDITOR',
+'enotif_subject_deleted' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було вилучено {{GENDER:$2|користувачем|користувачкою}} $2',
+'enotif_subject_created' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було створено {{GENDER:$2|користувачем|користувачкою}} $2',
+'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_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.',
+'enotif_body_intro_changed' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було змінено $PAGEEDITDATE {{GENDER:$2|користувачем|користувачкою}} $2, див. поточну версію $3.',
 'enotif_lastvisited' => 'Див. $1 для перегляду всіх змін, що відбулися після вашого останнього перегляду.',
 'enotif_lastdiff' => 'Див. $1 для ознайомлення з цією зміною.',
 'enotif_anon_editor' => 'анонімний користувач $1',
 'enotif_body' => 'Шановний $WATCHINGUSERNAME,
 
-
-$PAGEEDITDATE сторінка проекту «{{SITENAME}}» $PAGETITLE була $CHANGEDORCREATED користувачем $PAGEEDITOR, дивіться $PAGETITLE_URL як поточну версію.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Короткий опис змін: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2465,6 +2473,8 @@ $UNWATCHURL
 
 Зворотній зв\'язок і допомога:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створена',
+'changed' => 'змінена',
 
 # Delete
 'deletepage' => 'Вилучити сторінку',
@@ -2507,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]]",
@@ -2535,6 +2545,8 @@ $UNWATCHURL
 'prot_1movedto2' => '«[[$1]]» перейменована на «[[$2]]»',
 'protect-badnamespace-title' => 'Беззахисний простір імен',
 'protect-badnamespace-text' => 'Сторінки у просторі імен не можуть бути захищені.',
+'protect-norestrictiontypes-text' => 'Цю сторінку не може бути захищено, бо немає ніяких типів обмежень.',
+'protect-norestrictiontypes-title' => 'Сторінка, яку неможливо захистити',
 'protect-legend' => 'Підтвердження встановлення захисту',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Закінчується:',
@@ -2550,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',
@@ -2614,7 +2626,8 @@ $UNWATCHURL
 'undeletedrevisions' => '$1 {{PLURAL:$1|редагування|редагування|редагувань}} відновлено',
 'undeletedrevisions-files' => '$1 {{PLURAL:$1|версія|версії|версій}} та $2 {{PLURAL:$2|файл|файли|файлів}} відновлено',
 'undeletedfiles' => '$1 {{PLURAL:$1|файл|файли|файлів}} відновлено',
-'cannotundelete' => 'Не вдалося скасувати видалення, хтось інший вже міг відмінити видалення сторінки.',
+'cannotundelete' => 'Помилка відновлення:
+$1',
 'undeletedpage' => "'''Сторінка «$1» відновлена'''
 
 Див. [[Special:Log/delete|список вилучень]], щоб дізнатися про останні вилучення та відновлення.",
@@ -2645,9 +2658,9 @@ $1',
 'blanknamespace' => '(Основний)',
 
 # Contributions
-'contributions' => 'Внесок користувача',
+'contributions' => 'Внесок {{GENDER:$1|користувача|користувачки}}',
 'contributions-title' => 'Внесок користувача $1',
-'mycontris' => 'Ð\9cÑ\96й Ð²несок',
+'mycontris' => 'Ð\92несок',
 'contribsub2' => 'Внесок $1 ($2)',
 'nocontribs' => 'Редагувань, що задовольняють заданим умовам не знайдено.',
 'uctop' => ' (остання)',
@@ -2859,12 +2872,12 @@ $1',
 Ви відповідаєте за те, щоб посилання і далі вказували туди, куди треба.
 
 Зверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань.
-Це означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати існуючу сторінку.
+Це означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати наявну сторінку.
 
 '''Попередження!'''
 Перейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.
-Тому перед перейменуванням упевніться, що Ви розумієте оцінили можливі наслідки.",
-'movepagetalktext' => "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім наступних випадків:'''
+Тому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
+'movepagetalktext' => "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім таких випадків:'''
 * Непорожня сторінка обговорення з такою назвою вже існує або
 * Ви не поставили галочку в полі нижче.
 
@@ -3026,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» заборонені підсторінки',
@@ -3054,7 +3068,7 @@ $1',
 'tooltip-pt-mytalk' => 'Ваша сторінка обговорення',
 'tooltip-pt-anontalk' => 'Обговорення редагувань з цієї IP-адреси',
 'tooltip-pt-preferences' => 'Ваші налаштування',
-'tooltip-pt-watchlist' => 'Список сторінок, за якими я спостерігаю',
+'tooltip-pt-watchlist' => 'Список сторінок, за змінами в яких Ви спостерігаєте',
 'tooltip-pt-mycontris' => 'Ваш внесок',
 'tooltip-pt-login' => "Тут можна зареєструватися в системі, але це не обов'язково.",
 'tooltip-pt-anonlogin' => "Тут можна зареєструватися в системі, але це не обов'язково.",
@@ -3071,10 +3085,10 @@ $1',
 'tooltip-ca-move' => 'Перейменувати цю сторінку',
 'tooltip-ca-watch' => 'Додати цю сторінку до вашого списку спостереження',
 'tooltip-ca-unwatch' => 'Вилучити цю сторінку з вашого списку спостереження',
-'tooltip-search' => 'Шукати',
+'tooltip-search' => 'Шукати у {{GRAMMAR:genitive|{{SITENAME}}}}',
 'tooltip-search-go' => 'Перейти до сторінки, що має точно таку назву (якщо вона існує)',
 'tooltip-search-fulltext' => 'Знайти сторінки, що містять зазначений текст',
-'tooltip-p-logo' => 'Ð\93оловна Ñ\81Ñ\82оÑ\80Ñ\96нка',
+'tooltip-p-logo' => 'Ð\9fеÑ\80ейÑ\82и Ð½Ð° Ð³Ð¾Ð»Ð¾Ð²Ð½Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83',
 'tooltip-n-mainpage' => 'Перейти на Головну сторінку',
 'tooltip-n-mainpage-description' => 'Перейти на головну сторінку',
 'tooltip-n-portal' => 'Про проект, про те, що ви можете зробити, і що де знаходиться',
@@ -3192,7 +3206,7 @@ The wiki server can't provide data in a format your client can read.",
 
 # Info page
 'pageinfo-title' => 'Інформація про " $1 "',
-'pageinfo-not-current' => 'Ð\94анÑ\96 Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\83Ñ\82и Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ\96 Ð»Ð¸Ñ\88е Ð´Ð»Ñ\8f Ð¿Ð¾Ñ\82оÑ\87ноÑ\97 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97',
+'pageinfo-not-current' => 'Ð\92ибаÑ\87Ñ\82е, Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\86Ñ\8e Ñ\96нÑ\84оÑ\80маÑ\86Ñ\96Ñ\8e Ð´Ð»Ñ\8f Ñ\81Ñ\82аÑ\80иÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й.',
 'pageinfo-header-basic' => 'Основна інформація',
 'pageinfo-header-edits' => 'Історія редагувань',
 'pageinfo-header-restrictions' => 'Захист сторінки',
@@ -3209,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' => 'Останній редактор',
@@ -3221,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' => 'інформація',
@@ -3229,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' => 'Стандартне',
@@ -3251,6 +3270,8 @@ The wiki server can't provide data in a format your client can read.",
 'markedaspatrollederror' => 'Неможливо позначити як перевірену',
 'markedaspatrollederrortext' => 'Ви повинні зазначити версію, яка буде позначена як перевірена.',
 'markedaspatrollederror-noautopatrol' => 'Вам не дозволено позначати власні редагування як перевірені.',
+'markedaspatrollednotify' => 'Цю зміну у «$1» було позначено як відпатрульовану.',
+'markedaspatrollederrornotify' => 'Не вдалося поставити позначку про патрулювання.',
 
 # Patrol log
 'patrol-log-page' => 'Журнал патрулювання',
@@ -3284,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.',
@@ -3318,7 +3340,10 @@ $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' => 'щойно',
 
 # Bad image list
 'bad_image_list' => 'Формат має бути наступним:
@@ -4208,8 +4233,8 @@ MediaWiki поширюється в надії, що вона буде кори
 'sqlite-no-fts' => '$1 без підтримки повнотекстового пошуку',
 
 # New logging system
-'logentry-delete-delete' => '$1 вилучив сторінку $3',
-'logentry-delete-restore' => '$1 відновив сторінку $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|вилучив|вилучила}} сторінку $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|відновив|відновила}} сторінку $3',
 'logentry-delete-event' => '$1 змінив видимість {{PLURAL:$5 запису журнала|$5 записів журналу}} на $3: $4',
 'logentry-delete-revision' => '$1 змінив видимість {{PLURAL:$5 версії|$5 версій}} на сторінці $3: $4',
 'logentry-delete-event-legacy' => '$1 змінив видимість записів журналу подій $3',
@@ -4227,17 +4252,21 @@ MediaWiki поширюється в надії, що вона буде кори
 '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-move-move' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4 без створення перенаправлення',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4 поверх перенаправлення',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку $3 на $4 поверх перенаправлення і без залишення перенаправлення',
 'logentry-patrol-patrol' => '$1 відпатрулював версію $4 сторінки $3',
 'logentry-patrol-patrol-auto' => '$1 автоматично відпатрулював версію $4 сторінки $3',
-'logentry-newusers-newusers' => '$1 створив обліковий запис користувача',
-'logentry-newusers-create' => '$1 â\80\94 Ñ\81Ñ\82воÑ\80ений обліковий запис',
-'logentry-newusers-create2' => '$1 створив обліковий запис користувача $3',
+'logentry-newusers-newusers' => 'Створено обліковий запис $1',
+'logentry-newusers-create' => '$1 â\80\94 Ñ\81Ñ\82воÑ\80ено обліковий запис',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|створив|створила}} обліковий запис {{GENDER:$4|користувача|користувачки}} $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 d6cf1bf..72f19ca 100644 (file)
@@ -428,8 +428,6 @@ Warning: Page may not contain recent updates.',
 'logouttext' => "'''اب آپ خارج ہوچکے ہیں'''
 
 آپ گمنام طور پر {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے <span class='plainlinks'>[$1 دوبارہ داخلِ نوشتہ]</span> بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
-'welcomecreation' => '== خوش آمدید، $1 ! ==
-آپ کا کھاتہ بنا دیا گیا ہے۔ اپنی [[Special:Preferences|{{SITENAME}} ترجیحات]] مرتب کرنا مت بھولئے گا.',
 'yourname' => 'اسمِ رکنیت',
 'yourpassword' => 'کلمۂ شناخت',
 'yourpasswordagain' => 'کلمۂ شناخت دوبارہ لکھیں',
@@ -657,7 +655,6 @@ $1 نے پابندی لگائی تھی.
 'template-protected' => '(محفوظ شدہ)',
 'template-semiprotected' => '(نیم محفوظ)',
 'hiddencategories' => 'یہ صفحہ {{PLURAL:$1|1 چُھپے زمرے|$1 چُھپے زمرہ جات}} میں شامل ہے:',
-'nocreatetitle' => 'تخلیقِ صفحہ محدود',
 'nocreate-loggedin' => 'آپ کو نئے صفحات تخلیق کرنے کی اجازت نہیں ہے.',
 'sectioneditnotsupported-title' => 'قطعہ کی تدوین حمایت شدہ نہیں ہے',
 'sectioneditnotsupported-text' => 'اِس صفحہ میں قطعہ کی تدوین حمایت شدہ نہیں ہے.',
@@ -982,11 +979,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' => 'اس صفحہ میں ترمیم کریں',
@@ -1185,10 +1184,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch-line' => '$1 مربوط ہے $2 سے',
 
-# Special:Log/newusers
-'newuserlogpage' => 'نوشتۂ آمد صارف',
-'newuserlogpagetext' => 'یہ نۓ صارفوں کی آمد کا نوشتہ ہے',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(اراکین کی فہرست)',
 
@@ -1215,9 +1210,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'wlshowlast' => 'دکھائیں آخری $1 گھنٹے $2 دن $3',
 'watchlist-options' => 'اختیارات برائے زیرِنظرفہرست',
 
-'enotif_newpagetext' => 'یہ نیا صفحہ ہے.',
-'changed' => 'تبدیل کردیاگیا',
 'created' => 'بنا دیا گیا',
+'changed' => 'تبدیل کردیاگیا',
 
 # Delete
 'deletepage' => 'صفحہ ضائع کریں',
@@ -1532,6 +1526,9 @@ $1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4',
 # Special:SpecialPages
 'specialpages' => 'خصوصی صفحات',
 
+# New logging system
+'rightsnone' => '(کچھ نہیں)',
+
 # Search suggestions
 'searchsuggest-search' => 'تلاش',
 
index 0e29e0b..e713bb8 100644 (file)
@@ -8,10 +8,12 @@
  * @file
  *
  * @author Abdulla
+ * @author Akmalzhon
  * @author Behzod Saidov <behzodsaidov@gmail.com>
  * @author Casual
  * @author CoderSI
  * @author Lyncos
+ * @author Nataev
  * @author Sociologist
  * @author Urhixidur
  * @author Xexdof
@@ -167,8 +169,8 @@ $messages = array(
 'newwindow' => '(yangi oynada ochiladi)',
 'cancel' => 'Bekor qilish',
 'moredotdotdot' => 'Batafsil...',
-'mypage' => 'Shaxsiy sahifa',
-'mytalk' => 'Suhbatim',
+'mypage' => 'Sahifa',
+'mytalk' => 'Munozaram',
 'anontalk' => 'Bu IP uchun suhbat',
 'navigation' => 'Saytda harakatlanish',
 'and' => '&#32;va',
@@ -230,7 +232,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',
@@ -245,7 +247,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',
@@ -276,8 +278,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",
@@ -372,9 +374,6 @@ Ushbu xabar tarjimasini qo'shish yoki o'zgartirish uchun, iltimos, MediaWikining
 
 {{SITENAME}} saytidan anonim holda foydalanishda davom etishindiz mumkin. Yoki siz yana hozirgi yoki boshqa foydalanuvchi nomi bilan qaytadan tizimga kirishingiz mumkin.
 Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguningizga qadar xuddi tizimga kirganingizdagidek ko'rinishda davom etaverishi mumkin.",
-'welcomecreation' => '== Xush kelibsiz, $1! ==
-Siz yangi hisob yaratdingiz.
-[[Special:Preferences|{{SITENAME}}dagi shaxsiy moslamalaringizni]] oʻzgartirish yodingizdan chiqmasin.',
 'yourname' => 'Foydalanuvchi nomi',
 'yourpassword' => 'Maxfiy soʻz',
 'yourpasswordagain' => 'Maxfiy so‘zni qayta kiriting:',
@@ -389,7 +388,7 @@ Siz yangi hisob yaratdingiz.
 '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',
@@ -475,6 +474,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',
@@ -491,16 +491,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
@@ -509,6 +515,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',
@@ -517,7 +524,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}}:",
@@ -525,7 +532,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.",
@@ -537,8 +543,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",
@@ -554,7 +560,7 @@ Ayrim andozalar qo'shilmaydi.",
 
 # History pages
 'viewpagelogs' => 'Ushbu sahifaga doir qaydlarni koʻrsat',
-'nohistory' => "Ushbu sahifa uchun o'zgarishlar tarixi mavjud emas.",
+'nohistory' => 'Ushbu sahifa uchun oʻzgarishlar tarixi mavjud emas.',
 'currentrev' => 'Hozirgi koʻrinishi',
 'currentrev-asof' => '$1dagi, joriy koʻrinishi',
 'revisionasof' => '$1 paytdagi koʻrinishi',
@@ -578,8 +584,8 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'historyempty' => '(boʻsh)',
 
 # Revision feed
-'history-feed-title' => "O'zgarishlar tarixi",
-'history-feed-description' => "Vikidagi mazkur sahifaning o'zgarishlar tarixi",
+'history-feed-title' => 'Oʻzgarishlar tarixi',
+'history-feed-description' => 'Vikidagi mazkur sahifaning oʻzgarishlar tarixi',
 'history-feed-item-nocomment' => '$1 $2 da',
 
 # Revision deletion
@@ -616,7 +622,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'revertmerge' => "Bo'lish",
 
 # Diffs
-'history-title' => "$1 - o'zgarishlar tarixi",
+'history-title' => '$1 - oʻzgarishlar tarixi',
 'difference-title' => '$1 — versiyalar orasidagi farq',
 'difference-title-multipage' => '"$1" va "$2" sahifalar orasidagi farq',
 'difference-multipage' => '(Sahifalar orasidagi farq)',
@@ -670,7 +676,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.",
@@ -731,6 +737,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)',
@@ -798,6 +805,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:',
@@ -832,9 +840,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',
@@ -844,7 +855,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",
@@ -865,7 +876,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',
@@ -909,7 +920,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
@@ -1003,10 +1014,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",
@@ -1016,31 +1029,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",
@@ -1050,6 +1085,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.",
@@ -1086,68 +1122,98 @@ 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_newpagetext' => 'Bu yangi sahifa',
 'enotif_impersonal_salutation' => '{{SITENAME}} ishtirokchisi',
-'changed' => 'o‘zgartirildi',
-'created' => 'yaratildi',
-'enotif_subject' => '"{{SITENAME}}" loyihasining $PAGETITLE sahifasi $PAGEEDITOR tomonidan $CHANGEDORCREATED',
+'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,
-
-\$PAGEEDITDATE kuni \"{{SITENAME}}\" loyihasining \$PAGETITLE sahifasi ishtirokchi \$PAGEEDITOR tomonidan \$CHANGEDORCREATED, joriy versiyani ko'rish uchun \$PAGETITLE_URL havolasi bo'yicha o'ting.
+'enotif_body' => 'Hurmatli $WATCHINGUSERNAME,
 
-\$NEWPAGE
+$PAGEINTRO $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:',
@@ -1191,8 +1257,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",
@@ -1203,9 +1269,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',
@@ -1220,6 +1286,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',
@@ -1251,27 +1318,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',
@@ -1282,11 +1390,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:',
@@ -1314,7 +1423,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",
@@ -1375,6 +1484,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',
@@ -1500,8 +1610,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 966eabb..a89db40 100644 (file)
@@ -156,7 +156,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 +164,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 +182,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 +197,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,8 +282,9 @@ $messages = array(
 'newwindow' => '(se verze in te na finestra nova)',
 'cancel' => 'Lassa star',
 'moredotdotdot' => 'Altro...',
-'mypage' => 'La me pagina',
-'mytalk' => 'le me discussion',
+'morenotlisted' => 'Altro nó elencà',
+'mypage' => 'Pàjina',
+'mytalk' => 'Discussion',
 'anontalk' => 'Discusion par sto IP',
 'navigation' => 'Navigasion',
 'and' => '&#32;e',
@@ -305,16 +306,17 @@ $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',
 'namespaces' => 'Namespace',
 'variants' => 'Varianse',
 
+'navigation-heading' => 'Menù de navigassion',
 'errorpagetitle' => 'Erore',
 'returnto' => 'Torna a $1.',
 'tagline' => 'Da {{SITENAME}}',
@@ -411,6 +413,10 @@ $1',
 'youhavenewmessages' => 'Te ghè $1 ($2).',
 'newmessageslink' => 'dei mesagi novi',
 'newmessagesdifflink' => 'ultimo canbiamento',
+'youhavenewmessagesfromusers' => "Te ghè $1 da {{PLURAL:$3|n'altro utente|$3 utenti}} ($2).",
+'youhavenewmessagesmanyusers' => 'Te ghè $1 da vari utenti ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|un messagio novo|dei messagi novi}}',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|ultimo canbiamento|ultimi canbiamenti}}',
 'youhavenewmessagesmulti' => 'Te ghè messagi novi su $1',
 'editsection' => 'canbia',
 'editold' => 'canbia',
@@ -462,12 +468,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"
@@ -504,6 +510,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}}.',
@@ -517,12 +525,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',
@@ -537,6 +546,8 @@ $2',
 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"',
@@ -548,16 +559,16 @@ 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.",
-'welcomecreation' => '== Benvegnù, $1! ==
-
-El to nome utente el xe stà creà.
-Te poli sistemarte come te vol le to [[Special:Preferences|prefarense de {{SITENAME}}]].',
+'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',
@@ -638,6 +649,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',
@@ -699,6 +711,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',
 
@@ -795,8 +808,9 @@ Se te sì un utente anonimo e te ghè ricevù dei messagi che te secondo ti i ge
 Te pol [[Special:Search/{{PAGENAME}}|sercar el titolo de sta pagina]] in altre pagine,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sercar in tei registri ligà a sta pagina] o se nò [{{fullurl:{{FULLPAGENAME}}|action=edit}} canbiar la pagina]</span>.',
 'noarticletext-nopermission' => 'In sto momento no ghe xe nissun testo su sta pagina.
-Te pol [[Special:Search/{{PAGENAME}}|sercar el titolo de sta pagina]] in altre pagine,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sercar in tei registri ligà a sta pagina]</span>.',
+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à.
@@ -818,7 +832,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.
@@ -869,7 +883,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à',
@@ -893,6 +906,15 @@ 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',
+'content-model-text' => 'testo normal',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Ocio: Sta pagina la contien dele chiamate de funzion al parser massa onerose.
@@ -914,6 +936,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.',
@@ -1043,9 +1066,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',
@@ -1095,6 +1120,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',
@@ -1170,7 +1199,7 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 
 # Preferences page
 'preferences' => 'Prefarense',
-'mypreferences' => 'prefarense',
+'mypreferences' => 'Prefarense',
 'prefs-edits' => 'Nùmaro de modifiche:',
 'prefsnologin' => 'No te ghè eseguìo el login',
 'prefsnologintext' => 'Te ghè da aver eseguìo el <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} login]</span> par poder personalixare le to preferense.',
@@ -1181,11 +1210,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:",
@@ -1230,7 +1260,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',
@@ -1243,9 +1273,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:',
@@ -1357,6 +1387,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à',
@@ -1393,12 +1424,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',
@@ -1467,7 +1499,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',
@@ -1539,7 +1571,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.',
@@ -1622,6 +1654,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".',
@@ -1636,12 +1669,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à.",
@@ -1718,17 +1787,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',
@@ -1758,6 +1833,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',
@@ -1815,6 +1891,7 @@ Vien considerà pagine de disanbiguazion tute quele che contien i modèi elencà
 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',
@@ -1832,6 +1909,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}}',
@@ -1852,14 +1930,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',
@@ -1892,6 +1974,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',
@@ -1909,6 +1992,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',
@@ -1926,6 +2010,12 @@ Te podi restrénzar i criteri de riçerca selezionando el tipo de registro, el n
 'allpagesprefix' => 'Mostra le pagine che taca con:',
 'allpagesbadtitle' => "El titolo indicà par la pagina no'l xe mìa valido o el contien prefissi interlengua o interwiki. El podarìa inoltre contegner uno o più caràteri che no se pole doparar nei titoli.",
 'allpages-bad-ns' => 'El namespace "$1" no l\'esiste mìa su {{SITENAME}}.',
+'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
 'categories' => 'Categorie',
@@ -1967,10 +2057,6 @@ Protocołi suportadi: <code>$1</code> (no sta xontare nesuno de sti cuà inte ł
 '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,17 +2080,23 @@ Se pol consultar anca dele altre [[{{MediaWiki:Listgrouprights-helppage}}|inform
 'mailnologin' => 'Nissun indirizo a cui mandarghe el messagio',
 'mailnologintext' => 'Par inviare messagi e-mail ad altri utenti bisogna [[Special:UserLogin|acedere al sito]] e aver registrà un indirisso vałido ne łe proprie [[Special:Preferences|preferense]].',
 'emailuser' => 'Scrìveghe a sto utente',
+'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.',
 '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}}",
 'emailfrom' => 'Da:',
 'emailto' => 'A:',
@@ -2023,14 +2115,16 @@ La e-mail che te ghè indicà ne le [[Special:Preferences|to preferense]] la veg
 
 # Watchlist
 'watchlist' => "Pagine tegnùe d'ocio",
-'mywatchlist' => "pagine 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.",
+'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",
@@ -2053,14 +2147,21 @@ I futuri canbiamenti a sta pagina e a la so pagina de discussion i se vedarà fo
 # 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_newpagetext' => 'Sta qua la xe na nova pàxena.',
 'enotif_impersonal_salutation' => 'Utente de {{SITENAME}}',
-'changed' => 'canbià',
-'created' => 'creà',
-'enotif_subject' => 'La pagina $PAGETITLE de {{SITENAME}} la xe stà $CHANGEDORCREATED da $PAGEEDITOR',
+'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',
@@ -2090,6 +2191,8 @@ $UNWATCHURL
 
 Par riscontri e ulteriore assistensa:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creà',
+'changed' => 'canbià',
 
 # Delete
 'deletepage' => 'Scancela pagina',
@@ -2125,6 +2228,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.
@@ -2150,6 +2255,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:',
@@ -2164,11 +2273,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.',
@@ -2234,6 +2344,7 @@ Se dopo ła scancełazion xè stà creà na nova pàxena col stesso titoło, łe
 
 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',
@@ -2242,6 +2353,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:
 
@@ -2252,12 +2364,15 @@ $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
-'contributions' => 'Contributi utente',
+'contributions' => 'Contributi {{GENDER:$1|utente}}',
 'contributions-title' => 'Contributi de $1',
-'mycontris' => 'i me contributi',
+'mycontris' => 'Contributi',
 'contribsub2' => 'Par $1 ($2)',
 'nocontribs' => 'No xe stà catà nissuna modifica che vaga ben par sti critèri.',
 'uctop' => '(ultima)',
@@ -2296,7 +2411,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 i rimandi',
 'whatlinkshere-hidetrans' => '$1 inclusion',
 'whatlinkshere-hidelinks' => '$1 colegamenti',
-'whatlinkshere-hideimages' => '$1 colegamenti a file',
+'whatlinkshere-hideimages' => '$1 colegamenti da file',
 'whatlinkshere-filters' => 'Filtri',
 
 # Block/unblock
@@ -2338,6 +2453,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',
@@ -2349,8 +2467,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}}',
@@ -2367,6 +2496,7 @@ Varda [[Special:BlockList|lista IP blocadi]] par vedare tuti i blochi.',
 'unblocklink' => 'sbloca',
 'change-blocklink' => 'canbia bloco',
 'contribslink' => 'contributi',
+'emaillink' => 'mandar email',
 'autoblocker' => 'Bloccà automaticamente parché el to indirisso IP el xè stà doparà de recente da "[[User:$1|$1]]". La motivassion del bloco de $1 la xe: "$2"',
 'blocklogpage' => 'Blochi',
 'blocklog-showlog' => 'Sto utente el xe stà zà blocà tenpo fa.
@@ -2391,6 +2521,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.',
@@ -2496,13 +2627,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",
@@ -2524,9 +2656,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',
@@ -2559,6 +2693,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à',
@@ -2576,6 +2712,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]].
@@ -2603,6 +2740,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',
@@ -2612,6 +2758,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',
@@ -2672,6 +2828,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.',
@@ -2702,10 +2860,52 @@ 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-header-edits' => 'Modìfeghe',
+'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',
+'pageinfo-header-properties' => 'Proprietà de la pagina',
+'pageinfo-display-title' => 'Titolo mostrà',
+'pageinfo-default-sort' => 'Ciave de ordinamento predefinìo',
+'pageinfo-length' => 'Longhessa de la pagina (in byte)',
+'pageinfo-article-id' => 'ID de la pagina',
+'pageinfo-language' => 'Lengua del contenuto de la pagina',
+'pageinfo-robot-policy' => 'Stato par i motori de riserca',
+'pageinfo-robot-index' => 'Indicizabile',
+'pageinfo-robot-noindex' => 'Mia indicizabile',
+'pageinfo-views' => 'Nùmaro de visite',
+'pageinfo-watchers' => "Nùmaro de utenti che tien d'ocio sta pagina",
+'pageinfo-redirects-name' => 'Rimandi verso sta pagina',
+'pageinfo-subpages-name' => 'Sotopagine de sta pagina',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|rimandi}}; $3 {{PLURAL:$3|no rimandi}})',
+'pageinfo-firstuser' => 'Creador de sta pagina',
+'pageinfo-firsttime' => 'Data de creassion de la pagina',
+'pageinfo-lastuser' => 'Ultimo contribudor',
+'pageinfo-lasttime' => 'Data de ultima modifica',
+'pageinfo-edits' => 'Nùmaro totale de canbiamenti',
+'pageinfo-authors' => 'Nùmaro totale de autori difarenti',
+'pageinfo-recent-edits' => 'Nùmaro de canbiamenti recenti (in tei ultimi $1)',
+'pageinfo-recent-authors' => 'Nùmaro de autori difarenti recenti',
+'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',
+'pageinfo-contentpage' => 'Contà come na pagina de contenuto',
+'pageinfo-contentpage-yes' => 'Sì',
+'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à',
@@ -2717,6 +2917,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',
@@ -2746,14 +2948,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',
@@ -2767,6 +2977,16 @@ La so esecuzion la podarìa danegiar el to computer.",
 'bydate' => 'data',
 'sp-newimages-showfrom' => 'Mostra i file piassè novi a partire da le ore $2 del $1',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|un secondo|$1 secondi}}',
+'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',
+
 # Bad image list
 'bad_image_list' => 'El formato xe sto qua:
 
@@ -2907,10 +3127,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',
 
@@ -2929,6 +3218,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',
@@ -3046,6 +3337,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',
 
@@ -3062,10 +3357,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])',
@@ -3134,6 +3478,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
@@ -3141,6 +3486,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
@@ -3148,6 +3495,12 @@ Par piaser, conferma che te vołi dal bon ricrear sta voxe.",
 'confirm-purge-top' => 'Vóto scancełar ła cache in sta pàxena?',
 'confirm-purge-bottom' => 'Netar la cache de na pàxena parmete de far védar la so version piassè ajornà.',
 
+# 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',
 'imgmultipagenext' => 'la pagina dopo →',
@@ -3224,6 +3577,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',
@@ -3237,6 +3591,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.
@@ -3245,6 +3600,9 @@ 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
 'filepath' => 'Percorso de un file',
@@ -3262,15 +3620,16 @@ 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',
@@ -3316,6 +3675,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',
@@ -3368,14 +3730,85 @@ 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' => 'Lutensa $3 xe sta creà da $1',
 '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-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}}',
+'duration-hours' => '$1 {{PLURAL:$1|ora|ore}}',
+'duration-days' => '$1 {{PLURAL:$1|zorno|zorni}}',
+'duration-weeks' => '$1 {{PLURAL:$1|stimana|stimane}}',
+'duration-years' => '$1 {{PLURAL:$1|ano|ani}}',
+'duration-decades' => '$1 {{PLURAL:$1|decenio|deceni}}',
+'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenio|mileni}}',
+
 );
index 362f233..3980a0a 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Aig mest ei varasta
  * @author Andrijko Z.
  * @author Kaganer
  * @author Sura
@@ -221,7 +222,7 @@ $messages = array(
 'cancel' => 'Heitta pätand',
 'moredotdotdot' => 'Edeleze...',
 'mypage' => "Minun lehtpol'",
-'mytalk' => 'Minun lodud',
+'mytalk' => 'Lodud',
 'anontalk' => 'Lodud neciš IP-adresas',
 'navigation' => 'Navigacii',
 'and' => '&#32;da',
@@ -472,9 +473,6 @@ Sü om "\'\'$2\'\'".',
 
 Sab jatkta rad {{SITENAME}}-saital anonimižikš, vai <span class='plainlinks'>[$1 kirjutagatoiš udes]</span> sil-žo vai toižel kävutajan nimel.
 Otkat sil'mnägubale, miše erasid lehtpolid ozutaškatas mugažo, kut i edel teiden lähtendad sistemaspäi. Miše vajehtada niiden nägu, puhtastagat teiden kaclimen keš.",
-'welcomecreation' => '== Tulgat tervhen, $1! ==
-Teiden registracii om loptud.
-Algat unohtagoi [[Special:Preferences|järgeta personaližikš]] sait.',
 'yourname' => 'Kävutajan nimi:',
 'yourpassword' => 'Peitsana:',
 'yourpasswordagain' => 'Kirjutagat peitsana udes:',
@@ -733,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.',
@@ -987,7 +984,7 @@ Otkat sil'mnägubale üks-se, miše {{SITENAME}}-saitan sädäimišt voib olda v
 
 # Preferences page
 'preferences' => 'Järgendused',
-'mypreferences' => 'Minun järgendused',
+'mypreferences' => 'Järgendused',
 'prefs-edits' => 'Redaktiruindoiden lugu:',
 'prefsnologin' => 'Tö et olgoi kirjutanus sistemha.',
 'prefsnologintext' => 'Teile pidab <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kirjutadas sistemha]</span>, miše toižetada järgendusid.',
@@ -1200,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",
@@ -1385,7 +1384,7 @@ Ku problem jäb jäl'ghepäi-ki, säkat pagin [[Special:ListUsers/sysop|sistemad
 'backend-fail-writetemp' => 'Ei voi toižetada pordaigašt failad.',
 'backend-fail-closetemp' => 'Ei voi saubata pordaigašt failad.',
 'backend-fail-read' => 'Ei voi lugeda "$1"-failad.',
-'backend-fail-create' => 'Ei voi säta "$1"-failad.',
+'backend-fail-create' => 'Ei voi kirjutada "$1"-failad.',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'Valitud fail ei ole ZIP-fail.',
@@ -1691,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',
@@ -1739,7 +1734,7 @@ Kc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].',
 
 # Watchlist
 'watchlist' => 'Kaclendnimikirjutez',
-'mywatchlist' => 'Minun kaclendnimikirjutez',
+'mywatchlist' => 'Kaclendnimikirjutez',
 'watchlistfor2' => 'Kävutajale $1 $2',
 'nowatchlist' => "Teiden kaclendnimikirjutez om pall'az.",
 'watchlistanontext' => 'Olgat hüväd, $1, miše lugeda vai redaktiruida teiden kaclendnimikirjutez.',
@@ -1768,11 +1763,7 @@ Kc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].',
 
 'enotif_mailer' => "{{SITENAME}}-saitan lehtpol' om toižetadud - tedotuz",
 'enotif_reset' => 'Znamoita kaik lehtpoled kut kactud',
-'enotif_newpagetext' => 'Nece om uz’ lehtpol’',
 'enotif_impersonal_salutation' => '{{SITENAME}}-saitan kävutai',
-'changed' => 'om toižetadud',
-'created' => 'om sätud',
-'enotif_subject' => '$PAGEEDITOR om $CHANGEDORCREATED $PAGETITLE',
 'enotif_lastvisited' => "Kc. $1, miše nähta kaik teiden jäl'gmäižen vizitan jäl'ghe tehtud toižetused.",
 'enotif_lastdiff' => 'Kc. $1, miše kacelta toižetusid.',
 'enotif_anon_editor' => 'anonimine kävutai $1',
@@ -1807,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š",
@@ -1967,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',
@@ -2370,9 +2363,10 @@ Voib olda, necil lehtpolel om kosketuz irdsaitale, kudamb om mustas nimikirjutes
 'spambot_username' => 'MediaWikid puhtastadas spamaspäi',
 
 # Info page
-'pageinfo-header-edits' => 'Redakcijad',
+'pageinfo-header-edits' => 'Redakcijoiden istorii',
+'pageinfo-article-id' => 'Lehtpolen ID',
 'pageinfo-views' => 'Kacundoiden lugu',
-'pageinfo-watchers' => 'Kaclijoiden lugu',
+'pageinfo-watchers' => 'Lehtpolen kaclijoiden lugu',
 'pageinfo-edits' => 'Redakcijoiden lugumär',
 'pageinfo-authors' => 'Erazvuiččiden avtoroiden lugu',
 
@@ -2600,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',
@@ -2781,17 +2776,26 @@ Ku fail redaktiruidihe sändan polhe, erased parametrad voidas erineda nügüdl
 'exif-dc-publisher' => 'Pästai',
 'exif-dc-rights' => 'Oiktused',
 
+'exif-iimcategory-clj' => 'Ogerantegend da käskuz',
+'exif-iimcategory-dis' => 'Katastrofad da avarijad',
+'exif-iimcategory-fin' => 'Ekonomik da biznes',
 'exif-iimcategory-edu' => 'Openduzmär',
+'exif-iimcategory-evn' => 'Ümbrišt',
 'exif-iimcategory-hth' => 'Tervhuz',
+'exif-iimcategory-hum' => "Mel'hetartujad istorijad",
 'exif-iimcategory-lab' => 'Tö',
+'exif-iimcategory-lif' => 'Elonmahtuz da joudai aig',
 'exif-iimcategory-pol' => 'Politik',
 'exif-iimcategory-rel' => 'Religii da uskonduz',
 'exif-iimcategory-sci' => 'Tedo da tehnologii',
 'exif-iimcategory-soi' => 'Socialižed küzundad',
 'exif-iimcategory-spo' => 'Sport',
+'exif-iimcategory-war' => 'Voinad, konfliktad da kundanholdundad',
 'exif-iimcategory-wea' => 'Sä',
 
 'exif-urgency-normal' => 'Normaline ($1)',
+'exif-urgency-low' => 'Madal ($1)',
+'exif-urgency-high' => 'Korged ($1)',
 
 # External editor support
 'edit-externally' => 'Redaktiruida nece fail irdprogrammal',
@@ -2848,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' →",
@@ -2934,6 +2942,7 @@ Kävutagat normaline ezikacund.',
 'version-specialpages' => 'Specialižed lehtpoled',
 'version-parserhooks' => 'Sintaksižen analizatoran sabustajad',
 'version-variables' => 'Vajehtujad lugud',
+'version-antispam' => 'Antispam',
 'version-skins' => 'Nägutemad',
 'version-other' => 'Toine',
 'version-mediahandlers' => 'Median radimed',
@@ -2949,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',
@@ -3048,6 +3058,7 @@ Kävutagat normaline ezikacund.',
 '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:',
@@ -3072,4 +3083,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 3e60870..e2b618d 100644 (file)
@@ -408,13 +408,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,8 +429,9 @@ $messages = array(
 'newwindow' => '(mở cửa sổ mới)',
 'cancel' => 'Hủy bỏ',
 'moredotdotdot' => 'Thêm nữa…',
-'mypage' => 'Trang của tôi',
-'mytalk' => 'Thảo luận với tôi',
+'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',
 'navigation' => 'Xem nhanh',
 'and' => '&#32;và',
@@ -462,6 +463,7 @@ $messages = array(
 'namespaces' => 'Không gian tên',
 'variants' => 'Biến thể',
 
+'navigation-heading' => 'Trình đơn chuyển hướng',
 'errorpagetitle' => 'Lỗi',
 'returnto' => 'Quay lại $1.',
 'tagline' => 'Từ {{SITENAME}}',
@@ -543,8 +545,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.',
@@ -630,7 +632,7 @@ Cơ sở dữ liệu báo lỗi “$3: $4”',
 'enterlockreason' => 'Nêu lý do khóa, cùng với thời hạn khóa',
 'readonlytext' => 'Cơ sở dữ liệu hiện đã bị khóa không nhận trang mới và các điều chỉnh khác, có lẽ để bảo trì cơ sở dữ liệu định kỳ, một thời gian ngắn nữa nó sẽ trở lại bình thường.
 
-Bảo quản viên khóa nó đã đưa ra lời giải thích sau: $1',
+Quản lý viên khóa nó đã đưa ra lời giải thích sau: $1',
 'missing-article' => 'Cơ sở dữ liệu không tìm thấy văn bản của trang lẽ ra phải có, trang      Normal   0               false   false   false      EN-US   X-NONE   X-NONE                                                     MicrosoftInternetExplorer4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     “$1” $2.
 
 Điều này thường xảy ra do nhấn vào liên kết khác biệt phiên bản đã quá lâu hoặc liên kết lịch sử của một trang đã bị xóa.
@@ -669,7 +671,7 @@ Truy vấn: $2',
 'viewsource-title' => 'Xem mã nguồn của $1',
 'actionthrottled' => 'Thao tác bị giới hạn',
 'actionthrottledtext' => 'Để nhằm tránh spam, bạn không thể thực hiện thao tác này quá nhiều lần trong một thời gian ngắn.  Xin hãy chờ vài phút trước khi thực hiện lại.',
-'protectedpagetext' => 'Trang này đã bị khóa không cho sửa đổi.',
+'protectedpagetext' => 'Trang này đã bị khóa không cho sửa đổi hoặc tác động khác.',
 'viewsourcetext' => 'Bạn vẫn có thể xem và chép xuống mã nguồn của trang này:',
 'viewyourtext' => "Bạn vẫn có thể xem và chép xuống mã nguồn '''các sửa đổi của bạn''' tại trang này:",
 'protectedinterface' => 'Trang này cung cấp một thông báo trong giao diện phần mềm, và bị khóa để tránh phá hoại. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.',
@@ -700,9 +702,9 @@ Bảo quản viên khóa nó đưa lý do là: “$3”.',
 'logouttext' => "'''Bạn đã đăng xuất.'''
 
 Bạn có thể tiếp tục dùng {{SITENAME}} một cách vô danh, hoặc bạn có thể <span class='plainlinks'>[$1 đăng nhập lại]</span> dưới cùng tên người dùng này hoặc một tên người dùng khác. Xin lưu ý rằng một vài trang có thể vẫn hiển thị như khi bạn còn đăng nhập, cho đến khi bạn xóa vùng nhớ đệm (''cache'') của trình duyệt.",
-'welcomecreation' => '== Chào mừng, $1! ==
-Tài khoản của bạn đã mở.
-Đừng quên thay đổi [[Special:Preferences|tùy chọn cá nhân của bạn tại {{SITENAME}}]].',
+'welcomeuser' => 'Hoan nghênh, $1!',
+'welcomecreation-msg' => 'Tài khoản của bạn đã được mở.
+Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]] của bạn.',
 'yourname' => 'Tên người dùng:',
 'yourpassword' => 'Mật khẩu:',
 'yourpasswordagain' => 'Gõ lại mật khẩu',
@@ -787,6 +789,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',
@@ -855,6 +858,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ỏ',
 
@@ -940,7 +944,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.
@@ -958,9 +962,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.",
@@ -1016,7 +1020,7 @@ Bạn phải đảm bảo với chúng tôi rằng chính bạn là người vi
 Không thể lưu trang.",
 'readonlywarning' => "'''CẢNH BÁO: Cơ sở dữ liệu đã bị khóa để bảo dưỡng, do đó bạn không thể lưu các sửa đổi của mình. Bạn nên cắt-dán đoạn bạn vừa sửa vào một tập tin và lưu nó lại để sửa đổi sau này.'''
 
-Bảo quản viên khi khóa dữ liệu đã đưa ra lý do: $1",
+Quản lý viên khi khóa dữ liệu đã đưa ra lý do: $1",
 'protectedpagewarning' => "'''Cảnh báo: Trang này đã bị khóa và chỉ có các thành viên có quyền quản lý mới có thể sửa được.'''
 Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
 'semiprotectedpagewarning' => "'''Lưu ý:''' Trang này đã bị khóa nên chỉ có các thành viên có tài khoản mới có thể sửa đổi được.
@@ -1031,7 +1035,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.',
@@ -1313,7 +1316,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)',
@@ -1429,14 +1432,14 @@ Không có thể lùi lại tác động này.',
 'prefs-emailconfirm-label' => 'Xác nhận thư điện tử:',
 'prefs-textboxsize' => 'Kích cỡ hộp sửa đổi',
 'youremail' => 'Thư điện tử:',
-'username' => 'Tên người dùng:',
-'uid' => 'Số thứ tự thành viên:',
-'prefs-memberingroups' => 'Thành viên của {{PLURAL:$1|nhóm|nhóm}}:',
+'username' => '{{GENDER:$1}}Tên người dùng:',
+'uid' => '{{GENDER:$1}}Số thứ tự thành viên:',
+'prefs-memberingroups' => '{{GENDER:$2}}Thành viên của {{PLURAL:$1|nhóm|các nhóm}}:',
 'prefs-registration' => 'Lúc mở tài khoản:',
 '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.',
@@ -1581,15 +1584,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',
@@ -1650,8 +1651,8 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'rclinks' => 'Xem $1 sửa đổi gần đây nhất trong $2 ngày qua; $3.',
 'diff' => 'khác',
 'hist' => 'sử',
-'hide' => 'ẩn',
-'show' => 'hiện',
+'hide' => 'Ẩn',
+'show' => 'Hiện',
 'minoreditletter' => 'n',
 'newpageletter' => 'M',
 'boteditletter' => 'b',
@@ -1830,6 +1831,7 @@ Nếu vẫn còn bị lỗi, xin hãy liên hệ với một [[Special:ListUsers
 'backend-fail-notsame' => 'Một tập tin khác biệt đã tồn tại ở $1.',
 'backend-fail-invalidpath' => '$1 không phải đường dẫn lưu giữ hợp lệ.',
 'backend-fail-delete' => 'Không thể xóa tập tin $1.',
+'backend-fail-describe' => 'Không thể thay đổi siêu dữ liệu của tập tin “$1”.',
 'backend-fail-alreadyexists' => 'Tập tin $1 đã tồn tại.',
 'backend-fail-store' => 'Không thể lưu tập tin $1 tại $2.',
 'backend-fail-copy' => 'Không thể chép tập tin $1 đến $2.',
@@ -2143,7 +2145,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',
@@ -2213,7 +2215,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'').",
 
@@ -2232,10 +2234,6 @@ Xem thêm [[Special:WantedCategories|thể loại cần thiết]].',
 '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.
@@ -2294,15 +2292,15 @@ Có [[{{MediaWiki:Listgrouprights-helppage}}|thông tin thêm]] về từng nhó
 
 # Watchlist
 'watchlist' => 'Trang tôi theo dõi',
-'mywatchlist' => 'Trang tôi 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ì.',
 'watchlistanontext' => 'Xin hãy $1 để xem hay sửa đổi các trang được theo dõi.',
 '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',
@@ -2330,20 +2328,23 @@ Những sửa đổi đối với trang này và trang thảo luận của nó s
 
 'enotif_mailer' => 'Thông báo của {{SITENAME}}',
 'enotif_reset' => 'Đánh dấu đã xem mọi trang',
-'enotif_newpagetext' => 'Trang này mới',
 'enotif_impersonal_salutation' => 'thành viên {{SITENAME}}',
-'changed' => 'thay đổi',
-'created' => 'viết mới',
-'enotif_subject' => '$PAGETITLE tại {{SITENAME}} đã được $CHANGEDORCREATED bởi $PAGEEDITOR',
+'enotif_subject_deleted' => 'Trang $1 tại {{SITENAME}} đã được xóa bởi $2.',
+'enotif_subject_created' => 'Trang $1 tại {{SITENAME}} đã được tạo ra bởi $2.',
+'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 $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 .',
+'enotif_body_intro_changed' => 'Trang $1 tại {{SITENAME}} đã được $2 thay đổi vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .',
 'enotif_lastvisited' => 'Xem $1 để biết các thay đổi diễn ra từ lần xem cuối cùng của bạn.',
 'enotif_lastdiff' => 'Vào $1 để xem sự thay đổi này.',
 'enotif_anon_editor' => 'người dùng vô danh $1',
 'enotif_body' => 'Xin chào $WATCHINGUSERNAME,
 
-
-Trang $PAGETITLE tại {{SITENAME}} đã được $PAGEEDITOR $CHANGEDORCREATED vào $PAGEEDITDATE, xem phiên bản hiện hành tại $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Tóm lược sửa đổi: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2351,8 +2352,7 @@ Liên lạc với người viết trang qua:
 thư: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Sẽ không có thông báo nào khác nếu có sự thay đổi tiếp theo trừ khi bạn xem trang đó.
-Bạn cũng có thể thiết lập lại việc nhắc nhở cho tất cả các trang nằm trong danh sách theo dõi của bạn.
+Sẽ không có thông báo nào khác nếu có sự thay đổi tiếp theo trừ khi bạn xem trang đó. Bạn cũng có thể thiết lập lại việc nhắc nhở cho tất cả các trang nằm trong danh sách theo dõi của bạn.
 
               Hệ thống báo tin {{SITENAME}} thân thiện của bạn
 
@@ -2368,6 +2368,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',
@@ -2436,6 +2438,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:',
@@ -2451,9 +2455,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',
@@ -2551,9 +2555,9 @@ $1',
 'blanknamespace' => '(Chính)',
 
 # Contributions
-'contributions' => 'Đóng góp của thành viên',
+'contributions' => '{{GENDER:$1}}Đóng góp của thành viên',
 'contributions-title' => 'Đóng góp của thành viên $1',
-'mycontris' => 'Đóng góp của tôi',
+'mycontris' => 'Đóng góp',
 'contribsub2' => 'Của $1 ($2)',
 'nocontribs' => 'Không tìm thấy thay đổi nào khớp với yêu cầu.',
 'uctop' => '(mới nhất)',
@@ -2752,7 +2756,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!'''
@@ -2933,6 +2937,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.',
@@ -2967,10 +2972,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',
@@ -3065,12 +3070,12 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 # Attribution
 'anonymous' => '{{PLURAL:$1|Người dùng|Người dùng}} vô danh của {{SITENAME}}',
 'siteuser' => 'thành viên $1 của {{SITENAME}}',
-'anonuser' => 'người vô danh $1 tại {{SITENAME}}',
+'anonuser' => 'người dùng vô danh $1 tại {{SITENAME}}',
 'lastmodifiedatby' => 'Trang này được $3 cập nhật lần cuối lúc $2 $1.',
 'othercontribs' => 'Dựa trên công trình của $1.',
 'others' => 'những người khác',
 'siteusers' => '{{PLURAL:$2|Thành viên|Các thành viên}} $1 của {{SITENAME}}',
-'anonusers' => '{{plural:$2|người|những người}} vô danh $1 tại {{SITENAME}}',
+'anonusers' => '{{PLURAL:$2|người dùng|những người dùng}} vô danh $1 tại {{SITENAME}}',
 'creditspage' => 'Trang ghi nhận đóng góp',
 'nocredits' => 'Không có thông tin ghi nhận đóng góp cho trang này.',
 
@@ -3115,7 +3120,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',
@@ -3124,6 +3130,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',
@@ -3144,9 +3154,11 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'markedaspatrollederror' => 'Không thể đánh dấu tuần tra',
 'markedaspatrollederrortext' => 'Bạn phải chọn phiên bản để đánh dấu tuần tra.',
 'markedaspatrollederror-noautopatrol' => 'Bạn không được đánh dấu tuần tra vào sửa đổi của bạn.',
+'markedaspatrollednotify' => 'Đã được đánh dấu tuần tra vào thay đổi tại $1.',
+'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',
 
@@ -3178,6 +3190,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.',
@@ -3212,7 +3225,10 @@ 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',
 
 # Bad image list
 'bad_image_list' => 'Định dạng như sau:
@@ -4020,8 +4036,8 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'compare-rev1' => 'Phiên bản 1',
 'compare-rev2' => 'Phiên bản 2',
 'compare-submit' => 'So sánh',
-'compare-invalid-title' => 'Tựa trang chỉ định không hợp lệ.',
-'compare-title-not-exists' => 'Tựa trang chỉ định không tồn tại.',
+'compare-invalid-title' => 'Tên trang chỉ định không hợp lệ.',
+'compare-title-not-exists' => 'Tên trang chỉ định không tồn tại.',
 'compare-revision-not-exists' => 'Phiên bản chỉ định không tồn tại.',
 
 # Database error messages
@@ -4075,11 +4091,15 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'logentry-move-move_redir-noredirect' => '$1 đã đổi $3 thành $4 qua đổi hướng (đã tắt đổi hướng)',
 'logentry-patrol-patrol' => '$1 đã đánh dấu tuần tra phiên bản $4 của trang $3',
 'logentry-patrol-patrol-auto' => '$1 đã tự động đánh dấu tuần tra phiên bản $4 của trang $3',
-'logentry-newusers-newusers' => '$1 đã mở tài khoản mới',
-'logentry-newusers-create' => '$1 đã mở tài khoản mới',
+'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-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].
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 cb66929..b6774ea 100644 (file)
@@ -475,9 +475,6 @@ Kod binon: ''$2''.",
 
 Kanol laigebön {{SITENAME}} nennemiko, u kanol <span class='plainlinks'>[$1 nunädön oli dönu]</span> me gebananem ot u gebenanem votik.
 Küpälolös, das pads anik ba nog pojenons äsva no esenunädol oli, jüs uklinükol memi no laidüpik bevüresodanaföma olik.",
-'welcomecreation' => '== Benokömö, o $1! ==
-Kal olik pejafon.
-No glömolöd ad votükön [[Special:Preferences|buükamis olik in {{SITENAME}}]].',
 'yourname' => 'Gebananem:',
 'yourpassword' => 'Letavöd:',
 'yourpasswordagain' => 'Klavolös dönu letavödi:',
@@ -722,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.',
@@ -1142,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',
@@ -1610,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.
@@ -1692,11 +1686,7 @@ If vilol poso moükön padi de galädalised olik, välolös lä on knopi: „neg
 
 'enotif_mailer' => 'Nunamasit ela {{SITENAME}}',
 'enotif_reset' => 'Malön padis pevisitöl valik',
-'enotif_newpagetext' => 'Atos binon pad nulik.',
 'enotif_impersonal_salutation' => 'Geban {{SITENAME}}-a',
-'changed' => 'pevotüköl',
-'created' => 'pejafon',
-'enotif_subject' => 'In {{SITENAME}}, pad: $PAGETITLE $CHANGEDORCREATED fa el $PAGEEDITOR',
 'enotif_lastvisited' => 'Logolös eli $1 ad tuvön lisedi votükamas valik pos visit lätik ola.',
 'enotif_lastdiff' => 'Logolös eli $1 ad tuvön votükami at.',
 'enotif_anon_editor' => 'geban nennemik: $1',
@@ -1724,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',
@@ -2818,6 +2810,7 @@ Magods pajonons ma fomät gudikün, ragivasots votik pamaifükons stedöfo kobü
 '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 89fda5b..895d82e 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author 2Q
+ * @author Aig mest ei varasta
  * @author Andrijko Z.
  * @author Comp1089
  * @author Erdemaslancan
@@ -87,6 +88,7 @@ $messages = array(
 'category-article-count' => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava cülci.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 cülciä kuuluvad}} sihee gruppaa. Cülcije cisla gruppaza on $2.}}',
 'category-file-count' => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava faili.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 failid kuuluvad}} sihee gruppaa. Cülcije cisla gruppaza on $2.}}',
 'listingcontinuesabbrev' => 'ladvaub',
+'noindex-category' => 'Ebäindekseeritettäväd lehocülled',
 
 'about' => 'Täätühsed',
 'newwindow' => '(avaub uuvvõza akkunaza)',
@@ -221,9 +223,11 @@ Kui cüsümüssessä ebõõ roocittu cülci, võib õlla õlõttõ löütännü
 # Login and logout pages
 'yourname' => 'Cäüttijänimi:',
 'yourpassword' => 'Salasõna',
+'yourpasswordagain' => 'Tõissaga salain-sõna:',
 'remembermypassword' => 'Mäleht minuu (enintään $1 {{PLURAL:$1|päivä|päivää}})',
 'login' => 'Cirjut süäme',
 'nav-login-createaccount' => 'Cirjut süäme vai registriiroit cäüttijässi',
+'loginprompt' => 'Tüü piättä «cookies» võttamin luvata, štobõ entä sisteema ete esitellä.',
 'userlogin' => 'Cirjut süäme',
 'userloginnocreate' => 'Cirjut süäme',
 'logout' => 'Cirjut uloz',
@@ -231,7 +235,9 @@ Kui cüsümüssessä ebõõ roocittu cülci, võib õlla õlõttõ löütännü
 'nologin' => "Kui Teille veel ebõõ cäüttijänimi, '''$1'''.",
 'nologinlink' => 'võitta loovva luguu',
 'createaccount' => 'Uusi cäüttijää',
+'gotaccount' => 'Tüü õõttõ jo registreerittu? $1.',
 'gotaccountlink' => 'Cirjut süäme',
+'userlogin-resetlink' => 'Vai unõhtittõ õma loginass?',
 'createaccountreason' => 'Süü:',
 'mailmypassword' => 'Lähet uusi salasõna elektropoštiikaa',
 'loginlanguagelabel' => 'Ceeli: $1',
@@ -294,12 +300,16 @@ Tüü võittõ [[Special:Search/{{PAGENAME}}|kaze nime nimettamizõ löütä]] m
 'template-semiprotected' => '(varjõttu anonüümeilt ja uusilt cäüttijilt)',
 'hiddencategories' => 'Kase cülci kuulub {{PLURAL:$1|vahtiaavaa salautõttuu gruppaa|vahtiaavii salautõttuisõõ gruppoisõõ}}:',
 'permissionserrorstext-withaction' => 'Teill ebõõ luppa $2 {{PLURAL:$1|vahtiaavass süüss|vahtiaaviss süiss}} peräss:',
+'recreate-moveddeleted-warn' => "'''Tähele-pano. Tüü loottõ taaz lehocülce, kumpa õli eespäi poisõttu.'''
+
+Tarkassaga, vai tarviz teile sitä tehä. Alapallõ õlla kaze lehocülle poissamizije ja nimije muuttamizije žurnaalad esitettü.",
 'moveddeleted-notice' => "Kase cülci on pühittü. Alla on sene cüľľee pühi'istori.",
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Etetäätämin:''' lizettävije šabloonije summaarin koko on liiga suuri.
 Mõnõd šabloonad eväd lee lizettü.",
 'post-expand-template-inclusion-category' => 'Lehocülled, jõgõit vart lizettävije šabloonije sallittu koko on ületettü',
+'post-expand-template-argument-warning' => "'''Tähele-pano''': kase lehocülci sisältäb vähepält ühs šabloona, kumma argumental on liiga suuri avvamizõ koko. Mokomad argumentad eväd õltu näütettü",
 'post-expand-template-argument-category' => 'Lehocülled, jõgad sisälletä väl’l’ä-jätettü šabloonije argumentad.',
 
 # History pages
@@ -307,6 +317,7 @@ Mõnõd šabloonad eväd lee lizettü.",
 'currentrev' => 'Nücüin verzija',
 'currentrev-asof' => 'Nücüin verzija $1',
 'revisionasof' => 'Verzija $1',
+'revision-info' => '41. Verssija $1-ss; $2',
 'previousrevision' => '← Vanõpi verzija',
 'nextrevision' => 'Uuvvõpi verzija →',
 'currentrevisionlink' => 'Nücüin verzija',
@@ -345,6 +356,7 @@ Mõnõd šabloonad eväd lee lizettü.",
 'lineno' => 'Viiru $1:',
 'compareselectedversions' => 'Võrrõõ valitsõttuit verzijoit',
 'editundo' => 'kummut',
+'diff-multi' => 'Eb õõ näütettü {{PLURAL:$1|õsa-võttaja|õsa-võttajije}} {{PLURAL:$2|$2 väli-verssija $1|väli-verssijad $1}}',
 
 # Search results
 'searchresults' => 'Etsüü tulõmuhsõd',
@@ -373,6 +385,7 @@ Mõnõd šabloonad eväd lee lizettü.",
 'searchprofile-everything-tooltip' => 'Õttsigo kõikill lehocüllill (ceskussõõmizõ lehocülled siällhulgaz)',
 'searchprofile-advanced-tooltip' => 'Annõttu nimije tiloiz õttsia',
 'search-result-size' => '$1 ({{PLURAL:$2|1 sõna|$2 sõna}})',
+'search-result-category-size' => '$1 {{PLURAL:$1|jäse|$1 jäsentä}} ({{PLURAL:$2|1 all-kategoorija|$2 all-kategoorijad}}, {{PLURAL:$3|1 faili|$3 faila}})',
 'search-redirect' => '(mešaituz $1)',
 'search-section' => '(alajako $1)',
 'search-suggest' => 'Tähetidko: $1',
@@ -416,6 +429,8 @@ Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taa
 'gender-male' => 'Mehin',
 'gender-female' => 'Naisin',
 'email' => 'E-mail',
+'prefs-help-email' => 'E-mail eb õõ pakollin, ain se leeb vajallin, kui tüü unõhtattõ salain-sõnass.',
+'prefs-help-email-others' => 'Se lupabci muilõ õsa-võttajilõ võtta ühteüttä tejjeka tejje personaaliss lehocülless viittau kautta, ilma tejje e-mail’a tääotusõ vajaussa.',
 
 # User rights
 'userrights-reason' => 'Süü:',
@@ -430,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ä',
@@ -447,11 +464,13 @@ Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taa
 'recentchanges-label-bot' => 'Kase kõrjauz on robotaka lootu',
 'recentchanges-label-unpatrolled' => 'Kasta kõrjaussa eb tarkisõtti veel',
 'rcnote' => 'Alla on {{PLURAL:$1|ühsi muutuz|viimeiziit $1 muutussiit}} viimeize {{PLURAL:$2|ühee päivää|$2 päivää}}, $4 $5.',
+'rcnotefrom' => 'Alapallõ õlla lugõtõltu muuttamizõd $2-lt ($1-lõssaa)',
 'rclistfrom' => 'Näüt uuvvõd muutuhsõd $1 alguss',
 'rcshowhideminor' => '$1 peened muutussõd',
 'rcshowhidebots' => '$1 botid',
 'rcshowhideliu' => '$1 süäme cirjutõnnud cäüttijäd',
 'rcshowhideanons' => '$1 anonüümid cäüttijäd',
+'rcshowhidepatr' => 'Tarkasõttu kõrjausije $1',
 'rcshowhidemine' => '$1 õmad muutussõd',
 'rclinks' => 'Näüt viimõiss $1 muutuhsõiss viimõizõ $2 päivää ajalt.<br />$3',
 'diff' => 'vahõ',
@@ -541,6 +560,7 @@ Seness [$2 kuvauhsõ lehocülless] informaattsija on alapallõ annõttu.',
 'nbytes' => '$1 {{PLURAL:$1|baitti|baittia}}',
 'nmembers' => '$1 {{PLURAL:$1|selttsilain|selttsilaizõd}}',
 'prefixindex' => 'Kõik cüľľed prefiksiikaa',
+'usercreated' => '33. $3 on entä cirjannu $1 $2-na',
 'newpages' => 'Uuvvõd cüľľed',
 'newpages-username' => 'Cäüttijänimi:',
 'move' => 'Liikut',
@@ -580,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)',
 
@@ -610,8 +627,6 @@ Cülci leeb cirjutõttu '''pimmiässi''' [[Special:RecentChanges|spiizgall viime
 'watching' => 'Kattsõõn…',
 'unwatching' => 'Kattsõõmizõõ lõpõttõmin…',
 
-'enotif_newpagetext' => 'Kase on vassõn cülci.',
-
 # Delete
 'deletepage' => 'Pühi cülci',
 'delete-legend' => 'Pühi',
@@ -673,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',
@@ -683,10 +698,12 @@ Cüľľellä $2 on spiiska viimeiziss pühcimühsiiss.',
 
 'sp-contributions-newbies' => 'Näüt uusijõõ cäüttijee muutuhsõd',
 'sp-contributions-blocklog' => 'piättelemized',
+'sp-contributions-uploads' => 'lassausõd',
 'sp-contributions-logs' => 'logid',
 'sp-contributions-talk' => 'Juttu',
 'sp-contributions-search' => 'Etsi avittamisiit',
 'sp-contributions-username' => 'IP-adressi vai cäüttijänimi',
+'sp-contributions-toponly' => 'Viimeized verssijad näüttä',
 'sp-contributions-submit' => 'Etsi',
 
 # What links here
@@ -694,6 +711,7 @@ Cüľľellä $2 on spiiska viimeiziss pühcimühsiiss.',
 'whatlinkshere-title' => 'Cüľľed, kummad näütellä cüľľelle "$1"',
 'whatlinkshere-page' => 'Cülci:',
 'linkshere' => "Vahtiaavilt cülciilt on linkki cüľľelle '''[[:$1]]''':",
+'nolinkshere' => "Mitäid eb viitata '''[[:$1]]-sõ'''",
 'isredirect' => 'mešaituzcülci',
 'istemplate' => 'sisällütüz šabloonii',
 'isimage' => 'kuvalinkki',
@@ -760,6 +778,7 @@ Neill kõhtoill piättä liikuttaa vai ühissää cüľľee cäzi.",
 
 # Namespace 8 related
 'allmessagesname' => 'Nimi',
+'allmessagesdefault' => 'Standartin teksta',
 'allmessages-language' => 'Ceeli:',
 'allmessages-filter-submit' => 'Mee',
 
@@ -926,6 +945,16 @@ Kui faili on muutõttu, siiz detaaľid võivad õlla kahõllaizõd muutõtull fa
 # Special:SpecialPages
 'specialpages' => 'Osoobenoid cüľľed',
 
+# External image whitelist
+'external_image_whitelist' => '# Jättägä kase rivi mokomassi, minenä-mokomana se on õõmaz.<pre>
+# Sijottaga tänne säännollizije ilmaud’d’e fragmentad (se õsa, kumpa on // väliz)
+# ned leevät võrrõttu ulko-kuvije URL-sõ.
+# Sopivad leeväd näütettü kuvijna, muud leeväd näütettü kuvijsõ viitauina.
+# Rivid, kummad alguta //-ss, pietä kommentaarijina. Rivid eväd õlla tunnuttu registra suhtõsõ.
+# Sijottaga säännollizije ilmaud’d’e fragmentad kaze rivi ülez.
+
+# Jättägä kase rivi mokomassi, minenä-mokomana se on õõmaz.',
+
 # Special:Tags
 'tag-filter' => "[[Special:Tags|Deskriptorije]] fil'tra:",
 'tags-edit' => 'muuttaa',
@@ -933,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 d177635..f02e1ba 100644 (file)
@@ -175,7 +175,7 @@ $messages = array(
 'cancel' => 'Jätäq katski',
 'moredotdotdot' => 'Viil...',
 'mypage' => 'Muq lehekülg',
-'mytalk' => 'Mu arotus',
+'mytalk' => 'Arotus',
 'anontalk' => 'Seo puutri võrgoaadrõsi arotus',
 'navigation' => 'Juhtminõ',
 'and' => '&#32;ja',
@@ -424,7 +424,6 @@ $2',
 
 Võit {{SITENAME}}t ilma nimeldä edesi toimõndaq vai <span class='plainlinks'>[$1 vahtsõst sama vai tõõsõ nimega sisse minnäq]</span>.
 Tähelepandmisõs: niikavva, ku sa olõ-i tühäs tennüq uma võrgokaeja vaihõmällo, võivaq mõnõq leheküleq iks viil näüdädäq, nigu sa olõsi nimega seen.",
-'welcomecreation' => '<h2>Tereq, $1!</h2><p>Su konto om valmis. Võit taa hindä perrä sisse säädäq.',
 'yourname' => 'Pruukjanimi',
 'yourpassword' => 'Salasõna',
 'yourpasswordagain' => 'Kirodaq viilkõrd salasõna',
@@ -647,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.',
@@ -659,6 +657,11 @@ Võit toimõndaq olõmanolõvit lehti vai [[Special:UserLogin|minnäq nimega sis
 Kas tahat taad lehte tõtõstõ toimõndaq? Kaeq ka sissekirotust seo lehe ärqkistutamisõ kotsilõ:",
 'edit-conflict' => 'Samaaignõ toimõndus.',
 
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Pruugitavidõ näüdüsside maht om pall'o suur.
+Tuuperäst ossa näüdüssit näüdädä-äi.",
+'post-expand-template-inclusion-category' => 'Leheküleq, mil om näüdüsside mahupiir ületet',
+
 # "Undo" feature
 'undo-success' => "Tagasivõtminõ läts' kõrda. Kaeq üle, kas taa om tuu, midä sa tetäq tahtsõt ja pästäq muutusõq.",
 'undo-failure' => 'Tagasivõtminõ lää-s kõrda samal aol tettüide muutmiisi vastaolo peräst. Võit muutusõq käsilde tagasi võttaq.',
@@ -785,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',
@@ -801,6 +805,7 @@ Lisateedüst või ollaq [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME
 'nonefound' => "'''Hoiatus''':  Otsitas õnnõ üten jaon nimeruumõn.
 Ku tahat otsiq kõrraga kõigist nimeruumidest (ka arotuskülgi päält, näüdüssist jne) pruugiq
 otsisõna iin edejakku ''all:''. Ütest kimmäst nimeruumist otsmisõs pruugiq edejakus tuu nimeruumi nimme.",
+'search-nonefound' => 'Perräküsümisele löüdä-äs vastust.',
 'powersearch' => 'Otsminõ',
 'powersearch-legend' => 'Laendõt otsminõ',
 'powersearch-ns' => 'Otsminõ nimeruumõst:',
@@ -819,7 +824,7 @@ otsisõna iin edejakku ''all:''. Ütest kimmäst nimeruumist otsmisõs pruugiq e
 
 # Preferences page
 'preferences' => 'Säädmine',
-'mypreferences' => 'Mu säädmiseq',
+'mypreferences' => 'Säädmiseq',
 'prefs-edits' => 'Tõimõndamiisi arv:',
 'prefsnologin' => 'Sa olõ-i nimega sisse lännüq',
 'prefsnologintext' => 'Et säädmiisi tetäq, tulõ sul [[Special:UserLogin|nimega sisse minnäq]].',
@@ -943,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',
@@ -958,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',
@@ -1069,7 +1079,7 @@ Ku ülekaet teedüstü om sama pilt alguperälidsen suurusõn, sis olõ-i vaia e
 'upload-curl-error28-text' => 'Taa aadrõsi päält saa-s ao pääle vastust. Oodaq vähä ja prooviq vahtsõst.',
 
 'license' => 'Litsents:',
-'license-header' => 'Litsents:',
+'license-header' => 'Litsents',
 'nolicense' => 'Olõ-i litsentsi valit',
 'license-nopreview' => '(Saa-i kaiaq)',
 'upload_source_url' => ' (avalik tüütäv võrgoaadrõs)',
@@ -1100,10 +1110,11 @@ Ku ülekaet teedüstü om sama pilt alguperälidsen suurusõn, sis olõ-i vaia e
 'filehist-dimensions' => 'Suurus',
 'filehist-filesize' => 'Teedüstü suurus',
 'filehist-comment' => 'Seletüs:',
-'imagelinks' => 'Teedüstülingiq',
+'imagelinks' => 'Teedüstüpruukminõ',
 'linkstoimage' => 'Taa pildi pääle {{PLURAL:$1|näütäs lehekülg|näütäseq leheküleq}}:',
 'nolinkstoimage' => 'Taa pildi pääle näütä-i ütski lehekülg.',
 'sharedupload' => 'Seo teedüstü om peri lättest $1 ni taad võivaq pruukiq ka tõõsõq vikiq.',
+'sharedupload-desc-here' => 'Seo om jaet teedüstü lättest $1 ja seod saa pruukiq ka tõisin projekten. Teedüstü [$2 seletüs] om ant allpuul.',
 'uploadnewversion-linktext' => 'Laadiq taa teedüstü vahtsõnõ kujo',
 
 # File reversion
@@ -1277,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)',
@@ -1307,7 +1315,8 @@ ja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et
 
 # Watchlist
 'watchlist' => 'Perräkaemisnimekiri',
-'mywatchlist' => 'mu 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',
@@ -1337,11 +1346,7 @@ ja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et
 
 'enotif_mailer' => '{{SITENAME}} lehe muutumisteedüs',
 'enotif_reset' => 'Märgiq kõik leheq ülekaetuis',
-'enotif_newpagetext' => 'Taa om vahtsõnõ leht.',
 'enotif_impersonal_salutation' => '{{SITENAME}} pruukja',
-'changed' => 'lehte muutnuq',
-'created' => 'lehe loonuq',
-'enotif_subject' => '$PAGEEDITOR om $CHANGEDORCREATED $PAGETITLE',
 'enotif_lastvisited' => 'Lehel $1 ommaq kõik päält suq perämäst käümist tettüq muutmisõq.',
 'enotif_lastdiff' => 'Taa muutusõ nägemises kaeq: $1.',
 'enotif_anon_editor' => 'nimeldä pruukja $1',
@@ -1364,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',
@@ -1485,7 +1492,7 @@ Perämäidsi kistutuisi ja tagasitegemiisi saat kaiaq [[Special:Log/delete|kistu
 # Contributions
 'contributions' => 'Pruukja kirotusõq',
 'contributions-title' => 'Pruukja $1 toimõndusõq',
-'mycontris' => 'Mu kirotusõq',
+'mycontris' => 'Hindä kirotusõq',
 'contribsub2' => 'Pruukja "$1 ($2)" kirotusõq',
 'nocontribs' => 'Sääntsit muutmiisi es lövväq.',
 'uctop' => '(kõgõ vahtsõmb)',
@@ -1495,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:',
@@ -1556,7 +1563,7 @@ Perämäidsi kistutuisi ja tagasitegemiisi saat kaiaq [[Special:Log/delete|kistu
 'ipusubmit' => 'Lõpõdaq kinniqpidämine ärq',
 'unblocked' => 'Pruukja [[User:$1|$1]] kinniqpidämine om ärq lõpõtõt',
 'unblocked-id' => '$1 kinniqpidämine võeti maaha',
-'ipblocklist' => 'Kinniqpeetüisi IP-aadrõssidõ ja pruukjanimmi nimekiri',
+'ipblocklist' => 'Kinniqpeetüq pruukjaq',
 'ipblocklist-legend' => 'Otsiq kinniqpeetüt pruukjat',
 'ipblocklist-submit' => 'Otsiq',
 'infiniteblock' => 'igäveste',
@@ -2255,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 9b1c150..3ba9d00 100644 (file)
@@ -424,10 +424,6 @@ $2",
 
 Vos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén <span class='plainlinks'>[$1 vos relodjî]</span>, dizo l' minme uzeu ou dizo èn uzeu diferin.
 Notez ki des pådjes k' i gn a si pôrént continowuer a vey come si vos estîz elodjî, disk' a tant ki vos vudrîz l' muchete di vosse betchteu waibe.",
-'welcomecreation' => '== Bénvnowe, $1! ==
-
-Vosse conte a stî ahivé.
-Èn rovyîz nén di candjî les [[Special:Preferences|preferinces di {{SITENAME}}]] a vosse môde.',
 'yourname' => "Vosse no d' elodjaedje:",
 'yourpassword' => 'Vosse sicret',
 'yourpasswordagain' => 'Ritapez vosse sicret',
@@ -703,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.",
@@ -1065,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',
@@ -1428,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)',
 
@@ -1492,10 +1484,6 @@ Si vos vloz bodjî l' pådje foû di vosse djivêye des shuvous, clitchîz so «
 
 'enotif_mailer' => 'Notifiaedje pa emile di {{SITENAME}}',
 'enotif_reset' => 'Mårker totes les pådjes come vizitêyes',
-'enotif_newpagetext' => "C' est ene nouve pådje.",
-'changed' => 'candjeye',
-'created' => 'ahivêye',
-'enotif_subject' => 'Li pådje «$PAGETITLE» so {{SITENAME}} a stî $CHANGEDORCREATED pa $PAGEEDITOR',
 'enotif_lastvisited' => 'Loukîz $1 po tos les candjmints dispoy vosse dierinne vizite.',
 'enotif_body' => 'Binamé $WATCHINGUSERNAME,
 
@@ -1528,6 +1516,8 @@ $UNWATCHURL
 
 Po pus d\' aidance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ahivêye',
+'changed' => 'candjeye',
 
 # Delete
 'deletepage' => "Disfacer l' pådje",
@@ -2350,6 +2340,7 @@ Acertinez s' i vs plait ki vos vloz vormint rifé cisse pådje ci.",
 '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 3100c9b..2d9185d 100644 (file)
@@ -11,6 +11,7 @@
  * @author Harvzsf
  * @author JinJian
  * @author Kaganer
+ * @author Wiki indio
  * @author לערי ריינהארט
  */
 
@@ -350,6 +351,7 @@ $1',
 'viewdeleted' => '¿Kitaa in $1?',
 'restorelink' => '{{PLURAL:$1|usa nga ginpara nga pagliwat|$1 ka ginpara nga mga pagliwat}}',
 'feedlinks' => 'Igsulod:',
+'feed-invalid' => 'Inbalido nga pagpapaabot',
 'site-rss-feed' => '$1 RSS nga feed',
 'site-atom-feed' => '$1 Atom nga feed',
 'page-rss-feed' => '"$1" RSS nga feed',
@@ -453,6 +455,7 @@ An katadungan nga ginhatag amo in "\'\'$2\'\'".',
 'filereadonlyerror' => 'Diri maliliwat ini nga paypay "$1" tungod an ginsusudlan han paypay nga "$2" in aada la ha pagbasa-la nga kahimtang.
 
 An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
+'invalidtitle-knownnamespace' => 'Titulo nga inbalido nga may pan-ngaran "$2 ngan teksto nga "$3"',
 'exception-nologin' => 'Diri nakalog-in',
 'exception-nologin-text' => 'Ini nga pakli o pagbuhat in nagkikinahanglan nga ikaw in mag-log-in ha dinhi nga wiki.',
 
@@ -461,9 +464,6 @@ An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
 'virus-unknownscanner' => 'diri-nasasabtan nga antivirus:',
 
 # Login and logout pages
-'welcomecreation' => '== ¡Uswag ngan Dayon, $1! ==
-Ginhimo an imo akawnt.
-Ayaw paghingalimot hin pagbalyo han imo [[Special:Preferences|{{SITENAME}} mga ginpipili]].',
 'yourname' => 'Agnay hit gumaramit:',
 'yourpassword' => 'Tigaman-pagsulod:',
 'yourpasswordagain' => 'Utroha pagbutang an tigaman-han-pagsakob:',
@@ -644,7 +644,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.',
@@ -986,9 +985,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 +1356,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',
@@ -1403,11 +1401,10 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'wlshowlast' => 'Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3',
 'watchlist-options' => 'Mga pirilian han talaan han binabantayan',
 
-'enotif_newpagetext' => 'Ini in bag-o nga pakli.',
 'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
-'changed' => 'naliwanan',
-'created' => 'nahimo',
 'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
+'created' => 'nahimo',
+'changed' => 'naliwanan',
 
 # Delete
 'deletepage' => 'Igpara an pakli',
@@ -2207,6 +2204,7 @@ An iba in daan nakatago.
 '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 a5daefc..192fc84 100644 (file)
@@ -450,9 +450,6 @@ Ngirte li mu joxe mooy ne « ''$2'' ».",
 'logouttext' => "Fi mu nekk nii génn nga.'''
 
 Man ngaa wéy di jëfandikoo {{SITENAME}} ci anam buñ la dul xamme walla nga  <span class='plainlinks'>[$1 duggewaat]</span> ak wenn tur wi walla ak weneen.",
-'welcomecreation' => '== Dalal-jàmm, $1 ! ==
-Sosees na sa sàq.
-Bul fatte soppi say [[Special:Preferences|{{SITENAME}} tànneef]].',
 'yourname' => 'Sa turu jëfandikukat',
 'yourpassword' => 'Sa baatujàll',
 'yourpasswordagain' => 'Bindaatal sa baatujàll',
@@ -684,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',
@@ -1128,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',
@@ -1548,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.
@@ -1624,14 +1618,12 @@ Coppite yiy ñëw yu xët wi ak xëtu waxtaanuwaay wi mu àndal di nañu leen fa
 'unwatching' => 'Farug toppte gi ...',
 
 'enotif_reset' => 'Fésal xët yépp niki yoo nemmeeku ba noppi',
-'enotif_newpagetext' => 'Lii aw xët wu bees la.',
 'enotif_impersonal_salutation' => 'Jëfandikukat bu {{SITENAME}}',
-'changed' => 'soppi',
-'created' => 'sosu na',
-'enotif_subject' => 'Xët wii di $PAGETITLE wu {{SITENAME}}, $PAGEEDITOR moo ko $CHANGEDORCREATED',
 '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',
@@ -2207,5 +2199,6 @@ Man nga tamit  [[Special:EditWatchlist/raw|soppi ko]].',
 '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 24212b3..0dfb48e 100644 (file)
@@ -383,9 +383,6 @@ $2',
 
 侬可以继续匿名使用{{SITENAME}} ,也可以再次以相同或者两样个用户名<span class='plainlinks'>[$1 登录]</span>。
 注意,有眼页面作兴还是会搭侬登出前头一样显示,一脚到侬清除浏览器缓存。",
-'welcomecreation' => '== 欢迎侬, $1! ==
-
-侬个户头已经建立好哉。弗要忘记脱设定侬个[[Special:Preferences|{{SITENAME}}的个人参数]]噢。',
 'yourname' => '用户名:',
 'yourpassword' => '密码:',
 'yourpasswordagain' => '再拍一遍密码:',
@@ -627,7 +624,6 @@ $2',
 'template-protected' => '(保护)',
 'template-semiprotected' => '(半保护垃许)',
 'hiddencategories' => '箇只页面是属于$1个隐藏分类个成员:',
-'nocreatetitle' => '创建页面受限',
 'nocreatetext' => '{{SITENAME}}限制了创建新页面功能。侬可以返回并编辑已有个页面,或者[[Special:UserLogin|登录或创建新账户]]。',
 'nocreate-loggedin' => '侬呒没权限创建新页面。',
 'sectioneditnotsupported-title' => '段落编辑弗支持',
@@ -999,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' => '编辑箇只页面',
@@ -1191,9 +1189,6 @@ $1",
 # Special:ListUsers
 'listusers-submit' => '显示',
 
-# Special:Log/newusers
-'newuserlogpage' => '用户创建日志',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员列表)',
 
@@ -1228,9 +1223,8 @@ $1",
 'watching' => '监控……',
 'unwatching' => '解除监控……',
 
-'enotif_newpagetext' => '该个是一只新页面。',
-'changed' => '改变哉',
 'created' => '建立哉',
+'changed' => '改变哉',
 
 # Delete
 'deletepage' => '删脱页面',
@@ -1601,5 +1595,6 @@ Variants for Chinese language
 # New logging system
 'revdelete-restricted' => '已将限制应用到管理员',
 'revdelete-unrestricted' => '已移除对管理员个限制',
+'rightsnone' => '(呒)',
 
 );
index 1af4da6..a575bf4 100644 (file)
@@ -398,9 +398,6 @@ $1',
 
 Та {{SITENAME}} гидг ормиг нертә уга олзлҗ чаднат, аль та <span class='plainlinks'>[$1 дәкәд орҗ]</span> цацу аль талдан нертә чаднат.
 Зәрм халхс цааранднь та ода чигн орсн мет үзүлҗ чаддг тускар темдглтн (та хәләчин санлиг цеврлтл).",
-'welcomecreation' => '== Ирхитн эрҗәнәвидн, $1! ==
-Таднар шин бичгдлһн бүтв.
-Тадна [[Special:Preferences|{{SITENAME}} preferences]] сольҗ бичә мартн.',
 'yourname' => 'Демнчна нернь:',
 'yourpassword' => 'Нууц үг:',
 'yourpasswordagain' => 'Нууц үгиг давтн:',
@@ -711,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' => 'эн халхиг чиклх',
@@ -856,9 +855,6 @@ $1',
 # Special:LinkSearch
 'linksearch' => 'Һаза заалһуд',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Бичгдлһнә сеткүл',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(мөчүдин сеткүл)',
 
@@ -882,8 +878,6 @@ $1',
 'watching' => 'Шинҗллһнә бүтлклд немлһн...',
 'unwatching' => 'Шинҗлһнә бүрткләс һарһлһн...',
 
-'changed' => 'сольв',
-'created' => 'бүтәв',
 'enotif_body' => 'Мендвт, күндтә $WATCHINGUSERNAME,
 
 $PAGEEDITDATE цагт {{SITENAME}} төсвин $PAGETITLE халхиг $PAGEEDITOR $CHANGEDORCREATED. Ода болсн халхна янз үзҗ седхлә, $PAGETITLE_URL хәләтн.
@@ -906,6 +900,8 @@ e-mail\'ар $PAGEEDITOR_EMAIL
 
 Хәрү холва болн тус:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'бүтәв',
+'changed' => 'сольв',
 
 # Delete
 'deletepage' => 'Эн халхиг һарһҗ',
@@ -1270,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 09beb54..b11e2d0 100644 (file)
@@ -317,7 +317,7 @@ $messages = array(
 'cancel' => 'זיי מבטל',
 'moredotdotdot' => 'נאך…',
 'mypage' => 'מײַן בלאט',
-'mytalk' => '×\9eײַ×\9f ×©×\9e×\95עס',
+'mytalk' => 'שמועס',
 'anontalk' => 'דאס רעדן פון דעם IP',
 'navigation' => 'נאַוויגאַציע',
 'and' => '&#32;און',
@@ -349,6 +349,7 @@ $messages = array(
 'namespaces' => 'נאָמענטיילן',
 'variants' => 'װאַריאַנטן',
 
+'navigation-heading' => 'נאוויגאציע מעניו',
 'errorpagetitle' => 'פֿעלער',
 'returnto' => 'צוריקקערן צו $1.',
 'tagline' => 'פֿון {{SITENAME}}',
@@ -428,8 +429,8 @@ $1',
 'mainpage' => 'הויפט זייט',
 'mainpage-description' => 'הויפט זייט',
 'policy-url' => 'Project:פאליסי',
-'portal' => 'קאַווע שטיבל',
-'portal-url' => 'Project:קאַווע שטיבל',
+'portal' => 'קאַווע־שטיבל',
+'portal-url' => 'Project:קאַווע־שטיבל',
 'privacy' => 'פּריוואַטקייט פּאליסי',
 'privacypage' => 'Project:פּריוואַטקייט פאליסי',
 
@@ -561,7 +562,7 @@ $1',
 'viewsource-title' => 'באקוקן מקור פֿון $1',
 'actionthrottled' => 'די אַקציע איז באַגרענעצט',
 'actionthrottledtext' => 'אלס מאָסמיטל קעגן ספאַם, זענט איר באַגרענעצט פֿון דורכפֿירן די פעולה צופֿיל מאל אין א קורצער צײַט. ביטע פרובירט נאכאַמאָל אין א פאר מינוט.',
-'protectedpagetext' => '×\93ער ×\91×\9c×\90×\98 ×\90×\99×\96 ×¤×\90רשפ×\90ר×\98 ×¦×\95 ×\90פ×\94×\90×\9c×\98×\9f ×¢× ×\93ער×\95× ×\92×\9f.',
+'protectedpagetext' => '×\93ער ×\91×\9c×\90×\98 ×\90×\99×\96 ×\92עש×\99צ×\98 ×¦×\95 ×¤×\90ר×\9e×\99×\99×\93×\9f ×¨×¢×\93×\90ק×\98×\99ר×\9f ×\90×\95×\9f ×\90× ×\93ערע ×¤×¢×\95×\9c×\95ת.',
 'viewsourcetext' => 'איר קענט זען און קאפירן דעם מקור פון דעם בלאַט:',
 'viewyourtext' => "איר קענט באקוקן דעם מקור פון '''אייערע רעדאקטירונגען''' צו דעם בלאט:",
 'protectedinterface' => 'דער בלאַט שטעלט צו באניצער־אויבערפלאך טעקסט פֿאַרן װײכװאַרג אויף דער דאזיקער וויקי, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.
@@ -594,8 +595,9 @@ $2',
 'logouttext' => "'''איר האָט זיך ארויסלאָגירט.'''
 
 איר קענט ממשיך זיין ניצן {{SITENAME}} אַנאנים, אדער איר קענט  <span class='plainlinks'>[$1 צוריק אריינלאגירן]</span> מיט דעם זעלבן אדער אן אנדער באַניצער נאָמען. באמערקט אז געוויסע בלעטער קענען זיך ווייטער ארויסשטעלן אזוי ווי ווען איר זענט אריינלאגירט, ביז איר וועט אויסליידיגן דעם בלעטערער זאפאס.",
-'welcomecreation' => '== ברוך הבא, $1! ==
-אייער קאנטע איז באשאפן געווארן. נישט פארגעסן צו ענדערן אייערע [[Special:Preferences|{{SITENAME}} פרעפֿערענצן]].',
+'welcomeuser' => 'ברוך הבא, $1!',
+'welcomecreation-msg' => "מ'האט געשאפן אייער קאנטע.
+פארגעסט נישט צו ענדערן אייערע [[Special:Preferences|{{SITENAME}} פרעפערענצן]].",
 'yourname' => 'באַניצער נאָמען:',
 'yourpassword' => 'פאסווארט',
 'yourpasswordagain' => 'ווידער אריינקלאפן פאסווארט',
@@ -759,6 +761,7 @@ $2
 'changeemail-oldemail' => 'קראַנטער ע-פּאָסט אַדרעס:',
 'changeemail-newemail' => 'נײַער בליצפּאָסט אַדרעס:',
 'changeemail-none' => '(קיין)',
+'changeemail-password' => 'אייער {{SITENAME}} פאסווארט:',
 'changeemail-submit' => 'ענדערן ע־פאסט אדרעס',
 'changeemail-cancel' => 'אַנולירן',
 
@@ -788,9 +791,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 אַדרעס אין דער רעדאַקטירונג היסטאריע פונעם בלאַט.''",
@@ -936,13 +939,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' => 'איר זענט נישט ערלויבט צו שאַפֿן נײַע בלעטער.',
@@ -967,7 +969,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' => "'''אזהרה:''' דער בלאט אנטהאלט צופיל טייערע פארזירער רופן.
@@ -982,6 +992,8 @@ $2
 'parser-template-loop-warning' => 'מוסטער שלייף געטראפן: [[$1]]',
 'parser-template-recursion-depth-warning' => 'מוסטער רעקורסיע טיף מאקסימום איבערגעשטיגן ($1)',
 'language-converter-depth-warning' => 'אַריבער דעם שפּראַך קאַנווערטער טיף לימיט ($1)',
+'node-count-exceeded-category' => 'בלעטער וואו קנופצאל איז צו פיל',
+'node-count-exceeded-warning' => 'קנופנצאל אויפן בלאט צו הויך',
 'converter-manual-rule-error' => 'געטראפן א גרײַז אין האנטלעכן שפראך־קאנווערטירן כלל',
 
 # "Undo" feature
@@ -1318,9 +1330,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' => 'שפּראַך:',
@@ -1427,6 +1439,7 @@ $1",
 'right-autoconfirmed' => 'רעדאקטירן האלב-געשיצטע בלעטער',
 'right-bot' => 'באַהאַנדלונג ווי אַן אויטאמאַטישער פראצעס',
 'right-nominornewtalk' => 'מינערדיקע רעדאקטירונגען צו שמועס בלעטער זאלן נישט שאפן די "נייע מודעות" מעלדונג',
+'right-apihighlimits' => 'ניצן העכערע לימיטן אין API פראגעס',
 'right-writeapi' => 'ניצן דעם שרײַבן API',
 'right-delete' => 'מעקן בלעטער',
 'right-bigdelete' => 'אויסמעקן בלעטער מיט לאַנגע היסטאריעס',
@@ -1465,12 +1478,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' => 'ליינען דעם בלאַט',
@@ -1623,6 +1637,10 @@ $1",
 'windows-nonascii-filename' => 'די וויקי שטיצט נישט טעקע־נעמען מיט ספעציעלע צייכענען.',
 'fileexists' => 'א טעקע מיט דעם נאָמען עקזיסטירט שוין, ביטע זײַט בודק <strong>[[:$1]]</strong> ווען איר זענט נישט זיכער אַז איר ווילט זי ענדערן.
 [[$1|thumb]]',
+'filepageexists' => "דער באשרייבונג בלאט פאר דער דאזיקער טעקע האט מען שוין געשאפן ביי <strong>[[:$1]]</strong>, אבער ס'עקזיסטירט נישט קיין טעקע מיט דעם נאמען.
+די רעזומע וואס איר קלאפט אריין וועט זיך נישט באווייזן אויפן באשרייבונג בלאט.
+כדי צו שאפן אז אייער רעזומע וועט זיך טאקע באווייזן דארט, דארפט איר רעדאקטירן זי האנטווייז.
+[[$1|thumb]]",
 'fileexists-extension' => 'א טעקע מיט אן ענלעכן נאמען עקזיסטירט שוין: [[$2|thumb]]
 * נאמען פון דער טעקע וואס ווערט ארויפגעלאָדן: <strong>[[:$1]]</strong>
 * נאמען פון דער פֿאראנענער טעקע: <strong>[[:$2]]</strong>
@@ -1689,6 +1707,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".',
@@ -1745,6 +1764,8 @@ $1",
 'upload_source_file' => '(א טעקע אויף אײַער קאמפיוטער)',
 
 # Special:ListFiles
+'listfiles-summary' => 'דער דאזיקער באזונדערער בלאט ווייזט אלע ארויפגעלאדענע טעקעס.
+ווען געפילטערט לויטן באניצער, ווייזט מען נאר טעקעס וואס יענער באניצער האט ארויפגעלאדן די לעצטע ווערסיע.',
 'listfiles_search_for' => 'זוכן פֿאַר מעדיע נאָמען:',
 'imgfile' => 'טעקע',
 'listfiles' => 'טעקע ליסטע',
@@ -1787,6 +1808,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' => 'ארויפֿלאדן א נײַע ווערסיע פֿוו דער טעקע',
@@ -2039,10 +2064,6 @@ $1",
 'activeusers-hidesysops' => 'באַהאַלטן סיסאפן',
 'activeusers-noresult' => 'קיין באניצער נישט געטראפֿן.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'נייע באַניצערס לאָג-בוך',
-'newuserlogpagetext' => 'דאס איז א לאג פון באַניצערס אײַנשרײַבונגען.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'באַניצער גרופע רעכטן',
 'listgrouprights-summary' => "פֿאלגנד איז א רשימה פֿון באַניצער גרופעס דעפֿינירט אויף דער דאָזיקער וויקי, מיט זײַערע אַסאציאירטע צוטריט רעכטן.
@@ -2102,17 +2123,16 @@ $1",
 
 # Watchlist
 'watchlist' => 'מיין אויפפַּאסונג ליסטע',
-'mywatchlist' => '×\9e×\99×\99×\9f ×\90×\95×\99פפַּ×\90ס×\95× ×\92 ×\9c×\99ס×\98×¢',
+'mywatchlist' => 'אויפפַּאסונג ליסטע',
 'watchlistfor2' => 'פֿאַר $1 $2',
 'nowatchlist' => 'איר האט נישט קיין שום בלעטער אין אייער אויפפַּאסונג ליסטע.',
 'watchlistanontext' => 'ביטע $1 כדי צו זען אדער ענדערן בלעטער אין אייער אַכטגעבן ליסטע.',
 'watchnologin' => 'איר זענט נישט אַרײַנלאגירט',
 'watchnologintext' => 'איר דארפֿט זיין [[Special:UserLogin|אריינגלאגירט]] צו מאדיפֿיצירן אייער אויפפַּאסונג־ליסטע.',
 'addwatch' => 'צולייגן צו דער אויפֿפאַסונג ליסטע',
-'addedwatchtext' => "דער בלאט \"[[:\$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
+'addedwatchtext' => 'דער בלאט "[[:$1]]" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
 
-ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכענט דא.
-און דער בלאט וועט זיין '''דיק''' אין דער [[Special:RecentChanges|ליסטע פון לעצטע ענדערונגען]] צו גרינגער מאכן דאס אויפֿפאַסן.",
+ווײַטערע ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכנט דארט.',
 'removewatch' => 'אַראָפּנעמען פון דער אויפֿפאַסונג ליסטע',
 'removedwatchtext' => 'דער בלאַט "[[:$1]]" איז אָפּגעראַמט געוואָרן פון [[Special:Watchlist|אייער אױפֿפּאַסונג ליסטע]].',
 'watch' => 'אױפֿפּאַסן',
@@ -2140,19 +2160,23 @@ $1",
 
 'enotif_mailer' => 'נאטיפאקאציע שיקער {{SITENAME}}',
 'enotif_reset' => 'באַצייכענען אלע בלעטער שוין געזען',
-'enotif_newpagetext' => 'דאס איז א נייער בלאט.',
 'enotif_impersonal_salutation' => '{{SITENAME}} באַניצער',
-'changed' => 'געטוישט',
-'created' => 'געשאַפֿן',
-'enotif_subject' => 'דער בלאט $PAGETITLE אין {{SITENAME}} $CHANGEDORCREATED דורך $PAGEEDITOR',
+'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 איז געווארן $CHANGEDORCREATED אום $PAGEEDITDATE דורך $PAGEEDITOR, זעט $PAGETITLE_URL פאר דער איצטיגער ווערסיע.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 ענדערערס קורץ ווארט: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2166,6 +2190,9 @@ $NEWPAGE
 אייער פֿריינטליכע  {{SITENAME}} מעלדונגען סיסטעם
 
 --
+צו ענדערן אייער ע־פאסט נאטיפיקאציע שטעלונגען, באזוכט
+{{canonicalurl:{{#special:Preferences}}}}
+
 צו ענדערן אייער אויפֿפאסונג ליסטע, באזוכט
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
@@ -2174,6 +2201,8 @@ $UNWATCHURL
 
 פאר מער הילף:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'געשאַפֿן',
+'changed' => 'געטוישט',
 
 # Delete
 'deletepage' => 'מעק אויס בלאט',
@@ -2333,6 +2362,7 @@ $UNWATCHURL
 'undelete-search-prefix' => 'ווײַז בלעטער וואס הייבן אן מיט:',
 'undelete-search-submit' => 'זוכן',
 'undelete-no-results' => 'נישט געטראפן קיין צוגעפאסטע בלעטער אין אויסמעקונג ארכיוו.',
+'undelete-cleanup-error' => 'גרײַז בײַם אויסמעקן נישט געניצטע ארכיוו טעקע "$1".',
 'undelete-error' => 'גרייז ביים צוריקשטעלן בלאט',
 'undelete-error-short' => 'טעות ביים צוריקשטעלן טעקע: $1',
 'undelete-error-long' => 'גרײַזן געטראפֿן בײַם ווידערשטעלן די טעקע:
@@ -2350,9 +2380,9 @@ $1',
 'blanknamespace' => '(הויפט)',
 
 # Contributions
-'contributions' => "באניצער'ס בײַשטײַערונגען",
+'contributions' => '{{GENDER:$1|באניצער}} בײַשטײַערונגען',
 'contributions-title' => 'בײַשטײַערונגען פֿון באַניצער $1',
-'mycontris' => '×\9eײַנע ×\91ײַש×\98ײַער×\95× ×\92×¢×\9f',
+'mycontris' => 'בײַשטײַערונגען',
 'contribsub2' => 'וועגן $1 ($2)',
 'nocontribs' => 'נישט געטראפן קיין ענדערונגען צוזאמעגעפאסט מיט די קריטעריעס.',
 'uctop' => '(לעצטע)',
@@ -2392,7 +2422,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 ווײַטערפֿירונגען',
 'whatlinkshere-hidetrans' => '$1 אַריבערשליסונגען',
 'whatlinkshere-hidelinks' => '$1 פֿאַרבינדונגען',
-'whatlinkshere-hideimages' => '$1 ×\91×\99×\9c×\93ער פֿאַרבינדונגען',
+'whatlinkshere-hideimages' => '$1 ×\98עקע פֿאַרבינדונגען',
 'whatlinkshere-filters' => 'פֿילטערס',
 
 # Block/unblock
@@ -2587,7 +2617,7 @@ $1',
 'cant-move-to-user-page' => 'איר זענט נישט דערלויבט צו באַוועגן א בלאַט צו א באַניצער בלאַט (אַחוץ צו א באַניצער אונטערבלאַט).',
 'newtitle' => 'צו נייעם קעפל:',
 'move-watch' => 'אויפֿפאַסן אויף דעם בלאַט',
-'movepagebtn' => 'באוועגן',
+'movepagebtn' => 'באַוועגן בלאַט',
 'pagemovedsub' => 'באַוועגט מיט הצלחה',
 'movepage-moved' => 'דער בלאט "$1" איז אריבערגעפֿירט געווארן צו "$2".',
 'movepage-moved-redirect' => 'ווײַטערפֿירונג  געשאַפֿן.',
@@ -2752,6 +2782,7 @@ $1',
 # JavaScriptTest
 'javascripttest' => 'JavaScript טעסט',
 'javascripttest-title' => 'דורכפירנדיק $1 בדיקות',
+'javascripttest-pagetext-noframework' => ' דער בלאט איז רעזערווירט פאר JavaScript. פרואוון.',
 'javascripttest-pagetext-skins' => 'קלויבט א באניצער־אייבערפלאך מיט וואס דורכצופירן די בדיקות:',
 'javascripttest-qunit-intro' => 'זעט [$1 דאקומענטאציע פאר טעסטן] בײַ mediawiki.org.',
 'javascripttest-qunit-heading' => 'מעדיעוויקי JavaScript QUnit קאנטראל־פראגראם',
@@ -2821,7 +2852,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' => 'אײַנגעבן א קורצע רעזומע',
 
@@ -2859,9 +2890,11 @@ $1',
 'spamprotectiontitle' => 'ספעם באשיצונג פילטער',
 'spambot_username' => 'מעדיעוויקי ספאם פוצן',
 'spam_reverting' => 'צוריקגעשטעלט צו דער לעצטער ווערסיע אן לינקען צו $1',
+'spam_deleting' => 'אלע רעוויזיעס האבן לינקען צו $1, אויסמעקן',
 
 # Info page
 'pageinfo-title' => 'אינפֿאָרמאַציע פֿאַר "$1"',
+'pageinfo-not-current' => 'קען ווייזן אינפארמאציע נאר פאר דער לויפיקער רעוויזיע.',
 'pageinfo-header-basic' => 'גרונטלעכע אינפֿארמאַציע',
 'pageinfo-header-edits' => '!רעדאַקטירן היסטאריע',
 'pageinfo-header-restrictions' => 'בלאט באַשיצונג',
@@ -2870,7 +2903,10 @@ $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' => 'ווײַטערפירונגען צו דעם בלאט',
@@ -2887,6 +2923,16 @@ $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' => 'צאָל טעקעס',
 
 # Skin names
 'skinname-standard' => 'קלאסיש',
@@ -2909,6 +2955,8 @@ $1',
 'markedaspatrollederror' => 'נישט מעגלעך צו צייכענען אלס פאַטראלירט',
 'markedaspatrollederrortext' => 'איר דארפֿט ספעציפֿירן א ווערזיע צו באַצייכענען אלס פאַטראלירט.',
 'markedaspatrollederror-noautopatrol' => 'איר טאר נישט באַצייכענען די אייגענע ענדערונגען אלס פאַטראלירט.',
+'markedaspatrollednotify' => 'די ענדערונג צו $1 איז געווארן מארקירט ווי קאנטראלירט.',
+'markedaspatrollederrornotify' => 'מארקירן ווי קאנטראלירט דורכגעפאלן.',
 
 # Patrol log
 'patrol-log-page' => 'פאטראלירן לאג-בוך',
@@ -2942,6 +2990,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.',
@@ -2972,7 +3021,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' => 'דער פֿאָרמאַט איז װי פֿאָלגנדיק:
@@ -3015,6 +3067,11 @@ $1',
 'exif-orientation' => 'אריענטאַציע',
 'exif-samplesperpixel' => 'צאל קאמאפאנענטן',
 'exif-planarconfiguration' => 'דאטן איינארדנונג',
+'exif-xresolution' => 'האריזאנטאלע רעזאלוציע',
+'exif-yresolution' => 'ווערטיקאלע רעזאלוציע',
+'exif-stripoffsets' => 'בילדדאטן פלאציר',
+'exif-rowsperstrip' => 'צאל שורות אין א שטרייף',
+'exif-stripbytecounts' => 'בייטן אין א קאמפרימירטן שטרייף',
 'exif-jpeginterchangeformatlength' => 'בייטן פון JPEG דאטן',
 'exif-datetime' => 'טעקע ענדערונג דאטע און צײַט',
 'exif-imagedescription' => 'בילד טיטל',
@@ -3082,9 +3139,11 @@ $1',
 'exif-gpsaltitude' => 'הייך',
 'exif-gpstimestamp' => 'GPS צייט (אטאם־זייגער)',
 'exif-gpssatellites' => 'סאטעליטן געניצט פאר מעסטן',
+'exif-gpsstatus' => 'אויפנעמער סטאטוס',
 'exif-gpsdop' => 'מאס פוקנטליכקייט',
 'exif-gpsspeedref' => 'גיך איינהייט',
 'exif-gpsspeed' => 'גיך פון GPS־אויפֿנעמער',
+'exif-gpstrack' => 'באוועגונג ריכטונג',
 'exif-gpsimgdirectionref' => 'רעפערענץ פאר ריכטונג פון בילד',
 'exif-gpsimgdirection' => 'ריכטונג פון בילד',
 'exif-gpsdestlatituderef' => 'רעפֿערענץ פֿאַר ברייט־ליניע פון ציל',
@@ -3120,6 +3179,7 @@ $1',
 'exif-urgency' => 'דרינגלעכקייט',
 'exif-locationdest' => 'געוויזענע לאקאציע',
 'exif-locationdestcode' => 'קאד פֿון געוויזענער לאקאציע',
+'exif-contact' => 'קאנטאקט אינפארמאציע',
 'exif-writer' => 'שרײַבער',
 'exif-languagecode' => 'שפראַך',
 'exif-iimversion' => 'IIM ווערסיע',
@@ -3423,6 +3483,10 @@ $5
 # Live preview
 'livepreview-loading' => 'לאדנדיג…',
 'livepreview-ready' => 'לאדנדיג… גרייט!',
+'livepreview-failed' => 'גיכער פֿאראויסקוק דורכגעפֿאלן.
+פרובירט נארמאלן פֿאראויסקוק.',
+'livepreview-error' => 'פֿארבינדונג נישט מעגלעך: $1 "$2".
+פרובירט נארמאלן פֿאראויסקוק.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'אײַער אויפֿפאַסונג ליסטע אַנטהאַלט {{PLURAL:$1|1 טיטל|$1 טיטלען}}, אויסשליסנדיק שמועסבלעטער.',
@@ -3494,6 +3558,9 @@ $5
 'hebrew-calendar-m11-gen' => 'אב',
 'hebrew-calendar-m12-gen' => 'אלול',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|רעדן]])',
+
 # Core parser functions
 'duplicate-defaultsort' => '\'\'\'ווארענונג:\'\'\' גרונט סארטשליסל "$2" פֿאָרט איבערן פֿריערדיגן גרונט סארטשליסל "$1".',
 
@@ -3569,7 +3636,7 @@ $5
 'tag-filter' => '[[Special:Tags|מאַרקירונג]] פֿילטער:',
 'tag-filter-submit' => 'פֿילטער',
 'tags-title' => 'טאַגן',
-'tags-intro' => 'דער בלאַט ווײַזט די טאַגן מיט וואס דאס ווייכווארג קען צייכענען אַן רעדאַגירונג, און זייער באַטייַט.',
+'tags-intro' => 'דער בלאַט ווײַזט די טאַגן מיט וואס דאס ווייכווארג קען צייכענען אַ רעדאַגירונג, און זייער באַטייַט.',
 'tags-tag' => 'טאַג נאָמען',
 'tags-display-header' => 'אויסזען אין ענדערונג רשימות',
 'tags-description-header' => 'פֿולי באַשרייַבונג פון באַטײַט',
@@ -3640,11 +3707,15 @@ $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' => 'באניצער קאנטע $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 מעלדט א פעלער].
index 925b787..444d03e 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:',
@@ -186,8 +186,8 @@ $messages = array(
 'newwindow' => '(yíò sí nínú fèrèsè tuntun)',
 'cancel' => 'Fagilé',
 'moredotdotdot' => 'Ẹ̀kúnrẹ́rẹ́...',
-'mypage' => 'Ojúewé mi',
-'mytalk' => 'Ọ̀rọ̀ mi',
+'mypage' => 'Ojúewé',
+'mytalk' => 'Ọ̀rọ̀',
 'anontalk' => 'Ọ̀rọ̀ fún IP yí',
 'navigation' => 'Atọ́ka',
 'and' => '&#32;àti',
@@ -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''",
@@ -449,16 +463,16 @@ Láti ṣ'àfikún tàbí ṣ'àyípadà àwọn ìyédèpadà fún gbogbo àw
 
 Ẹ le tẹ̀síwájú sí ní lo {{SITENAME}} láìmorúkọ yín, tàbí kí ẹ <span class='plainlinks'>[$1 padà wọlé]</span> bí ẹnikanan tàbí ẹlòmíràn.
 Àkíyèsí wípé àwọn ojúewé kan le hàn b'ígbà tójẹ́pé ẹ sì wọlé títí tí ẹ ó fi jọ̀wọ́ cache browser yín.",
-'welcomecreation' => "== Ẹ kú àbọ̀, $1! ==
-
-A ti ṣ'èdá àpamọ́ yín.
-Ẹ mọ́ gbàgbé l'áti ṣ'àtúnṣe àwọn [[Special:Preferences|{{SITENAME}} ìfẹ́ràn]] yín.",
+'welcomeuser' => 'Ẹ kú àbọ̀, $1!',
+'welcomecreation-msg' => "A ti ṣ'èdá àpamọ́ yín.
+Ẹ mọ́ gbàgbé l'áti ṣ'àtúnṣe [[Special:Preferences|{{SITENAME}} àwọn ìfẹ́ràn]] yín.",
 'yourname' => 'Orúkọ oníṣe:',
 'yourpassword' => 'Ọ̀rọ̀ìpamọ́:',
 'yourpasswordagain' => 'Kọ ọ̀rọ̀ìpamọ́ lẹ́ẹ̀kansí:',
 '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ẹ̀',
@@ -536,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}}',
@@ -610,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é',
 
@@ -689,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.
@@ -709,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ẹ̀.',
@@ -735,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.
@@ -784,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ẹ̀.'''
@@ -795,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.",
@@ -819,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ọ.
@@ -834,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ò.
@@ -927,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ì',
@@ -993,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ọ́.',
@@ -1019,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í',
@@ -1092,10 +1137,11 @@ 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',
-'mypreferences' => 'Àwọn ìfẹ́ràn mi',
+'mypreferences' => 'Àwọn ìfẹ́ràn',
 'prefs-edits' => 'Iye àwọn àtúnṣe:',
 'prefsnologin' => 'Ẹ kò tíì wọlé',
 'prefsnologintext' => 'Ẹ gbọ́dọ̀ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} wọlé]</span> láti to àwọn ìfẹ́ràn oníṣe.',
@@ -1130,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ẹ̀:',
@@ -1167,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ọ́.
@@ -1184,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.',
@@ -1281,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ẹ́',
@@ -1317,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ìí',
@@ -1462,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ọ; 
@@ -1549,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".',
@@ -1558,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.',
@@ -1567,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è.',
@@ -1575,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
@@ -1591,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ì',
 
@@ -1684,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à',
@@ -1710,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
@@ -1773,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]].',
@@ -1793,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',
@@ -1813,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)',
@@ -1830,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á',
@@ -1870,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é',
@@ -1888,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',
@@ -1908,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:',
@@ -1925,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.
@@ -1952,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"',
@@ -1985,15 +2083,15 @@ Bákannáà ẹ wo [[Special:WantedCategories|àwọn ẹ̀ka wíwá]].',
 
 # Watchlist
 'watchlist' => 'Ìmójútó mi',
-'mywatchlist' => 'Ìmójútó mi',
+'mywatchlist' => 'Ìmójútó',
 'watchlistfor2' => 'Fún $1 $2',
 'nowatchlist' => 'Ẹ kò ní ohun kankan nínú ìmójútó yín.',
 'watchlistanontext' => 'Ẹ jọ̀wọ́ $1 láti wò tàbí ṣàtúnṣe àwọn ohun inú ìmójútó yín.',
 '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,20 +2119,23 @@ 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_newpagetext' => 'Ojúewé tuntun nìyí.',
 'enotif_impersonal_salutation' => 'Oníṣe {{SITENAME}}',
-'changed' => 'títúnṣẹ',
-'created' => 'dídá',
-'enotif_subject' => '$PAGEEDITOR $CHANGEDORCREATED ojúewé $PAGETITLE lórí {{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
 
@@ -2048,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}}}}
 
@@ -2060,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é',
@@ -2099,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ìí.',
@@ -2113,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ò',
@@ -2154,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ọ̀
@@ -2187,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à',
@@ -2202,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ẹ́.",
@@ -2212,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áà:
@@ -2223,13 +2345,17 @@ $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
-'contributions' => 'Àwọn àfikún ẹnitínṣe',
+'contributions' => 'Àwọn àfikún {{GENDER:$1|oníṣe}}',
 'contributions-title' => 'Àwọn àfikún oníṣe fún $1',
-'mycontris' => 'Àwọn àfikún mi',
+'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):',
@@ -2268,7 +2394,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 àtúnjúwe',
 'whatlinkshere-hidetrans' => '$1 ìkómọ́ra',
 'whatlinkshere-hidelinks' => '$1 ìjápọ̀',
-'whatlinkshere-hideimages' => '$1 àwọn ìjápọ̀ àwòrán',
+'whatlinkshere-hideimages' => '$1 àwọn ìjápọ̀ fáìlì',
 'whatlinkshere-filters' => 'Ajọ̀',
 
 # Block/unblock
@@ -2312,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',
@@ -2334,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é',
@@ -2361,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)',
 
@@ -2413,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ìí.
@@ -2442,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ẹ́}}',
@@ -2464,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.
@@ -2476,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ọ̀',
@@ -2484,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ọ',
@@ -2504,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',
@@ -2563,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',
@@ -2603,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}}',
@@ -2618,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',
@@ -2652,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)',
@@ -2675,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ìí:
@@ -2707,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é',
@@ -2769,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',
@@ -2779,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',
@@ -2795,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)',
 
@@ -2818,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
@@ -2852,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>
@@ -2928,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',
@@ -2950,53 +3502,126 @@ 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',
@@ -3005,5 +3630,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 bbb69e1..181d94f 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Horacewai2
+ * @author Justincheng12345
  * @author Kaganer
  * @author KaiesTse
  * @author Mark85296341
@@ -613,9 +614,6 @@ $1',
 
 你重可以用匿名身份用{{SITENAME}},又或者<span class='plainlinks'>[$1 重新登入]</span>。
 但係留意某啲頁面可能會繼續話你未登入,除非等你清除瀏覽器嘅快取儲存。",
-'welcomecreation' => '== 歡迎, $1! ==
-
-你個戶口已經起好。唔好唔記得去改改你嘅[[Special:Preferences|{{SITENAME}}喜好設定]]喎。',
 'yourname' => '用戶名:',
 'yourpassword' => '密碼:',
 'yourpasswordagain' => '再輸入密碼:',
@@ -806,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' => '呢位用戶而家被封鎖緊。
@@ -883,7 +880,6 @@ $1',
 'template-semiprotected' => '(半保護)',
 'hiddencategories' => '呢一版係屬於$1個隱藏類嘅成員:',
 'edittools' => '<!-- 喺呢度嘅文字會喺編輯框下面同埋上載表格中顯示。 -->',
-'nocreatetitle' => '頁面建立被限制',
 'nocreatetext' => '{{SITENAME}}已經限制咗起新版嘅能力。
 你可以番轉頭去編輯一啲已經存在嘅頁面,或者[[Special:UserLogin|登入或開個新戶口]]。',
 'nocreate-loggedin' => '你並無許可權去開新版。',
@@ -1095,7 +1091,7 @@ $1",
 'mergelogpagetext' => '下面係一個最近由一版嘅修訂記錄合併到另一個嘅一覽。',
 
 # Diffs
-'history-title' => '"$1"嘅修訂歷史',
+'history-title' => '「$1」嘅修訂歷史',
 'difference-multipage' => '(版之間嘅差異)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比較被選嘅修訂',
@@ -1176,7 +1172,7 @@ $1",
 
 # Preferences page
 'preferences' => '喜好設定',
-'mypreferences' => '安排與架生',
+'mypreferences' => '自訂喜好',
 'prefs-edits' => '編輯數:',
 'prefsnologin' => '重未登入',
 'prefsnologintext' => '你一定要去<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>設定好用戶喜好值先。',
@@ -1396,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' => '讀呢版',
@@ -1860,7 +1858,7 @@ Template:搞清楚',
 'listusers-editsonly' => '只顯示有編輯嘅用戶',
 'listusers-creationsort' => '按建立日期排序',
 'usereditcount' => '$1次編輯',
-'usercreated' => '響$1 $2建立',
+'usercreated' => '響$1 $2{{GENDER:$3|建立}}',
 'newpages' => '新頁',
 'newpages-username' => '用戶名:',
 'ancientpages' => '舊頁面',
@@ -1950,10 +1948,6 @@ Template:搞清楚',
 'activeusers-hidesysops' => '隱藏管理員',
 'activeusers-noresult' => '搵唔到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '使用者開戶記錄',
-'newuserlogpagetext' => '呢個係一個使用者開戶嘅日誌',
-
 # Special:ListGroupRights
 'listgrouprights' => '用戶組權限',
 'listgrouprights-summary' => '下面係一個響呢個wiki定義咗嘅用戶權限一覽,同埋佢哋嘅存取權。
@@ -2039,11 +2033,7 @@ Template:搞清楚',
 
 'enotif_mailer' => '{{SITENAME}}通知郵遞員',
 'enotif_reset' => '將所有頁面標成已視察',
-'enotif_newpagetext' => '呢個係一個新頁面。',
 'enotif_impersonal_salutation' => '{{SITENAME}}用戶',
-'changed' => '修改過',
-'created' => '建立過',
-'enotif_subject' => '{{SITENAME}}嘅頁面$PAGETITLE已由$PAGEEDITOR$CHANGEDORCREATED',
 'enotif_lastvisited' => '你上次視察以嚟嘅修改請睇$1。',
 'enotif_lastdiff' => '睇$1去睇吓呢一次更改。',
 'enotif_anon_editor' => '匿名用戶$1',
@@ -2070,6 +2060,8 @@ wiki: $PAGEEDITOR_WIKI
 
 回饋及更多幫助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建立過',
+'changed' => '修改過',
 
 # Delete
 'deletepage' => '刪除頁面',
@@ -2234,7 +2226,7 @@ $1',
 'blanknamespace' => '(主)',
 
 # Contributions
-'contributions' => '用戶貢獻',
+'contributions' => '{{GENDER:$1|用戶}}貢獻',
 'contributions-title' => '$1嘅用戶貢獻',
 'mycontris' => '個人貢獻',
 'contribsub2' => '$1嘅貢獻 ($2)',
@@ -2324,7 +2316,7 @@ $1',
 'ipusubmit' => '拎走呢個封鎖',
 'unblocked' => '"[[User:$1|$1]]"已經解封',
 'unblocked-id' => '$1嘅封鎖已經拎走咗',
-'ipblocklist' => 'IP地址同用戶名阻止名單',
+'ipblocklist' => '封咗嘅用戶',
 'ipblocklist-legend' => '搵一位封咗嘅用戶',
 'ipblocklist-submit' => '搵',
 'ipblocklist-localblock' => '本地封鎖',
@@ -2811,7 +2803,7 @@ Variants for Chinese language
 'metadata-help' => '呢個檔案有額外嘅資料。佢應該係數碼相機或者掃描器整出來嘅。如果佢整咗之後畀人改過,裏面嘅資料未必同改過之後相符。',
 'metadata-expand' => '打開詳細資料',
 'metadata-collapse' => '收埋詳細資料',
-'metadata-fields' => '響呢個信息列出嘅 EXIF 元數據項目會喺圖像頁中包含起嚟,而且個元數據表除咗喺下面列出嘅項目之外,其它嘅項目預設會被隱藏。
+'metadata-fields' => '響呢個信息列出嘅EXIF元數據項目會喺圖像頁中包含起嚟,而且個元數據表除咗喺下面列出嘅項目之外,其它嘅項目預設會隱藏。
 * make
 * model
 * datetimeoriginal
@@ -3371,6 +3363,7 @@ MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅
 'revdelete-restricted' => '已經應用限制到操作員',
 'revdelete-unrestricted' => '已經拎走對於操作員嘅限制',
 'newuserlog-byemail' => '密碼已由電郵寄出',
+'rightsnone' => '(無)',
 
 # Search suggestions
 'searchsuggest-search' => '搵嘢',
index 580ffdd..78f4279 100644 (file)
@@ -417,9 +417,6 @@ De heheven reeën is ''$2''.",
 
 Je kan {{SITENAME}} noe anoniem gebruken of wee anmelden as dezelven of een aore gebruker.
 Meuhlijk worn nog een antal pagina's weereheven asof a je anemeld bin totda je de cache van je browser leeg.",
-'welcomecreation' => '== Welkom, $1! ==
-Jen account is anemikt.
-Vergeet nie je [[Special:Preferences|vòkeuren voe {{SITENAME}}]] an te passen.',
 'yourname' => 'Gebrukersnaem',
 'yourpassword' => 'Wachtwoôrd',
 'yourpasswordagain' => 'Heef je wachtwoôrd opnieuw in:',
@@ -654,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.",
@@ -946,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',
@@ -1119,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)',
 
@@ -1403,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 52c289f..b6bef28 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
@@ -35,6 +38,7 @@
  * @author Kuailong
  * @author Liangent
  * @author Linforest
+ * @author Makecat
  * @author Mark85296341
  * @author MarkAHershberger
  * @author Mys 721tx
@@ -42,6 +46,7 @@
  * @author Onecountry
  * @author PhiLiP
  * @author Shinjiman
+ * @author Shirayuki
  * @author Shizhao
  * @author Simon Shek
  * @author Supaiku
@@ -363,7 +368,7 @@ $messages = array(
 'tog-minordefault' => '默认标记编辑为小编辑',
 'tog-previewontop' => '在编辑框上方显示预览',
 'tog-previewonfirst' => '首次编辑时显示预览',
-'tog-nocache' => '用浏览器页面缓存',
+'tog-nocache' => '用浏览器页面缓存',
 'tog-enotifwatchlistpages' => '当我的监视列表中的页面或文件更改时发送电子邮件通知我',
 'tog-enotifusertalkpages' => '当我的讨论页更改时发送电子邮件通知我',
 'tog-enotifminoredits' => '当页面和文件有小编辑时发送电子邮件通知我',
@@ -374,7 +379,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' => '在监视列表中隐藏机器人的编辑',
@@ -383,14 +388,14 @@ $messages = array(
 'tog-watchlisthideanons' => '在监视列表中隐藏匿名用户',
 'tog-watchlisthidepatrolled' => '在监视列表中隐藏已巡查的编辑',
 'tog-ccmeonemails' => '把我给其他用户发送的电子邮件的副本发送给我',
-'tog-diffonly' => '比较差异时不显示页面内容',
+'tog-diffonly' => '对比差异时不显示页面内容',
 'tog-showhiddencats' => '显示隐藏分类',
 'tog-noconvertlink' => '停用链接文字转换',
 'tog-norollbackdiff' => '执行回退后不显示差异',
 
 'underline-always' => '总是使用',
 'underline-never' => '从不使用',
-'underline-default' => '浏览器默认',
+'underline-default' => '浏览器默认设置',
 
 # Font style option in Special:Preferences
 'editfont-style' => '编辑区字体样式:',
@@ -468,15 +473,16 @@ $messages = array(
 'listingcontinuesabbrev' => '续',
 'index-category' => '允许索引的页面',
 'noindex-category' => '禁止索引的页面',
-'broken-file-category' => '损坏的文件的链接的页面',
+'broken-file-category' => '包含损坏的文件链接的页面',
 
 'about' => '关于',
 'article' => '内容页面',
 'newwindow' => '(将于新窗口中打开)',
 'cancel' => '取消',
 'moredotdotdot' => '更多',
-'mypage' => '我的页面',
-'mytalk' => '我的讨论',
+'morenotlisted' => '更多未被列出...',
+'mypage' => '页面',
+'mytalk' => '讨论',
 'anontalk' => '该IP地址的讨论',
 'navigation' => '导航',
 'and' => '和',
@@ -486,7 +492,7 @@ $messages = array(
 'qbbrowse' => '浏览',
 'qbedit' => '编辑',
 'qbpageoptions' => '页面选项',
-'qbmyoptions' => 'æ\88\91ç\9a\84é\80\89项',
+'qbmyoptions' => 'æ\88\91ç\9a\84页é\9d¢',
 'qbspecialpages' => '特殊页面',
 'faq' => '常见问题',
 'faqpage' => 'Project:常见问题',
@@ -498,7 +504,7 @@ $messages = array(
 'vector-action-protect' => '保护',
 'vector-action-undelete' => '恢复',
 'vector-action-unprotect' => '更改保护',
-'vector-simplesearch-preference' => '启用简化搜索栏(仅适用Vector皮肤)',
+'vector-simplesearch-preference' => '启用简化搜索栏(仅Vector皮肤)',
 'vector-view-create' => '创建',
 'vector-view-edit' => '编辑',
 'vector-view-history' => '查看历史',
@@ -508,6 +514,7 @@ $messages = array(
 'namespaces' => '名字空间',
 'variants' => '变换',
 
+'navigation-heading' => '导航菜单',
 'errorpagetitle' => '错误',
 'returnto' => '返回到$1。',
 'tagline' => '来自{{SITENAME}}',
@@ -518,7 +525,7 @@ $messages = array(
 'searcharticle' => '提交',
 'history' => '页面历史',
 'history_short' => '历史',
-'updatedmarker' => 'æ\88\91ä¸\8a次访é\97®ä»¥æ\9d¥ç\9a\84ä¿®æ\94¹',
+'updatedmarker' => 'æ\88\91ä¸\8a次访é\97®ä¹\8bå\90\8eç\9a\84æ\9b´æ\96°',
 'printableversion' => '打印版本',
 'permalink' => '永久链接',
 'print' => '打印',
@@ -560,7 +567,7 @@ $messages = array(
 'lastmodifiedat' => '本页面最后修改于$1 $2。',
 'viewcount' => '此页面已被浏览过$1次。',
 'protectedpage' => '受保护页面',
-'jumpto' => '跳转:',
+'jumpto' => '跳转:',
 'jumptonavigation' => '导航',
 'jumptosearch' => '搜索',
 'view-pool-error' => '抱歉,服务器超负荷运转。
@@ -593,7 +600,7 @@ $1',
 'privacypage' => 'Project:隐私权政策',
 
 'badaccess' => '权限错误',
-'badaccess-group0' => '你被禁止执行你刚才请求的操作。',
+'badaccess-group0' => '您被禁止执行您刚才请求的操作。',
 'badaccess-groups' => '您刚才请求的操作只有{{PLURAL:$2|这个用户组|以下用户组}}中的用户才能使用: $1',
 
 'versionrequired' => '需要版本为$1的MediaWiki',
@@ -602,20 +609,20 @@ $1',
 
 'ok' => '确定',
 'retrievedfrom' => '来自“$1”',
-'youhavenewmessages' => '有$1($2)。',
+'youhavenewmessages' => '有$1($2)。',
 'newmessageslink' => '新信息',
 'newmessagesdifflink' => '最后更改',
-'youhavenewmessagesfromusers' => '有来自{{PLURAL:$3| 另一位用户| $3位用户}}的$1($2)。',
-'youhavenewmessagesmanyusers' => '有来自多位用户的$1($2)。',
-'newmessageslinkplural' => '{{PLURAL:$1|一条新信息|$1条信息}}',
-'newmessagesdifflinkplural' => '最新$1次更改',
-'youhavenewmessagesmulti' => '在$1有新信息',
+'youhavenewmessagesfromusers' => '有来自{{PLURAL:$3| 另一位用户| $3位用户}}的$1($2)。',
+'youhavenewmessagesmanyusers' => '有来自多位用户的$1($2)。',
+'newmessageslinkplural' => '{{PLURAL:$1|一条新信息|信息}}',
+'newmessagesdifflinkplural' => '最新{{PLURAL:$1|更改}}',
+'youhavenewmessagesmulti' => '在$1有新信息',
 'editsection' => '编辑',
 'editold' => '编辑',
 'viewsourceold' => '查看源代码',
 'editlink' => '编辑',
 'viewsourcelink' => '查看源代码',
-'editsectionhint' => '编辑段落:$1',
+'editsectionhint' => '编辑章节:$1',
 'toc' => '目录',
 'showtoc' => '显示',
 'hidetoc' => '隐藏',
@@ -649,7 +656,7 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => '这个命令不存在',
-'nosuchactiontext' => 'URL指定的命令无效。你可能误输入了URL地址,或者点击了错误的链接。这一错误亦有可能是由{{SITENAME}}所使用软件自身的错误导致的。',
+'nosuchactiontext' => 'URL 指定的命令无效。您可能误输入了 URL 地址,或者点击了错误的链接。这一错误也有可能是由{{SITENAME}}所使用软件自身的错误导致的。',
 'nosuchspecialpage' => '此特殊页面不存在',
 'nospecialpagetext' => '<strong>您请求的特殊页面无效。</strong>
 
@@ -703,7 +710,8 @@ $1',
 'badtitletext' => '所请求页面的标题是无效的、不存在,跨语言或跨wiki链接的标题错误。它可能包含一个或更多的不能用于标题的字符。',
 'perfcached' => '下列数据已缓存,但可能已过时。最高{{PLURAL:$1|一个结果|$1个结果}}在缓存中可用。',
 'perfcachedts' => '下列数据已缓存,最后更新于$1。缓存中最多可有{{PLURAL:$4|1个结果|$4个结果}}。',
-'querypage-no-updates' => '当前禁止对此页面进行更新。此处的数据将不能被立即刷新。',
+'querypage-no-updates' => '当前禁止对此页面进行更新。
+此处的数据将不能被立即刷新。',
 'wrong_wfQuery_params' => '错误的参数被传递到 wfQuery()<br />
 函数:$1<br />
 查询:$2',
@@ -711,7 +719,7 @@ $1',
 'viewsource-title' => '查看$1的源代码',
 'actionthrottled' => '操作被限制',
 'actionthrottledtext' => '基于反垃圾的考量,您被限制在短时间内多次重复该操作,但您已超过此上限。请在数分钟后再尝试。',
-'protectedpagetext' => '该页面已被保护以防止编辑。',
+'protectedpagetext' => '该页面已被保护以防止编辑和其他操作。',
 'viewsourcetext' => '您可以查看并复制此页面的源代码:',
 'viewyourtext' => "您可以查看并复制'''您对此页面作出编辑后'''的源代码:",
 'protectedinterface' => '该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。
@@ -732,8 +740,8 @@ $2',
 执行锁定的管理员给出如下解释:$3。',
 'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
 'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
-'exception-nologin' => '未登陆',
-'exception-nologin-text' => '此动作需要先登陆到此 wiki',
+'exception-nologin' => '尚未登录',
+'exception-nologin-text' => '此操作需要您先登录。',
 
 # Virus scanner
 'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
@@ -744,19 +752,20 @@ $2',
 'logouttext' => "'''您现在已经退出。'''
 
 您可以继续以匿名方式使用{{SITENAME}},或再次以相同或不同用户身份<span class='plainlinks'>[$1 登录]</span>。请注意一些页面可能仍然显示您为登录状态,直到您清空您的浏览器缓存为止。",
-'welcomecreation' => '== 欢迎,$1! ==
-你的账户已创建。请别忘记更改你的[[Special:Preferences|{{SITENAME}}系统设置]]。',
+'welcomeuser' => '欢迎,$1!',
+'welcomecreation-msg' => '您的帐户已创建。
+请不要忘记更改您的[[Special:Preferences|{{SITENAME}}个人设置]]。',
 'yourname' => '用户名:',
 'yourpassword' => '密码:',
 'yourpasswordagain' => '再次输入密码:',
-'remembermypassword' => '在此浏览器上保留我的登录信息(最长$1{{PLURAL:$1|日|日}})',
-'securelogin-stick-https' => '登后继续使用 HTTPS 连接',
+'remembermypassword' => '自动登录(最长$1{{PLURAL:$1|天|天}})',
+'securelogin-stick-https' => '登后继续使用 HTTPS 连接',
 'yourdomainname' => '您的域名:',
-'password-change-forbidden' => '您不能更改此wiki上的密码。',
+'password-change-forbidden' => '您不能在此 wiki 上修改密码。',
 'externaldberror' => '这可能是由于验证数据库错误或您被禁止更新您的外部账号。',
 'login' => '登录',
 'nav-login-createaccount' => '登录/创建账户',
-'loginprompt' => '你必须启用Cookies才能登录{{SITENAME}}。',
+'loginprompt' => '您必须启用 Cookies 才能登录{{SITENAME}}。',
 'userlogin' => '登录/创建账户',
 'userloginnocreate' => '登录',
 'logout' => '退出',
@@ -767,25 +776,25 @@ $2',
 'createaccount' => '创建账户',
 'gotaccount' => '已经拥有账户?请$1。',
 'gotaccountlink' => '登录',
-'userlogin-resetlink' => '忘记了的登录信息?',
+'userlogin-resetlink' => '忘记了的登录信息?',
 'createaccountmail' => '通过电子邮件',
 'createaccountreason' => '原因:',
 'badretype' => '您所输入的密码并不相同。',
 'userexists' => '用户名已存在,请使用其他名称。',
 'loginerror' => '登录错误',
 'createaccounterror' => '无法建立账户:$1',
-'nocookiesnew' => '已成功创建新账户!侦测到您已关闭Cookies,请开启它并登录。',
-'nocookieslogin' => '本站å\88©ç\94¨Cookiesè¿\9bè¡\8cç\94¨æ\88·ç\99»å½\95ï¼\8c侦æµ\8bå\88°æ\82¨å·²å\85³é\97­Cookiesï¼\8c请å¼\80å\90¯å®\83并é\87\8dæ\96°ç\99»å½\95ã\80\82',
-'nocookiesfornew' => 'è¿\99ä½\8dç\94¨æ\88·ç\9a\84è´¦æ\88·æ\9cªå»ºç«\8bï¼\8c我们不能确认它的来源。
-请è\82¯å®\9aæ\82¨å·²ç»\8få¼\80å\90¯ cookiesï¼\8cé\87\8dè½½å\90\8eå\86\8dè¯\95ã\80\82',
-'noname' => '没有输入有效的用户名。',
+'nocookiesnew' => '已成功创建新账户!检测到您已禁用 Cookies,请先启用然后登录。',
+'nocookieslogin' => '本站使ç\94¨ Cookies è¿\9bè¡\8cç\99»å½\95ï¼\8cæ£\80æµ\8bå\88°æ\82¨å·²ç¦\81ç\94¨ Cookiesï¼\8c请å\85\88å\90¯ç\94¨ç\84¶å\90\8eé\87\8dè¯\95ã\80\82',
+'nocookiesfornew' => '该ç\94¨æ\88·è´¦æ\88·å°\9aæ\9cªå\88\9b建ï¼\8cå\9b ä¸º我们不能确认它的来源。
+请ç¡®ä¿\9dæ\82¨å·²ç»\8få\90¯ç\94¨ Cookiesï¼\8cå\88·æ\96°æ\9c¬é¡µå\90\8eé\87\8dè¯\95ã\80\82',
+'noname' => '没有输入有效的用户名。',
 'loginsuccesstitle' => '登录成功',
 'loginsuccess' => "'''“$1”,欢迎登录{{SITENAME}}。'''",
-'nosuchuser' => '找不到用户“$1”。用户名是大小写敏感且区分繁简体的。请检查您的拼写,或者[[Special:UserLogin/signup|建立一个新账户]]。',
-'nosuchusershort' => '没æ\9c\89å\90\8d为â\80\9c$1â\80\9dç\9a\84ç\94¨æ\88·ã\80\82请æ£\80æ\9f¥æ\82¨è¾\93å\85¥ç\9a\84æ\96\87å­\97是否有错误。',
-'nouserspecified' => '需要指定一个用户名。',
+'nosuchuser' => '找不到用户“$1”。用户名对大小写和繁简体是区分的。请检查您的拼写是否有错误,或者[[Special:UserLogin/signup|注册]]。',
+'nosuchusershort' => 'æ\89¾ä¸\8då\88°ç\94¨æ\88·â\80\9c$1â\80\9dã\80\82请æ£\80æ\9f¥æ\82¨ç\9a\84æ\8b¼å\86\99是否有错误。',
+'nouserspecified' => '需要指定一个用户名。',
 'login-userblocked' => '该用户已被封禁,禁止登录。',
-'wrongpassword' => '您输入的密码错误,请再试一次。',
+'wrongpassword' => '密码错误,请重试。',
 'wrongpasswordempty' => '您没有输入密码,请重试!',
 'passwordtooshort' => '您的密码至少需要$1个字符。',
 'password-name-match' => '您的密码必须和您的用户名不相同。',
@@ -803,13 +812,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' => '抱歉!您已经创建了$1个账号,已经达到最大允许注册数量。目前使用本 IP 的来访者将不能再创建任何账户。',
 'emailauthenticated' => '您的电子邮箱地址已经于$2 $3确认有效。',
-'emailnotauthenticated' => '您的邮箱地址<strong>还没被认证</strong>。以下功能将不会发送任何邮件。',
+'emailnotauthenticated' => '您的邮箱地址<strong>尚未被认证</strong>。下列功能将不会发送任何邮件。',
 'noemailprefs' => '指定一个电子邮箱地址以使用此功能。',
 'emailconfirmlink' => '确认您的邮箱地址',
 'invalidemailaddress' => '邮箱地址格式不正确,请输入正确的邮箱地址或清空该输入框。',
@@ -822,15 +831,16 @@ $2',
 
 如果该账户创建错误的话,您可以忽略此信息。',
 'usernamehasherror' => '用户名中不可包含哈希(hash)字符',
-'login-throttled' => '您已经尝试多次的登录动作
-请稍ç­\89å¤\9aä¸\80ä¼\9aå\86\8dè¯\95ã\80\82',
-'login-abort-generic' => 'ç\99»å\85¥å¤±è´¥ - æ\94¾å¼\83',
+'login-throttled' => '您最近已经尝试多次登录
+请稍å\90\8eé\87\8dè¯\95ã\80\82',
+'login-abort-generic' => 'ç\99»å½\95失败 - å·²ç»\88æ­¢',
 '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' => '更改密码',
@@ -851,7 +861,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => '重置密码',
-'passwordreset-text' => '完成此表格以接收一个电邮以提示你的帐户详情。',
+'passwordreset-text' => '完成此表格以接收一封包含您的帐户详情的提醒邮件。',
 'passwordreset-legend' => '重置密码',
 'passwordreset-disabled' => '此wiki已经禁用密码重置。',
 'passwordreset-pretext' => '{{PLURAL:$1||输入下面的数据块之一}}',
@@ -861,16 +871,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' => '已发送提醒电子邮件。',
@@ -886,6 +896,7 @@ $2
 'changeemail-oldemail' => '当前的电子邮件地址:',
 'changeemail-newemail' => '新的电子邮件地址:',
 'changeemail-none' => '(无)',
+'changeemail-password' => '您的{{SITENAME}}密码:',
 'changeemail-submit' => '更改电子邮箱',
 'changeemail-cancel' => '取消',
 
@@ -902,7 +913,9 @@ $2
 'headline_tip' => '2级标题文字',
 'nowiki_sample' => '在此插入非格式文本',
 'nowiki_tip' => '插入非格式文本',
+'image_sample' => '示例.jpg',
 'image_tip' => '插入文件',
+'media_sample' => '示例.ogg',
 'media_tip' => '文件链接',
 'sig_tip' => '带时间戳的签名',
 'hr_tip' => '水平线(请小心使用)',
@@ -920,33 +933,33 @@ $2
 'anoneditwarning' => "'''警告:'''您没有登录。
 您的IP地址将记录在此页的编辑历史中。",
 'anonpreviewwarning' => "''您没有登录。保存页面将会把您的IP地址记录在此页的编辑历史中。''",
-'missingsummary' => "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
+'missingsummary' => "'''提示:'''您没有提供编辑摘要。如果您再次点击“{{int:savearticle}}”,您的编辑将不带编辑摘要保存。",
 'missingcommenttext' => '请在下面输入评论。',
-'missingcommentheader' => "'''提示:''' 您没有为此评论提供一个标题。如果您再次单击“{{int:savearticle}}”,您的编辑将不带标题保存。",
+'missingcommentheader' => "'''提示:''' 您还没有为此评论提供一个标题。如果您再次点击“{{int:savearticle}}”,您的编辑将不带标题保存。",
 'summary-preview' => '摘要预览:',
 'subject-preview' => '标题预览:',
 'blockedtitle' => '用户被封禁',
-'blockedtext' => "'''您的用户名或IP地址已被封禁。'''
+'blockedtext' => "'''您的用户名或 IP 地址已被封禁。'''
 
­¤次封禁操作由$1完成,封禁原因为''$2''。
\9c¬次封禁操作由$1完成,封禁原因为''$2''。
 
-* 始时间:$8
-* ç»\88æ­¢时间:$6
+* 始时间:$8
+* ç»\93æ\9d\9f时间:$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
-* ç»\88æ­¢时间:$6
+* 始时间:$8
+* ç»\93æ\9d\9f时间:$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' => '您尝试编辑的章节并不存在。
 可能是在您查看页面时已经移动或删除。',
@@ -960,21 +973,21 @@ $2
 要创建该页面,请在下面的编辑框中输入内容(详情参见[[{{MediaWiki:Helppage}}|帮助页]])。
 如果您误入此页,请点击浏览器中的“返回”按钮。',
 'anontalkpagetext' => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
-'noarticletext' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索该页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>',
+'noarticletext' => '本页面目前没有内容。您可以在其他页面中[[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>,但您没有权限建立此页。',
 'missing-revision' => '“{{PAGENAME}}”的修订#$1不存在。
 
 这通常是因为进入了一个已被删除的页面的历史链接。
 详细信息可以在[{{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”)
+'clearyourcache' => "'''注意:'''保存之后,必须清除浏览器缓存才能看到做出的更改。
+* '''火狐(Firefox)/Safari:'''按住“Shift”,同时击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
 * '''谷歌浏览器(Google Chrome):'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
-* '''Internet Explorer:'''按住“Ctrl”,同时击“刷新”,或按“Ctrl-F5”
+* '''Internet Explorer:'''按住“Ctrl”,同时击“刷新”,或按“Ctrl-F5”
 * '''Opera:'''在“工具→首选项”中清除缓存",
 'usercssyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
 'userjsyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
@@ -982,41 +995,41 @@ $2
 '''还没有保存!'''",
 'userjspreview' => "'''记住您只是在测试/预览您的个人 JavaScript。'''
 '''还没有保存!'''",
-'sitecsspreview' => "'''记住现在只是预览此 CSS。'''
-'''还没有保存!'''",
-'sitejspreview' => "'''记住现在只是预览此 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' => '这个预览显示了上面文字编辑区中的内容。它将在你选择保存后出现。',
-'session_fail_preview' => "'''抱歉!由于会话数据丢失,我们不能处理你的编辑。'''请重试。如果再次失败,请尝试[[Special:UserLogout|退出]]后重新登录。",
-'session_fail_preview_html' => "'''抱歉!我们不能处理你在进程数据丢失时的编辑。'''
+'previewconflict' => '这个预览显示了上面文字编辑区中的内容。它们将在您保存后出现。',
+'session_fail_preview' => "'''抱歉!由于会话数据丢失,我们不能处理您的编辑。'''请重试。如果仍然失败,请尝试[[Special:UserLogout|注销]]然后重新登录。",
+'session_fail_preview_html' => "'''抱歉!我们不能处理您在会话数据丢失时的编辑。'''
 
 ''由于{{SITENAME}}允许使用原始的 HTML,为了防范 JavaScript 攻击,预览已被隐藏。''
 
-'''如果这是一次合法的编辑,请重新进行尝试。'''如果还不行,请[[Special:UserLogout|退出]]并重新登录。",
+'''如果这是一次合法的编辑,请尝试重试。'''如果依然不行,请[[Special:UserLogout|注销]]并重新登录。",
 'token_suffix_mismatch' => "'''由于您用户端中的编辑令牌毁损了一些标点符号字元,您的编辑已经被拒绝。'''
 此次编辑被拒绝以防止页面文本损坏。
 这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。",
-'edit_form_incomplete' => "'''编辑表单的某些部分没有到达服务器 ;请检查您的编辑内容是否完整并再试一次。'''",
+'edit_form_incomplete' => "'''编辑表单的某些部分没有传送至服务器;请检查您的编辑内容是否完整并重试。'''",
 'editing' => '编辑“$1”',
 'creating' => '创建 $1',
 'editingsection' => '编辑“$1”(段落)',
 'editingcomment' => '编辑“$1”(新段落)',
 'editconflict' => '编辑冲突:$1',
-'explainconflict' => "有人在开始编辑后更改了页面。
+'explainconflict' => "有人在开始编辑后更改了页面。
 上面的文字框内显示的是目前本页的内容。
-所做的修改显示在下面的文字框中。
-你应当将你所做的修改加入现有的内容中。
-'''只有'''在上面文字框中的内容会在点击“{{int:savearticle}}”后被保存。",
-'yourtext' => '的文字',
+所做的修改显示在下面的文字框中。
+您应当将您的修改加入至现有的内容中。
+'''只有'''在上面文字框中的内容会在点击“{{int:savearticle}}”后被保存。",
+'yourtext' => '的文字',
 'storedversion' => '已保存的版本',
 'nonunicodebrowser' => "'''警告:您的浏览器不兼容Unicode编码。'''这里有一个工作区将使您能安全地编辑页面:非ASCII字符将以十六进制编码方式出现在编辑框中。",
-'editingold' => "'''警告:正在编辑的是本页的旧版本。'''
-如果你保存它的话,在本版本之后的任何修改都会丢失。",
+'editingold' => "'''警告:正在编辑的是本页的旧版本。'''
+如果您保存它的话,在旧版本之后的任何修改都将丢失。",
 'yourdiff' => '差异',
 'copyrightwarning' => "请注意您对{{SITENAME}}的所有贡献都被认为是在$2下发布,请查看在$1的细节。
 如果您不希望您的文字被任意修改和再散布,请不要提交。<br />
@@ -1043,17 +1056,16 @@ $2
 'template-semiprotected' => '(半保护)',
 'hiddencategories' => '本页面属于$1个隐藏分类:',
 'edittools' => '<!-- 这里的文字将显示在编辑和上传表格下面。 -->',
-'nocreatetitle' => '创建页面受限',
-'nocreatetext' => '{{SITENAME}}限制了创建新页面的功能。你可以返回并编辑已有的页面,或者[[Special:UserLogin|登录或创建新账户]]。',
-'nocreate-loggedin' => '你没有权限创建新页面。',
+'nocreatetext' => '{{SITENAME}}限制了创建新页面功能。您可以返回并编辑已有的页面,或者[[Special:UserLogin|登录或创建新账户]]。',
+'nocreate-loggedin' => '您没有权限创建新页面。',
 'sectioneditnotsupported-title' => '段落编辑不支持',
 'sectioneditnotsupported-text' => '本页面不支持段落编辑。',
 'permissionserrors' => '权限错误',
-'permissionserrorstext' => 'å\9b ä¸ºä»¥ä¸\8b{{PLURAL:$1|å\8e\9få\9b }}ï¼\8c你没æ\9c\89æ\9d\83é\99\90è¿\9b行该操作:',
-'permissionserrorstext-withaction' => 'å\9b ä¸ºä»¥ä¸\8b{{PLURAL:$1|å\8e\9få\9b }}ï¼\8cä½ 没有权限$2:',
-'recreate-moveddeleted-warn' => "'''警告:正在重新创建曾经被删除的页面。'''
+'permissionserrorstext' => 'å\9b ä¸ºä¸\8bå\88\97{{PLURAL:$1|å\8e\9få\9b }}ï¼\8cæ\82¨æ²¡æ\9c\89æ\9d\83é\99\90æ\89§行该操作:',
+'permissionserrorstext-withaction' => 'å\9b ä¸ºä¸\8bå\88\97{{PLURAL:$1|å\8e\9få\9b }}ï¼\8cæ\82¨没有权限$2:',
+'recreate-moveddeleted-warn' => "'''警告:正在重新创建曾经被删除的页面。'''
 
-应该考虑继续编辑本页是否合适。这里提供本页的删除和移动记录以供参考:",
+应该考虑继续编辑本页是否合适。这里提供本页的删除和移动记录以供参考:",
 'moveddeleted-notice' => '本页面已被删除。下面提供本页的删除和移动日志以供参考。',
 'log-fulllog' => '查看完整日志',
 'edit-hook-aborted' => '编辑被hook指令取消。
@@ -1061,13 +1073,16 @@ $2
 'edit-gone-missing' => '不能更新页面。
 它可能刚刚被删除。',
 'edit-conflict' => '编辑冲突。',
-'edit-no-change' => '您的编辑已经略过,因为文字无任何改动。',
+'edit-no-change' => '由于文字无任何改动,您的编辑已被忽略。',
 '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' => 'wiki语法',
 'content-model-text' => '纯文本',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
@@ -1095,7 +1110,7 @@ $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',
@@ -1143,13 +1158,13 @@ $3的理由是''$2''",
 'rev-deleted-event' => '(日志条目被删除)',
 'rev-deleted-user-contribs' => '[用户名或IP地址被删除 - 编辑在贡献中隐藏]',
 'rev-deleted-text-permission' => "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]。",
-'rev-deleted-text-unhide' => "æ\9c¬é¡µé\9d¢ç\89\88æ\9c¬å·²è¢«'''å\88 é\99¤'''ã\80\82详æ\83\85请è§\81[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} å\88 é\99¤æ\97¥å¿\97\80\82å¦\82æ\9e\9cä½ æ\83³ç»§ç»­æ\93\8dä½\9cï¼\8cä½ ä»\8dç\84¶å\8f¯ä»¥[$1 æ\9f¥ç\9c\8bæ\9c¬ç\89\88æ\9c¬]。",
+'rev-deleted-text-unhide' => "æ\9c¬é¡µé\9d¢ç\9a\84修订ç\89\88已被'''å\88 é\99¤'''ã\80\82详æ\83\85请è§\81[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} å\88 é\99¤æ\97¥å¿\97\80\82æ\82¨å\8f¯ä»¥[$1 æ\9f¥ç\9c\8bå½\93å\89\8dç\89\88æ\9c¬]以继续。",
 'rev-suppressed-text-unhide' => "该页面修订已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
-'rev-deleted-text-view' => "æ\9c¬é¡µé\9d¢ç\89\88æ\9c¬å·²è¢«'''å\88 é\99¤'''ã\80\82ä½ 可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
+'rev-deleted-text-view' => "æ\9c¬é¡µé\9d¢ç\9a\84修订ç\89\88已被'''å\88 é\99¤'''ã\80\82æ\82¨可以查看它,详情请见[{{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-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 去查看这次修订]。",
@@ -1166,16 +1181,16 @@ $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' => "'''å\8fªæ\9c\89'''å\87ºç\8e°ä»¥ä¸\8bç\9a\84情况下才应阻止访问:
-* 不合适的个人信息
-*: ''家庭地址、电话号码、身份证号码等。''",
+'revdelete-suppress-text' => "'''å\8fªæ\9c\89'''å\87ºç\8e°ä¸\8bå\88\97情况下才应阻止访问:
+* 可能虚假的个人信息
+*: ''家庭地址、电话号码、身份证号码等。''",
 'revdelete-legend' => '设置可见性之限制',
 'revdelete-hide-text' => '隐藏版本文字',
 'revdelete-hide-image' => '隐藏文件内容',
@@ -1229,7 +1244,7 @@ $1",
 'mergehistory-from' => '来源页面:',
 'mergehistory-into' => '目的页面:',
 'mergehistory-list' => '可以合并的编辑历史',
-'mergehistory-merge' => '以ä¸\8b[[:$1]]的修订可以合并到[[:$2]]。用该选项按钮列去合并只有在指定时间以前所创建的修订。要留意的是使用导航链接便会重设这一栏。',
+'mergehistory-merge' => 'ä¸\8bå\88\97[[:$1]]的修订可以合并到[[:$2]]。用该选项按钮列去合并只有在指定时间以前所创建的修订。要留意的是使用导航链接便会重设这一栏。',
 'mergehistory-go' => '显示可以合并的编辑',
 'mergehistory-submit' => '合并版本',
 'mergehistory-empty' => '没有可以合并的版本。',
@@ -1315,7 +1330,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' => '高级搜索',
@@ -1338,8 +1353,8 @@ $1",
 'qbsettings-directionality' => '根据您的语言文本方向固定位置',
 
 # Preferences page
-'preferences' => '系统设置',
-'mypreferences' => '我的设置',
+'preferences' => '个人设置',
+'mypreferences' => '个人设置',
 'prefs-edits' => '编辑数量:',
 'prefsnologin' => '尚未登录',
 'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
@@ -1375,13 +1390,13 @@ $1",
 'searchresultshead' => '搜索',
 'resultsperpage' => '每页显示链接数:',
 'stub-threshold' => '<a href="#" class="stub">短页面链接</a>格式阈值(字节):',
-'stub-threshold-disabled' => '已用',
+'stub-threshold-disabled' => '已用',
 'recentchangesdays' => '最近更改中显示的天数:',
 'recentchangesdays-max' => '最多$1天',
 'recentchangescount' => '默认显示的编辑数:',
 'prefs-help-recentchangescount' => '该项包含最近更改、页面历史和日志。',
 'prefs-help-watchlist-token' => '此栏填写的密钥可以生成您监视列表的RSS源。任何知晓本栏密钥的人都能阅读您的监视列表,因此请使用安全的数值。这里已提供了一个随机生成的数值供您选择:$1',
-'savedprefs' => '的系统设置已经保存。',
+'savedprefs' => '的系统设置已经保存。',
 'timezonelegend' => '时区:',
 'localtime' => '当地时间:',
 'timezoneuseserverdefault' => '使用wiki默认值($1)',
@@ -1405,23 +1420,23 @@ $1",
 'defaultns' => '否则在这些名字空间中搜索:',
 'default' => '默认',
 'prefs-files' => '文件',
-'prefs-custom-css' => '自定义CSS',
-'prefs-custom-js' => '自定义JavaScript',
+'prefs-custom-css' => '自定义 CSS',
+'prefs-custom-js' => '自定义 JavaScript',
 'prefs-common-css-js' => '所有皮肤共用的CSS/JavaScript:',
-'prefs-reset-intro' => '你可以使用本页面重置你的系统设置为网站默认值。该操作不能撤销。',
+'prefs-reset-intro' => '您可以通过本页面重置您的系统设置为默认值。此操作不可撤销。',
 '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' => '语言:',
 'yourvariant' => '内容语言变种:',
 'prefs-help-variant' => '您希望用于显示本站内容的语种或拼写语系。',
 'yournick' => '新签名:',
-'prefs-help-signature' => '讨论页面上的评论应该使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为你的签名及时间戳。',
+'prefs-help-signature' => '讨论页面上的评论应使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为您的签名和时间戳。',
 'badsig' => '错误的原始签名。请检查HTML标签。',
 'badsiglength' => '签名过长。请不超过$1个字符。',
 'yourgender' => '性别:',
@@ -1430,9 +1445,9 @@ $1",
 'gender-female' => '女',
 'prefs-help-gender' => '选填项目。使软件使用正确的性别称呼。该信息将会公开。',
 'email' => '电子邮件',
-'prefs-help-realname' => '真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。',
-'prefs-help-email' => '电子邮件地址是选填项目。但是在你忘记密码需要重置密码时需要电子邮件地址。',
-'prefs-help-email-others' => '你亦可以选择让其他用户通过你的用户页或讨论页上的链接用电子邮件联系你。其他用户联系你时你的电子邮件地址不会显示。',
+'prefs-help-realname' => '真实姓名是可选的项目。如果您选择提供它,它将会用于贡献署名。',
+'prefs-help-email' => '电子邮件地址是可选的项目。但是在您忘记密码需要重置密码时需要它。',
+'prefs-help-email-others' => '您也可以选择让其他用户通过您的用户页或讨论页上的链接用电子邮件联系您。其他用户联系您时,您的电子邮件地址将不会被显示。',
 'prefs-help-email-required' => '电子邮件地址是必填项目。',
 'prefs-info' => '基本信息',
 'prefs-i18n' => '界面语言',
@@ -1463,7 +1478,7 @@ $1",
 'saveusergroups' => '保存用户组',
 'userrights-groupsmember' => '用户组:',
 'userrights-groupsmember-auto' => '自动用户组:',
-'userrights-groups-help' => '可以更改该用户的用户组:
+'userrights-groups-help' => '可以更改该用户的用户组:
 * 选中的选项框表示该用户属于该用户组。
 * 未选中的选项框表示该用户不属于该用户组。
 * 星号(*)表示一旦添加该用户组后不能删除,反之亦然。',
@@ -1471,9 +1486,9 @@ $1",
 'userrights-no-interwiki' => '您并没有权限去编辑在其它wiki上的用户权限。',
 'userrights-nodatabase' => '数据库$1不存在或并非为本地的。',
 'userrights-nologin' => '您必须要以管理员帐户[[Special:UserLogin|登录]]之后才可以指定用户权限。',
-'userrights-notallowed' => 'æ\82¨ç\9a\84å¸\90æ\88·æ\97 æ\9d\83é\99\90æ·»å\8a æ\88\96å\88 é\99¤ç\94¨æ\88·权限。',
-'userrights-changeable-col' => '可以更改的用户组',
-'userrights-unchangeable-col' => '不能更改的用户组',
+'userrights-notallowed' => 'æ\82¨ç\9a\84å¸\90æ\88·æ\97 æ·»å\8a æ\88\96å\88 é\99¤ç\94¨æ\88·æ\9d\83é\99\90ç\9a\84权限。',
+'userrights-changeable-col' => '可以更改的用户组',
+'userrights-unchangeable-col' => '不能更改的用户组',
 
 # Groups
 'group' => '用户组:',
@@ -1533,7 +1548,7 @@ $1",
 'right-suppressrevision' => '审查和恢复管理员隐藏的版本',
 'right-suppressionlog' => '查看非公开日志',
 'right-block' => '阻止其他用户编辑',
-'right-blockemail' => '阻止用户电邮联系',
+'right-blockemail' => '阻止用户发送邮件',
 'right-hideuser' => '封禁并隐藏用户名',
 'right-ipblock-exempt' => '避开IP封禁、自动封禁和IP段封禁',
 'right-proxyunbannable' => '避开代理服务器的自动封禁',
@@ -1558,15 +1573,16 @@ $1",
 'right-userrights-interwiki' => '编辑其它wiki的用户的用户权限',
 'right-siteadmin' => '锁定和解锁数据库',
 'right-override-export-depth' => '导出含有链接页面深度为5的页面',
-'right-sendemail' => '电邮联系其他用户',
+'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' => '阅读本页',
@@ -1597,13 +1613,13 @@ $1",
 'action-import' => '从其他wiki导入本页面',
 'action-importupload' => '从文件上传导入本页面',
 'action-patrol' => '标记他人的编辑为已巡查',
-'action-autopatrol' => '使你的编辑标记为已巡查',
+'action-autopatrol' => '将您的编辑标记为已巡查',
 'action-unwatchedpages' => '查看未受监视页面的列表',
 'action-mergehistory' => '合并本页面的历史',
 'action-userrights' => '编辑所有用户的权限',
 'action-userrights-interwiki' => '编辑其它wiki的用户的用户权限',
 'action-siteadmin' => '锁定或解锁数据库',
-'action-sendemail' => '电邮联系其他用户',
+'action-sendemail' => '通过邮件联系其他用户',
 
 # Recent changes
 'nchanges' => '$1次更改',
@@ -1726,22 +1742,22 @@ $1",
 请仔细检查该文件<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' => 'è¿\99个æ\96\87件ä¸\8e以ä¸\8b{{PLURAL:$1|一|多}}个文件重复:',
+'fileexists-shared-forbidden' => '在共享文件库中已存在同名文件。
+如果您仍然想继续上传,请返回并使用一个新的文件名来上传此文件。[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => 'è¿\99个æ\96\87件ä¸\8eä¸\8bå\88\97{{PLURAL:$1|一|多}}个文件重复:',
 'file-deleted-duplicate' => '一个相同名称的文件 ([[:$1]]) 在先前删除过。您应该在重新上传之前检查一下该文件之删除纪录。',
 'uploadwarning' => '上传警告',
 'uploadwarning-text' => '请修改下面的文件说明并重试。',
 'savefile' => '保存文件',
 'uploadedimage' => '上传“[[$1]]”',
 'overwroteimage' => '上传“[[$1]]”的新版本',
-'uploaddisabled' => '上传己用。',
-'copyuploaddisabled' => '通过网址上传功能未开通。',
+'uploaddisabled' => '上传己用。',
+'copyuploaddisabled' => '通过网址上传功能已禁用。',
 'uploadfromurl-queued' => '上传已被列入队列。',
-'uploaddisabledtext' => '文件上传已用。',
-'php-uploaddisabledtext' => 'PHP 文件上传已经停用。请检查 file_uploads 设置。',
+'uploaddisabledtext' => '文件上传已用。',
+'php-uploaddisabledtext' => 'PHP 设置已禁用文件上传功能。请检查 file_uploads 设置。',
 'uploadscripted' => '该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。',
 'uploadvirus' => '该文件包含病毒!
 详情:$1',
@@ -1785,6 +1801,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。',
@@ -1831,8 +1848,8 @@ $1',
 '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' => 'æ\89§è¡\8cæ\93\8dä½\9cä¸\8dæ\88\90å\8a\9fï¼\8cæ\88\96è\80\85æ\82¨ç\9a\84ç¼\96è¾\91ä¿¡æ\81¯å·²ç»\8fè¿\87æ\9c\9fã\80\82请é\87\8dè¯\95ã\80\82',
 'uploadstash-errclear' => '清除文件不成功。',
 'uploadstash-refresh' => '更新文件清单',
 'invalid-chunk-offset' => '无效区块偏移量',
@@ -1849,7 +1866,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 已被设置为公共 wiki。出于安全考虑,img_auth.php 已被禁用。',
 'img-auth-noread' => '用户无权读取“$1”。',
 'img-auth-bad-query-string' => 'URL 有一个无效的查询字符串。',
 
@@ -1892,7 +1909,7 @@ $1',
 # File description page
 'file-anchor-link' => '文件',
 'filehist' => '文件历史',
-'filehist-help' => '查看某一时刻的文件,请击相应的日期/时间。',
+'filehist-help' => '查看某一时刻的文件,请击相应的日期/时间。',
 'filehist-deleteall' => '删除全部',
 'filehist-deleteone' => '删除',
 'filehist-revert' => '恢复',
@@ -1907,14 +1924,14 @@ $1',
 'filehist-comment' => '评论',
 'filehist-missing' => '文件遗失',
 'imagelinks' => '文件用途',
-'linkstoimage' => '以ä¸\8bç\9a\84$1个页面链接到本文件:',
+'linkstoimage' => 'ä¸\8bå\88\97$1个页面链接到本文件:',
 'linkstoimage-more' => '多于$1个页面连接到这个文件。
 下面的列表只列示了连去这个文件的最首$1个页面。
 一个[[Special:WhatLinksHere/$2|完整的列表]]可以提供。',
 'nolinkstoimage' => '没有页面链接到本文件。',
 'morelinkstoimage' => '查看连接到这个文件的[[Special:WhatLinksHere/$1|更多链接]]。',
 'linkstoimage-redirect' => '$1(文件重定向)$2',
-'duplicatesoffile' => '以ä¸\8bç\9a\84$1个æ\96\87件è·\9fè¿\99个文件重复([[Special:FileDuplicateSearch/$2|更多细节]]):',
+'duplicatesoffile' => 'ä¸\8bå\88\97$1个æ\96\87件ä¸\8e该文件重复([[Special:FileDuplicateSearch/$2|更多细节]]):',
 'sharedupload' => '该文件来自于$1,它可能在其它计划项目中被应用。',
 'sharedupload-desc-there' => '该文件来自于$1,它可能在其它计划项目中被应用。
 请参阅在[$2 文件描述页面]以了解其相关信息。',
@@ -1945,8 +1962,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'''已经删除。",
@@ -1960,7 +1977,7 @@ $1',
 ** 侵犯版权
 ** 重复文件',
 'filedelete-edit-reasonlist' => '编辑删除埋由',
-'filedelete-maintenance' => 'å½\93å\9c¨ç»´æ\8a¤æ\97¶å·²ç»\8fæ\9a\82æ\97¶å\81\9c用文件删除和恢复。',
+'filedelete-maintenance' => 'å¤\84äº\8eç»´æ\8a¤æ\97¶å°\86æ\9a\82æ\97¶ç¦\81用文件删除和恢复。',
 'filedelete-maintenance-title' => '无法删除文件',
 
 # MIME search
@@ -2014,7 +2031,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为已经解决的项目。',
+'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ä¹\9få°±æ\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æ\9d¡ç\9b®æ\98¯已经解决的项目。',
 'double-redirect-fixed-move' => '[[$1]]已被移动。它现在重定向至[[$2]]。',
 'double-redirect-fixed-maintenance' => '修复双重重定向自[[$1]]至[[$2]]。',
 'double-redirect-fixer' => '重定向页修复器',
@@ -2041,7 +2058,7 @@ $1',
 'nviews' => '$1次浏览',
 'nimagelinks' => '用于$1个页面中',
 'ntransclusions' => '用于$1个页面中',
-'specialpage-empty' => 'è¿\99个æ\8a¥å\91\8aç\9a\84结果为空。',
+'specialpage-empty' => '该æ\8a¥å\91\8a结果为空。',
 'lonelypages' => '孤立页面',
 'lonelypagestext' => '以下页面尚未被{{SITENAME}}中的其它页面链接或被之包含。',
 'uncategorizedpages' => '未归类页面',
@@ -2063,7 +2080,7 @@ $1',
 'mostlinkedtemplates' => '最多链接模板',
 'mostcategories' => '最多分类页面',
 'mostimages' => '最多链接文件',
-'mostinterwikis' => '跨语言链接最多的页面',
+'mostinterwikis' => '最多跨语言链接页面',
 'mostrevisions' => '最多版本页面',
 'prefixindex' => '所有有前缀的页面',
 'prefixindex-namespace' => '所有有前缀的页面($1名字空间)',
@@ -2099,12 +2116,12 @@ $1',
 'pager-newer-n' => '前$1个',
 'pager-older-n' => '后$1个',
 'suppress' => '监督',
-'querypage-disabled' => '此特殊页面基于效能的原因已经被停用。',
+'querypage-disabled' => '此特殊页面由于性能原因已被禁用。',
 
 # Book sources
 'booksources' => '网络书源',
 'booksources-search-legend' => '搜索网络书源',
-'booksources-isbn' => '国际标准书号:',
+'booksources-isbn' => 'ISBN:',
 'booksources-go' => '提交',
 'booksources-text' => '以下是一些网络书店的链接列表,其中可能有您要找的书籍的更多信息:',
 'booksources-invalid-isbn' => '提供的ISBN号码并不正确,请检查原始复制来源号码是否有误。',
@@ -2114,7 +2131,7 @@ $1',
 'speciallogtitlelabel' => '目标(标题或用户):',
 'log' => '日志',
 'all-logs-page' => '所有公开日志',
-'alllogstext' => '所有{{SITENAME}}公开日志的联合展示。可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。',
+'alllogstext' => '所有{{SITENAME}}公开日志的联合展示。 您可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。',
 'logempty' => '在日志中不存在匹配项。',
 'log-title-wildcard' => '搜索以该文字开头的标题',
 'showhideselectedlogentries' => '显示/隐藏所选日志项',
@@ -2138,7 +2155,7 @@ $1',
 'allpages-hide-redirects' => '隐藏重定向页',
 
 # SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => '正在浏览本页的缓存版本,至多可能存在 $1 的延迟。',
+'cachedspecial-viewing-cached-ttl' => '正在浏览本页的缓存版本,至多可能存在 $1 的延迟。',
 'cachedspecial-viewing-cached-ts' => '您正浏览此页的缓存版本,不一定是最新的完整版本。',
 'cachedspecial-refresh-now' => '查看最新的。',
 
@@ -2161,8 +2178,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>(不要包含在搜索中)。',
+'linksearch-text' => '可以使用类似“*.wikipedia.org”的通配符。必须至少是顶级域名,例如“*.org”。<br />
+支持的{{PLURAL:$2|协议}}:<code>$1</code>(如果没有设置协议则默认为<nowiki>http://</nowiki>)。',
 'linksearch-line' => '$1 链自 $2',
 'linksearch-error' => '通配符仅可在主机名称的开头使用。',
 
@@ -2170,7 +2187,7 @@ $1',
 'listusersfrom' => '给定显示用户条件:',
 'listusers-submit' => '显示',
 'listusers-noresult' => '找不到用户。',
-'listusers-blocked' => '(已封é\94\81ï¼\89',
+'listusers-blocked' => '(已封ç¦\81ï¼\89',
 
 # Special:ActiveUsers
 'activeusers' => '活跃用户列表',
@@ -2181,10 +2198,6 @@ $1',
 'activeusers-hidesysops' => '隐藏管理员',
 'activeusers-noresult' => '找不到用户。',
 
-# Special:Log/newusers
-'newuserlogpage' => '用户创建日志',
-'newuserlogpagetext' => '这是用户创建的日志。',
-
 # Special:ListGroupRights
 'listgrouprights' => '用户组权限',
 'listgrouprights-summary' => '以下面是一个在这个wiki中定义出来的用户权限列表,以及它们的访问权。
@@ -2205,17 +2218,18 @@ $1',
 'listgrouprights-removegroup-self-all' => '删除自己的账户的所有用户组',
 
 # E-mail user
-'mailnologin' => 'æ\97 ç\94µé\82®地址',
-'mailnologintext' => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
+'mailnologin' => '没æ\9c\89å\8f\91é\80\81地址',
+'mailnologintext' => '您必须[[Special:UserLogin|登录]]并在您的[[Special:Preferences|个人设置]]中设置一个有效的电子邮件地址才能向其他用户发送电子邮件。',
 'emailuser' => '电邮联系',
-'emailuser-title-target' => '电邮联系该{{GENDER:$1|用户}}',
-'emailuser-title-notarget' => '电邮联系',
-'emailpage' => '电邮联系',
-'emailpagetext' => '你可以使用下面的表格向该用户发送电子邮件信息。你在[[Special:Preferences|你的系统设置]]中输入的电子邮件地址将显示为邮件的“发件人”地址,所以该用户将可以直接回复你。',
+'emailuser-title-target' => '邮件联系该{{GENDER:$1|用户}}',
+'emailuser-title-notarget' => '邮件联系',
+'emailpage' => '邮件联系',
+'emailpagetext' => '您可以使用下面的表单向该{{GENDER:$1|用户}}发送电子邮件消息。
+您在[[Special:Preferences|个人设置]]中输入的电子邮件地址将显示为该邮件的“发件人”地址,所以收件人可以直接回复给您。',
 'usermailererror' => 'Mail 对象返回错误:',
 'defemailsubject' => '{{SITENAME}}来自用户“$1”的电子邮件',
-'usermaildisabled' => '用户电邮已停用',
-'usermaildisabledtext' => '您不可以发送电邮到这个wiki上的其他用户',
+'usermaildisabled' => '邮件发送功能已禁用',
+'usermaildisabledtext' => '您不可以给这个 wiki 上的其他用户发送邮件',
 'noemailtitle' => '无电子邮件地址',
 'noemailtext' => '该用户还没有指定一个有效的电子邮件地址。',
 'nowikiemailtitle' => '禁止电子邮件',
@@ -2234,7 +2248,7 @@ $1',
 'emailccsubject' => '您发送给$1的消息的副本:$2',
 'emailsent' => '电子邮件已发送',
 'emailsenttext' => '您的电子邮件已经发出。',
-'emailuserfooter' => '这封电邮是由$1寄给$2经{{SITENAME}}的“电邮用户”功能发出的。',
+'emailuserfooter' => '本邮件由{{SITENAME}}的“电邮用户”功能从$1发送至$2。',
 
 # User Messenger
 'usermessage-summary' => '留下系统信息。',
@@ -2244,14 +2258,15 @@ $1',
 'watchlist' => '监视列表',
 'mywatchlist' => '监视列表',
 'watchlistfor2' => '$1的监视列表$2',
-'nowatchlist' => '的监视列表为空。',
+'nowatchlist' => '的监视列表为空。',
 'watchlistanontext' => '请$1以查看或编辑您的监视列表。',
 'watchnologin' => '未登录',
 'watchnologintext' => '您必须先[[Special:UserLogin|登录]]才能更改您的监视列表。',
 'addwatch' => '添加至监视列表',
-'addedwatchtext' => "页面“[[:$1]]”已添加至你的[[Special:Watchlist|监视列表]]。本页面及其讨论页面的新增更改将会列入监视列表,本页面将以'''粗体'''显示在[[Special:RecentChanges|最近更改列表]]中以方便识别。",
+'addedwatchtext' => '页面“[[:$1]]”已添加至您的[[Special:Watchlist|监视列表]]。
+本页面及其讨论页面的新增更改将会列入监视列表。',
 'removewatch' => '从监视列表中删除',
-'removedwatchtext' => '页面“[[:$1]]”已从[[Special:Watchlist|的监视列表]]中删除。',
+'removedwatchtext' => '页面“[[:$1]]”已从[[Special:Watchlist|的监视列表]]中删除。',
 'watch' => '监视',
 'watchthispage' => '监视本页',
 'unwatch' => '取消监视',
@@ -2259,9 +2274,9 @@ $1',
 'notanarticle' => '非内容页面',
 'notvisiblerev' => '上次由不同用户所作的修订版本已经删除',
 'watchnochange' => '在显示的时间段内您所监视的页面没有更改。',
-'watchlist-details' => '不计讨论页面,你的监视列表中有$1个页面。',
+'watchlist-details' => '不包括讨论页面,您的监视列表中有$1个页面。',
 'wlheader-enotif' => '* 已经启动电子邮件通知功能。',
-'wlheader-showupdated' => "* 在你上次查看后有被修改过的页面会显示为'''粗体'''",
+'wlheader-showupdated' => "* 在您上次查看后有被修改过的页面会以'''粗体'''的形式被显示",
 'watchmethod-recent' => '检查被监视页面的最近编辑',
 'watchmethod-list' => '查看监视页中的最新修改',
 'watchlistcontains' => '您的监视列表包含$1个页面。',
@@ -2277,28 +2292,31 @@ $1',
 
 'enotif_mailer' => '{{SITENAME}}通知发送器',
 'enotif_reset' => '标记所有页面为已访问',
-'enotif_newpagetext' => '该页面为新页面。',
 'enotif_impersonal_salutation' => '{{SITENAME}}用户',
-'changed' => '更改',
-'created' => '创建',
-'enotif_subject' => '{{SITENAME}}页面“$PAGETITLE”已被$PAGEEDITOR$CHANGEDORCREATED',
-'enotif_lastvisited' => '请浏览 $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被{{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:
+'enotif_body' => '亲爱的 $WATCHINGUSERNAME:
 
-你好!
+$PAGEINTRO $NEWPAGE
 
-{{SITENAME}}页面$PAGETITLE已于$PAGEEDITDATE被$PAGEEDITOR $CHANGEDORCREATED,请浏览 $PAGETITLE_URL 查看当前版本。
-$NEWPAGE
 编辑摘要:$PAGESUMMARY $PAGEMINOREDIT
 
-你可以通过以下方式联系编者:
+您可以通过以下方式联系编辑者:
 电子邮件:$PAGEEDITOR_EMAIL
-用户页面:$PAGEEDITOR_WIKI
+wiki: $PAGEEDITOR_WIKI
 
-在你访问该页面之前,我们不会发送新增更改的通知。
-你也可以重设你的监视列表中所有监视页面的通知标志。
+在您访问该页面之前,我们不会发送新增更改的通知。您也可以重设您的监视列表中所有监视页面的通知标志。
 
 友好的{{SITENAME}}通知系统
 
@@ -2307,10 +2325,12 @@ $NEWPAGE
 {{canonicalurl:{{#special:Preferences}}}}
 更改监视列表设置:
 {{canonicalurl:{{#special:EditWatchlist}}}}
-从监视列表中删除该页面
+从监视列表中删除本页
 $UNWATCHURL
 反馈与其他帮助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '创建',
+'changed' => '更改',
 
 # Delete
 'deletepage' => '删除页面',
@@ -2376,21 +2396,23 @@ $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-cascade' => '联锁',
 'protect-expiring' => '终止于$1(UTC)',
 'protect-expiring-local' => '$1到期',
@@ -2437,7 +2459,7 @@ $UNWATCHURL
 'undeleterevisions' => '$1版本存档',
 'undeletehistory' => '如果您恢复了该页面,所有版本都会被恢复到修订历史中。
 如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。',
-'undeleterevdel' => '如果把最新修订部份删除,反删除便无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。',
+'undeleterevdel' => '如果把最新修订部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。',
 'undeletehistorynoadmin' => '这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有修订文本连同删除前贡献用户的细节信息只对管理员可见。',
 'undelete-revision' => '$1由$3(在$4 $5)所编写的已删除修订版本:',
 'undeleterevision-missing' => '无效或丢失的修订版本。您可能使用了错误的链接,或者此修订版本已经被从存档中恢复或移除。',
@@ -2451,7 +2473,8 @@ $UNWATCHURL
 'undeletedrevisions' => '$1个版本已恢复',
 'undeletedrevisions-files' => '$1个版本和$2个文件已恢复',
 'undeletedfiles' => '$1个文件已经被恢复',
-'cannotundelete' => '恢复删除失败;可能已有其他人先行恢复了此页面。',
+'cannotundelete' => '恢复删除失败:
+$1',
 'undeletedpage' => "'''$1已经被恢复'''
 
 参考[[Special:Log/delete|删除日志]]查看删除及恢复记录。",
@@ -2476,15 +2499,15 @@ $1',
 # Namespace form on various pages
 'namespace' => '名字空间:',
 'invert' => '反选',
-'tooltip-invert' => 'é\80\89中此å¤\8dé\80\89æ¡\86æ\9d¥é\9a\90è\97\8fé\80\89å®\9aå\90\8då­\97空é\97´ï¼\88å\8f\8aå\85¶ç\9b¸å\85³å\90\8då­\97空é\97´ï¼\8cè\8b¥è¯¥é\80\89项亦被选中)范围内的页面更改',
+'tooltip-invert' => 'é\80\89中此å¤\8dé\80\89æ¡\86æ\9d¥é\9a\90è\97\8fé\80\89å®\9aå\90\8då­\97空é\97´ï¼\88å\8f\8aå\85¶ç\9b¸å\85³å\90\8då­\97空é\97´ï¼\8cè\8b¥è¯¥é\80\89项ä¹\9f被选中)范围内的页面更改',
 'namespace_association' => '相关名字空间',
 'tooltip-namespace_association' => '选中此复选框可包括与选定名字空间相关的讨论页或子页面',
 'blanknamespace' => '(主要)',
 
 # Contributions
-'contributions' => '用户贡献',
+'contributions' => '{{GENDER:$1|用户}}贡献',
 'contributions-title' => '$1的用户贡献',
-'mycontris' => '我的贡献',
+'mycontris' => '贡献',
 'contribsub2' => '$1的贡献($2)',
 'nocontribs' => '没有找到符合特征的更改。',
 'uctop' => '(最后更改)',
@@ -2525,7 +2548,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1重定向',
 'whatlinkshere-hidetrans' => '$1包含',
 'whatlinkshere-hidelinks' => '$1链接',
-'whatlinkshere-hideimages' => '$1文件链接',
+'whatlinkshere-hideimages' => '$1文件链接',
 'whatlinkshere-filters' => '过滤器',
 
 # Block/unblock
@@ -2552,7 +2575,7 @@ $1',
 ** 不能接受的用户名',
 'ipb-hardblock' => '阻止登录用户使用该IP地址编辑',
 'ipbcreateaccount' => '阻止创建新账号',
-'ipbemailban' => '阻止用户发送电邮',
+'ipbemailban' => '阻止用户发送邮件',
 'ipbenableautoblock' => '自动封禁该用户最后使用的IP地址,以及他们随后试图用于编辑的所有IP地址',
 'ipbsubmit' => '封禁该用户',
 'ipbother' => '其它时间:',
@@ -2600,9 +2623,9 @@ $1',
 'infiniteblock' => '无限期',
 'expiringblock' => '$1 $2到期',
 'anononlyblock' => '仅匿名用户',
-'noautoblockblock' => 'è\87ªå\8a¨å°\81ç¦\81å\81\9c用',
-'createaccountblock' => '账户创建停用',
-'emailblock' => '电子邮件停用',
+'noautoblockblock' => 'è\87ªå\8a¨å°\81ç¦\81å·²ç¦\81用',
+'createaccountblock' => '创建帐户已禁用',
+'emailblock' => '发送邮件已禁用',
 'blocklist-nousertalk' => '不能编辑自己的讨论页面',
 'ipblocklist-empty' => '封禁列表为空。',
 'ipblocklist-no-results' => '请求的IP地址或用户名没有被封禁。',
@@ -2610,7 +2633,7 @@ $1',
 'unblocklink' => '解封',
 'change-blocklink' => '更改封禁',
 'contribslink' => '贡献',
-'emaillink' => '发送电邮',
+'emaillink' => '发送邮件',
 'autoblocker' => '由于您与“[[User:$1|$1]]”共享一个IP地址而被自动封禁。
 $1被封禁的理由是:“$2”',
 'blocklogpage' => '封禁日志',
@@ -2621,9 +2644,9 @@ $1被封禁的理由是:“$2”',
 'blocklogtext' => '这是用户封禁和解封操作的日志。自动封禁IP地址没有列出。请见[[Special:BlockList|封禁列表]]查看目前正在进行的阻止和封禁的列表。',
 'unblocklogentry' => '解封$1',
 'block-log-flags-anononly' => '仅限匿名用户',
-'block-log-flags-nocreate' => '账户创建停用',
-'block-log-flags-noautoblock' => 'è\87ªå\8a¨å°\81ç¦\81å\81\9c用',
-'block-log-flags-noemail' => '电子邮件停用',
+'block-log-flags-nocreate' => '创建帐户已禁用',
+'block-log-flags-noautoblock' => 'è\87ªå\8a¨å°\81ç¦\81å·²ç¦\81用',
+'block-log-flags-noemail' => '邮件功能已禁用',
 'block-log-flags-nousertalk' => '不能编辑自己的讨论页面',
 'block-log-flags-angry-autoblock' => '已启用增强型自动封禁',
 'block-log-flags-hiddenname' => '隐藏用户名',
@@ -2673,20 +2696,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|损坏重定向]]链接。
@@ -2706,14 +2727,14 @@ $1被封禁的理由是:“$2”',
 
 在这些情况下,您在必要时必须手工移动或合并页面。",
 'movearticle' => '移动页面:',
-'moveuserpage-warning' => "'''警告:'''将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
+'moveuserpage-warning' => "'''警告:'''将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
 'movenologin' => '未登录',
 'movenologintext' => '您必须是一名登记用户并且[[Special:UserLogin|登录]]
 后才可移动一个页面。',
-'movenotallowed' => '没有权限移动页面。',
-'movenotallowedfile' => '没有权限移动文件。',
-'cant-move-user-page' => '没有权限移动用户页面(子页面除外)。',
-'cant-move-to-user-page' => '没有权限移动页面至用户页面(用户子页面除外)。',
+'movenotallowed' => '没有权限移动页面。',
+'movenotallowedfile' => '没有权限移动文件。',
+'cant-move-user-page' => '没有权限移动用户页面(子页面除外)。',
+'cant-move-to-user-page' => '没有权限移动页面至用户页面(用户子页面除外)。',
 'newtitle' => '新标题:',
 'move-watch' => '监视来源页面和目标页面',
 'movepagebtn' => '移动页面',
@@ -2751,6 +2772,7 @@ $1被封禁的理由是:“$2”',
 'immobile-target-namespace-iw' => '在移动页面时,跨wiki链接不是有效的目标。',
 'immobile-source-page' => '此页面不能移动。',
 'immobile-target-page' => '无法移动至该目标标题。',
+'bad-target-model' => '要求的目标使用不同的内容模式。无法从$1转换到$2。',
 'imagenocrossnamespace' => '无法将文件移动到非文件名字空间',
 'nonfile-cannot-move-to-file' => '无法将非文件移动到文件名字空间',
 'imagetypemismatch' => '该新扩展名与其类型不匹配',
@@ -2766,11 +2788,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' => "----
@@ -2858,6 +2880,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”的根页面不允许子页面。',
@@ -2873,43 +2896,43 @@ $1被封禁的理由是:“$2”',
 # JavaScriptTest
 'javascripttest' => 'JavaScript测试',
 'javascripttest-title' => '运行$1测试',
-'javascripttest-pagetext-noframework' => '此页é\9d¢è¢«ä¿\9dç\95\99ç\94¨äº\8eè¿\90è¡\8cJavaScript测试。',
+'javascripttest-pagetext-noframework' => '此页é\9d¢è¢«ä¿\9dç\95\99ç\94¨ä½\9cæ\89§è¡\8c 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
-'tooltip-pt-userpage' => '的用户页面',
-'tooltip-pt-anonuserpage' => '你用于编辑的IP地址的用户页面',
-'tooltip-pt-mytalk' => '的讨论页面',
+'tooltip-pt-userpage' => '的用户页面',
+'tooltip-pt-anonuserpage' => '您用于编辑的 IP 地址的用户页面',
+'tooltip-pt-mytalk' => '的讨论页面',
 'tooltip-pt-anontalk' => '有关本IP地址的编辑的讨论',
-'tooltip-pt-preferences' => '的系统设置',
-'tooltip-pt-watchlist' => '你正在监视更改的页面的列表',
-'tooltip-pt-mycontris' => '的贡献列表',
-'tooltip-pt-login' => '我们鼓励你登录,不过这不是强制的',
-'tooltip-pt-anonlogin' => '我们鼓励你登录,不过这不是强制的',
-'tooltip-pt-logout' => '退出登录',
+'tooltip-pt-preferences' => '的系统设置',
+'tooltip-pt-watchlist' => '您正在监视的页面的列表',
+'tooltip-pt-mycontris' => '的贡献列表',
+'tooltip-pt-login' => '我们鼓励您登录,但这不是必须的',
+'tooltip-pt-anonlogin' => '我们鼓励您登录,但这不是必须的',
+'tooltip-pt-logout' => '注销',
 'tooltip-ca-talk' => '有关内容页面的讨论',
-'tooltip-ca-edit' => '你可以编辑本页面。请在保存前使用预览按钮。',
+'tooltip-ca-edit' => '您可以编辑本页。请在保存前使用预览按钮查看修改。',
 'tooltip-ca-addsection' => '开始新段落',
-'tooltip-ca-viewsource' => '本页面受到保护。你可以查看其源代码。',
-'tooltip-ca-history' => '本页面过去的版本',
+'tooltip-ca-viewsource' => '本页面受保护。您可以查看它的源代码。',
+'tooltip-ca-history' => '本页面的历史版本',
 'tooltip-ca-protect' => '保护本页',
 'tooltip-ca-unprotect' => '更改本页面的保护',
 'tooltip-ca-delete' => '删除本页',
 'tooltip-ca-undelete' => '将这个页面恢复到被删除以前的状态',
 'tooltip-ca-move' => '移动本页',
-'tooltip-ca-watch' => '添加本页面至的监视列表',
-'tooltip-ca-unwatch' => '从你的监视列表删除本页面',
+'tooltip-ca-watch' => '添加本页面至的监视列表',
+'tooltip-ca-unwatch' => '从您的监视列表中删除本页',
 'tooltip-search' => '在{{SITENAME}}中搜索',
 'tooltip-search-go' => '如果相同的标题存在的话便直接前往该页面',
 'tooltip-search-fulltext' => '搜索含这些文字的页面',
 'tooltip-p-logo' => '访问首页',
 'tooltip-n-mainpage' => '访问首页',
 'tooltip-n-mainpage-description' => '访问首页',
-'tooltip-n-portal' => '关于本项目,你可以做什么,在哪里找到你需要的事物',
+'tooltip-n-portal' => '关于本项目,您可以做些什么,在哪里可以找到您需要的东西',
 'tooltip-n-currentevents' => '查看当前事件的背景信息',
 'tooltip-n-recentchanges' => '本wiki的最近更改列表',
 'tooltip-n-randompage' => '载入一个随机页面',
@@ -2927,7 +2950,7 @@ $1被封禁的理由是:“$2”',
 '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' => '查看系统信息',
@@ -2939,14 +2962,14 @@ $1被封禁的理由是:“$2”',
 'tooltip-preview' => '预览您的更改,请在保存前使用此功能!',
 'tooltip-diff' => '显示您对该文字所做的更改',
 'tooltip-compareselectedversions' => '查看此页面两个选定的修订版本间的差异。',
-'tooltip-watch' => '添加本页面至的监视列表',
+'tooltip-watch' => '添加本页面至的监视列表',
 'tooltip-watchlistedit-normal-submit' => '删除标题',
 'tooltip-watchlistedit-raw-submit' => '更新监视列表',
 'tooltip-recreate' => '重建该页面,无论是否被删除。',
 'tooltip-upload' => '开始上传',
-'tooltip-rollback' => '击“回退”恢复上一位贡献者对本页的编辑',
+'tooltip-rollback' => '击“回退”恢复上一位贡献者对本页的编辑',
 'tooltip-undo' => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。',
-'tooltip-preferences-save' => '保存设',
+'tooltip-preferences-save' => '保存设',
 'tooltip-summary' => '请输入简短的摘要',
 
 # Stylesheets
@@ -3013,7 +3036,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-header-restrictions' => '页面保护',
 'pageinfo-header-properties' => '页面属性',
 'pageinfo-display-title' => '显示的标题',
-'pageinfo-default-sort' => '默认排序',
+'pageinfo-default-sort' => '默认排序',
 'pageinfo-length' => '页面长度(字节)',
 'pageinfo-article-id' => '页面ID',
 'pageinfo-language' => '页面内容语言',
@@ -3027,7 +3050,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-subpages-value' => '$1 ($2个重定向;$3个非重定向)',
 'pageinfo-firstuser' => '页面创建者',
 'pageinfo-firsttime' => '页面创建日期',
-'pageinfo-lastuser' => '最近的编者',
+'pageinfo-lastuser' => '最后编辑',
 'pageinfo-lasttime' => '最后编辑的日期',
 'pageinfo-edits' => '总编辑次数',
 'pageinfo-authors' => '不同编者总计',
@@ -3036,6 +3059,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-magic-words' => '魔术字($1)',
 'pageinfo-hidden-categories' => '隐藏分类($1)',
 'pageinfo-templates' => '使用的模板($1)',
+'pageinfo-transclusions' => '$1个包含此页的页面',
 'pageinfo-toolboxlink' => '页面信息',
 'pageinfo-redirectsto' => '重定向到',
 'pageinfo-redirectsto-info' => '信息',
@@ -3043,6 +3067,11 @@ $1被封禁的理由是:“$2”',
 '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' => '标准',
@@ -3059,8 +3088,10 @@ $1被封禁的理由是:“$2”',
 'rcpatroldisabled' => '最新更改检查被关闭',
 'rcpatroldisabledtext' => '最新更改检查的功能目前已关闭。',
 'markedaspatrollederror' => '不能标志为已检查',
-'markedaspatrollederrortext' => '你需要指定某个版本才能标志为已检查。',
-'markedaspatrollederror-noautopatrol' => '您无法将你自己所作的更改标记为已检查。',
+'markedaspatrollederrortext' => '您需要指定某个版本才能标记为已检查。',
+'markedaspatrollederror-noautopatrol' => '您无法将自己所作的更改标记为已检查。',
+'markedaspatrollednotify' => '$1的更改已被标记为已巡查。',
+'markedaspatrollederrornotify' => '标记为已巡查失败。',
 
 # Patrol log
 'patrol-log-page' => '巡查日志',
@@ -3083,8 +3114,7 @@ $1',
 'nextdiff' => '下一编辑→',
 
 # Media information
-'mediawarning' => "'''警告''':该文件类型可能包含恶意代码。
-运行它可能对您的系统带来危险。",
+'mediawarning' => "'''警告''':该类型的文件可能包含恶意代码。执行后您的系统可能会受损。",
 'imagemaxsize' => '图像大小限制:<br /><u>(文件描述页)</u>',
 'thumbsize' => '缩略图大小:',
 'widthheightpage' => '$1×$2,$3页',
@@ -3094,6 +3124,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。',
@@ -3123,7 +3154,10 @@ $1',
 'minutes' => '$1分',
 'hours' => '$1小时',
 'days' => '$1天',
+'months' => '{{PLURAL:$1|$1个月|$1个月}}',
+'years' => '{{PLURAL:$1|$1年|$1年}}',
 'ago' => '$1前',
+'just-now' => '刚刚',
 
 # Bad image list
 'bad_image_list' => '请按照下列格式编写:
@@ -3301,7 +3335,7 @@ Variants for Chinese language
 'exif-worldregiondest' => '世界区域显示',
 'exif-countrydest' => '所示的国家',
 'exif-countrycodedest' => '国家代码',
-'exif-provinceorstatedest' => '省或状态显示',
+'exif-provinceorstatedest' => '省或',
 'exif-citydest' => '所示的城市',
 'exif-sublocationdest' => '显示城市中的详细地点',
 'exif-objectname' => '简称',
@@ -3579,7 +3613,7 @@ Variants for Chinese language
 
 # E-mail address confirmation
 'confirmemail' => '确认邮箱地址',
-'confirmemail_noemail' => '你还没有在你的[[Special:Preferences|用户资料设置]]中设置有效的电子邮件地址。',
+'confirmemail_noemail' => '您还没有在您的[[Special:Preferences|个人设置]]中设置有效的电子邮件地址。',
 'confirmemail_text' => '{{SITENAME}}要求您在使用邮件功能之前验证您的邮箱地址。
 点击以下按钮可向您的邮箱发送一封确认邮件。该邮件包含有一行代码链接;
 请在您的浏览器中加载此链接以确认您的邮箱地址是有效的。',
@@ -3594,8 +3628,8 @@ Variants for Chinese language
 'confirmemail_needlogin' => '您需要$1以确认您的邮箱地址。',
 'confirmemail_success' => '您的邮箱已经被确认。您现在可以[[Special:UserLogin|登录]]并使用此网站了。',
 'confirmemail_loggedin' => '您的邮箱地址现在已被确认。',
-'confirmemail_error' => '你的确认过程发生错误。',
-'confirmemail_subject' => '{{SITENAME}}电子邮件地址确认',
+'confirmemail_error' => '在确认您的过程中发生错误。',
+'confirmemail_subject' => '来自{{SITENAME}}的电子邮件地址确认函',
 'confirmemail_body' => '来自IP地址$1的用户(可能是您)在{{SITENAME}}上创建了账户“$2”,并提交了您
 的电子邮箱地址。
 
@@ -3634,8 +3668,8 @@ $3
 $5
 
 确认码会在$4过期。',
-'confirmemail_invalidated' => '电邮地址确认已取消',
-'invalidateemail' => '取消电邮确认',
+'confirmemail_invalidated' => '邮件地址确认已取消',
+'invalidateemail' => '取消邮件地址确认',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[跨网站的编码转换不可用]',
@@ -3708,16 +3742,16 @@ $5
 'lag-warn-high' => '由于数据库的过度延迟,过去$1秒的更改未必会在这个列表中显示。',
 
 # Watchlist editor
-'watchlistedit-numitems' => '不计讨论页面,你的监视列表包含$1个标题。',
-'watchlistedit-noitems' => '的监视列表中没有标题。',
+'watchlistedit-numitems' => '不包括讨论页面,您的监视列表包含$1个标题。',
+'watchlistedit-noitems' => '的监视列表中没有标题。',
 'watchlistedit-normal-title' => '编辑监视列表',
 'watchlistedit-normal-legend' => '删除监视列表中的标题',
-'watchlistedit-normal-explain' => '你的监视列表中的标题显示在下方。要删除标题,请勾选它前面选择框并单击“{{int:Watchlistedit-normal-submit}}”。你也可以[[Special:EditWatchlist/raw|编辑原始列表]]。',
+'watchlistedit-normal-explain' => '您的监视列表中的标题会显示在下方。要删除标题,请勾选它前面的选择框并点击“{{int:Watchlistedit-normal-submit}}”。您也可以[[Special:EditWatchlist/raw|编辑原始列表]]。',
 'watchlistedit-normal-submit' => '删除标题',
-'watchlistedit-normal-done' => '已从你的监视列表删除$1个标题:',
+'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' => '您的监视列表已经更新。',
@@ -3757,23 +3791,25 @@ $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 通用公共许可证条款规定,无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本,将本程序再发布与/或做出修改
 
-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 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' => '版本',
 'version-entrypoints' => '接入点URL',
 'version-entrypoints-header-entrypoint' => '接入点',
 'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath 条目路径]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath 脚本路径]',
 
 # Special:FilePath
 '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亦将直接通过关联的应用程序打开。',
+'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ä¹\9f将直接通过关联的应用程序打开。',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => '搜索重复文件',
@@ -3841,7 +3877,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'compare-submit' => '对比',
 'compare-invalid-title' => '您指定的标题无效。',
 'compare-title-not-exists' => '您指定的标题不存在。',
-'compare-revision-not-exists' => '你指定的版本不存在。',
+'compare-revision-not-exists' => '您指定的修订版本不存在。',
 
 # Database error messages
 'dberr-header' => '本wiki出现了问题',
@@ -3849,7 +3885,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 本网站出现了一些技术问题。',
 'dberr-again' => '请等待几分钟后重试。',
 'dberr-info' => '(无法连接到数据库服务器:$1)',
-'dberr-usegoogle' => '在此期间您可以尝试用Google来搜索。',
+'dberr-usegoogle' => '在此期间您可以尝试用 Google 来搜索。',
 'dberr-outofdate' => '须注意他们索引出来的内容可能不是最新的。',
 'dberr-cachederror' => '这是所请求页面的缓存副本,可能不是最新的。',
 
@@ -3895,14 +3931,18 @@ 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 报告bug]。或者你可以使用下面的简单表格。你的评论将被添加至页面“[$3 $2]”,附有你的用户名和使用的浏览器。',
+'feedback-bugornote' => '如果您准备好详细描述一个技术问题,请[$1 报告bug]。或者您也可以使用下面的简单表格。您的评论将被添加至页面“[$3 $2]”,附有您的用户名和所使用的浏览器。',
 'feedback-subject' => '主题:',
 'feedback-message' => '信息:',
 'feedback-cancel' => '取消',
@@ -3911,7 +3951,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'feedback-error1' => '错误:从API返回无法识别的结果',
 'feedback-error2' => '错误:编辑失败',
 'feedback-error3' => '错误:API没有响应',
-'feedback-thanks' => '谢谢!的反馈已发布至页面“[$2 $1]”。',
+'feedback-thanks' => '谢谢!的反馈已发布至页面“[$2 $1]”。',
 'feedback-close' => '完成',
 'feedback-bugcheck' => '请检查本bug是否为[$1 已知bug]。',
 'feedback-bugnew' => '我检查了。报告新bug',
@@ -3921,7 +3961,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 另一些文件]}}。',
@@ -3938,15 +3978,15 @@ 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' => '内部错误:服务器没有响应。',
@@ -3958,8 +3998,8 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'api-error-unknown-error' => '内部错误:尝试上传文件时出错。',
 'api-error-unknown-warning' => '未知的警告:$1',
 'api-error-unknownerror' => '未知错误:$1。',
-'api-error-uploaddisabled' => '此wiki关闭了上传功能。',
-'api-error-verification-error' => '此文件可能已损坏,或有错误的扩展名。',
+'api-error-uploaddisabled' => '该 wiki 禁用上传功能。',
+'api-error-verification-error' => '该文件可能损坏或扩展名错误。',
 
 # Durations
 'duration-seconds' => '$1秒',
index df249c1..01534a2 100644 (file)
@@ -42,6 +42,7 @@
  * @author Wong128hk
  * @author Wrightbus
  * @author Xiaomingyan
+ * @author Yfdyh000
  * @author Yuyu
  */
 
@@ -212,10 +213,10 @@ $messages = array(
 # User preference toggles
 'tog-underline' => '連結加底線:',
 'tog-justify' => '段落對齊',
-'tog-hideminor' => '最近更改中隱藏小修改',
-'tog-hidepatrolled' => '最近更改中隱藏巡查過的編輯',
-'tog-newpageshidepatrolled' => '新頁面清單中隱藏巡查過的頁面',
-'tog-extendwatchlist' => '展開監視清單以顯示所有更改,不只是最近的',
+'tog-hideminor' => '隱藏最近更改中的小修改',
+'tog-hidepatrolled' => '隱藏最近更改中巡查過的編輯',
+'tog-newpageshidepatrolled' => '隱藏新頁面清單中巡查過的頁面',
+'tog-extendwatchlist' => '展開監視列表以顯示所有更改,不只是最近的',
 'tog-usenewrc' => '在最近更改和監視列表中整合同一頁的修改 (需要JavaScript)',
 'tog-numberheadings' => '標題自動編號',
 'tog-showtoolbar' => '顯示編輯工具欄 (需要JavaScript)',
@@ -242,7 +243,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' => '監視列表中隱藏機器人的編輯',
@@ -250,7 +251,7 @@ $messages = array(
 'tog-watchlisthideliu' => '監視列表中隱藏登入用戶',
 'tog-watchlisthideanons' => '監視列表中隱藏匿名用戶',
 'tog-watchlisthidepatrolled' => '監視清單中隱藏已巡查的編輯',
-'tog-ccmeonemails' => '當我寄電子郵件給其他用戶時,也寄一份本到我的信箱',
+'tog-ccmeonemails' => '當我寄電子郵件給其他用戶時,也寄一份本到我的信箱',
 'tog-diffonly' => '比較版本差異時不顯示頁面內容',
 'tog-showhiddencats' => '顯示隱藏分類',
 'tog-noconvertlink' => '不轉換連結標題',
@@ -336,15 +337,16 @@ $messages = array(
 'listingcontinuesabbrev' => '續',
 'index-category' => '已做索引的頁面',
 'noindex-category' => '未做索引的頁面',
-'broken-file-category' => '有連結至已損壞檔案頁的連結之頁面',
+'broken-file-category' => '包含損壞的檔案連結的頁面',
 
 'about' => '關於',
 'article' => '內容頁面',
 'newwindow' => '(以新視窗開啟)',
 'cancel' => '取消',
 'moredotdotdot' => '更多...',
-'mypage' => '我的頁面',
-'mytalk' => '我的對話頁',
+'morenotlisted' => '更多未列出的項目...',
+'mypage' => '頁面',
+'mytalk' => '討論',
 'anontalk' => '該IP的對話頁',
 'navigation' => '導覽',
 'and' => '和',
@@ -376,6 +378,7 @@ $messages = array(
 'namespaces' => '名字空間',
 'variants' => '變換',
 
+'navigation-heading' => '導航',
 'errorpagetitle' => '錯誤',
 'returnto' => '返回到$1。',
 'tagline' => '出自{{SITENAME}}',
@@ -457,7 +460,7 @@ $1',
 'policy-url' => 'Project:方針',
 'portal' => '社群主頁',
 'portal-url' => 'Project:社區主頁',
-'privacy' => 'é\9a±ç§\81æ¬\8aæ\94¿ç­\96',
+'privacy' => '隱私政策',
 'privacypage' => 'Project:隱私權政策',
 
 'badaccess' => '權限錯誤',
@@ -475,15 +478,15 @@ $1',
 'newmessagesdifflink' => '最後更改',
 'youhavenewmessagesfromusers' => '你有來自{{PLURAL:$3| 另一位用戶| $3位用戶}}的$1 ( $2 )。',
 'youhavenewmessagesmanyusers' => '你有來自多位用戶的$1( $2 )。',
-'newmessageslinkplural' => '$1項新訊息',
-'newmessagesdifflinkplural' => '最新$1次更改',
+'newmessageslinkplural' => '{{PLURAL:$1|一項新訊息|新訊息}}',
+'newmessagesdifflinkplural' => '最新{{PLURAL:$1|更改|更改}}',
 'youhavenewmessagesmulti' => '您在 $1 有一條新訊息',
 'editsection' => '編輯',
 'editold' => '編輯',
 'viewsourceold' => '檢視原始碼',
 'editlink' => '編輯',
 'viewsourcelink' => '檢視原始碼',
-'editsectionhint' => '編輯段落:$1',
+'editsectionhint' => '編輯章節:$1',
 'toc' => '目錄',
 'showtoc' => '顯示',
 'hidetoc' => '隱藏',
@@ -539,52 +542,55 @@ $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' => '錯誤的標題',
 'badtitletext' => '所請求頁面的標題是無效的、不存在,跨語言或跨wiki連結的標題錯誤。它可能包含一個或更多的不能用於標題的字符。',
 'perfcached' => '下列是快取資料,因此可能不是最新的。最多{{PLURAL:$1|只有1個結果|$1個結果}}可用。',
 'perfcachedts' => '下列是快取資料,其最後更新時間是$1。只有{{PLURAL:$4|一個結果|$4個結果}}會被顯示。 A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
-'querypage-no-updates' => '目前禁止對此頁面進行更新。此處的資料將不能被立即重新整理。',
+'querypage-no-updates' => '目前禁止對此頁面進行更新。
+此處的資料將不能被立即重新整理。',
 'wrong_wfQuery_params' => '錯誤的參數被傳遞到 wfQuery()<br />
 函數:$1<br />
 查詢:$2',
 'viewsource' => '查看原始碼',
 'viewsource-title' => '查看$1的源代碼',
 'actionthrottled' => '動作已壓制',
-'actionthrottledtext' => '基於反垃圾的考量,您現在於這段短時間之中限制去作這一個動作,而您已經超過這個上限。請在數分鐘後再嘗試。',
-'protectedpagetext' => '該頁面已被保護以防止編輯。',
+'actionthrottledtext' => '基於反垃圾的考量,您現在於這段短時間之中限制去作這一個動作,而您已經超過這個上限。
+請在數分鐘後再嘗試。',
+'protectedpagetext' => '該頁面已被保護以防止編輯或其他操作。',
 'viewsourcetext' => '{{GENDER:|你|妳|你}}可以檢視並複製本頁面的原始碼。',
 'viewyourtext' => "您可以查看並複製'''您對此頁面作出編輯後'''的源代碼:",
 'protectedinterface' => '該頁提供此wiki軟體的介面文字,它已被保護以防止惡意修改。
@@ -593,16 +599,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查閲此頁或進行操作。',
@@ -617,15 +623,15 @@ $2',
 
 您可以以匿名方式繼續使用{{SITENAME}},或以相同或不同用戶身份<span class='plainlinks'>[$1 登入]</span>。
 請注意,如果你再次登入,此頁或會繼續顯示,直到您清除瀏覽器緩存。",
-'welcomecreation' => '== 歡迎,$1! ==
-您的賬號已經建立。
+'welcomeuser' => '歡迎,$1!',
+'welcomecreation-msg' => '您的賬號已經建立。
 不要忘記設置[[Special:Preferences|{{SITENAME}}的個人參數]]。',
-'yourname' => '您的使用者名稱:',
+'yourname' => '用戶名:',
 'yourpassword' => '您的密碼:',
-'yourpasswordagain' => '再次輸入密碼:',
+'yourpasswordagain' => '再次輸入密',
 'remembermypassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})',
 'securelogin-stick-https' => '登入後繼續以HTTPS連接',
-'yourdomainname' => '您的網域:',
+'yourdomainname' => '您的網域',
 'password-change-forbidden' => '您不可更改此wiki上的密碼。',
 'externaldberror' => '這可能是由於驗證資料庫錯誤或您被禁止更新您的外部賬號。',
 'login' => '登入',
@@ -675,9 +681,9 @@ $2',
 
 如果是其他人發出了該請求,或者您已經記起了您的密碼並不準備改變它,
 您可以忽略此消息並繼續使用您的舊密碼。',
-'noemail' => '用戶"$1"沒有登記電子郵件地址。',
+'noemail' => '用戶「$1」沒有登記電子郵件地址。',
 'noemailcreate' => '您需要提供一個有效的電子郵件地址',
-'passwordsent' => '用戶"$1"的新密碼已經寄往所登記的電子郵件地址。
+'passwordsent' => '用戶「$1」的新密碼已經寄往所登記的電子郵件地址。
 請在收到後再登入。',
 'blocked-mailpassword' => '您的IP地址處於查封狀態而不允許編輯,為了安全起見,密碼恢復功能已被禁用。',
 'eauthentsent' => '一封確認信已經發送到所示的地址。在發送其它郵件到此賬戶前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。',
@@ -702,12 +708,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' => '更改密碼',
@@ -734,7 +741,7 @@ $2',
 'passwordreset-legend' => '重設密碼',
 'passwordreset-disabled' => '此維基上已禁止了重設密碼。',
 'passwordreset-pretext' => '{{PLURAL:$1||輸入下列其中一個}}',
-'passwordreset-username' => '使用者名稱:',
+'passwordreset-username' => '用戶名:',
 'passwordreset-domain' => '域名:',
 'passwordreset-capture' => '查看生成的電子郵件嗎?',
 'passwordreset-capture-help' => '如果您選中此框,電子郵件(包括臨時密碼)將顯示,並發送給用戶。',
@@ -770,6 +777,7 @@ $2
 'changeemail-oldemail' => '當前電郵地址:',
 'changeemail-newemail' => '新電郵地址:',
 'changeemail-none' => '(無)',
+'changeemail-password' => '您的{{SITENAME}}密碼:',
 'changeemail-submit' => '更改電郵',
 'changeemail-cancel' => '取消',
 
@@ -793,10 +801,10 @@ $2
 
 # Edit pages
 'summary' => '摘要:',
-'subject' => '主題:',
+'subject' => '主題',
 'minoredit' => '這是一個小修改',
 'watchthis' => '監視本頁',
-'savearticle' => '儲存頁面',
+'savearticle' => '儲存本頁',
 'preview' => '預覽',
 'showpreview' => '顯示預覽',
 'showlivepreview' => '即時預覽',
@@ -808,7 +816,7 @@ $2
 'missingcommenttext' => '請在下面輸入評論。',
 'missingcommentheader' => "'''提示:''' 您沒有為此評論提供一個標題。如果您再次單擊「{{int:savearticle}}」,您的編輯將不帶標題儲存。",
 'summary-preview' => '摘要預覽:',
-'subject-preview' => '主題/標題預覽:',
+'subject-preview' => '主題/標題預覽:',
 'blockedtitle' => '用戶被查封',
 'blockedtext' => "'''您的用戶名或IP地址已被封禁。'''
 
@@ -848,10 +856,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>,但您沒有權限建立此頁。',
@@ -859,7 +867,8 @@ $2
 
 這通常是因為過時的頁面歷史鏈接被刪除。
 詳情請閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。',
-'userpage-userdoesnotexist' => '未曾創建用戶名「<nowiki>$1</nowiki>」。請在創建/編輯這個頁面前先檢查一下。',
+'userpage-userdoesnotexist' => '用戶「$1」尚未註冊。
+請在建立/編輯這個頁面前先檢查一下。',
 'userpage-userdoesnotexist-view' => '未曾建立用戶名「$1」。',
 'blocked-notice-logextract' => '這位用戶現正被封鎖。
 下面有最近的封鎖紀錄以供參考:',
@@ -878,10 +887,12 @@ $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' => "'''請記住這只是預覽,內容尚未儲存!'''",
+'previewnote' => "'''請記住這只是預覽。'''
+您的更改尚未儲存!",
 'continue-editing' => '往編輯框',
 'previewconflict' => '這個預覽顯示了上面文字編輯區中的內容。它將在{{GENDER:|你|妳|你}}選擇保存後出現。',
 'session_fail_preview' => "'''很抱歉!由於部份資料遺失,我們無法處理您的編輯。'''
@@ -895,10 +906,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:|你|妳|你}}開始編輯後更改了頁面。
 上面的文字框內顯示的是目前本頁的內容。
@@ -939,7 +950,6 @@ $2
 'template-semiprotected' => '(半保護)',
 'hiddencategories' => '這個頁面是屬於$1個隱藏分類的成員:',
 'edittools' => '<!-- 此處的文字將被顯示在編輯和上傳表單以下。 -->',
-'nocreatetitle' => '創建頁面受限',
 'nocreatetext' => '{{SITENAME}}限制了創建新頁面的功能。{{GENDER:|你|妳|你}}可以返回並編輯已有的頁面,或者[[Special:UserLogin|登錄或創建新賬戶]]。',
 'nocreate-loggedin' => '您並無許可權去創建新頁面。',
 'sectioneditnotsupported-title' => '不支持段落編輯',
@@ -965,7 +975,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語法',
@@ -1011,8 +1021,8 @@ $2
 'viewpagelogs' => '查詢這個頁面的日誌',
 'nohistory' => '沒有本頁的修訂記錄。',
 'currentrev' => '最新修訂版本',
-'currentrev-asof' => '$1的最新修訂版本',
-'revisionasof' => '在$1所做的修訂版本',
+'currentrev-asof' => '$1的最新修訂版本',
+'revisionasof' => '$1的修訂版本',
 'revision-info' => '在$1由$2所做的修訂版本',
 'previousrevision' => '←上一修訂',
 'nextrevision' => '下一修訂→',
@@ -1068,7 +1078,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|選取的日誌項目}}:'''",
@@ -1154,9 +1164,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' => '比較選定的修訂版本',
@@ -1172,9 +1182,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' => '沒有找到匹配頁面題目',
@@ -1200,13 +1210,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' => '(更多)',
@@ -1242,8 +1252,8 @@ $1",
 
 # Preferences page
 'preferences' => '偏好設定',
-'mypreferences' => '我的偏好設定',
-'prefs-edits' => '編輯æ\95¸é\87\8f:',
+'mypreferences' => '偏好設定',
+'prefs-edits' => '編輯次æ\95¸:',
 'prefsnologin' => '還未登入',
 'prefsnologintext' => '您必須先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>才能設置個人參數。',
 'changepassword' => '更改密碼',
@@ -1257,9 +1267,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' => '雜項',
@@ -1273,13 +1283,13 @@ $1",
 'restoreprefs' => '恢復所有預設設定',
 'prefs-editing' => '編輯',
 'prefs-edit-boxsize' => '編輯框尺寸',
-'rows' => '列:',
-'columns' => '欄:',
+'rows' => '行:',
+'columns' => '列:',
 'searchresultshead' => '搜尋',
-'resultsperpage' => '每頁顯示連結數',
+'resultsperpage' => '每頁顯示連結數',
 'stub-threshold' => '<a href="#" class="stub">短頁面連結</a>格式門檻值 (位元組):',
 'stub-threshold-disabled' => '已停用',
-'recentchangesdays' => '最近更改中的顯示日數:',
+'recentchangesdays' => '最近更改中的顯示日數',
 'recentchangesdays-max' => '最多$1{{PLURAL:$1|天}}',
 'recentchangescount' => '預設顯示的編輯數:',
 'prefs-help-recentchangescount' => '這個包括最近更改、頁面歷史以及日誌。',
@@ -1288,11 +1298,11 @@ $1",
 這裡有一個任意生成的值,供您選擇:$1',
 'savedprefs' => '您的個人偏好設定已經儲存。',
 'timezonelegend' => '時區:',
-'localtime' => '當地時間:',
+'localtime' => '當地時間',
 'timezoneuseserverdefault' => '使用預設($1)',
 'timezoneuseoffset' => '其他 (指定偏移)',
-'timezoneoffset' => '時差¹:',
-'servertime' => '伺服器時間:',
+'timezoneoffset' => '時差¹',
+'servertime' => '伺服器時間',
 'guesstimezone' => '從瀏覽器填寫',
 'timezoneregion-africa' => '非洲',
 'timezoneregion-america' => '美洲',
@@ -1316,16 +1326,16 @@ $1",
 'prefs-reset-intro' => '您可以利用這個頁面去重設您的參數設置到網站預設值。這個動作無法復原。',
 'prefs-emailconfirm-label' => '電子郵件確認:',
 'prefs-textboxsize' => '編輯框大小',
-'youremail' => '電子郵件:',
-'username' => '用戶名:',
-'uid' => '用戶ID:',
-'prefs-memberingroups' => '{{PLURAL:$1|群組}}:',
-'prefs-registration' => '註冊時間:',
+'youremail' => '電子郵件',
+'username' => '{{GENDER:$1|用戶名}}:',
+'uid' => '{{GENDER:$1|用戶ID}}:',
+'prefs-memberingroups' => '{{PLURAL:$1|群組}}{{GENDER:$2|成員}}:',
+'prefs-registration' => '註冊時間',
 'yourrealname' => '真實姓名:',
 'yourlanguage' => '語言:',
 'yourvariant' => '內容語言變體:',
 'prefs-help-variant' => '您希望用於顯示本站內容的語種或拼寫語系。',
-'yournick' => '新簽名:',
+'yournick' => '新簽名',
 'prefs-help-signature' => '在討論頁面上的評論應該要用「<nowiki>~~~~</nowiki>」簽名,這樣便會轉換成{{GENDER:|你|妳|你}}的簽名以及一個時間截記。',
 'badsig' => '錯誤的原始簽名。請檢查HTML標籤。',
 'badsiglength' => '您的簽名過長。
@@ -1337,10 +1347,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' => '簽名',
@@ -1368,9 +1378,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' => '您可以改動這位用戶所屬的群組
 * 已剔選的核取方塊代表該用戶屬於該群組。
 * 未剔選的核取方塊代表該用戶不是屬於該群組。
 * 有 * 項目表示一旦您加入該群組之後便不能移除它,反之亦然。',
@@ -1468,15 +1478,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' => '閱讀這個頁面',
@@ -1508,7 +1516,7 @@ $1",
 'action-importupload' => '由一個檔案上載中匯入這個頁面',
 'action-patrol' => '標示其它的編輯為已巡查的',
 'action-autopatrol' => '將您的編輯標示為已巡查的',
-'action-unwatchedpages' => '檢視未被監視的頁面',
+'action-unwatchedpages' => '檢視未被監視的頁面',
 'action-mergehistory' => '合併這個頁面的歷史',
 'action-userrights' => '編輯所有的權限',
 'action-userrights-interwiki' => '編輯在其它wiki上用戶的權限',
@@ -1517,7 +1525,7 @@ $1",
 
 # Recent changes
 'nchanges' => '$1次更改',
-'recentchanges' => '近期變動',
+'recentchanges' => '最近更改',
 'recentchanges-legend' => '最近更改選項',
 'recentchanges-summary' => '跟蹤這個wiki上的最新更改。',
 'recentchanges-feed-description' => '追蹤此訂閱在 wiki 上的最近更改。',
@@ -1542,14 +1550,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' => '相關更改',
@@ -1583,29 +1591,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|不是允許的檔案類型|是不允許的檔案類型}}。 
@@ -1655,14 +1663,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' => '監視這個檔案',
@@ -1686,32 +1694,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-alreadyexists' => '“$1”頁面已存在',
+'backend-fail-describe' => '無法修改檔案「$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
@@ -1755,16 +1764,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
@@ -1783,7 +1792,7 @@ $1',
 'upload-curl-error28' => '上傳超時',
 'upload-curl-error28-text' => '網站回應時間過長。請檢查此網站的訪問是否正常,過一會再進行嘗試。您可能需要在網路訪問空閒時間再次進行嘗試。',
 
-'license' => '授權:',
+'license' => '授權',
 'license-header' => '授權',
 'nolicense' => '未選定',
 'license-nopreview' => '(無預覽可用)',
@@ -1901,7 +1910,7 @@ $1',
 
 # Random redirect
 'randomredirect' => '隨機重定向頁面',
-'randomredirect-nopages' => '在 "$1" 名字空間中沒有重定向頁面。',
+'randomredirect-nopages' => '在「$1」名字空間中沒有重定向頁面。',
 
 # Statistics
 'statistics' => '統計',
@@ -2007,7 +2016,7 @@ Template:消除歧義',
 'usereditcount' => '$1 次編輯',
 'usercreated' => '$1 $2{{GENDER:$3|創建}}',
 'newpages' => '最新頁面',
-'newpages-username' => '用戶名:',
+'newpages-username' => '用戶名',
 'ancientpages' => '最舊頁面',
 'move' => '移動',
 'movethispage' => '移動本頁',
@@ -2056,7 +2065,7 @@ Template:消除歧義',
 'allpagessubmit' => '提交',
 'allpagesprefix' => '顯示具有此前綴(名字空間)的頁面:',
 'allpagesbadtitle' => '給定的頁面標題是非法的,或者具有一個內部語言或內部 wiki 的前綴。它可能包含一個或更多的不能用於標題的字元。',
-'allpages-bad-ns' => '在{{SITENAME}}中沒有一個叫做"$1"的名字空間。',
+'allpages-bad-ns' => '在{{SITENAME}}中沒有一個叫做「$1」的名字空間。',
 'allpages-hide-redirects' => '隱藏重定向頁',
 
 # SpecialCachedPage
@@ -2084,7 +2093,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' => '萬用字元僅可在主機名稱的開頭使用。',
 
@@ -2092,7 +2101,7 @@ Template:消除歧義',
 'listusersfrom' => '給定顯示用戶條件:',
 'listusers-submit' => '顯示',
 'listusers-noresult' => '找不到用戶。',
-'listusers-blocked' => '(已封)',
+'listusers-blocked' => '(已封)',
 
 # Special:ActiveUsers
 'activeusers' => '活躍用戶列表',
@@ -2103,10 +2112,6 @@ Template:消除歧義',
 'activeusers-hidesysops' => '隱藏管理員',
 'activeusers-noresult' => '找不到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新進用戶名冊',
-'newuserlogpagetext' => '這是一個最近被創建用戶的新日誌',
-
 # Special:ListGroupRights
 'listgrouprights' => '用戶群組權限',
 'listgrouprights-summary' => '以下面是一個在這個wiki中定義出來的用戶權限清單,以及它們的存取權。
@@ -2138,7 +2143,7 @@ Template:消除歧義',
 'emailpagetext' => '您可以用下面的表格去寄一封電郵給這位{{Gender:$1|用戶}}。
 您在[[Special:Preferences|您的參數設置]]中所輸入的電子郵件地址將出現在郵件「發件人」一欄中,這樣該用戶就可以回覆您。',
 'usermailererror' => '目標郵件地址返回錯誤:',
-'defemailsubject' => '{{SITENAME}}來自用戶“$1”的電子郵件',
+'defemailsubject' => '{{SITENAME}}來自用戶「$1」的電子郵件',
 'usermaildisabled' => '用戶電郵已停用',
 'usermaildisabledtext' => '您不可以發送電郵到這個wiki上的其他用戶',
 'noemailtitle' => '無e-mail地址',
@@ -2167,15 +2172,15 @@ Template:消除歧義',
 
 # Watchlist
 'watchlist' => '監視列表',
-'mywatchlist' => '我的監視列表',
+'mywatchlist' => '監視列表',
 'watchlistfor2' => '$1的監視列表 $2',
 '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' => '監視',
@@ -2199,24 +2204,27 @@ 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' => '將所有頁面標為已閱讀',
-'enotif_newpagetext' => '這是新建頁面。',
 'enotif_impersonal_salutation' => '{{SITENAME}}用戶',
-'changed' => '更改',
-'created' => '建立了',
-'enotif_subject' => '{{SITENAME}}頁面“$PAGETITLE”已被$PAGEEDITOR$CHANGEDORCREATED',
+'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刪除,請見$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瀏覽當前版本。',
+'enotif_body_intro_changed' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2修改,請見$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
 
@@ -2225,23 +2233,24 @@ $NEWPAGE
 郵件:$PAGEEDITOR_EMAIL
 本站:$PAGEEDITOR_WIKI
 
-在您訪問此頁之前,將來的更改將不會向您發通知。
-您也可以在監視列表中重設您所有監視頁面的通知標記。
+在您訪問此頁之前,將來的更改將不會向您發出通知。您也可以在監視列表中重設您所有監視頁面的通知標記。
 
-                        友好的{{SITENAME}}通知系統
+{{SITENAME}}通知系統啟
 
 --
-要改變您的電郵設定,請參閱
+更改電郵通知設定:
 {{canonicalurl:{{#special:Preferences}}}}
 
-要改變您的監視列表設定,請參閱
+更改監視列表設定:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-要刪除您監視清單中的該頁面,請參閱
+從監視列表中刪除此頁面:
 $UNWATCHURL
 
-回饋和進一步的幫助:
+回饋和其他幫助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建立了',
+'changed' => '更改',
 
 # Delete
 'deletepage' => '刪除頁面',
@@ -2305,10 +2314,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' => '到期:',
@@ -2324,9 +2335,9 @@ $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-cascade' => '連鎖',
 'protect-expiring' => '終止於 $1 (UTC)',
 'protect-expiring-local' => '$1到期',
@@ -2400,7 +2411,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',
@@ -2419,7 +2430,7 @@ $1',
 'blanknamespace' => '(主)',
 
 # Contributions
-'contributions' => '用戶貢獻',
+'contributions' => '{{GENDER:$1|用戶}}貢獻',
 'contributions-title' => '$1的用戶貢獻',
 'mycontris' => '我的貢獻',
 'contribsub2' => '$1的貢獻 ($2)',
@@ -2620,7 +2631,7 @@ $1被封禁的理由是“$2”',
 您應當負責確定所有連結依然會連到指定的頁面。
 
 注意如果新頁面已經有內容的話,頁面將'''不會'''被移動,
-除非新頁面無內容或是重定向頁,而且沒有修訂歷史。
+除非新頁面是重定向頁,而且沒有修訂歷史。
 這意味著您再必要時可以在移動到新頁面後再移回老的頁面,
 同時您也無法覆蓋現有頁面。
 
@@ -2717,7 +2728,7 @@ $1被封禁的理由是“$2”',
 
 此外{{GENDER:|你|妳|你}}還可以利用連結匯出檔案,例如{{GENDER:|你|妳|你}}可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]匯出「[[{{MediaWiki:Mainpage}}]]」頁面。',
 'exportall' => '導出所有頁面',
-'exportcuronly' => 'å\83\85å\8c\85å\90«ç\9b®å\89\8dç\9a\84ä¿®è¨\82ï¼\8cè\80\8cä¸\8dæ\98¯å\85¨é\83¨ç\9a\84æ­·å\8f²ã\80\82',
+'exportcuronly' => 'å\8fªå°\8eå\87ºç\95¶å\89\8dç\89\88æ\9c¬ï¼\8cä¸\8då\90«å®\8cæ\95´æ­·å\8f²ç\89\88æ\9c¬',
 'exportnohistory' => "----
 '''注意:''' 由於性能原因,從此表單匯出頁面的全部歷史已被停用。",
 'exportlistauthors' => '為每個頁面包含貢獻者的完整列表',
@@ -2803,8 +2814,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」的根頁面不允許子頁面。',
@@ -2821,7 +2833,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 測試說明]',
@@ -2875,7 +2887,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' => '檢視模板',
@@ -2891,8 +2903,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' => '輸入一個簡短的摘要',
 
@@ -2953,7 +2965,7 @@ $1被封禁的理由是“$2”',
 'spam_deleting' => '所有包含連結至$1的修訂,刪除中',
 
 # Info page
-'pageinfo-title' => '“$1”的信息',
+'pageinfo-title' => '「$1」的信息',
 'pageinfo-not-current' => '抱歉,無法提供之前修訂版本的資訊。',
 'pageinfo-header-basic' => '基本資料',
 'pageinfo-header-edits' => '編輯歷史',
@@ -2982,7 +2994,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' => '資訊',
@@ -2991,6 +3004,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' => '標準',
@@ -3009,6 +3026,8 @@ $1被封禁的理由是“$2”',
 'markedaspatrollederror' => '不能標誌為已檢查',
 'markedaspatrollederrortext' => '{{GENDER:|你|妳|你}}需要指定某個版本才能標誌為已檢查。',
 'markedaspatrollederror-noautopatrol' => '您無法將{{GENDER:|你|妳|你}}自己所作的更改標記為已檢查。',
+'markedaspatrollednotify' => '$1的更改已標記為已巡查。',
+'markedaspatrollederrornotify' => '標記為巡查失敗。',
 
 # Patrol log
 'patrol-log-page' => '巡查日誌',
@@ -3021,10 +3040,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' => '←上一版本',
@@ -3033,7 +3052,7 @@ $1',
 # Media information
 'mediawarning' => "'''警告''': 該檔案類型可能包含惡意代碼。
 執行它可能對您的系統帶來危險。",
-'imagemaxsize' => "影像大小限制:<br />''(用在檔案描述頁面中)''",
+'imagemaxsize' => "影像大小限制<br />''(用在檔案描述頁面中)''",
 'thumbsize' => '縮略圖大小:',
 'widthheightpage' => '$1 × $2, $3頁',
 'file-info' => '檔案大小: $1, MIME 類型: $2',
@@ -3042,6 +3061,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。',
@@ -3071,7 +3091,10 @@ $1',
 'minutes' => '$1分鍾',
 'hours' => '$1小時',
 'days' => '$1天',
+'months' => '{{PLURAL:$1|$1個月|$1個月}}',
+'years' => '{{PLURAL:$1|$1年|$1年}}',
 'ago' => '$1前',
+'just-now' => '剛才',
 
 # Bad image list
 'bad_image_list' => '請按照下列格式編寫:
@@ -3087,7 +3110,7 @@ To disable showing a particular link, set it to 'disable', e.g.
 Variants for Chinese language
 */
 'variantname-zh-hans' => '‪中文(简体)',
-'variantname-zh-hant' => '‪中文(繁體)',
+'variantname-zh-hant' => '‪繁體中文',
 'variantname-zh-cn' => '大陸簡體',
 'variantname-zh-tw' => '台灣正體',
 'variantname-zh-hk' => '香港繁體',
@@ -3679,8 +3702,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' => '版本',
@@ -3728,9 +3751,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' => '特殊頁面',
@@ -3842,11 +3865,15 @@ 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' => '用戶「$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]”,並帶有您的用戶名和使用的瀏覽器。',
@@ -3916,7 +3943,7 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'duration-weeks' => '$1週',
 'duration-years' => '$1年',
 'duration-decades' => '$1十年',
-'duration-centuries' => '$1世紀',
+'duration-centuries' => '$1世紀',
 'duration-millennia' => '$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 be2b8c3..56627f7 100644 (file)
@@ -7,7 +7,25 @@
  * @author Niklas Laxstrom, Tim Starling
  *
  * @copyright Copyright © 2010-2012, Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0
+ * or later
+ *
+ * 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.20
  */
index ea649a6..45df0e9 100644 (file)
@@ -108,6 +108,12 @@ abstract class Maintenance {
         */
        private $mDb = null;
 
+       /**
+        * Used when creating separate schema files.
+        * @var resource
+        */
+       public $fileHandle;
+
        /**
         * List of all the core maintenance scripts. This is added
         * to scripts added by extensions in $wgMaintenanceScripts
@@ -946,7 +952,10 @@ abstract class Maintenance {
                $this->output( 'Searching for active text records in archive table...' );
                $res = $dbw->query( "SELECT DISTINCT ar_text_id FROM $tbl_arc" );
                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" );
 
diff --git a/maintenance/archives/patch-job_attempts.sql b/maintenance/archives/patch-job_attempts.sql
new file mode 100644 (file)
index 0000000..47b73e8
--- /dev/null
@@ -0,0 +1,4 @@
+ALTER TABLE /*_*/job
+    ADD COLUMN job_attempts integer unsigned NOT NULL default 0;
+
+CREATE INDEX /*i*/job_cmd_token_id ON /*_*/job (job_cmd,job_token,job_id);
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 '';
diff --git a/maintenance/archives/patch-uploadstash-us_props.sql b/maintenance/archives/patch-uploadstash-us_props.sql
new file mode 100644 (file)
index 0000000..d64515a
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/uploadstash
+  ADD COLUMN us_props blob;
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 );
diff --git a/maintenance/checkAutoLoader.php b/maintenance/checkAutoLoader.php
deleted file mode 100644 (file)
index 8d0e442..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
- * Check the autoloader
- *
- * 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 to check classes definitions in the autoloader.
- *
- * @ingroup Maintenance
- */
-class CheckAutoLoader extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->mDescription = "AutoLoader sanity checks";
-       }
-       public function execute() {
-               global $wgAutoloadLocalClasses, $IP;
-               $files = array_unique( $wgAutoloadLocalClasses );
-
-               foreach ( $files as $file ) {
-                       if ( function_exists( 'parsekit_compile_file' ) ) {
-                               $parseInfo = parsekit_compile_file( "$IP/$file" );
-                               $classes = array_keys( $parseInfo['class_table'] );
-                       } else {
-                               $contents = file_get_contents( "$IP/$file" );
-                               $m = array();
-                               preg_match_all( '/\n\s*class\s+([a-zA-Z0-9_]+)/', $contents, $m, PREG_PATTERN_ORDER );
-                               $classes = $m[1];
-                       }
-                       foreach ( $classes as $class ) {
-                               if ( !isset( $wgAutoloadLocalClasses[$class] ) ) {
-                                       // printf( "%-50s Unlisted, in %s\n", $class, $file );
-                                       $this->output( "\t'$class' => '$file',\n" );
-                               } elseif ( $wgAutoloadLocalClasses[$class] !== $file ) {
-                                       $this->output( "$class: Wrong file: found in $file, listed in " . $wgAutoloadLocalClasses[$class] . "\n" );
-                               }
-                       }
-               }
-       }
-}
-
-$maintClass = "CheckAutoLoader";
-require_once( RUN_MAINTENANCE_IF_MAIN );
old mode 100755 (executable)
new mode 100644 (file)
index f37af77..c0a526b
@@ -1,52 +1,52 @@
-<?php\r
-/**\r
- * Remove hidden preferences from the database.\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
- * http://www.gnu.org/copyleft/gpl.html\r
- *\r
- * @file\r
- * @author TyA <tya.wiki@gmail.com>\r
- * @see [[bugzilla:30976]]\r
- * @ingroup Maintenance\r
- */\r
-\r
-require_once( __DIR__ . '/Maintenance.php' );\r
-\r
-/**\r
- * Maintenance script that removes hidden preferences from the database.\r
- *\r
- * @ingroup Maintenance\r
- */\r
-class CleanupPreferences extends Maintenance {\r
-       public function execute() {\r
-               global $wgHiddenPrefs;\r
-\r
-               $dbw = wfGetDB( DB_MASTER );\r
-               $dbw->begin();\r
-               foreach( $wgHiddenPrefs as $item ) {\r
-                       $dbw->delete(\r
-                               'user_properties',\r
-                               array( 'up_property' => $item ),\r
-                               __METHOD__\r
-                       );\r
-               };\r
-               $dbw->commit();\r
-               $this->output( "Finished!\n" );\r
-       }\r
-}\r
-\r
-$maintClass = 'CleanupPreferences'; // Tells it to run the class\r
-require_once( RUN_MAINTENANCE_IF_MAIN );\r
+<?php
+/**
+ * Remove hidden preferences from the database.
+ *
+ * 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
+ * @author TyA <tya.wiki@gmail.com>
+ * @see [[bugzilla:30976]]
+ * @ingroup Maintenance
+ */
+
+require_once( __DIR__ . '/Maintenance.php' );
+
+/**
+ * Maintenance script that removes hidden preferences from the database.
+ *
+ * @ingroup Maintenance
+ */
+class CleanupPreferences extends Maintenance {
+       public function execute() {
+               global $wgHiddenPrefs;
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->begin( __METHOD__ );
+               foreach( $wgHiddenPrefs as $item ) {
+                       $dbw->delete(
+                               'user_properties',
+                               array( 'up_property' => $item ),
+                               __METHOD__
+                       );
+               };
+               $dbw->commit( __METHOD__ );
+               $this->output( "Finished!\n" );
+       }
+}
+
+$maintClass = 'CleanupPreferences'; // Tells it to run the class
+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 7c9ca26..e2223e1 100644 (file)
@@ -56,7 +56,7 @@ class ConvertUserOptions extends Maintenance {
                                array( 'LIMIT' => 50, 'FOR UPDATE' )
                        );
                        $id = $this->convertOptionBatch( $res, $dbw );
-                       $dbw->commit();
+                       $dbw->commit( __METHOD__ );
 
                        wfWaitForSlaves();
 
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() ) {
index 6a3e211..4f82a63 100644 (file)
@@ -48,48 +48,45 @@ class DeleteOldRevisions extends Maintenance {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
 
-               $tbl_pag = $dbw->tableName( 'page' );
-               $tbl_rev = $dbw->tableName( 'revision' );
-
-               $pageIdClause = '';
-               $revPageClause = '';
+               $pageConds = array();
+               $revConds = array();
 
                # If a list of page_ids was provided, limit results to that set of page_ids
-               if ( sizeof( $args ) > 0 ) {
-                       $pageIdList = implode( ',', $args );
-                       $pageIdClause = " WHERE page_id IN ({$pageIdList})";
-                       $revPageClause = " AND rev_page IN ({$pageIdList})";
-                       $this->output( "Limiting to {$tbl_pag}.page_id IN ({$pageIdList})\n" );
+               if ( count( $args ) > 0 ) {
+                       $pageConds['page_id'] = $args;
+                       $revConds['rev_page'] = $args;
+                       $this->output( "Limiting to page IDs " . implode( ',', $args ) . "\n" );
                }
 
                # Get "active" revisions from the page table
                $this->output( "Searching for active revisions..." );
-               $res = $dbw->query( "SELECT page_latest FROM $tbl_pag{$pageIdClause}" );
-               $cur = array();
+               $res = $dbw->select( 'page', 'page_latest', $pageConds, __METHOD__ );
+               $latestRevs = array();
                foreach ( $res as $row ) {
-                       $cur[] = $row->page_latest;
+                       $latestRevs[] = $row->page_latest;
                }
                $this->output( "done.\n" );
 
                # Get all revisions that aren't in this set
-               $old = array();
                $this->output( "Searching for inactive revisions..." );
-               $set = implode( ', ', $cur );
-               $res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_id NOT IN ( $set ){$revPageClause}" );
+               if ( count( $latestRevs ) > 0 ) {
+                       $revConds[] = 'rev_id NOT IN (' . $dbw->makeList( $latestRevs ) . ')';
+               }
+               $res = $dbw->select( 'revision', 'rev_id', $revConds, __METHOD__ );
+               $oldRevs = array();
                foreach ( $res as $row ) {
-                       $old[] = $row->rev_id;
+                       $oldRevs[] = $row->rev_id;
                }
                $this->output( "done.\n" );
 
                # Inform the user of what we're going to do
-               $count = count( $old );
+               $count = count( $oldRevs );
                $this->output( "$count old revisions found.\n" );
 
                # Delete as appropriate
                if ( $delete && $count ) {
                        $this->output( "Deleting..." );
-                       $set = implode( ', ', $old );
-                       $dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" );
+                       $dbw->delete( 'revision', array( 'rev_id' => $oldRevs ), __METHOD__ );
                        $this->output( "done.\n" );
                }
 
index 5dc7567..dcbf739 100644 (file)
@@ -61,7 +61,7 @@ class DeleteOrphanedRevisions extends Maintenance {
 
                # Nothing to do?
                if ( $report || $count == 0 ) {
-                       $dbw->commit();
+                       $dbw->commit( __METHOD__ );
                        exit( 0 );
                }
 
index d808500..19b9777 100644 (file)
@@ -129,7 +129,7 @@ class FixDoubleRedirects extends Maintenance {
 
        protected function queueJobs( $jobs, $dryrun = false ) {
                $this->output( "Queuing batch of " . count( $jobs ) . " double redirects.\n" );
-               Job::batchInsert( $dryrun ? array() : $jobs );
+               JobQueueGroup::singleton()->push( $dryrun ? array() : $jobs );
        }
 }
 
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 1c96a57..b72430a 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 );
                }
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 d77029e..20fb477 100644 (file)
@@ -60,7 +60,7 @@ class wikiStatsOutput extends statsOutput {
                        echo ', as well as the following languages that are not intended for system message translations, usually because they redirect to other language codes: ' . implode( ', ', $dummyCodes );
                }
                echo ".\n\n"; # dot to end sentence
-               echo '{| class="sortable wikitable" border="2" cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both;" width="100%"' . "\n";
+               echo '{| class="sortable wikitable" border="2" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both; width:100%;"' . "\n";
        }
        function footer() {
                echo "|}\n";
@@ -96,7 +96,7 @@ class wikiStatsOutput extends statsOutput {
                $color = $red . $green . $blue;
 
                $percent = parent::formatPercent( $subset, $total, $revert, $accuracy );
-               return 'bgcolor="#' . $color . '"|' . $percent;
+               return 'style="background-color:#' . $color . ';"|' . $percent;
        }
 }
 
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..87bc1c2 100644 (file)
@@ -218,6 +218,8 @@ $wgIgnoredMessages = array(
        'newuserlog-create-entry',
        'newuserlog-create2-entry',
        'newuserlog-autocreate-entry',
+       'rightslogentry',
+       'rightslogentry-autopromote',
        'suppressedarticle',
        'deletedarticle',
        // 'uploadedimage',
@@ -365,6 +367,7 @@ $wgOptionalMessages = array(
        'exif-maxaperturevalue-value',
        'exif-subjectnewscode-value',
        'booksources-isbn',
+       'protect-summary-desc',
        'sp-contributions-explain',
        'sorbs',
        'video-dims',
@@ -480,6 +483,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 eee9799..50a6f2e 100644 (file)
@@ -167,6 +167,7 @@ $wgMessageStructure = array(
                'newwindow',
                'cancel',
                'moredotdotdot',
+               'morenotlisted',
                'mypage',
                'mytalk',
                'anontalk',
@@ -203,6 +204,7 @@ $wgMessageStructure = array(
                'variants',
        ),
        'miscellaneous2' => array(
+               'navigation-heading',
                'errorpagetitle',
                'returnto',
                'tagline',
@@ -425,7 +427,8 @@ $wgMessageStructure = array(
        ),
        'login' => array(
                'logouttext',
-               'welcomecreation',
+               'welcomeuser',
+               'welcomecreation-msg',
                'yourname',
                'yourpassword',
                'yourpasswordagain',
@@ -511,6 +514,7 @@ $wgMessageStructure = array(
                'php-mail-error',
                'php-mail-error-unknown',
                'user-mail-no-addy',
+               'user-mail-no-body',
        ),
        'resetpass' => array(
                'resetpass',
@@ -557,6 +561,7 @@ $wgMessageStructure = array(
                'changeemail-oldemail',
                'changeemail-newemail',
                'changeemail-none',
+               'changeemail-password',
                'changeemail-submit',
                'changeemail-cancel',
        ),
@@ -669,7 +674,6 @@ $wgMessageStructure = array(
                'hiddencategories',
                'edittools',
                'edittools-upload',
-               'nocreatetitle',
                'nocreatetext',
                'nocreate-loggedin',
                'sectioneditnotsupported-title',
@@ -1186,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',
@@ -1399,6 +1401,7 @@ $wgMessageStructure = array(
                'backend-fail-notsame',
                'backend-fail-invalidpath',
                'backend-fail-delete',
+               'backend-fail-describe',
                'backend-fail-alreadyexists',
                'backend-fail-store',
                'backend-fail-copy',
@@ -1845,10 +1848,6 @@ $wgMessageStructure = array(
                'activeusers-submit',
                'activeusers-noresult',
        ),
-       'newuserlog' => array(
-               'newuserlogpage',
-               'newuserlogpagetext',
-       ),
        'listgrouprights' => array(
                'listgrouprights',
                'listgrouprights-summary',
@@ -1946,15 +1945,23 @@ $wgMessageStructure = array(
        'enotif' => array(
                'enotif_mailer',
                'enotif_reset',
-               'enotif_newpagetext',
                'enotif_impersonal_salutation',
-               'changed',
-               'created',
-               'enotif_subject',
+               'enotif_subject_deleted',
+               'enotif_subject_created',
+               'enotif_subject_moved',
+               'enotif_subject_restored',
+               'enotif_subject_changed',
+               'enotif_body_intro_deleted',
+               'enotif_body_intro_created',
+               'enotif_body_intro_moved',
+               'enotif_body_intro_restored',
+               'enotif_body_intro_changed',
                'enotif_lastvisited',
                'enotif_lastdiff',
                'enotif_anon_editor',
                'enotif_body',
+               'created',
+               'changed',
        ),
        'delete' => array(
                'deletepage',
@@ -2012,6 +2019,8 @@ $wgMessageStructure = array(
                'prot_1movedto2',
                'protect-badnamespace-title',
                'protect-badnamespace-text',
+               'protect-norestrictiontypes-text',
+               'protect-norestrictiontypes-title',
                'protect-legend',
                'protectcomment',
                'protectexpiry',
@@ -2027,6 +2036,7 @@ $wgMessageStructure = array(
                'protect-fallback',
                'protect-level-autoconfirmed',
                'protect-level-sysop',
+               'protect-summary-desc',
                'protect-summary-cascade',
                'protect-expiring',
                'protect-expiring-local',
@@ -2449,6 +2459,7 @@ $wgMessageStructure = array(
                'import-error-interwiki',
                'import-error-special',
                'import-error-invalid',
+               'import-error-unserialize',
                'import-options-wrong',
                'import-rootpage-invalid',
                'import-rootpage-nosubpage',
@@ -2706,6 +2717,7 @@ $wgMessageStructure = array(
                'pageinfo-magic-words',
                'pageinfo-hidden-categories',
                'pageinfo-templates',
+               'pageinfo-transclusions',
                'pageinfo-footer',
                'pageinfo-toolboxlink',
                'pageinfo-redirectsto',
@@ -2715,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',
@@ -2738,6 +2754,8 @@ $wgMessageStructure = array(
                'markedaspatrollederror',
                'markedaspatrollederrortext',
                'markedaspatrollederror-noautopatrol',
+               'markedaspatrollednotify',
+               'markedaspatrollederrornotify',
        ),
        'patrol-log' => array(
                'patrol-log-page',
@@ -2769,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',
@@ -2803,7 +2822,10 @@ $wgMessageStructure = array(
                'minutes',
                'hours',
                'days',
+               'months',
+               'years',
                'ago',
+               'just-now',
        ),
        'badimagelist' => array(
                'bad_image_list',
@@ -3715,6 +3737,10 @@ $wgMessageStructure = array(
                'logentry-newusers-create2',
                'logentry-newusers-autocreate',
                'newuserlog-byemail',
+               'logentry-rights-rights',
+               'logentry-rights-rights-legacy',
+               'logentry-rights-autopromote',
+               'rightsnone',
        ),
        'logging-irc' => array(
                'revdelete-logentry',
@@ -3743,6 +3769,8 @@ $wgMessageStructure = array(
                'deletedarticle',
                // 'uploadedimage',
                // 'overwroteimage',
+               'rightslogentry',
+               'rightslogentry-autopromote',
        ),
        'feedback' => array(
                'feedback-bugornote',
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 c591665..4358989 100644 (file)
@@ -242,7 +242,9 @@ class LockServerDaemon {
                $m = explode( ':', $data ); // <session, key, command, type, values>
                if ( count( $m ) == 5 ) {
                        list( $session, $key, $command, $type, $values ) = $m;
-                       if ( sha1( $session . $command . $type . $values . $this->authKey ) !== $key ) {
+                       $goodKey = hash_hmac( 'sha1',
+                               "{$session}\n{$command}\n{$type}\n{$values}", $this->authKey );
+                       if ( $goodKey !== $key ) {
                                return 'BAD_KEY';
                        } elseif ( strlen( $session ) !== 32 ) {
                                return 'BAD_SESSION';
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 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 e36674e..6e01291 100644 (file)
@@ -114,8 +114,7 @@ function readaline( $prompt = '' ) {
  * @param $doxyGenerateMan Boolean
  * @return string
  */
-function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, $currentVersion, $input, $exclude, $excludePatterns, $doxyGenerateMan ) {
-       global $doxygenInputFilter;
+function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, $currentVersion, $input, $exclude, $excludePatterns, $doxyGenerateMan, $doxygenInputFilter ) {
 
        $template = file_get_contents( $doxygenTemplate );
        // Replace template placeholders by correct values.
@@ -242,7 +241,7 @@ $version = 'master';
 $excludedPaths = $mwPath . join( " $mwPath", $mwExcludePaths );
 print "EXCLUDE: $excludedPaths\n\n";
 
-$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $version, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan );
+$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $version, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan, $doxygenInputFilter );
 $command = $doxygenBin . ' ' . $generatedConf;
 
 echo <<<TEXT
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 75018de..17a3f2e 100644 (file)
@@ -38,22 +38,40 @@ class nextJobDB extends Maintenance {
 
        public function execute() {
                global $wgMemc;
-               $type = $this->getOption( 'type', false );
 
-               $memcKey = 'jobqueue:dbs:v2';
-               $pendingDBs = $wgMemc->get( $memcKey );
+               $type = $this->getOption( 'type', false );
 
-               // If the cache entry wasn't present, or in 1% of cases otherwise,
-               // regenerate the cache.
-               if ( !$pendingDBs || mt_rand( 0, 100 ) == 0 ) {
-                       $pendingDBs = $this->getPendingDbs();
-                       $wgMemc->set( $memcKey, $pendingDBs, 300 );
+               $memcKey = 'jobqueue:dbs:v3';
+               $pendingDbInfo = $wgMemc->get( $memcKey );
+
+               // If the cache entry wasn't present, is stale, or in .1% of cases otherwise,
+               // regenerate the cache. Use any available stale cache if another process is
+               // currently regenerating the pending DB information.
+               if ( !is_array( $pendingDbInfo )
+                       || ( time() - $pendingDbInfo['timestamp'] ) > 300 // 5 minutes
+                       || mt_rand( 0, 999 ) == 0
+               ) {
+                       if ( $wgMemc->add( "$memcKey:rebuild", 1, 1800 ) ) { // lock
+                               $pendingDbInfo = array(
+                                       'pendingDBs' => $this->getPendingDbs(),
+                                       'timestamp'  => time()
+                               );
+                               for ( $attempts=1; $attempts <= 25; ++$attempts ) {
+                                       if ( $wgMemc->add( "$memcKey:lock", 1, 60 ) ) { // lock
+                                               $wgMemc->set( $memcKey, $pendingDbInfo );
+                                               $wgMemc->delete( "$memcKey:lock" ); // unlock
+                                               break;
+                                       }
+                               }
+                               $wgMemc->delete( "$memcKey:rebuild" ); // unlock
+                       }
                }
 
-               if ( !$pendingDBs ) {
-                       return;
+               if ( !is_array( $pendingDbInfo ) || !$pendingDbInfo['pendingDBs'] ) {
+                       return; // no DBs with jobs or cache is both empty and locked
                }
 
+               $pendingDBs = $pendingDbInfo['pendingDBs']; // convenience
                do {
                        $again = false;
 
@@ -71,17 +89,25 @@ class nextJobDB extends Maintenance {
                        $candidates = array_values( $candidates );
                        $db = $candidates[ mt_rand( 0, count( $candidates ) - 1 ) ];
                        if ( !$this->checkJob( $type, $db ) ) {
-                               // This job is not available in the current database. Remove it from
-                               // the cache.
                                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 ) );
                                }
-
-                               $wgMemc->set( $memcKey, $pendingDBs, 300 );
+                               // 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 );
+                                       }
+                                       $wgMemc->delete( "$memcKey:lock" ); // unlock
+                               }
                                $again = true;
                        }
                } while ( $again );
@@ -97,24 +123,17 @@ class nextJobDB extends Maintenance {
         * @return bool
         */
        function checkJob( $type, $dbName ) {
-               global $wgJobTypesExcludedFromDefaultQueue;
-
+               $group = JobQueueGroup::singleton( $dbName );
                if ( $type === false ) {
-                       $lb = wfGetLB( $dbName );
-                       $db = $lb->getConnection( DB_MASTER, array(), $dbName );
-                       $conds = array();
-                       if ( count( $wgJobTypesExcludedFromDefaultQueue ) > 0 ) {
-                               foreach ( $wgJobTypesExcludedFromDefaultQueue as $cmdType ) {
-                                       $conds[] = "job_cmd != " . $db->addQuotes( $cmdType );
+                       foreach ( $group->getDefaultQueueTypes() as $type ) {
+                               if ( !$group->get( $type )->isEmpty() ) {
+                                       return true;
                                }
                        }
-                       $exists = (bool)$db->selectField( 'job', '1', $conds, __METHOD__ );
-                       $lb->reuseConnection( $db );
+                       return false;
                } else {
-                       $exists = !JobQueueGroup::singleton( $dbName )->get( $type )->isEmpty();
+                       return !$group->get( $type )->isEmpty();
                }
-
-               return $exists;
        }
 
        /**
@@ -123,42 +142,15 @@ class nextJobDB extends Maintenance {
         */
        private function getPendingDbs() {
                global $wgLocalDatabases;
-               $pendingDBs = array();
-               # Cross-reference DBs by master DB server
-               $dbsByMaster = array();
-               foreach ( $wgLocalDatabases as $db ) {
-                       $lb = wfGetLB( $db );
-                       $dbsByMaster[$lb->getServerName( 0 )][] = $db;
-               }
-
-               foreach ( $dbsByMaster as $dbs ) {
-                       $dbConn = wfGetDB( DB_MASTER, array(), $dbs[0] );
-
-                       # Padding row for MySQL bug
-                       $pad = str_repeat( '-', 40 );
-                       $sql = "(SELECT '$pad' as db, '$pad' as job_cmd)";
-                       foreach ( $dbs as $wikiId ) {
-                               if ( $sql != '' ) {
-                                       $sql .= ' UNION ';
-                               }
 
-                               list( $dbName, $tablePrefix ) = wfSplitWikiID( $wikiId );
-                               $dbConn->tablePrefix( $tablePrefix );
-                               $jobTable = $dbConn->tableName( 'job' );
-
-                               $sql .= "(SELECT DISTINCT '$wikiId' as db, job_cmd FROM $dbName.$jobTable GROUP BY job_cmd)";
-                       }
-                       $res = $dbConn->query( $sql, __METHOD__ );
-                       $first = true;
-                       foreach ( $res as $row ) {
-                               if ( $first ) {
-                                       // discard padding row
-                                       $first = false;
-                                       continue;
-                               }
-                               $pendingDBs[$row->job_cmd][] = $row->db;
+               $pendingDBs = array(); // (job type => (db list))
+               foreach ( $wgLocalDatabases as $db ) {
+                       $types = JobQueueGroup::singleton( $db )->getQueuesWithJobs();
+                       foreach ( $types as $type ) {
+                               $pendingDBs[$type][] = $db;
                        }
                }
+
                return $pendingDBs;
        }
 }
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 6c57fde..27e692d 100644 (file)
@@ -48,6 +48,12 @@ class PopulateFilearchiveSha1 extends LoggedUpdateMaintenance {
                $dbw = wfGetDB( DB_MASTER );
                $table = 'filearchive';
                $conds = array( 'fa_sha1' => '', 'fa_storage_key IS NOT NULL' );
+
+               if ( !$dbw->fieldExists( $table, 'fa_sha1', __METHOD__ ) ) {
+                       $this->output( "fa_sha1 column does not exist\n\n", true );
+                       return false;
+               }
+
                $this->output( "Populating fa_sha1 field from fa_storage_key\n" );
                $endId = $dbw->selectField( $table, 'MAX(fa_id)', false, __METHOD__ );
 
index 07c395f..4827642 100644 (file)
@@ -48,7 +48,11 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                $db = $this->getDB( DB_MASTER );
                if ( !$db->tableExists( 'revision' ) ) {
                        $this->error( "revision table does not exist", true );
+               } else if ( !$db->fieldExists( 'revision', 'rev_sha1', __METHOD__ ) ) {
+                       $this->output( "rev_sha1 column does not exist\n\n", true );
+                       return false;
                }
+
                $this->output( "Populating rev_len column\n" );
 
                $start = $db->selectField( 'revision', 'MIN(rev_id)', false, __METHOD__ );
index 382b7be..113eef4 100644 (file)
@@ -48,6 +48,9 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                        $this->error( "revision table does not exist", true );
                } elseif ( !$db->tableExists( 'archive' ) ) {
                        $this->error( "archive table does not exist", true );
+               } else if ( !$db->fieldExists( 'revision', 'rev_sha1', __METHOD__ ) ) {
+                       $this->output( "rev_sha1 column does not exist\n\n", true );
+                       return false;
                }
 
                $this->output( "Populating rev_sha1 column\n" );
diff --git a/maintenance/postgres/archives/patch-ipb_address_unique.sql b/maintenance/postgres/archives/patch-ipb_address_unique.sql
deleted file mode 100644 (file)
index e69de29..0000000
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 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;
                }
diff --git a/maintenance/refreshFileHeaders.php b/maintenance/refreshFileHeaders.php
new file mode 100644 (file)
index 0000000..74f0f35
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Refresh file headers from metadata.
+ *
+ * Usage: php refreshFileHeaders.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
+ * @author Aaron Schulz
+ * @ingroup Maintenance
+ */
+
+require_once( __DIR__ . '/Maintenance.php' );
+
+/**
+ * Maintenance script to refresh file headers from metadata
+ *
+ * @ingroup Maintenance
+ */
+class RefreshFileHeaders extends Maintenance {
+       function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Script to update file HTTP headers';
+               $this->addOption( 'verbose', 'Output information about each file.', false, false, 'v' );
+               $this->addOption( 'start', 'Name of file to start with', false, true );
+               $this->addOption( 'end', 'Name of file to end with', false, true );
+               $this->setBatchSize( 200 );
+       }
+
+       public function execute() {
+               $repo = RepoGroup::singleton()->getLocalRepo();
+               $start = str_replace( ' ', '_', $this->getOption( 'start', '' ) ); // page on img_name
+               $end = str_replace( ' ', '_', $this->getOption( 'end', '' ) ); // page on img_name
+
+               $count = 0;
+               $dbr = wfGetDB( DB_SLAVE );
+               do {
+                       $conds = array( "img_name > {$dbr->addQuotes( $start )}" );
+                       if ( strlen( $end ) ) {
+                               $conds[] = "img_name <= {$dbr->addQuotes( $end )}";
+                       }
+                       $res = $dbr->select( 'image', '*', $conds,
+                               __METHOD__, array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'img_name ASC' ) );
+                       foreach ( $res as $row ) {
+                               $file = $repo->newFileFromRow( $row );
+                               $headers = $file->getStreamHeaders();
+                               if ( count( $headers ) ) {
+                                       $this->updateFileHeaders( $file, $headers );
+                               }
+                               // Do all of the older file versions...
+                               foreach ( $file->getHistory() as $oldFile ) {
+                                       $headers = $oldFile->getStreamHeaders();
+                                       if ( count( $headers ) ) {
+                                               $this->updateFileHeaders( $oldFile, $headers );
+                                       }
+                               }
+                               if ( $this->hasOption( 'verbose' ) ) {
+                                       $this->output( "Updated headers for file '{$row->img_name}'.\n" );
+                               }
+                               ++$count;
+                               $start = $row->img_name; // advance
+                       }
+               } while ( $res->numRows() > 0 );
+
+               $this->output( "Done. Updated headers for $count file(s).\n" );
+       }
+
+       protected function updateFileHeaders( File $file, array $headers ) {
+               $status = $file->getRepo()->getBackend()->describe( array(
+                       'src' => $file->getPath(), 'headers' => $headers
+               ) );
+               if ( !$status->isGood() ) {
+                       $this->error( "Encountered error: " . print_r( $status, true ) );
+               }
+       }
+}
+
+$maintClass = 'RefreshFileHeaders';
+require_once( RUN_MAINTENANCE_IF_MAIN );
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 ad9a380..2ba2b3d 100644 (file)
@@ -80,8 +80,6 @@ class DumpRenderer extends Maintenance {
         * @param $rev Revision
         */
        public function handleRevision( $rev ) {
-               global $wgParserConf;
-
                $title = $rev->getTitle();
                if ( !$title ) {
                        $this->error( "Got bogus revision with null title!" );
index f06e6b0..8d2819d 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,7 +78,7 @@ 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)...
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" );
                }
        }
 }
diff --git a/maintenance/sqlite/archives/patch-profiling.sql b/maintenance/sqlite/archives/patch-profiling.sql
new file mode 100644 (file)
index 0000000..4a07283
--- /dev/null
@@ -0,0 +1,12 @@
+-- profiling table
+-- This is optional
+
+CREATE TABLE /*_*/profiling (
+  pf_count int NOT NULL default 0,
+  pf_time float NOT NULL default 0,
+  pf_memory float NOT NULL default 0,
+  pf_name varchar(255) NOT NULL default '',
+  pf_server varchar(30) NOT NULL default ''
+);
+
+CREATE UNIQUE INDEX /*i*/pf_name_server ON /*_*/profiling (pf_name, pf_server);
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 2dcc25c..e4a2a45 100644 (file)
@@ -25,7 +25,7 @@ define( 'REPORTING_INTERVAL', 1 );
 
 if ( !defined( 'MEDIAWIKI' ) ) {
        require_once( __DIR__ . '/../commandLine.inc' );
-       require_once( __DIR__ . '/../../includes/ExternalStoreDB.php' );
+       require_once( __DIR__ . '/../../includes/externalstore/ExternalStoreDB.php' );
        require_once( 'resolveStubs.php' );
 
        $fname = 'moveToExternal';
index bdcd66e..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);
@@ -994,8 +994,10 @@ CREATE TABLE /*_*/uploadstash (
   -- chunk counter starts at 0, current offset is stored in us_size
   us_chunk_inx int unsigned NULL,
 
-  -- file properties from File::getPropsFromPath.  these may prove unnecessary.
-  --
+  -- Serialized file properties from File::getPropsFromPath
+  us_props blob,
+
+  -- file size in bytes
   us_size int unsigned NOT NULL,
   -- this hash comes from File::sha1Base36(), and is 31 characters
   us_sha1 varchar(31) NOT NULL,
@@ -1242,7 +1244,8 @@ CREATE TABLE /*_*/logging (
   -- Freeform text. Interpreted as edit history comments.
   log_comment varchar(255) NOT NULL default '',
 
-  -- LF separated list of miscellaneous parameters
+  -- miscellaneous parameters:
+  -- LF separated list (old system) or serialized PHP array (new system)
   log_params blob NOT NULL,
 
   -- rev_deleted for logs
@@ -1291,10 +1294,12 @@ CREATE TABLE /*_*/job (
   -- Stored as a PHP serialized array, or an empty string if there are no parameters
   job_params blob NOT NULL,
 
-  -- Random, non-unique, number used for job acquisition
-  -- Either a simple timestamp or a totally random number (for lock concurrency)
+  -- Random, non-unique, number used for job acquisition (for lock concurrency)
   job_random integer unsigned NOT NULL default 0,
 
+  -- The number of times this job has been locked
+  job_attempts integer unsigned NOT NULL default 0,
+
   -- Field that conveys process locks on rows via process UUIDs
   job_token varbinary(32) NOT NULL default '',
 
@@ -1307,6 +1312,7 @@ CREATE TABLE /*_*/job (
 
 CREATE INDEX /*i*/job_sha1 ON /*_*/job (job_sha1);
 CREATE INDEX /*i*/job_cmd_token ON /*_*/job (job_cmd,job_token,job_random);
+CREATE INDEX /*i*/job_cmd_token_id ON /*_*/job (job_cmd,job_token,job_id);
 CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title, job_params(128));
 CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
 
index cb6f06b..ba1d8cd 100644 (file)
@@ -40,7 +40,6 @@ require_once( __DIR__ . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class UpdateMediaWiki extends Maintenance {
-
        function __construct() {
                parent::__construct();
                $this->mDescription = "MediaWiki database updater";
@@ -48,6 +47,8 @@ class UpdateMediaWiki extends Maintenance {
                $this->addOption( 'quick', 'Skip 5 second countdown before starting' );
                $this->addOption( 'doshared', 'Also update shared tables' );
                $this->addOption( 'nopurge', 'Do not purge the objectcache table after updates' );
+               $this->addOption( 'noschema', 'Only do the updates that are not done during schema updates' );
+               $this->addOption( 'schema', 'Output SQL to do the schema updates instead of doing them.  Works even when $wgAllowSchemaUpdates is false', false, true );
                $this->addOption( 'force', 'Override when $wgAllowSchemaUpdates disables this script' );
        }
 
@@ -83,10 +84,24 @@ class UpdateMediaWiki extends Maintenance {
        function execute() {
                global $wgVersion, $wgTitle, $wgLang, $wgAllowSchemaUpdates;
 
-               if( !$wgAllowSchemaUpdates && !$this->hasOption( 'force' ) ) {
+               if( !$wgAllowSchemaUpdates && !( $this->hasOption( 'force' ) || $this->hasOption( 'schema' ) || $this->hasOption( 'noschema' ) ) ) {
                        $this->error( "Do not run update.php on this wiki. If you're seeing this you should\n"
-                               . "probably ask for some help in performing your schema updates.\n\n"
-                               . "If you know what you are doing, you can continue with --force", true );
+                               . "probably ask for some help in performing your schema updates or use\n"
+                               . "the --noschema and --schema options to get an SQL file for someone\n"
+                               . "else to inspect and run.\n\n"
+                               . "If you know what you are doing, you can continue with --force\n", true );
+               }
+
+               $this->fileHandle = null;
+               if( substr( $this->getOption( 'schema' ), 0, 2 ) === "--" ) {
+                       $this->error( "The --schema option requires a file as an argument.\n", true );
+               } else if( $this->hasOption( 'schema' ) ) {
+                       $file = $this->getOption( 'schema' );
+                       $this->fileHandle = fopen( $file, "w" );
+                       if( $this->fileHandle === false ) {
+                               $err = error_get_last();
+                               $this->error( "Problem opening the schema file for writing: $file\n\t{$err['message']}", true );
+                       }
                }
 
                $wgLang = Language::factory( 'en' );
@@ -108,6 +123,9 @@ class UpdateMediaWiki extends Maintenance {
                $db = wfGetDB( DB_MASTER );
 
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
+               if( $db->getType() === 'sqlite' ) {
+                       $this->output( "Using SQLite file: '{$db->mDatabaseFile}'\n" );
+               }
                $this->output( "Depending on the size of your database this may take a while!\n" );
 
                if ( !$this->hasOption( 'quick' ) ) {
@@ -117,7 +135,17 @@ class UpdateMediaWiki extends Maintenance {
 
                $shared = $this->hasOption( 'doshared' );
 
-               $updates = array( 'core', 'extensions', 'stats' );
+               $updates = array( 'core', 'extensions' );
+               if( !$this->hasOption('schema') ) {
+                       if( $this->hasOption('noschema') ) {
+                               $updates[] = 'noschema';
+                       }
+                       $updates[] = 'stats';
+
+                       if( !$this->hasOption('nopurge') ) {
+                               $updates[] = 'purge';
+                       }
+               }
 
                $updater = DatabaseUpdater::newForDb( $db, $shared, $this );
                $updater->doUpdates( $updates );
@@ -131,6 +159,8 @@ class UpdateMediaWiki extends Maintenance {
                        if ( !$isLoggedUpdate && $updater->updateRowExists( $maint ) ) {
                                continue;
                        }
+
+                       $child = $this->runChild( $maint );
                        $child->execute();
                        if ( !$isLoggedUpdate ) {
                                $updater->insertUpdateRow( $maint );
index 3f1a90b..f92f67a 100644 (file)
@@ -47,10 +47,10 @@ class UpdateSpecialPages extends Maintenance {
                                $this->error( "Uncallable function $call!" );
                                continue;
                        }
+                       $this->output( sprintf( '%-30s ', $special ) );
                        $t1 = explode( ' ', microtime() );
                        call_user_func( $call, $dbw );
                        $t2 = explode( ' ', microtime() );
-                       $this->output( sprintf( '%-30s ', $special ) );
                        $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] );
                        $hours = intval( $elapsed / 3600 );
                        $minutes = intval( $elapsed % 3600 / 60 );
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 068c58b..0e4131b 100644 (file)
@@ -95,8 +95,7 @@ header( 'Content-Type: text/html; charset=utf-8' );
 
        .table th,
        .table td {
-               padding: 8px;
-               line-height: 20px;
+               padding: 0.1em;
                text-align: left;
                vertical-align: top;
                border-top: 1px solid #ddd;
@@ -156,9 +155,9 @@ $dbr = wfGetDB( DB_SLAVE );
 
 if( !$dbr->tableExists( 'profiling' ) ) {
        echo '<p>No <code>profiling</code> table exists, so we can\'t show you anything.</p>'
-               . '<p>If you want to log profiling data, create the table using '
-               . '<code>maintenance/archives/patch-profiling.sql</code> and enable '
-               . '<code>$wgProfileToDatabase</code>.</p>'
+               . '<p>If you want to log profiling data, enable <code>$wgProfileToDatabase</code>'
+               . ' in your LocalSettings.php and run <code>maintenance/update.php</code> to'
+               . ' create the profiling table.'
                . '</body></html>';
        exit( 1 );
 }
@@ -193,10 +192,12 @@ class profile_point {
 
                $ex = isset( $expand[$this->name()] );
 
+               $anchor = str_replace( '"', '', $this->name() );
+
                if ( !$ex ) {
                        if ( count( $this->children ) ) {
                                $url = getEscapedProfileUrl( false, false, $expand + array( $this->name() => true ) );
-                               $extet = ' <a href="' . $url . '">[+]</a>';
+                               $extet = " <a id=\"{$anchor}\" href=\"{$url}#{$anchor}\">[+]</a>";
                        } else {
                                $extet = '';
                        }
@@ -207,13 +208,13 @@ class profile_point {
                                        $e += array( $name => $ep );
                                }
                        }
-
-                       $extet = ' <a href="' . getEscapedProfileUrl( false, false, $e ) . '">[–]</a>';
+                       $url = getEscapedProfileUrl( false, false, $e );
+                       $extet = " <a id=\"{$anchor}\" href=\"{$url}#{$anchor}\">[–]</a>";
                }
                ?>
                <tr>
                <th><div style="margin-left: <?php echo (int)$indent; ?>em;">
-                       <?php echo htmlspecialchars( $this->name() ) . $extet ?>
+                       <?php echo htmlspecialchars( str_replace( ',', ', ', $this->name() ) ) . $extet ?>
                </div></th>
                <td class="mw-profileinfo-timep"><?php echo @wfPercent( $this->time() / self::$totaltime * 100 ); ?></td>
                <td class="mw-profileinfo-memoryp"><?php echo @wfPercent( $this->memory() / self::$totalmemory * 100 ); ?></td>
index afa9bb2..f279c84 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,6 +654,7 @@ return array(
        ),
        'mediawiki.notify' => array(
                'scripts' => 'resources/mediawiki/mediawiki.notify.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.searchSuggest' => array(
                'scripts' => 'resources/mediawiki/mediawiki.searchSuggest.js',
@@ -687,6 +695,7 @@ return array(
                ),
                'messages' => array( 'showtoc', 'hidetoc' ),
                'position' => 'top', // For $wgPreloadJavaScriptMwUtil
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki Action */
@@ -759,6 +768,7 @@ return array(
                                'mediawiki.language.data',
                                'mediawiki.cldr'
                        ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'mediawiki.cldr' => array(
@@ -766,14 +776,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 +795,7 @@ return array(
                        'mediawiki.util',
                        'mediawiki.language',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki Libs */
@@ -810,6 +824,23 @@ return array(
                ),
                'position' => 'top',
        ),
+       'mediawiki.page.patrol.ajax' => array(
+               'scripts' => 'resources/mediawiki.page/mediawiki.page.patrol.ajax.js',
+               'dependencies' => array(
+                       'mediawiki.page.startup',
+                       'mediawiki.api',
+                       'mediawiki.util',
+                       'mediawiki.Title',
+                       'mediawiki.notify',
+                       'jquery.spinner',
+                       'user.tokens'
+               ),
+               'messages' => array(
+                       'markedaspatrollednotify',
+                       'markedaspatrollederrornotify',
+                       'markedaspatrollederror-noautopatrol'
+               ),
+       ),
        'mediawiki.page.watch.ajax' => array(
                'scripts' => 'resources/mediawiki.page/mediawiki.page.watch.ajax.js',
                'dependencies' => 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 92e7255..8dda42e 100644 (file)
@@ -1,39 +1,37 @@
 .mw-badge {
-       min-width: 8px;
-       height: 14px;
-       border: 1px solid white;
-       -moz-border-radius: 8px;
-       -webkit-border-radius: 8px;
-       border-radius: 8px;
+       min-width: 7px;
+       -moz-border-radius: 2px;
+       -webkit-border-radius: 2px;
+       border-radius: 2px;
        -moz-box-shadow: 0px 1px 4px #ccc;
        -webkit-box-shadow: 0px 1px 4px #ccc;
        box-shadow: 0px 1px 4px #ccc;
-       background-color: #b60a00;
-       background-image: -o-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: -moz-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #a70802), color-stop(1, #cf0e00));
-       background-image: -webkit-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: -ms-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
        padding: 0 3px;
        text-align: center;
+       font-size: 12px;
+       line-height: 12px;
+       background-color: #d2d2d2;
 }
 
 .mw-badge-content {
-       font-size: 12px;
-       line-height: 14px;
+       font-weight: bold;
        color: white;
-       vertical-align: top;
+       vertical-align: baseline;
+       text-shadow: 0 1px rgba(0, 0, 0, 0.4);
 }
 
 .mw-badge-inline {
        display: inline-block;
        margin-left: 3px;
 }
-
 .mw-badge-overlay {
        position: absolute;
        bottom: -1px;
        right: -3px;
        z-index: 50;
 }
+
+.mw-badge-important {
+       background-color: #cc0000;
+}
+
index 04495b7..16e7196 100644 (file)
@@ -1,8 +1,6 @@
 /**
  * jQuery Badge plugin
  *
- * Based on Badger plugin by Daniel Raftery (http://thrivingkings.com/badger).
- *
  * @license MIT
  */
 
  * This program is distributed WITHOUT ANY WARRANTY.
  */
 ( function ( $ ) {
-
        /**
-        * Allows you to put a numeric "badge" on an item on the page.
+        * Allows you to put a "badge" on an item on the page. The badge container
+        * will be appended to the selected element(s).
         * See mediawiki.org/wiki/ResourceLoader/Default_modules#jQuery.badge
         *
-        * @param {string|number} badgeCount An explicit number, or "+n"/ "-n"
-        *  to modify the existing value. If the new value is equal or lower than 0,
-        *  any existing badge will be removed. The badge container will be appended
-        *  to the selected element(s).
-        * @param {Object} options Optional parameters specified below
-        *   type: 'inline' or 'overlay' (default)
-        *   callback: will be called with the number now shown on the badge as a parameter
+        * @param {number|string} text The value to display in the badge. If the value is falsey (0,
+        *   null, false, '', etc.), any existing badge will be removed.
+        * @param {boolean} inline True if the badge should be displayed inline, false
+        *   if the badge should overlay the parent element (default is inline)
+        * @param {boolean} displayZero True if the number zero should be displayed,
+        *   false if the number zero should result in the badge being hidden
+        *   (default is zero will result in the badge being hidden)
         */
-       $.fn.badge = function ( badgeCount, options ) {
-               var $badge,
-                       oldBadgeCount,
-                       newBadgeCount,
-                       $existingBadge = this.find( '.mw-badge' );
-
-               options = $.extend( { type : 'overlay' }, options );
-
-               // If there is no existing badge, this will give an empty string
-               oldBadgeCount = Number( $existingBadge.text() );
-               if ( isNaN( oldBadgeCount ) ) {
-                       oldBadgeCount = 0;
-               }
+       $.fn.badge = function ( text, inline, displayZero ) {
+               var $badge = this.find( '.mw-badge' ),
+                       badgeStyleClass = 'mw-badge-' + ( inline ? 'inline' : 'overlay' ),
+                       isImportant = true;
 
-               // If badgeCount is a number, use that as the new badge
-               if ( typeof badgeCount === 'number' ) {
-                       newBadgeCount = badgeCount;
-               } else if ( typeof badgeCount === 'string' ) {
-                       // If badgeCount is "+x", add x to the old badge
-                       if ( badgeCount.charAt(0) === '+' ) {
-                               newBadgeCount = oldBadgeCount + Number( badgeCount.substr(1) );
-                       // If badgeCount is "-x", subtract x from the old badge
-                       } else if ( badgeCount.charAt(0) === '-' ) {
-                               newBadgeCount = oldBadgeCount - Number( badgeCount.substr(1) );
-                       // If badgeCount can be converted into a number, convert it
-                       } else if ( !isNaN( Number( badgeCount ) ) ) {
-                               newBadgeCount = Number( badgeCount );
-                       } else {
-                               newBadgeCount = 0;
-                       }
-               // Other types are not supported, fall back to 0.
-               } else {
-                       newBadgeCount = 0;
+               // If we're displaying zero, ensure style to be non-important
+               if ( text === 0 && displayZero ) {
+                       isImportant = false;
+                       text = '0';
                }
 
-               // Badge count must be a whole number
-               newBadgeCount = Math.round( newBadgeCount );
-
-               if ( newBadgeCount <= 0 ) {
-                       // Badges should only exist for values > 0.
-                       $existingBadge.remove();
-               } else {
-                       // Don't add duplicates
-                       if ( $existingBadge.length ) {
-                               $badge = $existingBadge;
-                               // Insert the new count into the badge
-                               this.find( '.mw-badge-content' ).text( newBadgeCount );
-                       } else {
-                               // Contruct a new badge with the count
-                               $badge = $( '<div>' )
-                                       .addClass( 'mw-badge' )
-                                       .append(
-                                               $( '<span>' )
-                                                       .addClass( 'mw-badge-content' )
-                                                       .text( newBadgeCount )
-                                       );
-                               this.append( $badge );
-                       }
-
-                       if ( options.type === 'inline' ) {
+               if ( text ) {
+                       // If a badge already exists, reuse it
+                       if ( $badge.length ) {
                                $badge
-                                       .removeClass( 'mw-badge-overlay' )
-                                       .addClass( 'mw-badge-inline' );
-                       // Default: overlay
+                                       .toggleClass( 'mw-badge-important', isImportant )
+                                       .find( '.mw-badge-content' )
+                                               .text( text );
                        } else {
-                               $badge
-                                       .removeClass( 'mw-badge-inline' )
-                                       .addClass( 'mw-badge-overlay' );
-
-                       }
-
-                       // If a callback was specified, call it with the badge count
-                       if ( $.isFunction( options.callback ) ) {
-                               options.callback( newBadgeCount );
+                               // Otherwise, create a new badge with the specified text and style
+                               $badge = $( '<div class="mw-badge"></div>' )
+                                       .addClass( badgeStyleClass )
+                                       .toggleClass( 'mw-badge-important', isImportant )
+                                       .append(
+                                               $( '<span class="mw-badge-content"></span>' ).text ( text )
+                                       )
+                                       .appendTo( this );
                        }
+               } else {
+                       $badge.remove();
                }
+               return this;
        };
 }( jQuery ) );
index 75dc2b9..f2b98f0 100644 (file)
                                // This is a side-effect of limiting after the fact.
                                if ( res.trimmed === true ) {
                                        this.value = res.newVal;
-                                       prevSafeVal = res.newVal;
                                }
+                               // Always adjust prevSafeVal to reflect the input value. Not doing this could cause
+                               // trimValForByteLength to compare the new value to an empty string instead of the
+                               // old value, resulting in trimming always from the end (bug 40850).
+                               prevSafeVal = res.newVal;
                        } );
                } );
        };
index 1990dc0..aced063 100644 (file)
@@ -1,14 +1,16 @@
 /**
  * jQuery checkboxShiftClick
  *
- * This will enable checkboxes to be checked or unchecked in a row by clicking one, holding shift and clicking another one
+ * This will enable checkboxes to be checked or unchecked in a row by clicking one,
+ * holding shift and clicking another one.
  *
- * @author Krinkle <krinklemail@gmail.com>
+ * @author Timo Tijhof, 2011 - 2012
  * @license GPL v2
  */
 ( function ( $ ) {
-       $.fn.checkboxShiftClick = function ( text ) {
-               var prevCheckbox = null, $box = this;
+       $.fn.checkboxShiftClick = function () {
+               var prevCheckbox = null,
+                       $box = this;
                // When our boxes are clicked..
                $box.click( function ( e ) {
                        // And one has been clicked before...
index 24f8959..cddd4ec 100644 (file)
                        // Use the cached version if possible
                        if ( profileCache[nav.userAgent] === undefined ) {
 
-                               /* Configuration */
-
-                               // Name of browsers or layout engines we don't recognize
-                               var uk = 'unknown';
-                               // Generic version digit
-                               var x = 'x';
-                               // Strings found in user agent strings that need to be conformed
-                               var wildUserAgents = ['Opera', 'Navigator', 'Minefield', 'KHTML', 'Chrome', 'PLAYSTATION 3'];
-                               // Translations for conforming user agent strings
-                               var userAgentTranslations = [
-                                       // Tons of browsers lie about being something they are not
-                                       [/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/, ''],
-                                       // Chrome lives in the shadow of Safari still
-                                       ['Chrome Safari', 'Chrome'],
-                                       // KHTML is the layout engine not the browser - LIES!
-                                       ['KHTML', 'Konqueror'],
-                                       // Firefox nightly builds
-                                       ['Minefield', 'Firefox'],
-                                       // This helps keep differnt versions consistent
-                                       ['Navigator', 'Netscape'],
-                                       // This prevents version extraction issues, otherwise translation would happen later
-                                       ['PLAYSTATION 3', 'PS3']
-                               ];
-                               // Strings which precede a version number in a user agent string - combined and used as match 1 in
-                               // version detectection
-                               var versionPrefixes = [
-                                       'camino', 'chrome', 'firefox', '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
-                               var versionSuffix = '(\\/|\\;?\\s|)([a-z0-9\\.\\+]*?)(\\;|dev|rel|\\)|\\s|$)';
-                               // Names of known browsers
-                               var names = [
-                                       'camino', 'chrome', 'firefox', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
-                                       'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq'
-                               ];
-                               // Tanslations for conforming browser names
-                               var nameTranslations = [];
-                               // Names of known layout engines
-                               var layouts = ['gecko', 'konqueror', 'msie', 'opera', 'webkit'];
-                               // Translations for conforming layout names
-                               var layoutTranslations = [['konqueror', 'khtml'], ['msie', 'trident'], ['opera', 'presto']];
-                               // Names of supported layout engines for version number
-                               var layoutVersions = ['applewebkit', 'gecko'];
-                               // Names of known operating systems
-                               var platforms = ['win', 'mac', 'linux', 'sunos', 'solaris', 'iphone'];
-                               // Translations for conforming operating system names
-                               var platformTranslations = [['sunos', 'solaris']];
-
-                               /* Methods */
-
-                               /**
-                                * Performs multiple replacements on a string
-                                */
-                               var translate = function ( source, translations ) {
-                                       var i;
-                                       for ( i = 0; i < translations.length; i++ ) {
-                                               source = source.replace( translations[i][0], translations[i][1] );
-                                       }
-                                       return source;
-                               };
-
-                               /* Pre-processing */
-
-                               var     ua = nav.userAgent,
+                               var
+                                       versionNumber,
+
+                                       /* Configuration */
+
+                                       // Name of browsers or layout engines we don't recognize
+                                       uk = 'unknown',
+                                       // Generic version digit
+                                       x = 'x',
+                                       // Strings found in user agent strings that need to be conformed
+                                       wildUserAgents = ['Opera', 'Navigator', 'Minefield', 'KHTML', 'Chrome', 'PLAYSTATION 3'],
+                                       // Translations for conforming user agent strings
+                                       userAgentTranslations = [
+                                               // Tons of browsers lie about being something they are not
+                                               [/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/, ''],
+                                               // Chrome lives in the shadow of Safari still
+                                               ['Chrome Safari', 'Chrome'],
+                                               // KHTML is the layout engine not the browser - LIES!
+                                               ['KHTML', 'Konqueror'],
+                                               // Firefox nightly builds
+                                               ['Minefield', 'Firefox'],
+                                               // This helps keep differnt versions consistent
+                                               ['Navigator', 'Netscape'],
+                                               // This prevents version extraction issues, otherwise translation would happen later
+                                               ['PLAYSTATION 3', 'PS3']
+                                       ],
+                                       // 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',
+                                               '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',
+                                               'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq'
+                                       ],
+                                       // Tanslations for conforming browser names
+                                       nameTranslations = [],
+                                       // Names of known layout engines
+                                       layouts = ['gecko', 'konqueror', 'msie', 'opera', 'webkit'],
+                                       // Translations for conforming layout names
+                                       layoutTranslations = [ ['konqueror', 'khtml'], ['msie', 'trident'], ['opera', 'presto'] ],
+                                       // Names of supported layout engines for version number
+                                       layoutVersions = ['applewebkit', 'gecko'],
+                                       // Names of known operating systems
+                                       platforms = ['win', 'mac', 'linux', 'sunos', 'solaris', 'iphone'],
+                                       // Translations for conforming operating system names
+                                       platformTranslations = [ ['sunos', 'solaris'] ],
+
+                                       /* Methods */
+
+                                       /**
+                                        * Performs multiple replacements on a string
+                                        */
+                                       translate = function ( source, translations ) {
+                                               var i;
+                                               for ( i = 0; i < translations.length; i++ ) {
+                                                       source = source.replace( translations[i][0], translations[i][1] );
+                                               }
+                                               return source;
+                                       },
+
+                                       /* Pre-processing */
+
+                                       ua = nav.userAgent,
                                        match,
                                        name = uk,
                                        layout = uk,
                                }
                                // Expose Opera 10's lies about being Opera 9.8
                                if ( name === 'opera' && version >= 9.8) {
-                                       version = ua.match( /version\/([0-9\.]*)/i )[1] || 10;
+                                       match = ua.match( /version\/([0-9\.]*)/i );
+                                       if ( match && match[1] ) {
+                                               version = match[1];
+                                       } else {
+                                               version = '10';
+                                       }
                                }
-                               var versionNumber = parseFloat( version, 10 ) || 0.0;
+                               versionNumber = parseFloat( version, 10 ) || 0.0;
 
                                /* Caching */
 
                 * @return Boolean true if browser known or assumed to be supported, false if blacklisted
                 */
                test: function ( map, profile ) {
-                       /*jshint evil:true */
+                       /*jshint evil: true */
 
                        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 cb25796..9b8f8fc 100644 (file)
                        }
                        return $settings;
                },
-               handleResize: function ( e ) {
+               /**
+                * @param {jQuery.Event} e
+                */
+               handleResize: function () {
                        $.collapsibleTabs.instances.each( function () {
                                var $el = $( this ),
                                        data = $.collapsibleTabs.getSettings( $el );
index c1fe7fe..9c6f9ec 100644 (file)
                 * @return      Array                   The HSL representation
                 */
                rgbToHsl: function ( R, G, B ) {
-                       var r = R / 255,
+                       var d,
+                               r = R / 255,
                                g = G / 255,
-                               b = B / 255;
-                       var max = Math.max( r, g, b ), min = Math.min( r, g, b );
-                       var h, s, l = (max + min) / 2;
+                               b = B / 255,
+                               max = Math.max( r, g, b ), min = Math.min( r, g, b ),
+                               h,
+                               s,
+                               l = (max + min) / 2;
 
                        if ( max === min ) {
                                // achromatic
                                h = s = 0;
                        } else {
-                               var d = max - min;
+                               d = max - min;
                                s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
                                switch ( max ) {
                                        case r:
                 * @return      Array                   The RGB representation
                 */
                hslToRgb: function ( h, s, l ) {
-                       var r, g, b;
+                       var r, g, b, hue2rgb, q, p;
 
                        if ( s === 0 ) {
                                r = g = b = l; // achromatic
                        } else {
-                               var hue2rgb = function ( p, q, t ) {
+                               hue2rgb = function ( p, q, t ) {
                                        if ( t < 0 ) {
                                                t += 1;
                                        }
                                        return p;
                                };
 
-                               var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
-                               var p = 2 * l - q;
+                               q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+                               p = 2 * l - q;
                                r = hue2rgb( p, q, h + 1/3 );
                                g = hue2rgb( p, q, h );
                                b = hue2rgb( p, q, h - 1/3 );
index 063f260..9e532e5 100644 (file)
                                context = {
                                        config: {
                                                // callback function for before collapse
-                                               beforeCondense: function ( context ) {},
+                                               beforeCondense: function () {},
 
                                                // callback function for before expand
-                                               beforeExpand: function ( context ) {},
+                                               beforeExpand: function () {},
 
                                                // callback function for after collapse
-                                               afterCondense: function ( context ) {},
+                                               afterCondense: function () {},
 
                                                // callback function for after expand
-                                               afterExpand: function ( context ) {},
+                                               afterExpand: function () {},
 
                                                // Whether the field should expand to the left or the right -- defaults to left
                                                expandToLeft: true
index b7335ff..70bfc4e 100644 (file)
@@ -105,9 +105,7 @@ $.matchSrcSet = function ( devicePixelRatio, srcset ) {
                if ( bits.length > 1 && bits[1].charAt( bits[1].length - 1 ) === 'x' ) {
                        ratioStr = bits[1].substr( 0, bits[1].length - 1 );
                        ratio = parseFloat( ratioStr );
-                       if ( ratio > devicePixelRatio ) {
-                               // Too big, skip!
-                       } else if ( ratio > selectedRatio ) {
+                       if ( ratio <= devicePixelRatio && ratio > selectedRatio ) {
                                selectedRatio = ratio;
                                selectedSrc = src;
                        }
index f720e07..cda2765 100644 (file)
@@ -29,7 +29,7 @@
                                // non latin characters can make regex think a new word has begun: do not use \b
                                // http://stackoverflow.com/questions/3787072/regex-wordwrap-with-utf8-characters-in-js
                                // look for an occurrence of our pattern and store the starting position
-                               match = node.data.match( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
+                               match = node.data.match( new RegExp( '(^|\\s)' + $.escapeRE( pat ), 'i' ) );
                                if ( match ) {
                                        pos = match.index + match[1].length; // include length of any matched spaces
                                        // create the span wrapper for the matched text
index d4f3bb3..a86bf79 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery JavaScript Library v1.8.2
+ * jQuery JavaScript Library v1.8.3
  * http://jquery.com/
  *
  * Includes Sizzle.js
@@ -9,7 +9,7 @@
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: Thu Sep 20 2012 21:13:05 GMT-0400 (Eastern Daylight Time)
+ * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
  */
 (function( window, undefined ) {
 var
@@ -186,7 +186,7 @@ jQuery.fn = jQuery.prototype = {
        selector: "",
 
        // The current version of jQuery being used
-       jquery: "1.8.2",
+       jquery: "1.8.3",
 
        // The default length of a jQuery object is 0
        length: 0,
@@ -999,8 +999,10 @@ jQuery.Callbacks = function( options ) {
                                        (function add( args ) {
                                                jQuery.each( args, function( _, arg ) {
                                                        var type = jQuery.type( arg );
-                                                       if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) {
-                                                               list.push( arg );
+                                                       if ( type === "function" ) {
+                                                               if ( !options.unique || !self.has( arg ) ) {
+                                                                       list.push( arg );
+                                                               }
                                                        } else if ( arg && arg.length && type !== "string" ) {
                                                                // Inspect recursively
                                                                add( arg );
@@ -1253,24 +1255,23 @@ jQuery.support = (function() {
                clickFn,
                div = document.createElement("div");
 
-       // Preliminary tests
+       // Setup
        div.setAttribute( "className", "t" );
        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
 
+       // Support tests won't run in some limited or non-browser environments
        all = div.getElementsByTagName("*");
        a = div.getElementsByTagName("a")[ 0 ];
-       a.style.cssText = "top:1px;float:left;opacity:.5";
-
-       // Can't get basic test support
-       if ( !all || !all.length ) {
+       if ( !all || !a || !all.length ) {
                return {};
        }
 
-       // First batch of supports tests
+       // First batch of tests
        select = document.createElement("select");
        opt = select.appendChild( document.createElement("option") );
        input = div.getElementsByTagName("input")[ 0 ];
 
+       a.style.cssText = "top:1px;float:left;opacity:.5";
        support = {
                // IE strips leading whitespace when .innerHTML is used
                leadingWhitespace: ( div.firstChild.nodeType === 3 ),
@@ -1312,7 +1313,7 @@ jQuery.support = (function() {
                // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
                getSetAttribute: div.className !== "t",
 
-               // Tests for enctype support on a form(#6743)
+               // Tests for enctype support on a form (#6743)
                enctype: !!document.createElement("form").enctype,
 
                // Makes sure cloning an html5 element does not cause problems
@@ -2217,26 +2218,25 @@ jQuery.extend({
                },
                select: {
                        get: function( elem ) {
-                               var value, i, max, option,
-                                       index = elem.selectedIndex,
-                                       values = [],
+                               var value, option,
                                        options = elem.options,
-                                       one = elem.type === "select-one";
-
-                               // Nothing was selected
-                               if ( index < 0 ) {
-                                       return null;
-                               }
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one" || index < 0,
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length,
+                                       i = index < 0 ?
+                                               max :
+                                               one ? index : 0;
 
                                // Loop through all the selected options
-                               i = one ? index : 0;
-                               max = one ? index + 1 : options.length;
                                for ( ; i < max; i++ ) {
                                        option = options[ i ];
 
-                                       // Don't return options that are disabled or in a disabled optgroup
-                                       if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+                                       // oldIE doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+                                                       ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
 
                                                // Get the specific value for the option
                                                value = jQuery( option ).val();
@@ -2251,11 +2251,6 @@ jQuery.extend({
                                        }
                                }
 
-                               // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-                               if ( one && !values.length && options.length ) {
-                                       return jQuery( options[ index ] ).val();
-                               }
-
                                return values;
                        },
 
@@ -3233,7 +3228,7 @@ jQuery.removeEvent = document.removeEventListener ?
 
                if ( elem.detachEvent ) {
 
-                       // #8545, #7054, preventing memory leaks for custom events in IE6-8 –
+                       // #8545, #7054, preventing memory leaks for custom events in IE6-8
                        // detachEvent needed property on element, by name of that event, to properly expose it to GC
                        if ( typeof elem[ name ] === "undefined" ) {
                                elem[ name ] = null;
@@ -3725,7 +3720,8 @@ var cachedruns,
                                delete cache[ keys.shift() ];\r
                        }\r
 \r
-                       return (cache[ key ] = value);\r
+                       // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157)\r
+                       return (cache[ key + " " ] = value);\r
                }, cache );\r
        },\r
 \r
@@ -4259,13 +4255,13 @@ Expr = Sizzle.selectors = {
                },\r
 \r
                "CLASS": function( className ) {\r
-                       var pattern = classCache[ expando ][ className ];\r
-                       if ( !pattern ) {\r
-                               pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") );\r
-                       }\r
-                       return function( elem ) {\r
-                               return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );\r
-                       };\r
+                       var pattern = classCache[ expando ][ className + " " ];\r
+\r
+                       return pattern ||\r
+                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&\r
+                               classCache( className, function( elem ) {\r
+                                       return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );\r
+                               });\r
                },\r
 \r
                "ATTR": function( name, operator, check ) {\r
@@ -4511,7 +4507,7 @@ Expr = Sizzle.selectors = {
 \r
                "focus": function( elem ) {\r
                        var doc = elem.ownerDocument;\r
-                       return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);\r
+                       return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\r
                },\r
 \r
                "active": function( elem ) {\r
@@ -4519,11 +4515,11 @@ Expr = Sizzle.selectors = {
                },\r
 \r
                // Positional types\r
-               "first": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+               "first": createPositionalPseudo(function() {\r
                        return [ 0 ];\r
                }),\r
 \r
-               "last": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+               "last": createPositionalPseudo(function( matchIndexes, length ) {\r
                        return [ length - 1 ];\r
                }),\r
 \r
@@ -4531,14 +4527,14 @@ Expr = Sizzle.selectors = {
                        return [ argument < 0 ? argument + length : argument ];\r
                }),\r
 \r
-               "even": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+               "even": createPositionalPseudo(function( matchIndexes, length ) {\r
                        for ( var i = 0; i < length; i += 2 ) {\r
                                matchIndexes.push( i );\r
                        }\r
                        return matchIndexes;\r
                }),\r
 \r
-               "odd": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+               "odd": createPositionalPseudo(function( matchIndexes, length ) {\r
                        for ( var i = 1; i < length; i += 2 ) {\r
                                matchIndexes.push( i );\r
                        }\r
@@ -4659,7 +4655,9 @@ baseHasDuplicate = !hasDuplicate;
 // Document sorting and removing duplicates\r
 Sizzle.uniqueSort = function( results ) {\r
        var elem,\r
-               i = 1;\r
+               duplicates = [],\r
+               i = 1,\r
+               j = 0;\r
 \r
        hasDuplicate = baseHasDuplicate;\r
        results.sort( sortOrder );\r
@@ -4667,9 +4665,12 @@ Sizzle.uniqueSort = function( results ) {
        if ( hasDuplicate ) {\r
                for ( ; (elem = results[i]); i++ ) {\r
                        if ( elem === results[ i - 1 ] ) {\r
-                               results.splice( i--, 1 );\r
+                               j = duplicates.push( i );\r
                        }\r
                }\r
+               while ( j-- ) {\r
+                       results.splice( duplicates[ j ], 1 );\r
+               }\r
        }\r
 \r
        return results;\r
@@ -4680,8 +4681,9 @@ Sizzle.error = function( msg ) {
 };\r
 \r
 function tokenize( selector, parseOnly ) {\r
-       var matched, match, tokens, type, soFar, groups, preFilters,\r
-               cached = tokenCache[ expando ][ selector ];\r
+       var matched, match, tokens, type,\r
+               soFar, groups, preFilters,\r
+               cached = tokenCache[ expando ][ selector + " " ];\r
 \r
        if ( cached ) {\r
                return parseOnly ? 0 : cached.slice( 0 );\r
@@ -4696,7 +4698,8 @@ function tokenize( selector, parseOnly ) {
                // Comma and first run\r
                if ( !matched || (match = rcomma.exec( soFar )) ) {\r
                        if ( match ) {\r
-                               soFar = soFar.slice( match[0].length );\r
+                               // Don't consume trailing commas as valid\r
+                               soFar = soFar.slice( match[0].length ) || soFar;\r
                        }\r
                        groups.push( tokens = [] );\r
                }\r
@@ -4715,8 +4718,7 @@ function tokenize( selector, parseOnly ) {
                // Filters\r
                for ( type in Expr.filter ) {\r
                        if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\r
-                               // The last two arguments here are (context, xml) for backCompat\r
-                               (match = preFilters[ type ]( match, document, true ))) ) {\r
+                               (match = preFilters[ type ]( match ))) ) {\r
 \r
                                tokens.push( matched = new Token( match.shift() ) );\r
                                soFar = soFar.slice( matched.length );\r
@@ -4836,18 +4838,13 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
                postFinder = setMatcher( postFinder, postSelector );\r
        }\r
        return markFunction(function( seed, results, context, xml ) {\r
-               // Positional selectors apply to seed elements, so it is invalid to follow them with relative ones\r
-               if ( seed && postFinder ) {\r
-                       return;\r
-               }\r
-\r
-               var i, elem, postFilterIn,\r
+               var temp, i, elem,\r
                        preMap = [],\r
                        postMap = [],\r
                        preexisting = results.length,\r
 \r
                        // Get initial elements from seed or context\r
-                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [], seed ),\r
+                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),\r
 \r
                        // Prefilter to get matcher input, preserving a map for seed-results synchronization\r
                        matcherIn = preFilter && ( seed || !selector ) ?\r
@@ -4872,27 +4869,45 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
 \r
                // Apply postFilter\r
                if ( postFilter ) {\r
-                       postFilterIn = condense( matcherOut, postMap );\r
-                       postFilter( postFilterIn, [], context, xml );\r
+                       temp = condense( matcherOut, postMap );\r
+                       postFilter( temp, [], context, xml );\r
 \r
                        // Un-match failing elements by moving them back to matcherIn\r
-                       i = postFilterIn.length;\r
+                       i = temp.length;\r
                        while ( i-- ) {\r
-                               if ( (elem = postFilterIn[i]) ) {\r
+                               if ( (elem = temp[i]) ) {\r
                                        matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\r
                                }\r
                        }\r
                }\r
 \r
-               // Keep seed and results synchronized\r
                if ( seed ) {\r
-                       // Ignore postFinder because it can't coexist with seed\r
-                       i = preFilter && matcherOut.length;\r
-                       while ( i-- ) {\r
-                               if ( (elem = matcherOut[i]) ) {\r
-                                       seed[ preMap[i] ] = !(results[ preMap[i] ] = elem);\r
+                       if ( postFinder || preFilter ) {\r
+                               if ( postFinder ) {\r
+                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts\r
+                                       temp = [];\r
+                                       i = matcherOut.length;\r
+                                       while ( i-- ) {\r
+                                               if ( (elem = matcherOut[i]) ) {\r
+                                                       // Restore matcherIn since elem is not yet a final match\r
+                                                       temp.push( (matcherIn[i] = elem) );\r
+                                               }\r
+                                       }\r
+                                       postFinder( null, (matcherOut = []), temp, xml );\r
+                               }\r
+\r
+                               // Move matched elements from seed to results to keep them synchronized\r
+                               i = matcherOut.length;\r
+                               while ( i-- ) {\r
+                                       if ( (elem = matcherOut[i]) &&\r
+                                               (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\r
+\r
+                                               seed[temp] = !(results[temp] = elem);\r
+                                       }\r
                                }\r
                        }\r
+\r
+               // Add elements to results, through postFinder if defined\r
                } else {\r
                        matcherOut = condense(\r
                                matcherOut === results ?\r
@@ -4933,7 +4948,6 @@ function matcherFromTokens( tokens ) {
                if ( (matcher = Expr.relative[ tokens[i].type ]) ) {\r
                        matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\r
                } else {\r
-                       // The concatenated values are (context, xml) for backCompat\r
                        matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\r
 \r
                        // Return special upon seeing a positional matcher\r
@@ -5062,7 +5076,7 @@ compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
        var i,\r
                setMatchers = [],\r
                elementMatchers = [],\r
-               cached = compilerCache[ expando ][ selector ];\r
+               cached = compilerCache[ expando ][ selector + " " ];\r
 \r
        if ( !cached ) {\r
                // Generate a function of recursive functions that can be used to check each element\r
@@ -5085,11 +5099,11 @@ compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
        return cached;\r
 };\r
 \r
-function multipleContexts( selector, contexts, results, seed ) {\r
+function multipleContexts( selector, contexts, results ) {\r
        var i = 0,\r
                len = contexts.length;\r
        for ( ; i < len; i++ ) {\r
-               Sizzle( selector, contexts[i], results, seed );\r
+               Sizzle( selector, contexts[i], results );\r
        }\r
        return results;\r
 }\r
@@ -5167,15 +5181,14 @@ if ( document.querySelectorAll ) {
                        rescape = /'|\\/g,\r
                        rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,\r
 \r
-                       // qSa(:focus) reports false when true (Chrome 21),\r
+                       // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA\r
                        // A support test would require too much code (would include document ready)\r
-                       rbuggyQSA = [":focus"],\r
+                       rbuggyQSA = [ ":focus" ],\r
 \r
-                       // matchesSelector(:focus) reports false when true (Chrome 21),\r
                        // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\r
                        // A support test would require too much code (would include document ready)\r
                        // just skip matchesSelector for :active\r
-                       rbuggyMatches = [ ":active", ":focus" ],\r
+                       rbuggyMatches = [ ":active" ],\r
                        matches = docElem.matchesSelector ||\r
                                docElem.mozMatchesSelector ||\r
                                docElem.webkitMatchesSelector ||\r
@@ -5229,7 +5242,7 @@ if ( document.querySelectorAll ) {
                        // Only use querySelectorAll when not filtering,\r
                        // when this is not xml,\r
                        // and when no QSA bugs apply\r
-                       if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\r
+                       if ( !seed && !xml && !rbuggyQSA.test( selector ) ) {\r
                                var groups, i,\r
                                        old = true,\r
                                        nid = expando,\r
@@ -5298,7 +5311,7 @@ if ( document.querySelectorAll ) {
                                expr = expr.replace( rattributeQuotes, "='$1']" );\r
 \r
                                // rbuggyMatches always contains :active, so no need for an existence check\r
-                               if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) {\r
+                               if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {\r
                                        try {\r
                                                var ret = matches.call( elem, expr );\r
 \r
@@ -6533,7 +6546,7 @@ var curCSS, iframe, iframeDoc,
        rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
        rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
        rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
-       elemdisplay = {},
+       elemdisplay = { BODY: "block" },
 
        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
        cssNormalTransform = {
@@ -6814,7 +6827,9 @@ if ( window.getComputedStyle ) {
 
                if ( computed ) {
 
-                       ret = computed[ name ];
+                       // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+                       ret = computed.getPropertyValue( name ) || computed[ name ];
+
                        if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
                                ret = jQuery.style( elem, name );
                        }
@@ -7843,9 +7858,12 @@ jQuery.extend({
 
                // A cross-domain request is in order when we have a protocol:host:port mismatch
                if ( s.crossDomain == null ) {
-                       parts = rurl.exec( s.url.toLowerCase() ) || false;
-                       s.crossDomain = parts && ( parts.join(":") + ( parts[ 3 ] ? "" : parts[ 1 ] === "http:" ? 80 : 443 ) ) !==
-                               ( ajaxLocParts.join(":") + ( ajaxLocParts[ 3 ] ? "" : ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) );
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                       );
                }
 
                // Convert data if not already a string
@@ -8464,7 +8482,7 @@ if ( jQuery.support.ajax ) {
                                                                        // on any attempt to access responseText (#11426)
                                                                        try {
                                                                                responses.text = xhr.responseText;
-                                                                       } catch( _ ) {
+                                                                       } catch( e ) {
                                                                        }
 
                                                                        // Firefox throws an exception when accessing
@@ -8617,7 +8635,9 @@ function Animation( elem, properties, options ) {
                tick = function() {
                        var currentTime = fxNow || createFxNow(),
                                remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-                               percent = 1 - ( remaining / animation.duration || 0 ),
+                               // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+                               temp = remaining / animation.duration || 0,
+                               percent = 1 - temp,
                                index = 0,
                                length = animation.tweens.length;
 
@@ -8769,7 +8789,7 @@ jQuery.Animation = jQuery.extend( Animation, {
 });
 
 function defaultPrefilter( elem, props, opts ) {
-       var index, prop, value, length, dataShow, tween, hooks, oldfire,
+       var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
                anim = this,
                style = elem.style,
                orig = {},
@@ -8843,6 +8863,7 @@ function defaultPrefilter( elem, props, opts ) {
                value = props[ index ];
                if ( rfxtypes.exec( value ) ) {
                        delete props[ index ];
+                       toggle = toggle || value === "toggle";
                        if ( value === ( hidden ? "hide" : "show" ) ) {
                                continue;
                        }
@@ -8853,6 +8874,14 @@ function defaultPrefilter( elem, props, opts ) {
        length = handled.length;
        if ( length ) {
                dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+               if ( "hidden" in dataShow ) {
+                       hidden = dataShow.hidden;
+               }
+
+               // store state if its toggle - enables .stop().toggle() to "reverse"
+               if ( toggle ) {
+                       dataShow.hidden = !hidden;
+               }
                if ( hidden ) {
                        jQuery( elem ).show();
                } else {
@@ -9149,6 +9178,8 @@ jQuery.fx.tick = function() {
                timers = jQuery.timers,
                i = 0;
 
+       fxNow = jQuery.now();
+
        for ( ; i < timers.length; i++ ) {
                timer = timers[ i ];
                // Checks the timer has not already been removed
@@ -9160,6 +9191,7 @@ jQuery.fx.tick = function() {
        if ( !timers.length ) {
                jQuery.fx.stop();
        }
+       fxNow = undefined;
 };
 
 jQuery.fx.timer = function( timer ) {
index aac3428..75953f4 100644 (file)
 /**
- * jQuery JSON Plugin
- * version: 2.3 (2011-09-17)
+ * jQuery JSON plugin 2.4.0
  *
- * This document is licensed as free software under the terms of the
- * MIT License: http://www.opensource.org/licenses/mit-license.php
- *
- * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
- * website's http://www.json.org/json2.js, which proclaims:
- * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
- * I uphold.
- *
- * It is also influenced heavily by MochiKit's serializeJSON, which is
- * copyrighted 2005 by Bob Ippolito.
+ * @author Brantley Harris, 2009-2011
+ * @author Timo Tijhof, 2011-2012
+ * @source This plugin is heavily influenced by MochiKit's serializeJSON, which is
+ *         copyrighted 2005 by Bob Ippolito.
+ * @source Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
+ *         website's http://www.json.org/json2.js, which proclaims:
+ *         "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
+ *         I uphold.
+ * @license MIT License <http://www.opensource.org/licenses/mit-license.php>
  */
+(function ($) {
+       'use strict';
 
-(function( $ ) {
-
-       var     escapeable = /["\\\x00-\x1f\x7f-\x9f]/g,
-                       meta = {
-                               '\b': '\\b',
-                               '\t': '\\t',
-                               '\n': '\\n',
-                               '\f': '\\f',
-                               '\r': '\\r',
-                               '"' : '\\"',
-                               '\\': '\\\\'
-                       };
+       var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
+               meta = {
+                       '\b': '\\b',
+                       '\t': '\\t',
+                       '\n': '\\n',
+                       '\f': '\\f',
+                       '\r': '\\r',
+                       '"' : '\\"',
+                       '\\': '\\\\'
+               },
+               hasOwn = Object.prototype.hasOwnProperty;
 
        /**
         * jQuery.toJSON
-        * Converts the given argument into a JSON respresentation.
+        * Converts the given argument into a JSON representation.
         *
-        * @param o {Mixed} The json-serializble *thing* to be converted
+        * @param o {Mixed} The json-serializable *thing* to be converted
         *
         * If an object has a toJSON prototype, that will be used to get the representation.
         * Non-integer/string keys are skipped in the object, as are keys that point to a
         * function.
         *
         */
-       $.toJSON = typeof JSON === 'object' && JSON.stringify
-                       ? JSON.stringify
-                       : function( o ) {
-
-               if ( o === null ) {
+       $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
+               if (o === null) {
                        return 'null';
                }
 
-               var type = typeof o;
+               var pairs, k, name, val,
+                       type = $.type(o);
 
-               if ( type === 'undefined' ) {
+               if (type === 'undefined') {
                        return undefined;
                }
-               if ( type === 'number' || type === 'boolean' ) {
-                       return '' + o;
+
+               // Also covers instantiated Number and Boolean objects,
+               // which are typeof 'object' but thanks to $.type, we
+               // catch them here. I don't know whether it is right
+               // or wrong that instantiated primitives are not
+               // exported to JSON as an {"object":..}.
+               // We choose this path because that's what the browsers did.
+               if (type === 'number' || type === 'boolean') {
+                       return String(o);
                }
-               if ( type === 'string') {
-                       return $.quoteString( o );
+               if (type === 'string') {
+                       return $.quoteString(o);
                }
-               if ( type === 'object' ) {
-                       if ( typeof o.toJSON === 'function' ) {
-                               return $.toJSON( o.toJSON() );
-                       }
-                       if ( o.constructor === Date ) {
-                               var     month = o.getUTCMonth() + 1,
-                                               day = o.getUTCDate(),
-                                               year = o.getUTCFullYear(),
-                                               hours = o.getUTCHours(),
-                                               minutes = o.getUTCMinutes(),
-                                               seconds = o.getUTCSeconds(),
-                                               milli = o.getUTCMilliseconds();
+               if (typeof o.toJSON === 'function') {
+                       return $.toJSON(o.toJSON());
+               }
+               if (type === 'date') {
+                       var month = o.getUTCMonth() + 1,
+                               day = o.getUTCDate(),
+                               year = o.getUTCFullYear(),
+                               hours = o.getUTCHours(),
+                               minutes = o.getUTCMinutes(),
+                               seconds = o.getUTCSeconds(),
+                               milli = o.getUTCMilliseconds();
 
-                               if ( month < 10 ) {
-                                       month = '0' + month;
-                               }
-                               if ( day < 10 ) {
-                                       day = '0' + day;
-                               }
-                               if ( hours < 10 ) {
-                                       hours = '0' + hours;
-                               }
-                               if ( minutes < 10 ) {
-                                       minutes = '0' + minutes;
-                               }
-                               if ( seconds < 10 ) {
-                                       seconds = '0' + seconds;
-                               }
-                               if ( milli < 100 ) {
-                                       milli = '0' + milli;
-                               }
-                               if ( milli < 10 ) {
-                                       milli = '0' + milli;
-                               }
-                               return '"' + year + '-' + month + '-' + day + 'T' +
-                                               hours + ':' + minutes + ':' + seconds +
-                                               '.' + milli + 'Z"';
+                       if (month < 10) {
+                               month = '0' + month;
                        }
-                       if ( o.constructor === Array ) {
-                               var ret = [];
-                               for ( var i = 0; i < o.length; i++ ) {
-                                       ret.push( $.toJSON( o[i] ) || 'null' );
-                               }
-                               return '[' + ret.join(',') + ']';
+                       if (day < 10) {
+                               day = '0' + day;
+                       }
+                       if (hours < 10) {
+                               hours = '0' + hours;
+                       }
+                       if (minutes < 10) {
+                               minutes = '0' + minutes;
+                       }
+                       if (seconds < 10) {
+                               seconds = '0' + seconds;
+                       }
+                       if (milli < 100) {
+                               milli = '0' + milli;
+                       }
+                       if (milli < 10) {
+                               milli = '0' + milli;
+                       }
+                       return '"' + year + '-' + month + '-' + day + 'T' +
+                               hours + ':' + minutes + ':' + seconds +
+                               '.' + milli + 'Z"';
+               }
+
+               pairs = [];
+
+               if ($.isArray(o)) {
+                       for (k = 0; k < o.length; k++) {
+                               pairs.push($.toJSON(o[k]) || 'null');
                        }
-                       var     name,
-                                       val,
-                                       pairs = [];
-                       for ( var k in o ) {
-                               type = typeof k;
-                               if ( type === 'number' ) {
-                                       name = '"' + k + '"';
-                               } else if (type === 'string') {
-                                       name = $.quoteString(k);
-                               } else {
+                       return '[' + pairs.join(',') + ']';
+               }
+
+               // Any other object (plain object, RegExp, ..)
+               // Need to do typeof instead of $.type, because we also
+               // want to catch non-plain objects.
+               if (typeof o === 'object') {
+                       for (k in o) {
+                               // Only include own properties,
+                               // Filter out inherited prototypes
+                               if (hasOwn.call(o, k)) {
                                        // Keys must be numerical or string. Skip others
-                                       continue;
-                               }
-                               type = typeof o[k];
+                                       type = typeof k;
+                                       if (type === 'number') {
+                                               name = '"' + k + '"';
+                                       } else if (type === 'string') {
+                                               name = $.quoteString(k);
+                                       } else {
+                                               continue;
+                                       }
+                                       type = typeof o[k];
 
-                               if ( type === 'function' || type === 'undefined' ) {
                                        // Invalid values like these return undefined
                                        // from toJSON, however those object members
                                        // shouldn't be included in the JSON string at all.
-                                       continue;
+                                       if (type !== 'function' && type !== 'undefined') {
+                                               val = $.toJSON(o[k]);
+                                               pairs.push(name + ':' + val);
+                                       }
                                }
-                               val = $.toJSON( o[k] );
-                               pairs.push( name + ':' + val );
                        }
-                       return '{' + pairs.join( ',' ) + '}';
+                       return '{' + pairs.join(',') + '}';
                }
        };
 
        /**
         * jQuery.evalJSON
-        * Evaluates a given piece of json source.
+        * Evaluates a given json string.
         *
-        * @param src {String}
+        * @param str {String}
         */
-       $.evalJSON = typeof JSON === 'object' && JSON.parse
-                       ? JSON.parse
-                       : function( src ) {
-               return eval('(' + src + ')');
+       $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
+               /*jshint evil: true */
+               return eval('(' + str + ')');
        };
 
        /**
         * jQuery.secureEvalJSON
         * Evals JSON in a way that is *more* secure.
         *
-        * @param src {String}
+        * @param str {String}
         */
-       $.secureEvalJSON = typeof JSON === 'object' && JSON.parse
-                       ? JSON.parse
-                       : function( src ) {
-
+       $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
                var filtered =
-                               src
-                                               .replace( /\\["\\\/bfnrtu]/g, '@' )
-                                               .replace( /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
-                                               .replace( /(?:^|:|,)(?:\s*\[)+/g, '');
+                       str
+                       .replace(/\\["\\\/bfnrtu]/g, '@')
+                       .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
+                       .replace(/(?:^|:|,)(?:\s*\[)+/g, '');
 
-               if ( /^[\],:{}\s]*$/.test( filtered ) ) {
-                       return eval( '(' + src + ')' );
-               } else {
-                       throw new SyntaxError( 'Error parsing JSON, source is not valid.' );
+               if (/^[\],:{}\s]*$/.test(filtered)) {
+                       /*jshint evil: true */
+                       return eval('(' + str + ')');
                }
+               throw new SyntaxError('Error parsing JSON, source is not valid.');
        };
 
        /**
         * >>> jQuery.quoteString('"Where are we going?", she asked.')
         * "\"Where are we going?\", she asked."
         */
-       $.quoteString = function( string ) {
-               if ( string.match( escapeable ) ) {
-                       return '"' + string.replace( escapeable, function( a ) {
+       $.quoteString = function (str) {
+               if (str.match(escape)) {
+                       return '"' + str.replace(escape, function (a) {
                                var c = meta[a];
-                               if ( typeof c === 'string' ) {
+                               if (typeof c === 'string') {
                                        return c;
                                }
                                c = a.charCodeAt();
                                return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
                        }) + '"';
                }
-               return '"' + string + '"';
+               return '"' + str + '"';
        };
 
-})( jQuery );
+}(jQuery));
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 36b6690..e286834 100644 (file)
@@ -1,12 +1,12 @@
 /**
  * JavaScript to show jump links to motor-impaired users when they are focused.
  */
-jQuery( function( $ ) {
+jQuery( function ( $ ) {
 
-       $('.mw-jump').delegate( 'a', 'focus blur', function( e ) {
-               // Confusingly jQuery leaves e.type as "focusout" for delegated blur events
-               if ( e.type === "blur" || e.type === "focusout" ) {
-                       $( this ).closest( '.mw-jump' ).css({ height: '0' });
+       $( '.mw-jump' ).on( 'focus blur', 'a', function ( e ) {
+               // Confusingly jQuery leaves e.type as focusout for delegated blur events
+               if ( e.type === 'blur' || e.type === 'focusout' ) {
+                       $( this ).closest( '.mw-jump' ).css({ height: 0 });
                } else {
                        $( this ).closest( '.mw-jump' ).css({ height: 'auto' });
                }
index bbffd7b..de39978 100644 (file)
                        return str.charAt( 0 ).toUpperCase() + str.substr( 1 );
                },
                escapeRE: function ( str ) {
-                       return str.replace ( /([\\{}()|.?*+\-\^$\[\]])/g, "\\$1" );
+                       return str.replace ( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
                },
                isDomElement: function ( el ) {
                        return !!el && !!el.nodeType;
                },
                isEmpty: function ( v ) {
+                       var key;
                        if ( v === '' || v === 0 || v === '0' || v === null
                                || v === false || v === undefined )
                        {
@@ -32,7 +33,7 @@
                                return true;
                        }
                        if ( typeof v === 'object' ) {
-                               for ( var key in v ) {
+                               for ( key in v ) {
                                        return false;
                                }
                                return true;
index 1475af2..ef28948 100644 (file)
@@ -15,7 +15,7 @@
 /*global jQuery, QUnit */
 /*jshint eqeqeq:false, eqnull:false, forin:false */
 ( function ( $ ) {
-       "use strict";
+       'use strict';
 
        var util,
                hasOwn = Object.prototype.hasOwnProperty,
index d80680f..ac579db 100644 (file)
  *
  * Options:
  *
- * fetch(query): Callback that should fetch suggestions and set the suggestions property. Executed in the context of the
- *             textbox
+ * fetch(query): Callback that should fetch suggestions and set the suggestions property.
+ *      Executed in the context of the textbox
  *             Type: Function
- * cancel: Callback function to call when any pending asynchronous suggestions fetches should be canceled.
- *             Executed in the context of the textbox
+ * cancel: Callback function to call when any pending asynchronous suggestions fetches
+ *      should be canceled. Executed in the context of the textbox
  *             Type: Function
  * special: Set of callbacks for rendering and selecting
  *             Type: Object of Functions 'render' and 'select'
  *             Type: Number, Range: 0 - 1200, Default: 120
  * submitOnClick: Whether to submit the form containing the textbox when a suggestion is clicked
  *             Type: Boolean, Default: false
- * maxExpandFactor: Maximum suggestions box width relative to the textbox width. If set to e.g. 2, the suggestions box
- *             will never be grown beyond 2 times the width of the textbox.
+ * maxExpandFactor: Maximum suggestions box width relative to the textbox width. If set
+ *      to e.g. 2, the suggestions box will never be grown beyond 2 times the width of the textbox.
  *             Type: Number, Range: 1 - infinity, Default: 3
  * expandFrom: Which direction to offset the suggestion box from.
- *      Values 'start' and 'end' translate to left and right respectively depending on the directionality
- *      of the current document, according to $( 'html' ).css( 'direction' ).
+ *      Values 'start' and 'end' translate to left and right respectively depending on the
+ *      directionality of the current document, according to $( 'html' ).css( 'direction' ).
  *      Type: String, default: 'auto', options: 'left', 'right', 'start', 'end', 'auto'.
  * positionFromLeft: Sets expandFrom=left, for backwards compatibility
  *             Type: Boolean, Default: true
@@ -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 ) {
@@ -60,18 +60,22 @@ $.suggestions = {
                        context.config.cancel.call( context.data.$textbox );
                }
        },
+
        /**
-        * Restore the text the user originally typed in the textbox, before it was overwritten by highlight(). This
-        * restores the value the currently displayed suggestions are based on, rather than the value just before
+        * Restore the text the user originally typed in the textbox, before it
+        * was overwritten by highlight(). This restores the value the currently
+        * displayed suggestions are based on, rather than the value just before
         * highlight() overwrote it; the former is arguably slightly more sensible.
         */
        restore: function ( context ) {
                context.data.$textbox.val( context.data.prevText );
        },
+
        /**
-        * Ask the user-specified callback for new suggestions. Any previous delayed call to this function still pending
-        * will be canceled. If the value in the textbox is empty or hasn't changed since the last time suggestions were fetched, this
-        * function does nothing.
+        * Ask the user-specified callback for new suggestions. Any previous delayed
+        * call to this function still pending will be canceled. If the value in the
+        * textbox is empty or hasn't changed since the last time suggestions were fetched,
+        * this function does nothing.
         * @param {Boolean} delayed Whether or not to delay this by the currently configured amount of time
         */
        update: function ( context, delayed ) {
@@ -89,18 +93,19 @@ $.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();
                }
                $.suggestions.special( context );
        },
+
        special: function ( context ) {
                // Allow custom rendering - but otherwise don't do any rendering
                if ( typeof context.config.special.render === 'function' ) {
@@ -112,13 +117,17 @@ $.suggestions = {
                        }, 1 );
                }
        },
+
        /**
         * Sets the value of a property, and updates the widget accordingly
         * @param property String Name of property
         * @param value Mixed Value to set property with
         */
        configure: function ( context, property, value ) {
-               var newCSS;
+               var newCSS,
+                       $autoEllipseMe, $result, $results, $span,
+                       i, expWidth, matchedText, maxWidth, text;
+
                // Validate creation using fallback values
                switch( property ) {
                        case 'fetch':
@@ -212,22 +221,24 @@ $.suggestions = {
                                                }
 
                                                context.data.$container.css( newCSS );
-                                               var $results = context.data.$container.children( '.suggestions-results' );
+                                               $results = context.data.$container.children( '.suggestions-results' );
                                                $results.empty();
-                                               var expWidth = -1;
-                                               var $autoEllipseMe = $( [] );
-                                               var matchedText = null;
-                                               for ( var i = 0; i < context.config.suggestions.length; i++ ) {
+                                               expWidth = -1;
+                                               $autoEllipseMe = $( [] );
+                                               matchedText = null;
+                                               for ( i = 0; i < context.config.suggestions.length; i++ ) {
                                                        /*jshint loopfunc:true */
-                                                       var text = context.config.suggestions[i];
-                                                       var $result = $( '<div>' )
+                                                       text = context.config.suggestions[i];
+                                                       $result = $( '<div>' )
                                                                .addClass( 'suggestions-result' )
                                                                .attr( 'rel', i )
                                                                .data( 'text', context.config.suggestions[i] )
-                                                               .mousemove( function ( e ) {
+                                                               .mousemove( function () {
                                                                        context.data.selectedWithMouse = true;
                                                                        $.suggestions.highlight(
-                                                                               context, $(this).closest( '.suggestions-results div' ), false
+                                                                               context,
+                                                                               $(this).closest( '.suggestions-results div' ),
+                                                                               false
                                                                        );
                                                                } )
                                                                .appendTo( $results );
@@ -246,7 +257,7 @@ $.suggestions = {
 
                                                                // Widen results box if needed
                                                                // New width is only calculated here, applied later
-                                                               var $span = $result.children( 'span' );
+                                                               $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());
@@ -256,11 +267,15 @@ $.suggestions = {
                                                }
                                                // Apply new width for results box, if any
                                                if ( expWidth > context.data.$container.width() ) {
-                                                       var maxWidth = context.config.maxExpandFactor*context.data.$textbox.width();
+                                                       maxWidth = context.config.maxExpandFactor*context.data.$textbox.width();
                                                        context.data.$container.width( Math.min( expWidth, maxWidth ) );
                                                }
                                                // autoEllipse the results. Has to be done after changing the width
-                                               $autoEllipseMe.autoEllipsis( { hasSpan: true, tooltip: true, matchText: matchedText } );
+                                               $autoEllipseMe.autoEllipsis( {
+                                                       hasSpan: true,
+                                                       tooltip: true,
+                                                       matchText: matchedText
+                                               } );
                                        }
                                }
                                break;
@@ -280,6 +295,7 @@ $.suggestions = {
                                break;
                }
        },
+
        /**
         * Highlight a result in the results table
         * @param result <tr> to highlight: jQuery object, or 'prev' or 'next'
@@ -338,13 +354,16 @@ $.suggestions = {
                        context.data.$textbox.trigger( 'change' );
                }
        },
+
        /**
         * Respond to keypress event
         * @param key Integer Code of key pressed
         */
        keypress: function ( e, context, key ) {
-               var wasVisible = context.data.$container.is( ':visible' ),
+               var selected,
+                       wasVisible = context.data.$container.is( ':visible' ),
                        preventDefault = false;
+
                switch ( key ) {
                        // Arrow down
                        case 40:
@@ -376,7 +395,7 @@ $.suggestions = {
                        case 13:
                                context.data.$container.hide();
                                preventDefault = wasVisible;
-                               var selected = context.data.$container.find( '.suggestions-result-current' );
+                               selected = context.data.$container.find( '.suggestions-result-current' );
                                if ( selected.length === 0 || context.data.selectedWithMouse ) {
                                        // if nothing is selected OR if something was selected with the mouse,
                                        // cancel any current requests and submit the form
@@ -420,18 +439,18 @@ $.fn.suggestions = function () {
                if ( context === undefined || context === null ) {
                        context = {
                                config: {
-                                       'fetch' : function () {},
-                                       'cancel': function () {},
-                                       'special': {},
-                                       'result': {},
-                                       '$region': $(this),
-                                       'suggestions': [],
-                                       'maxRows': 7,
-                                       'delay': 120,
-                                       'submitOnClick': false,
-                                       'maxExpandFactor': 3,
-                                       'expandFrom': 'auto',
-                                       'highlightInput': false
+                                       fetch: function () {},
+                                       cancel: function () {},
+                                       special: {},
+                                       result: {},
+                                       $region: $(this),
+                                       suggestions: [],
+                                       maxRows: 7,
+                                       delay: 120,
+                                       submitOnClick: false,
+                                       maxExpandFactor: 3,
+                                       expandFrom: 'auto',
+                                       highlightInput: false
                                }
                        };
                }
@@ -480,14 +499,16 @@ $.fn.suggestions = function () {
                                .addClass( 'suggestions' )
                                .append(
                                        $( '<div>' ).addClass( 'suggestions-results' )
-                                               // Can't use click() because the container div is hidden when the textbox loses focus. Instead,
-                                               // listen for a mousedown followed by a mouseup on the same div
+                                               // Can't use click() because the container div is hidden when the
+                                               // 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' );
                                                } )
                                                .mouseup( function ( e ) {
-                                                       var $result = $( e.target ).closest( '.suggestions-results div' );
-                                                       var $other = context.data.mouseDownOn;
+                                                       var $result = $( e.target ).closest( '.suggestions-results div' ),
+                                                               $other = context.data.mouseDownOn;
+
                                                        context.data.mouseDownOn = $( [] );
                                                        if ( $result.get( 0 ) !== $other.get( 0 ) ) {
                                                                return;
@@ -502,14 +523,16 @@ $.fn.suggestions = function () {
                                )
                                .append(
                                        $( '<div>' ).addClass( 'suggestions-special' )
-                                               // Can't use click() because the container div is hidden when the textbox loses focus. Instead,
-                                               // listen for a mousedown followed by a mouseup on the same div
+                                               // Can't use click() because the container div is hidden when the
+                                               // 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-special' );
                                                } )
                                                .mouseup( function ( e ) {
-                                                       var $special = $( e.target ).closest( '.suggestions-special' );
-                                                       var $other = context.data.mouseDownOn;
+                                                       var $special = $( e.target ).closest( '.suggestions-special' ),
+                                                               $other = context.data.mouseDownOn;
+
                                                        context.data.mouseDownOn = $( [] );
                                                        if ( $special.get( 0 ) !== $other.get( 0 ) ) {
                                                                return;
index 75dd2f1..6297f9a 100644 (file)
@@ -67,6 +67,7 @@
  */
 
 ( function ( $, mw ) {
+       /*jshint onevar:false */
 
        /* Local scope */
 
                        }
 
                        if ( !this.sortDisabled ) {
-                               var $th = $( this ).addClass( table.config.cssHeader ).attr( 'title', msg[1] );
+                               $( this ).addClass( table.config.cssHeader ).attr( 'title', msg[1] );
                        }
 
                        // add cell to headerList
                return false;
        }
 
-       function setHeadersCss( table, $headers, list, css, msg ) {
+       function setHeadersCss( table, $headers, list, css, msg, columnToHeader ) {
                // Remove all header information and reset titles to default message
                $headers.removeClass( css[0] ).removeClass( css[1] ).attr( 'title', msg[1] );
 
-               var h = [];
-               $headers.each( function ( offset ) {
-                       if ( !this.sortDisabled ) {
-                               h[this.column] = $( this );
-                       }
-               } );
-
-               var l = list.length;
-               for ( var i = 0; i < l; i++ ) {
-                       h[ list[i][0] ].addClass( css[ list[i][1] ] ).attr( 'title', msg[ list[i][1] ] );
+               for ( var i = 0; i < list.length; i++ ) {
+                       $headers.eq( columnToHeader[ list[i][0] ] )
+                               .addClass( css[ list[i][1] ] )
+                               .attr( 'title', msg[ list[i][1] ] );
                }
        }
 
                        ts.transformTable = {};
 
                        // Unpack the transform table
-                       var ascii = separatorTransformTable[0].split( "\t" ).concat( digitTransformTable[0].split( "\t" ) );
-                       var localised = separatorTransformTable[1].split( "\t" ).concat( digitTransformTable[1].split( "\t" ) );
+                       var ascii = separatorTransformTable[0].split( '\t' ).concat( digitTransformTable[0].split( '\t' ) );
+                       var localised = separatorTransformTable[1].split( '\t' ).concat( digitTransformTable[1].split( '\t' ) );
 
                        // Construct regex for number identification
                        for ( var i = 0; i < ascii.length; i++ ) {
 
                // We allow a trailing percent sign, which we just strip. This works fine
                // if percents and regular numbers aren't being mixed.
-               ts.numberRegex = new RegExp("^(" + "[-+\u2212]?[0-9][0-9,]*(\\.[0-9,]*)?(E[-+\u2212]?[0-9][0-9,]*)?" + // Fortran-style scientific
-               "|" + "[-+\u2212]?" + digitClass + "+[\\s\\xa0]*%?" + // Generic localised
-               ")$", "i");
+               ts.numberRegex = new RegExp('^(' + '[-+\u2212]?[0-9][0-9,]*(\\.[0-9,]*)?(E[-+\u2212]?[0-9][0-9,]*)?' + // Fortran-style scientific
+               '|' + '[-+\u2212]?' + digitClass + '+[\\s\\xa0]*%?' + // Generic localised
+               ')$', 'i');
        }
 
        function buildDateTable() {
                        construct: function ( $tables, settings ) {
                                return $tables.each( function ( i, table ) {
                                        // Declare and cache.
-                                       var $document, $headers, cache, config, sortOrder,
+                                       var $headers, cache, config,
+                                               headerToColumns, columnToHeader, colspanOffset,
                                                $table = $( table ),
-                                               shiftDown = 0;
+                                               firstTime = true;
 
                                        // Quit if no tbody
                                        if ( !table.tBodies ) {
                                                        return;
                                                }
                                        }
-                                       $table.addClass( "jquery-tablesorter" );
+                                       $table.addClass( 'jquery-tablesorter' );
 
                                        // FIXME config should probably not be stored in the plain table node
                                        // New config object.
                                        // performance improvements in some browsers.
                                        cacheRegexs();
 
-                                       // Legacy fix of .sortbottoms
-                                       // Wrap them inside inside a tfoot (because that's what they actually want to be) &
-                                       // and put the <tfoot> at the end of the <table>
-                                       var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
-                                       if ( $sortbottoms.length ) {
-                                               var $tfoot = $table.children( 'tfoot' );
-                                               if ( $tfoot.length ) {
-                                                       $tfoot.eq(0).prepend( $sortbottoms );
-                                               } else {
-                                                       $table.append( $( '<tfoot>' ).append( $sortbottoms ) );
+                                       function setupForFirstSort() {
+                                               firstTime = false;
+
+                                               // Legacy fix of .sortbottoms
+                                               // Wrap them inside inside a tfoot (because that's what they actually want to be) &
+                                               // and put the <tfoot> at the end of the <table>
+                                               var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
+                                               if ( $sortbottoms.length ) {
+                                                       var $tfoot = $table.children( 'tfoot' );
+                                                       if ( $tfoot.length ) {
+                                                               $tfoot.eq(0).prepend( $sortbottoms );
+                                                       } else {
+                                                               $table.append( $( '<tfoot>' ).append( $sortbottoms ) );
+                                                       }
                                                }
-                                       }
 
-                                       explodeRowspans( $table );
+                                               explodeRowspans( $table );
+
+                                               // try to auto detect column type, and store in tables config
+                                               table.config.parsers = buildParserCache( table, $headers );
+                                       }
 
-                                       // try to auto detect column type, and store in tables config
-                                       table.config.parsers = buildParserCache( table, $headers );
+                                       // as each header can span over multiple columns (using colspan=N),
+                                       // we have to bidirectionally map headers to their columns and columns to their headers
+                                       headerToColumns = [];
+                                       columnToHeader = [];
+                                       colspanOffset = 0;
+                                       $headers.each( function ( headerIndex ) {
+                                               var columns = [];
+                                               for ( var i = 0; i < this.colSpan; i++ ) {
+                                                       columnToHeader[ colspanOffset + i ] = headerIndex;
+                                                       columns.push( colspanOffset + i );
+                                               }
 
-                                       // initially build the cache for the tbody cells (to be able to sort initially)
-                                       cache = buildCache( table );
+                                               headerToColumns[ headerIndex ] = columns;
+                                               colspanOffset += this.colSpan;
+                                       } );
 
                                        // Apply event handling to headers
                                        // this is too big, perhaps break it out?
                                                        return true;
                                                }
 
+                                               if ( firstTime ) {
+                                                       setupForFirstSort();
+                                               }
+
                                                // Build the cache for the tbody cells
                                                // to share between calculations for this sort action.
                                                // Re-calculated each time a sort action is performed due to possiblity
 
                                                var totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
                                                if ( !table.sortDisabled && totalRows > 0 ) {
-
-                                                       // Cache jQuery object
-                                                       var $cell = $( this );
-
-                                                       // Get current column index
-                                                       var i = this.column;
-
                                                        // Get current column sort order
                                                        this.order = this.count % 2;
                                                        this.count++;
 
-                                                       // User only wants to sort on one column
-                                                       if ( !e[config.sortMultiSortKey] ) {
-                                                               // Flush the sort list
-                                                               config.sortList = [];
-                                                               // Add column to sort list
-                                                               config.sortList.push( [i, this.order] );
+                                                       var cell = this;
+                                                       // Get current column index
+                                                       var columns = headerToColumns[this.column];
+                                                       var newSortList = $.map( columns, function (c) {
+                                                               // jQuery "helpfully" flattens the arrays...
+                                                               return [[c, cell.order]];
+                                                       });
+                                                       // Index of first column belonging to this header
+                                                       var i = columns[0];
 
-                                                       // Multi column sorting
+                                                       if ( !e[config.sortMultiSortKey] ) {
+                                                               // User only wants to sort on one column set
+                                                               // Flush the sort list and add new columns
+                                                               config.sortList = newSortList;
                                                        } else {
-                                                               // The user has clicked on an already sorted column.
+                                                               // Multi column sorting
+                                                               // It is not possible for one column to belong to multiple headers,
+                                                               // so this is okay - we don't need to check for every value in the columns array
                                                                if ( isValueInArray( i, config.sortList ) ) {
+                                                                       // The user has clicked on an already sorted column.
                                                                        // Reverse the sorting direction for all tables.
                                                                        for ( var j = 0; j < config.sortList.length; j++ ) {
                                                                                var s = config.sortList[j],
                                                                                        o = config.headerList[s[0]];
-                                                                               if ( s[0] === i ) {
+                                                                               if ( isValueInArray( s[0], newSortList ) ) {
                                                                                        o.count = s[1];
                                                                                        o.count++;
                                                                                        s[1] = o.count % 2;
                                                                                }
                                                                        }
                                                                } else {
-                                                                       // Add column to sort list array
-                                                                       config.sortList.push( [i, this.order] );
+                                                                       // Add columns to sort list array
+                                                                       config.sortList = config.sortList.concat( newSortList );
                                                                }
                                                        }
 
                                                        // Set CSS for headers
-                                                       setHeadersCss( $table[0], $headers, config.sortList, sortCSS, sortMsg );
+                                                       setHeadersCss( $table[0], $headers, config.sortList, sortCSS, sortMsg, columnToHeader );
                                                        appendToTable(
                                                                $table[0], multisort( $table[0], config.sortList, cache )
                                                        );
                                         */
                                        $table.data( 'tablesorter' ).sort = function( sortList ) {
 
+                                               if ( firstTime ) {
+                                                       setupForFirstSort();
+                                               }
+
                                                if ( sortList === undefined ) {
                                                        sortList = config.sortList;
                                                } else if ( sortList.length > 0 ) {
                                                cache = buildCache( table );
 
                                                // set css for headers
-                                               setHeadersCss( table, $headers, sortList, sortCSS, sortMsg );
+                                               setHeadersCss( table, $headers, sortList, sortCSS, sortMsg, columnToHeader );
 
                                                // sort the table and append it to the dom
                                                appendToTable( table, multisort( table, sortList, cache ) );
 
                                        // sort initially
                                        if ( config.sortList.length > 0 ) {
-                                               explodeRowspans( $table );
+                                               setupForFirstSort();
                                                config.sortList = convertSortList( config.sortList );
                                                $table.data( 'tablesorter' ).sort();
                                        }
                        },
 
                        formatDigit: function ( s ) {
+                               var out, c, p, i;
                                if ( ts.transformTable !== false ) {
-                                       var out = '',
-                                               c;
-                                       for ( var p = 0; p < s.length; p++ ) {
+                                       out = '';
+                                       for ( p = 0; p < s.length; p++ ) {
                                                c = s.charAt(p);
                                                if ( c in ts.transformTable ) {
                                                        out += ts.transformTable[c];
                                        }
                                        s = out;
                                }
-                               var i = parseFloat( s.replace( /[, ]/g, '' ).replace( "\u2212", '-' ) );
-                               return ( isNaN(i)) ? 0 : i;
+                               i = parseFloat( s.replace( /[, ]/g, '' ).replace( '\u2212', '-' ) );
+                               return isNaN( i ) ? 0 : i;
                        },
 
                        formatFloat: function ( s ) {
                                var i = parseFloat(s);
-                               return ( isNaN(i)) ? 0 : i;
+                               return isNaN( i ) ? 0 : i;
                        },
 
                        formatInt: function ( s ) {
                                var i = parseInt( s, 10 );
-                               return ( isNaN(i)) ? 0 : i;
+                               return isNaN( i ) ? 0 : i;
                        },
 
                        clearTableBody: function ( table ) {
-                               if ( $.browser.msie ) {
-                                       var empty = function ( el ) {
-                                               while ( el.firstChild ) {
-                                                       el.removeChild( el.firstChild );
-                                               }
-                                       };
-                                       empty( table.tBodies[0] );
-                               } else {
-                                       table.tBodies[0].innerHTML = '';
-                               }
+                               $( table.tBodies[0] ).empty();
                        }
                };
 
        // Add default parsers
        ts.addParser( {
                id: 'text',
-               is: function ( s ) {
+               is: function () {
                        return true;
                },
                format: function ( s ) {
                is: function ( s ) {
                        return ( ts.dateRegex[0].test(s) || ts.dateRegex[1].test(s) || ts.dateRegex[2].test(s ));
                },
-               format: function ( s, table ) {
+               format: function ( s ) {
                        var match;
                        s = $.trim( s.toLowerCase() );
 
                                        s = [ match[3], match[1], match[2] ];
                                } else if ( mw.config.get( 'wgDefaultDateFormat' ) === 'dmy' ) {
                                        s = [ match[3], match[2], match[1] ];
+                               } else {
+                                       // If we get here, we don't know which order the dd-dd-dddd
+                                       // date is in. So return something not entirely invalid.
+                                       return '99999999';
                                }
                        } else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) {
                                s = [ match[3], '' + ts.monthNames[match[2]], match[1] ];
 
        ts.addParser( {
                id: 'number',
-               is: function ( s, table ) {
+               is: function ( s ) {
                        return $.tablesorter.numberRegex.test( $.trim( s ));
                },
                format: function ( s ) {
index abb0fa3..17fd0cd 100644 (file)
        }
 
        $.fn.textSelection = function ( command, options ) {
+               var fn,
+                       context,
+                       hasIframe,
+                       needSave,
+                       retval;
 
                /**
                 * Helper function to get an IE TextRange object for an element
@@ -52,7 +57,7 @@
                        }
                }
 
-               var fn = {
+               fn = {
                        /**
                         * Get the contents of the textarea
                         */
                                                        range2.collapse();
                                                        range2.moveStart( 'character', -1 );
                                                        // FIXME: Which check is correct?
-                                                       if ( range2.text !== "\r" && range2.text !== "\n" && range2.text !== "" ) {
-                                                               insertText = "\n" + insertText;
-                                                               pre += "\n";
+                                                       if ( range2.text !== '\r' && range2.text !== '\n' && range2.text !== '' ) {
+                                                               insertText = '\n' + insertText;
+                                                               pre += '\n';
                                                        }
                                                        range3 = document.selection.createRange();
                                                        range3.collapse( false );
                                                        range3.moveEnd( 'character', 1 );
-                                                       if ( range3.text !== "\r" && range3.text !== "\n" && range3.text !== "" ) {
-                                                               insertText += "\n";
-                                                               post += "\n";
+                                                       if ( range3.text !== '\r' && range3.text !== '\n' && range3.text !== '' ) {
+                                                               insertText += '\n';
+                                                               post += '\n';
                                                        }
                                                }
 
                                                        insertText = doSplitLines( selText, pre, post );
                                                }
                                                if ( options.ownline ) {
-                                                       if ( startPos !== 0 && this.value.charAt( startPos - 1 ) !== "\n" && this.value.charAt( startPos - 1 ) !== "\r" ) {
-                                                               insertText = "\n" + insertText;
-                                                               pre += "\n";
+                                                       if ( startPos !== 0 && this.value.charAt( startPos - 1 ) !== '\n' && this.value.charAt( startPos - 1 ) !== '\r' ) {
+                                                               insertText = '\n' + insertText;
+                                                               pre += '\n';
                                                        }
-                                                       if ( this.value.charAt( endPos ) !== "\n" && this.value.charAt( endPos ) !== "\r" ) {
-                                                               insertText += "\n";
-                                                               post += "\n";
+                                                       if ( this.value.charAt( endPos ) !== '\n' && this.value.charAt( endPos ) !== '\r' ) {
+                                                               insertText += '\n';
+                                                               post += '\n';
                                                        }
                                                }
                                                this.value = this.value.substring( 0, startPos ) + insertText +
                                                // Setting this.value scrolls the textarea to the top, restore the scroll position
                                                this.scrollTop = scrollTop;
                                                if ( window.opera ) {
-                                                       pre = pre.replace( /\r?\n/g, "\r\n" );
-                                                       selText = selText.replace( /\r?\n/g, "\r\n" );
-                                                       post = post.replace( /\r?\n/g, "\r\n" );
+                                                       pre = pre.replace( /\r?\n/g, '\r\n' );
+                                                       selText = selText.replace( /\r?\n/g, '\r\n' );
+                                                       post = post.replace( /\r?\n/g, '\r\n' );
                                                }
                                                if ( isSample && options.selectPeri && !options.splitlines ) {
                                                        this.selectionStart = startPos + pre.length;
                         */
                         getCaretPosition: function ( options ) {
                                function getCaret( e ) {
-                                       var caretPos = 0, endPos = 0;
+                                       var caretPos = 0,
+                                               endPos = 0,
+                                               preText, rawPreText, periText,
+                                               rawPeriText, postText, rawPostText,
+                                               // IE Support
+                                               preFinished,
+                                               periFinished,
+                                               postFinished,
+                                               // Range containing text in the selection
+                                               periRange,
+                                               // Range containing text before the selection
+                                               preRange,
+                                               // Range containing text after the selection
+                                               postRange;
+
                                        if ( document.selection && document.selection.createRange ) {
                                                // IE doesn't properly report non-selected caret position through
                                                // the selection ranges when textarea isn't focused. This can
                                                // whatever we do later (bug 31847).
                                                activateElementOnIE( e );
 
-                                               var
-                                                       preText, rawPreText, periText,
-                                                       rawPeriText, postText, rawPostText,
-
-                                                       // IE Support
-                                                       preFinished = false,
-                                                       periFinished = false,
-                                                       postFinished = false,
-                                                       // Range containing text in the selection
-                                                       periRange = document.selection.createRange().duplicate(),
-                                                       // Range containing text before the selection
-                                                       preRange,
-                                                       // Range containing text after the selection
-                                                       postRange;
+                                               preFinished = false;
+                                               periFinished = false;
+                                               postFinished = false;
+                                               periRange = document.selection.createRange().duplicate();
 
                                                preRange = rangeForElementIE( e ),
                                                // Move the end where we need it
                                                                } else {
                                                                        preRange.moveEnd( 'character', -1 );
                                                                        if ( preRange.text === preText ) {
-                                                                               rawPreText += "\r\n";
+                                                                               rawPreText += '\r\n';
                                                                        } else {
                                                                                preFinished = true;
                                                                        }
                                                                } else {
                                                                        periRange.moveEnd( 'character', -1 );
                                                                        if ( periRange.text === periText ) {
-                                                                               rawPeriText += "\r\n";
+                                                                               rawPeriText += '\r\n';
                                                                        } else {
                                                                                periFinished = true;
                                                                        }
                                                                } else {
                                                                        postRange.moveEnd( 'character', -1 );
                                                                        if ( postRange.text === postText ) {
-                                                                               rawPostText += "\r\n";
+                                                                               rawPostText += '\r\n';
                                                                        } else {
                                                                                postFinished = true;
                                                                        }
                                                                }
                                                        }
                                                } while ( ( !preFinished || !periFinished || !postFinished ) );
-                                               caretPos = rawPreText.replace( /\r\n/g, "\n" ).length;
-                                               endPos = caretPos + rawPeriText.replace( /\r\n/g, "\n" ).length;
+                                               caretPos = rawPreText.replace( /\r\n/g, '\n' ).length;
+                                               endPos = caretPos + rawPeriText.replace( /\r\n/g, '\n' ).length;
                                        } else if ( e.selectionStart || e.selectionStart === 0 ) {
                                                // Firefox support
                                                caretPos = e.selectionStart;
                                        return Math.floor( e.scrollWidth / ( $.client.profile().platform === 'linux' ? 7 : 8 ) );
                                }
                                function getCaretScrollPosition( e ) {
-                                       var i, j;
                                        // FIXME: This functions sucks and is off by a few lines most
                                        // of the time. It should be replaced by something decent.
-                                       var text = e.value.replace( /\r/g, '' );
-                                       var caret = $( e ).textSelection( 'getCaretPosition' );
-                                       var lineLength = getLineLength( e );
-                                       var row = 0;
-                                       var charInLine = 0;
-                                       var lastSpaceInLine = 0;
+                                       var i, j,
+                                               nextSpace,
+                                               text = e.value.replace( /\r/g, '' ),
+                                               caret = $( e ).textSelection( 'getCaretPosition' ),
+                                               lineLength = getLineLength( e ),
+                                               row = 0,
+                                               charInLine = 0,
+                                               lastSpaceInLine = 0;
+
                                        for ( i = 0; i < caret; i++ ) {
                                                charInLine++;
                                                if ( text.charAt( i ) === ' ' ) {
                                                        lastSpaceInLine = charInLine;
-                                               } else if ( text.charAt( i ) === "\n" ) {
+                                               } else if ( text.charAt( i ) === '\n' ) {
                                                        lastSpaceInLine = 0;
                                                        charInLine = 0;
                                                        row++;
                                                        }
                                                }
                                        }
-                                       var nextSpace = 0;
+                                       nextSpace = 0;
                                        for ( j = caret; j < caret + lineLength; j++ ) {
                                                if (
                                                        text.charAt( j ) === ' ' ||
-                                                       text.charAt( j ) === "\n" ||
+                                                       text.charAt( j ) === '\n' ||
                                                        caret === text.length
                                                ) {
                                                        nextSpace = j;
                                break;
                }
 
-               var context = $(this).data( 'wikiEditor-context' );
-               var hasIframe = typeof context !== 'undefined' && context && typeof context.$iframe !== 'undefined';
+               context = $(this).data( 'wikiEditor-context' );
+               hasIframe = context !== undefined && context && context.$iframe !== undefined;
 
                // IE selection restore voodoo
-               var needSave = false;
+               needSave = false;
                if ( hasIframe && context.savedSelection !== null ) {
                        context.fn.restoreSelection();
                        needSave = true;
                }
-               var retval = ( hasIframe ? context.fn : fn )[command].call( this, options );
+               retval = ( hasIframe ? context.fn : fn )[command].call( this, options );
                if ( hasIframe && needSave ) {
                        context.fn.saveSelection();
                }
index 1c51c97..2835c9c 100644 (file)
@@ -71,7 +71,7 @@
                 * Apply tagOpen/tagClose to selection in textarea,
                 * use sampleText instead of selection if there is none.
                 */
-               insertTags: function ( tagOpen, tagClose, sampleText, selectText ) {
+               insertTags: function ( tagOpen, tagClose, sampleText ) {
                        if ( currentFocused && currentFocused.length ) {
                                currentFocused.textSelection(
                                        'encapsulateSelection', {
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 10473be..31ca107 100644 (file)
@@ -1,8 +1,36 @@
 /*
 ** Diff rendering
 */
-table.diff, td.diff-otitle, td.diff-ntitle {
+table.diff {
        background-color: white;
+       border: none;
+       border-spacing: 4px;
+       margin: 0;
+       width: 100%;
+       /* Ensure that colums are of equal width */
+       table-layout: fixed;
+}
+
+table.diff td {
+       padding: 0.33em 0.5em;
+}
+
+table.diff td.diff-marker {
+       /* Compensate padding for increased font-size */
+       padding: 0.25em;
+}
+
+table.diff col.diff-marker {
+       width: 2%;
+}
+
+table.diff col.diff-content {
+       width: 48%;
+}
+
+table.diff td div {
+       /* Force-wrap very long lines such as URLs or page-widening char strings */
+       word-wrap: break-word;
 }
 
 td.diff-otitle,
@@ -10,14 +38,14 @@ td.diff-ntitle {
        text-align: center;
 }
 
-td.diff-marker {
-       text-align: right;
+td.diff-lineno {
        font-weight: bold;
-       font-size: 1.25em;
 }
 
-td.diff-lineno {
+td.diff-marker {
+       text-align: right;
        font-weight: bold;
+       font-size: 1.25em;
 }
 
 td.diff-addedline,
@@ -27,10 +55,6 @@ td.diff-context {
        vertical-align: top;
        white-space: -moz-pre-wrap;
        white-space: pre-wrap;
-}
-
-td.diff-addedline,
-td.diff-deletedline {
        border-style: solid;
        border-width: 1px 1px 1px 4px;
        border-radius: 0.33em;
@@ -45,12 +69,9 @@ td.diff-deletedline {
 }
 
 td.diff-context {
-       background: #f3f3f3;
-       color: #333333;
-       border-style: solid;
-       border-width: 1px 1px 1px 4px;
+       background: #f9f9f9;
        border-color: #e6e6e6;
-       border-radius: 0.33em;
+       color: #333333;
 }
 
 .diffchange {
@@ -58,15 +79,6 @@ td.diff-context {
        text-decoration: none;
 }
 
-table.diff {
-       border: none;
-       width: 98%;
-       border-spacing: 4px;
-
-       /* Ensure that colums are of equal width */
-       table-layout: fixed;
-}
-
 td.diff-addedline .diffchange,
 td.diff-deletedline .diffchange {
        border-radius: 0.33em;
@@ -80,25 +92,3 @@ td.diff-addedline .diffchange {
 td.diff-deletedline .diffchange {
        background: #feeec8;
 }
-
-table.diff td {
-       padding: 0.33em 0.66em;
-}
-
-table.diff col.diff-marker {
-       width: 2%;
-}
-
-table.diff col.diff-content {
-       width: 48%;
-}
-
-table.diff td div {
-       /* Force-wrap very long lines such as URLs or page-widening char strings.*/
-       word-wrap: break-word;
-
-       /* As fallback (FF<3.5, Opera <10.5), scrollbars will be added for very wide cells
-          instead of text overflowing or widening
-       */
-       overflow: auto;
-}
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 d323442..6cbccbf 100644 (file)
@@ -25,7 +25,7 @@
 
        $.extend( mw.Api.prototype, {
                /**
-                * Convinience method for 'action=watch'.
+                * Convenience method for 'action=watch'.
                 *
                 * @param page {String|mw.Title} Full page name or instance of mw.Title
                 * @param success {Function} Callback to which the watch object will be passed.
@@ -38,7 +38,7 @@
                        return doWatchInternal.call( this, page, success, err );
                },
                /**
-                * Convinience method for 'action=watch&unwatch=1'.
+                * Convenience method for 'action=watch&unwatch=1'.
                 *
                 * @param page {String|mw.Title} Full page name or instance of mw.Title
                 * @param success {Function} Callback to which the watch object will be passed.
index c0c77aa..65eb5a6 100644 (file)
@@ -2,10 +2,10 @@
  * Bosnian (bosanski) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'bs', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'bs', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index a42a8f7..b2c9c08 100644 (file)
@@ -2,10 +2,10 @@
  * Lower Sorbian (Dolnoserbski) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'dsb', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'dsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index 374698d..61c6c10 100644 (file)
@@ -3,21 +3,24 @@
  *  @author Santhosh Thottingal
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'fi', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms, aou, origWord;
+
+       grammarForms = mediaWiki.language.getData( 'fi', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
 
        // vowel harmony flag
-       var aou = word.match( /[aou][^äöy]*$/i );
-       var origWord = word;
+       aou = word.match( /[aou][^äöy]*$/i );
+       origWord = word;
        if ( word.match( /wiki$/i ) ) {
                aou = false;
        }
        //append i after final consonant
-       if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) )
+       if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) ) {
                word += 'i';
+       }
 
        switch ( form ) {
                case 'genitive':
index a27b489..c13e832 100644 (file)
@@ -2,10 +2,11 @@
  * Irish (Gaeilge) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'ga', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint onecase:true */
+       var grammarForms = mediaWiki.language.getData( 'ga', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'ainmlae':
index d35f77e..13d457b 100644 (file)
@@ -3,26 +3,26 @@
  */
 
 mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'he', 'grammarForms' );
+       var grammarForms = mediaWiki.language.getData( 'he', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'prefixed':
                case 'תחילית': // the same word in Hebrew
                        // Duplicate prefixed "Waw", but only if it's not already double
-                       if ( word.substr( 0, 1 ) === "ו" && word.substr( 0, 2 ) !== "וו" ) {
-                               word = "ו" + word;
+                       if ( word.substr( 0, 1 ) === 'ו' && word.substr( 0, 2 ) !== 'וו' ) {
+                               word = 'ו' + word;
                        }
 
                        // Remove the "He" if prefixed
-                       if ( word.substr( 0, 1 ) === "ה" ) {
+                       if ( word.substr( 0, 1 ) === 'ה' ) {
                                word = word.substr( 1, word.length );
                        }
 
                        // Add a hyphen (maqaf) before numbers and non-Hebrew letters
-                       if (  word.substr( 0, 1 ) < "א" ||  word.substr( 0, 1 ) > "ת" ) {
-                               word = "־" + word;
+                       if (  word.substr( 0, 1 ) < 'א' ||  word.substr( 0, 1 ) > 'ת' ) {
+                               word = '־' + word;
                        }
        }
        return word;
index 211d67b..77dca75 100644 (file)
@@ -2,10 +2,10 @@
  * Upper Sorbian (Hornjoserbsce) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms =mw.language.getData( 'hsb', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'hsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index eb3f1f3..23b0c12 100644 (file)
@@ -3,10 +3,10 @@
  *  @author Santhosh Thottingal
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'hu', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'hu', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'rol':
index 215e750..65081bd 100644 (file)
@@ -2,10 +2,11 @@
  * Armenian (Հայերեն) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'hy', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint onecase:true */
+       var grammarForms = mediaWiki.language.getData( 'hy', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
 
        // These rules are not perfect, but they are currently only used for site names so it doesn't
@@ -13,14 +14,15 @@ mediaWiki.language.convertGrammar = function( word, form ) {
 
        switch ( form ) {
                case 'genitive': // սեռական հոլով
-                       if ( word.substr( -1 ) === 'ա' )
+                       if ( word.substr( -1 ) === 'ա' ) {
                                word = word.substr( 0, word.length -1 )  + 'այի';
-                       else if ( word.substr( -1 ) === 'ո' )
+                       } else if ( word.substr( -1 ) === 'ո' ) {
                                word = word.substr( 0, word.length - 1 ) + 'ոյի';
-                       else if ( word.substr( -4 ) === 'գիրք' )
+                       } else if ( word.substr( -4 ) === 'գիրք' ) {
                                word = word.substr( 0, word.length - 4 ) + 'գրքի';
-                       else
+                       } else {
                                word = word + 'ի';
+                       }
                        break;
                }
        return word;
index 313bb1c..2711024 100644 (file)
@@ -3,10 +3,10 @@
  * @author Santhosh Thottingal
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'la', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'la', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive':
index 431e38c..682b390 100644 (file)
@@ -4,23 +4,24 @@
  */
 
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'os', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'os', 'grammarForms' ),
+               // Ending for allative case
+               endAllative = 'мæ',
+               // Variable for 'j' beetwen vowels
+               jot = '',
+               // Variable for "-" for not Ossetic words
+               hyphen = '',
+               // Variable for ending
+               ending = '';
+
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
-       // Ending for allative case
-       var end_allative = 'мæ';
-       // Variable for 'j' beetwen vowels
-       var jot = '';
-       // Variable for "-" for not Ossetic words
-       var hyphen = '';
-       // Variable for ending
-       var ending = '';
        // Checking if the $word is in plural form
        if ( word.match( /тæ$/i ) ) {
                word = word.substring( 0, word.length - 1 );
-               end_allative = 'æм';
+               endAllative = 'æм';
        }
        // Works if word is in singular form.
        // Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
@@ -45,10 +46,10 @@ mediaWiki.language.convertGrammar = function( word, form ) {
                        ending = hyphen + jot + 'æн';
                        break;
                case 'allative':
-                       ending = hyphen + end_allative;
+                       ending = hyphen + endAllative;
                        break;
                case 'ablative':
-                       if ( jot == 'й' ) {
+                       if ( jot === 'й' ) {
                                ending = hyphen + jot + 'æ';
                        }
                        else {
index cfdbfc3..b27dea4 100644 (file)
@@ -2,27 +2,28 @@
  * Russian (Русский) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'ru', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint noempty:false, onecase:true */
+       var grammarForms = mediaWiki.language.getData( 'ru', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive': // родительный падеж
-                       if ( (  word.substr( word.length - 4 )  == 'вики' ) || (  word.substr( word.length - 4 ) == 'Вики' ) ) {
-                       }
-                       else if ( word.substr( word.length - 1 ) == 'ь' )
+                       if ( (  word.substr( word.length - 4 ) === 'вики' ) || (  word.substr( word.length - 4 ) === 'Вики' ) ) {
+                       } else if ( word.substr( word.length - 1 ) === 'ь' ) {
                                word = word.substr(0, word.length - 1 ) + 'я';
-                       else if ( word.substr( word.length - 2 ) == 'ия' )
+                       } else if ( word.substr( word.length - 2 ) === 'ия' ) {
                                word = word.substr(0, word.length - 2 ) + 'ии';
-                       else if ( word.substr( word.length - 2 ) == 'ка' )
+                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
                                word = word.substr(0, word.length - 2 ) + 'ки';
-                       else if ( word.substr( word.length - 2 )  == 'ти' )
+                       } else if ( word.substr( word.length - 2 )  === 'ти' ) {
                                word = word.substr(0, word.length - 2 ) + 'тей';
-                       else if ( word.substr( word.length - 2 ) == 'ды' )
+                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
                                word = word.substr(0, word.length - 2 ) + 'дов';
-                       else if ( word.substr( word.length - 3 ) == 'ник' )
+                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
                                word = word.substr(0, word.length - 3 ) + 'ника';
+                       }
                        break;
        }
        return word;
index acd00bf..fb335b6 100644 (file)
@@ -2,10 +2,10 @@
  * Slovenian (Slovenščina) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'sl', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'sl', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'mestnik': // locative
index ee110b0..5e56b66 100644 (file)
@@ -2,33 +2,35 @@
  * Ukrainian (Українська) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'uk', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint noempty:false */
+       var grammarForms = mediaWiki.language.getData( 'uk', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
-                       if ( ( word.substr( word.length - 4 ) == 'вікі' ) || ( word.substr( word.length - 4 ) == 'Вікі' ) ) {
-                       }
-                       else if ( word.substr( word.length - 1 ) == 'ь' )
+                       if ( ( word.substr( word.length - 4 ) === 'вікі' ) || ( word.substr( word.length - 4 ) === 'Вікі' ) ) {
+                       } else if ( word.substr( word.length - 1 ) === 'ь' ) {
                                word = word.substr(0, word.length - 1 ) + 'я';
-                       else if ( word.substr( word.length - 2 ) == 'ія' )
+                       } else if ( word.substr( word.length - 2 ) === 'ія' ) {
                                word = word.substr(0, word.length - 2 ) + 'ії';
-                       else if ( word.substr( word.length - 2 ) == 'ка' )
+                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
                                word = word.substr(0, word.length - 2 ) + 'ки';
-                       else if ( word.substr( word.length - 2 ) == 'ти' )
+                       } else if ( word.substr( word.length - 2 ) === 'ти' ) {
                                word = word.substr(0, word.length - 2 ) + 'тей';
-                       else if ( word.substr( word.length - 2 ) == 'ды' )
+                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
                                word = word.substr(0, word.length - 2 ) + 'дов';
-                       else if ( word.substr( word.length - 3 ) == 'ник' )
+                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
                                word = word.substr(0, word.length - 3 ) + 'ника';
+                       }
                        break;
                case 'accusative': // знахідний відмінок
-                       if ( ( word.substr( word.length - 4 ) == 'вікі' ) || ( word.substr( word.length - 4 ) == 'Вікі' ) ) {
+                       if ( ( word.substr( word.length - 4 ) === 'вікі' ) || ( word.substr( word.length - 4 ) === 'Вікі' ) ) {
                        }
-                       else if ( word.substr( word.length - 2 ) == 'ія' )
+                       else if ( word.substr( word.length - 2 ) === 'ія' ) {
                                word = word.substr(0, word.length - 2 ) + 'ію';
+                       }
                        break;
        }
        return word;
index 6660eca..c3023cd 100644 (file)
@@ -1,8 +1,8 @@
 /**
- *  CLDR related utility methods
+ *  CLDR related utility methods.
  */
-( function( mw ) {
-       "use strict";
+( function ( mw ) {
+       'use strict';
 
        var cldr = {
                /**
                 * In case none of the rules passed, we return pluralRules.length
                 * That means it is the "other" form.
                 * @param number
-                * @param pluralRules
-                * @return plural form index
+                * @param {Array} pluralRules
+                * @return {number} plural form index
                 */
-               getPluralForm: function( number, pluralRules ) {
-                       var pluralFormIndex = 0;
-                       for ( pluralFormIndex = 0; pluralFormIndex < pluralRules.length; pluralFormIndex++ ) {
-                               if ( mw.libs.pluralRuleParser( pluralRules[pluralFormIndex], number ) ) {
+               getPluralForm: function ( number, pluralRules ) {
+                       var i;
+                       for ( i = 0; i < pluralRules.length; i++ ) {
+                               if ( mw.libs.pluralRuleParser( pluralRules[i], number ) ) {
                                        break;
                                }
                        }
-                       return pluralFormIndex;
+                       return i;
                }
        };
 
        mw.cldr = cldr;
-} )( mediaWiki );
+
+}( mediaWiki ) );
index 30307a3..937b89b 100644 (file)
@@ -2,7 +2,7 @@
  * Base language object with methods for storing and getting
  * language data.
  */
-( function ( mw, $ ) {
+( function ( mw ) {
 
        var language = {
                /**
@@ -58,4 +58,4 @@
 
        mw.language = language;
 
-}( mediaWiki, jQuery ) );
+}( mediaWiki ) );
index 935d4ff..f8af0a0 100644 (file)
@@ -43,12 +43,14 @@ var language = {
         * @param forms array List of plural forms
         * @return string Correct form for quantifier in this language
         */
-       convertPlural: function( count, forms ) {
-               var pluralFormIndex = 0;
+       convertPlural: function ( count, forms ) {
+               var pluralRules,
+                       pluralFormIndex = 0;
+
                if ( !forms || forms.length === 0 ) {
                        return '';
                }
-               var pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
+               pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
                if ( !pluralRules ) {
                        // default fallback.
                        return ( count === 1 ) ? forms[0] : forms[1];
@@ -75,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;
+       convertNumber: function ( num, integer ) {
+               var i, tmp, transformTable, numberString, convertedNumber;
+
+               // Set the target Transform table:
+               transformTable = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'digitTransformTable' );
 
-               if ( !mw.language.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 ) {
@@ -97,8 +102,8 @@ var language = {
                        }
                        transformTable = tmp;
                }
-               var numberString = '' + num;
-               var convertedNumber = '';
+               numberString = '' + num;
+               convertedNumber = '';
                for ( i = 0; i < numberString.length; i++ ) {
                        if ( transformTable[ numberString[i] ] ) {
                                convertedNumber += transformTable[numberString[i]];
@@ -121,7 +126,7 @@ var language = {
         *
         * @return string
         */
-       gender: function( gender, forms ) {
+       gender: function ( gender, forms ) {
                if ( !forms || forms.length === 0 ) {
                        return '';
                }
diff --git a/resources/mediawiki.page/mediawiki.page.patrol.ajax.js b/resources/mediawiki.page/mediawiki.page.patrol.ajax.js
new file mode 100644 (file)
index 0000000..d7a07d7
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ * Animate patrol links to use asynchronous API requests to
+ * patrol pages, rather than navigating to a different URI.
+ *
+ * @since 1.21
+ * @author Marius Hoch <hoo@online.de>
+ */
+( function ( mw, $ ) {
+       if ( !mw.user.tokens.exists( 'patrolToken' ) ) {
+               // Current user has no patrol right, or an old cached version of user.tokens
+               // that didn't have patrolToken yet.
+               return;
+       }
+       $( document ).ready( function () {
+               var $patrolLinks = $( '.patrollink a' );
+               $patrolLinks.on( 'click', function ( e ) {
+                       var $spinner, href, rcid, apiRequest;
+
+                       // Hide the link and create a spinner to show it inside the brackets.
+                       $spinner = $.createSpinner( {
+                               size: 'small',
+                               type: 'inline'
+                       } );
+                       $( this ).hide().after( $spinner );
+
+                       href = $( this ).attr( 'href' );
+                       rcid = mw.util.getParamValue( 'rcid', href );
+                       apiRequest = new mw.Api();
+
+                       apiRequest.post( {
+                               action: 'patrol',
+                               token: mw.user.tokens.get( 'patrolToken' ),
+                               rcid: rcid
+                       } )
+                       .done( function ( data ) {
+                               // Remove all patrollinks from the page (including any spinners inside).
+                               $patrolLinks.closest( '.patrollink' ).remove();
+                               if ( data.patrol !== undefined ) {
+                                       // Success
+                                       var title = new mw.Title( data.patrol.title );
+                                       mw.notify( mw.msg( 'markedaspatrollednotify', title.toText() ) );
+                               } else {
+                                       // This should never happen as errors should trigger fail
+                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ) );
+                               }
+                       } )
+                       .fail( function ( error ) {
+                               $spinner.remove();
+                               // Restore the patrol link. This allows the user to try again
+                               // (or open it in a new window, bypassing this ajax module).
+                               $patrolLinks.show();
+                               if ( error === 'noautopatrol' ) {
+                                       // Can't patrol own
+                                       mw.notify( mw.msg( 'markedaspatrollederror-noautopatrol' ) );
+                               } else {
+                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ) );
+                               }
+                       } );
+
+                       e.preventDefault();
+               } );
+       } );
+}( mediaWiki, jQuery ) );
index 370c3a1..684f582 100644 (file)
@@ -1,24 +1,28 @@
-jQuery( document ).ready( function( $ ) {
+( function ( mw, $ ) {
+       $( function () {
+               var $sortableTables;
 
-       /* Emulate placeholder if not supported by browser */
-       if ( !( 'placeholder' in document.createElement( 'input' ) ) ) {
-               $( 'input[placeholder]' ).placeholder();
-       }
+               /* Emulate placeholder if not supported by browser */
+               if ( !( 'placeholder' in document.createElement( 'input' ) ) ) {
+                       $( 'input[placeholder]' ).placeholder();
+               }
 
-       /* Enable makeCollapsible */
-       $( '.mw-collapsible' ).makeCollapsible();
+               /* Enable makeCollapsible */
+               $( '.mw-collapsible' ).makeCollapsible();
 
-       /* Lazy load jquery.tablesorter */
-       if ( $( 'table.sortable' ).length ) {
-               mw.loader.using( 'jquery.tablesorter', function() {
-                       $( 'table.sortable' ).tablesorter();
-               });
-       }
+               /* Lazy load jquery.tablesorter */
+               $sortableTables = $( 'table.sortable' );
+               if ( $sortableTables.length ) {
+                       mw.loader.using( 'jquery.tablesorter', function () {
+                               $sortableTables.tablesorter();
+                       });
+               }
 
-       /* Enable CheckboxShiftClick */
-       $( 'input[type=checkbox]:not(.noshiftselect)' ).checkboxShiftClick();
+               /* Enable CheckboxShiftClick */
+               $( 'input[type=checkbox]:not(.noshiftselect)' ).checkboxShiftClick();
 
-       /* Add accesskey hints to the tooltips */
-       mw.util.updateTooltipAccessKeys();
+               /* Add accesskey hints to the tooltips */
+               mw.util.updateTooltipAccessKeys();
 
-} );
+       } );
+}( mediaWiki, jQuery ) );
index a7e059c..f945fa9 100644 (file)
                otherAction = action === 'watch' ? 'unwatch' : 'watch';
                accesskeyTip = $link.attr( 'title' ).match( mw.util.tooltipAccessKeyRegexp );
                $li = $link.closest( 'li' );
+
                /**
                 * Trigger a 'watchpage' event for this List item.
                 * Announce the otherAction value as the first param.
                 * Used to monitor the state of watch link.
                 * TODO: Revise when system wide hooks are implemented
                 */
-               if( state === undefined ) {
+               if ( state === undefined ) {
                        $li.trigger( 'watchpage.mw', otherAction );
                }
 
@@ -96,7 +97,7 @@
 
        // Expose local methods
        mw.page.watch = {
-               'updateWatchLink': updateWatchLink
+               updateWatchLink: updateWatchLink
        };
 
        $( document ).ready( function () {
                                        otherAction = action === 'watch' ? 'unwatch' : 'watch';
                                        $li = $link.closest( 'li' );
 
-                                       mw.notify( $.parseHTML( watchResponse.message ), { tag: 'watch-self' } );
+                                       mw.notify( $.parseHTML( watchResponse.message ), {
+                                               tag: 'watch-self'
+                                       } );
 
                                        // Set link to opposite
                                        updateWatchLink( $link, otherAction );
                                        if ( watchResponse.watched !== undefined ) {
                                                $( '#wpWatchthis' ).prop( 'checked', true );
                                        } else {
-                                               $( '#wpWatchthis' ).removeProp( 'checked' );
+                                               $( '#wpWatchthis' ).prop( 'checked', false );
                                        }
                                },
                                // Error
                                                        title: cleanTitle
                                                }, cleanTitle
                                        );
-                                       msg = mw.messsage( 'watcherrortext', link );
+                                       msg = mw.message( 'watcherrortext', link );
 
                                        // Report to user about the error
                                        mw.notify( msg, { tag: 'watch-self' } );
 
                                }
                        );
-               });
-       });
+               } );
+       } );
 
 }( mediaWiki, jQuery ) );
index 6f79929..2a158df 100644 (file)
@@ -1,46 +1,46 @@
-/* JavaScript for Special:Block */
+/**
+ * JavaScript for Special:Block
+ */
+( function ( mw, $ ) {
+       $( document ).ready( function () {
+               var $blockTarget = $( '#mw-bi-target' ),
+                       $anonOnlyRow = $( '#mw-input-wpHardBlock' ).closest( 'tr' ),
+                       $enableAutoblockRow = $( '#mw-input-wpAutoBlock' ).closest( 'tr' ),
+                       $hideUser = $( '#mw-input-wpHideUser' ).closest( 'tr' ),
+                       $watchUser = $( '#mw-input-wpWatch' ).closest( 'tr' );
 
-jQuery( function( $ ) {
+               function updateBlockOptions( instant ) {
+                       var blocktarget = $.trim( $blockTarget.val() ),
+                               isEmpty = blocktarget === '',
+                               isIp = mw.util.isIPv4Address( blocktarget, true ) || mw.util.isIPv6Address( blocktarget, true ),
+                               isIpRange = isIp && blocktarget.match( /\/\d+$/ );
 
-       var     DO_INSTANT = true,
-               $blockTarget = $( '#mw-bi-target' ),
-               $anonOnlyRow = $( '#mw-input-wpHardBlock' ).closest( 'tr' ),
-               $enableAutoblockRow = $( '#mw-input-wpAutoBlock' ).closest( 'tr' ),
-               $hideUser = $( '#mw-input-wpHideUser' ).closest( 'tr' ),
-               $watchUser = $( '#mw-input-wpWatch' ).closest( 'tr' );
-
-       var updateBlockOptions = function( instant ) {
-               if ( !$blockTarget.length ) {
-                       return;
+                       if ( isIp && !isEmpty ) {
+                               $enableAutoblockRow.goOut( instant );
+                               $hideUser.goOut( instant );
+                       } else {
+                               $enableAutoblockRow.goIn( instant );
+                               $hideUser.goIn( instant );
+                       }
+                       if ( !isIp && !isEmpty ) {
+                               $anonOnlyRow.goOut( instant );
+                       } else {
+                               $anonOnlyRow.goIn( instant );
+                       }
+                       if ( isIpRange && !isEmpty ) {
+                               $watchUser.goOut( instant );
+                       } else {
+                               $watchUser.goIn( instant );
+                       }
                }
 
-               var blocktarget = $.trim( $blockTarget.val() );
-               var isEmpty = ( blocktarget === '' );
-               var isIp = mw.util.isIPv4Address( blocktarget, true ) || mw.util.isIPv6Address( blocktarget, true );
-               var isIpRange = isIp && blocktarget.match( /\/\d+$/ );
+               if ( $blockTarget.length ) {
+                       // Bind functions so they're checked whenever stuff changes
+                       $blockTarget.keyup( updateBlockOptions );
 
-               if ( isIp && !isEmpty ) {
-                       $enableAutoblockRow.goOut( instant );
-                       $hideUser.goOut( instant );
-               } else {
-                       $enableAutoblockRow.goIn( instant );
-                       $hideUser.goIn( instant );
-               }
-               if ( !isIp && !isEmpty ) {
-                       $anonOnlyRow.goOut( instant );
-               } else {
-                       $anonOnlyRow.goIn( instant );
+                       // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
+                       updateBlockOptions( /* instant= */ true );
                }
-               if ( isIpRange && !isEmpty ) {
-                       $watchUser.goOut( instant );
-               } else {
-                       $watchUser.goIn( instant );
-               }
-       };
-
-       // Bind functions so they're checked whenever stuff changes
-       $blockTarget.keyup( updateBlockOptions );
+       } );
+}( mediaWiki, jQuery ) );
 
-       // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
-       updateBlockOptions( DO_INSTANT );
-});
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 8a5421e..fcdeba1 100644 (file)
@@ -31,12 +31,12 @@ 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;
@@ -44,8 +44,9 @@ table.mw-enhanced-rc td.mw-enhanced-rc-nested {
        height: 15px;
 }
 
-.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 808d5fe..a560ca9 100644 (file)
@@ -8,7 +8,7 @@
                // (only if a framework was found, not on error pages).
                $( '#mw-javascripttest-summary.mw-javascripttest-frameworkfound' ).append( function () {
 
-                       var     $html = $( '<p><label for="useskin">'
+                       var $html = $( '<p><label for="useskin">'
                                        + mw.message( 'javascripttest-pagetext-skins' ).escaped()
                                        + ' '
                                        + '</label></p>' ),
index 3526cef..8edb1cb 100644 (file)
@@ -1 +1,5 @@
-mw.special = {};
+/*
+ * Namespace for mediawiki.special.* modules
+ */
+
+mediaWiki.special = {};
index 68c2ed0..f719d07 100644 (file)
@@ -1,5 +1,6 @@
-/* JavaScript for Special:MovePage */
-
-jQuery( function( $ ) {
+/**
+ * JavaScript for Special:MovePage
+ */
+jQuery( document ).ready( function ( $ ) {
        $( '#wpReason, #wpNewTitleMain' ).byteLimit();
-});
+} );
index 0804825..46384a8 100644 (file)
-/*
+/**
  * JavaScript for Special:Preferences
  */
 jQuery( document ).ready( function ( $ ) {
-$( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
-var $preftoc = $('<ul id="preftoc"></ul>');
-var $preferences = $( '#preferences' )
-       .addClass( 'jsprefs' )
-       .before( $preftoc );
-
-var $fieldsets = $preferences.children( 'fieldset' )
-       .hide()
-       .addClass( 'prefsection' );
-
-var $legends = $fieldsets.children( 'legend' )
-       .addClass( 'mainLegend' );
+       var $preftoc, $preferences, $fieldsets, $legends,
+               hash,
+               $tzSelect, $tzTextbox, $localtimeHolder, servertime;
+
+       $( '#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' );
+
+       /**
+        * 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
+        * open section. Set mode 'noHash' to surpress this.
+        */
+       function switchPrefTab( name, mode ) {
+               var $tab, scrollTop;
+               // Handle hash manually to prevent jumping,
+               // therefore save and restore scrollTop to prevent jumping.
+               scrollTop = $( window ).scrollTop();
+               if ( mode !== 'noHash' ) {
+                       window.location.hash = '#mw-prefsection-' + name;
+               }
+               $( window ).scrollTop( scrollTop );
+
+               $preftoc.find( 'li' ).removeClass( 'selected' );
+               $tab = $( document.getElementById( 'preftab-' + name ) );
+               if ( $tab.length ) {
+                       $tab.parent().addClass( 'selected' );
+                       $preferences.children( 'fieldset' ).hide();
+                       $( document.getElementById( 'mw-prefsection-' + name ) ).show();
+               }
+       }
 
-/**
- * It uses document.getElementById for security reasons (html injections in
- * jQuery()).
- *
- * @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
- * open section. Set mode 'noHash' to surpress this.
- */
-function switchPrefTab( name, mode ) {
-       var $tab, scrollTop;
-       // Handle hash manually to prevent jumping,
-       // therefore save and restore scrollTop to prevent jumping.
-       scrollTop = $( window ).scrollTop();
-       if ( mode !== 'noHash' ) {
-               window.location.hash = '#mw-prefsection-' + name;
+       // Populate the prefToc
+       $legends.each( function ( i, legend ) {
+               var $legend = $(legend),
+                       ident, $li, $a;
+               if ( i === 0 ) {
+                       $legend.parent().show();
+               }
+               ident = $legend.parent().attr( 'id' );
+
+               $li = $( '<li>' )
+                       .addClass( i === 0 ? 'selected' : '' );
+               $a = $( '<a>' )
+                       .attr( {
+                               id: ident.replace( 'mw-prefsection', 'preftab' ),
+                               href: '#' + ident
+                       } )
+                       .text( $legend.text() );
+               $li.append( $a );
+               $preftoc.append( $li );
+       } );
+
+       // If we've reloaded the page or followed an open-in-new-window,
+       // make the selected tab visible.
+       hash = window.location.hash;
+       if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
+               switchPrefTab( hash.replace( '#mw-prefsection-' , '' ) );
        }
-       $( window ).scrollTop( scrollTop );
-
-       $preftoc.find( 'li' ).removeClass( 'selected' );
-       $tab = $( document.getElementById( 'preftab-' + name ) );
-       if ( $tab.length ) {
-               $tab.parent().addClass( 'selected' );
-               $preferences.children( 'fieldset' ).hide();
-               $( document.getElementById( 'mw-prefsection-' + name ) ).show();
+
+       // In browsers that support the onhashchange event we will not bind click
+       // handlers and instead let the browser do the default behavior (clicking the
+       // <a href="#.."> will naturally set the hash, handled by onhashchange.
+       // But other things that change the hash will also be catched (e.g. using
+       // the Back and Forward browser navigation).
+       // Note the special check for IE "compatibility" mode.
+       if ( 'onhashchange' in window &&
+               ( document.documentMode === undefined || document.documentMode >= 8 )
+       ) {
+               $(window).on( 'hashchange' , function () {
+                       var hash = window.location.hash;
+                       if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
+                               switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
+                       } else if ( hash === '' ) {
+                               switchPrefTab( 'personal', 'noHash' );
+                       }
+               });
+       // In older browsers we'll bind a click handler as fallback.
+       // We must not have onhashchange *and* the click handlers, other wise
+       // the click handler calls switchPrefTab() which sets the hash value,
+       // which triggers onhashcange and calls switchPrefTab() again.
+       } else {
+               $preftoc.on( 'click', 'li a', function ( e ) {
+                       switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
+                       e.preventDefault();
+               });
        }
-}
 
-// Populate the prefToc
-$legends.each( function ( i, legend ) {
-       var $legend = $(legend);
-       if ( i === 0 ) {
-               $legend.parent().show();
+       /**
+       * Timezone functions.
+       * Guesses Timezone from browser and updates fields onchange
+       */
+
+       $tzSelect = $( '#mw-input-wptimecorrection' );
+       $tzTextbox = $( '#mw-input-wptimecorrection-other' );
+       $localtimeHolder = $( '#wpLocalTime' );
+       servertime = parseInt( $( 'input[name="wpServerTime"]' ).val(), 10 );
+
+       function minutesToHours( min ) {
+               var tzHour = Math.floor( Math.abs( min ) / 60 ),
+                       tzMin = Math.abs( min ) % 60,
+                       tzString = ( ( min >= 0 ) ? '' : '-' ) + ( ( tzHour < 10 ) ? '0' : '' ) + tzHour +
+                               ':' + ( ( tzMin < 10 ) ? '0' : '' ) + tzMin;
+               return tzString;
        }
-       var ident = $legend.parent().attr( 'id' );
-
-       var $li = $( '<li/>', {
-               'class' : ( i === 0 ) ? 'selected' : null
-       });
-       var $a = $( '<a/>', {
-               text : $legend.text(),
-               id : ident.replace( 'mw-prefsection', 'preftab' ),
-               href : '#' + ident
-       });
-       $li.append( $a );
-       $preftoc.append( $li );
-} );
 
-// If we've reloaded the page or followed an open-in-new-window,
-// make the selected tab visible.
-var hash = window.location.hash;
-if ( hash.match( /^#mw-prefsection-[\w-]+/ ) ) {
-       switchPrefTab( hash.replace( '#mw-prefsection-' , '' ) );
-}
-
-// In browsers that support the onhashchange event we will not bind click
-// handlers and instead let the browser do the default behavior (clicking the
-// <a href="#.."> will naturally set the hash, handled by onhashchange.
-// But other things that change the hash will also be catched (e.g. using
-// the Back and Forward browser navigation).
-if ( 'onhashchange' in window ) {
-       $(window).on( 'hashchange' , function () {
-               var hash = window.location.hash;
-               if ( hash.match( /^#mw-prefsection-[\w-]+/ ) ) {
-                       switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
-               } else if ( hash === '' ) {
-                       switchPrefTab( 'personal', 'noHash' );
+       function hoursToMinutes( hour ) {
+               var minutes,
+                       arr = hour.split( ':' );
+
+               arr[0] = parseInt( arr[0], 10 );
+
+               if ( arr.length === 1 ) {
+                       // Specification is of the form [-]XX
+                       minutes = arr[0] * 60;
+               } else {
+                       // Specification is of the form [-]XX:XX
+                       minutes = Math.abs( arr[0] ) * 60 + parseInt( arr[1], 10 );
+                       if ( arr[0] < 0 ) {
+                               minutes *= -1;
+                       }
                }
-       });
-// In older browsers we'll bind a click handler as fallback.
-// We must not have onhashchange *and* the click handlers, other wise
-// the click handler calls switchPrefTab() which sets the hash value,
-// which triggers onhashcange and calls switchPrefTab() again.
-} else {
-       $preftoc.on( 'click', 'li a', function ( e ) {
-               switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
-               e.preventDefault();
-       });
-}
-
-/**
-* Timezone functions.
-* Guesses Timezone from browser and updates fields onchange
-*/
-
-var $tzSelect = $( '#mw-input-wptimecorrection' );
-var $tzTextbox = $( '#mw-input-wptimecorrection-other' );
-
-var $localtimeHolder = $( '#wpLocalTime' );
-var servertime = parseInt( $( 'input[name=wpServerTime]' ).val(), 10 );
-var minuteDiff = 0;
-
-var minutesToHours = function ( min ) {
-       var tzHour = Math.floor( Math.abs( min ) / 60 );
-       var tzMin = Math.abs( min ) % 60;
-       var tzString = ( ( min >= 0 ) ? '' : '-' ) + ( ( tzHour < 10 ) ? '0' : '' ) + tzHour +
-               ':' + ( ( tzMin < 10 ) ? '0' : '' ) + tzMin;
-       return tzString;
-};
-
-var hoursToMinutes = function ( hour ) {
-       var arr = hour.split( ':' );
-       arr[0] = parseInt( arr[0], 10 );
-
-       var minutes;
-       if ( arr.length == 1 ) {
-               // Specification is of the form [-]XX
-               minutes = arr[0] * 60;
-       } else {
-               // Specification is of the form [-]XX:XX
-               minutes = Math.abs( arr[0] ) * 60 + parseInt( arr[1], 10 );
-               if ( arr[0] < 0 ) {
-                       minutes *= -1;
+               // Gracefully handle non-numbers.
+               if ( isNaN( minutes ) ) {
+                       return 0;
+               } else {
+                       return minutes;
                }
        }
-       // Gracefully handle non-numbers.
-       if ( isNaN( minutes ) ) {
-               return 0;
-       } else {
-               return minutes;
-       }
-};
-
-var updateTimezoneSelection = function () {
-       var type = $tzSelect.val();
-       if ( type == 'guess' ) {
-               // Get browser timezone & fill it in
-               minuteDiff = -new Date().getTimezoneOffset();
-               $tzTextbox.val( minutesToHours( minuteDiff ) );
-               $tzSelect.val( 'other' );
-               $tzTextbox.get( 0 ).disabled = false;
-       } else if ( type == 'other' ) {
-               // Grab data from the textbox, parse it.
-               minuteDiff = hoursToMinutes( $tzTextbox.val() );
-       } else {
-               // Grab data from the $tzSelect value
-               minuteDiff = parseInt( type.split( '|' )[1], 10 ) || 0;
-               $tzTextbox.val( minutesToHours( minuteDiff ) );
-       }
 
-       // Determine local time from server time and minutes difference, for display.
-       var localTime = servertime + minuteDiff;
+       function updateTimezoneSelection () {
+               var minuteDiff, localTime,
+                       type = $tzSelect.val();
+
+               if ( type === 'guess' ) {
+                       // Get browser timezone & fill it in
+                       minuteDiff = -( new Date().getTimezoneOffset() );
+                       $tzTextbox.val( minutesToHours( minuteDiff ) );
+                       $tzSelect.val( 'other' );
+                       $tzTextbox.prop( 'disabled', false );
+               } else if ( type === 'other' ) {
+                       // Grab data from the textbox, parse it.
+                       minuteDiff = hoursToMinutes( $tzTextbox.val() );
+               } else {
+                       // Grab data from the $tzSelect value
+                       minuteDiff = parseInt( type.split( '|' )[1], 10 ) || 0;
+                       $tzTextbox.val( minutesToHours( minuteDiff ) );
+               }
+
+               // Determine local time from server time and minutes difference, for display.
+               localTime = servertime + minuteDiff;
 
-       // Bring time within the [0,1440) range.
-       while ( localTime < 0 ) {
-               localTime += 1440;
+               // Bring time within the [0,1440) range.
+               while ( localTime < 0 ) {
+                       localTime += 1440;
+               }
+               while ( localTime >= 1440 ) {
+                       localTime -= 1440;
+               }
+               $localtimeHolder.text( minutesToHours( localTime ) );
        }
-       while ( localTime >= 1440 ) {
-               localTime -= 1440;
+
+       if ( $tzSelect.length && $tzTextbox.length ) {
+               $tzSelect.change( updateTimezoneSelection );
+               $tzTextbox.blur( updateTimezoneSelection );
+               updateTimezoneSelection();
        }
-       $localtimeHolder.text( minutesToHours( localTime ) );
-};
-
-if ( $tzSelect.length && $tzTextbox.length ) {
-       $tzSelect.change( function () { updateTimezoneSelection(); } );
-       $tzTextbox.blur( function () { updateTimezoneSelection(); } );
-       updateTimezoneSelection();
-}
 } );
index 7996d93..d1c1354 100644 (file)
@@ -1,39 +1,34 @@
-/* JavaScript for Special:RecentChanges */
+/**
+ * JavaScript for Special:RecentChanges
+ */
 ( function ( mw, $ ) {
+       var rc, $checkboxes, $select;
 
-       var checkboxes = [ 'nsassociated', 'nsinvert' ];
-
-       /**
-        * @var select {jQuery}
-        */
-       var $select = null;
-
-       var rc = mw.special.recentchanges = {
-
+       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
-                       $.each( checkboxes, function ( i, id ) {
-                               $( '#' + id ).prop( 'disabled', isAllNS );
-                       });
+                       $checkboxes.prop( 'disabled', isAllNS );
                },
 
                init: function () {
-                       // Populate
                        $select = $( '#namespace' );
+                       $checkboxes = $( '#nsassociated, #nsinvert' );
 
                        // Bind to change event, and trigger once to set the initial state of the checkboxes.
-                       $select.change( rc.updateCheckboxes ).change();
+                       rc.updateCheckboxes();
+                       $select.change( rc.updateCheckboxes );
                }
        };
 
-       // Run when document is ready
-       $( rc.init );
+       $( document ).ready( rc.init );
+
+       mw.special.recentchanges = rc;
 
 }( mediaWiki, jQuery ) );
index 04954e8..2dab302 100644 (file)
@@ -1,49 +1,53 @@
-/*
+/**
  * JavaScript for Special:Search
  */
-( function( $, mw ) { $( function() {
+( function ( mw, $ ) {
+       $( document ).ready( function () {
+               var $checkboxes, $headerLinks;
 
-// Emulate HTML5 autofocus behavior in non HTML5 compliant browsers
-if ( !( 'autofocus' in document.createElement( 'input' ) ) ) {
-       $( 'input[autofocus]:first' ).focus();
-}
+               // Emulate HTML5 autofocus behavior in non HTML5 compliant browsers
+               if ( !( 'autofocus' in document.createElement( 'input' ) ) ) {
+                       $( 'input[autofocus]' ).eq( 0 ).focus();
+               }
 
-// Create check all/none button
-var $checkboxes = $('#powersearch input[id^=mw-search-ns]');
-$('#mw-search-togglebox').append(
-       $('<label />')
-               .text(mw.msg('powersearch-togglelabel'))
-).append(
-       $('<input type="button" />')
-               .attr('id', 'mw-search-toggleall')
-               .attr('value', mw.msg('powersearch-toggleall'))
-               .click( function() {
-                       $checkboxes.prop('checked', true);
-               } )
-).append(
-       $('<input type="button" />')
-               .attr('id', 'mw-search-togglenone')
-               .attr('value', mw.msg('powersearch-togglenone'))
-               .click( function() {
-                       $checkboxes.prop('checked', false);
-               } )
-);
+               // Create check all/none button
+               $checkboxes = $('#powersearch input[id^=mw-search-ns]');
+               $('#mw-search-togglebox').append(
+                       $('<label>')
+                               .text(mw.msg('powersearch-togglelabel'))
+               ).append(
+                       $('<input type="button" />')
+                               .attr( 'id', 'mw-search-toggleall' )
+                               .prop( 'value', mw.msg('powersearch-toggleall' ) )
+                               .click( function () {
+                                       $checkboxes.prop('checked', true);
+                               } )
+               ).append(
+                       $('<input type="button" />')
+                               .attr( 'id', 'mw-search-togglenone' )
+                               .prop( 'value', mw.msg('powersearch-togglenone' ) )
+                               .click( function() {
+                                       $checkboxes.prop( 'checked', false );
+                               } )
+               );
 
-// Change the header search links to what user entered
-var headerLinks = $('.search-types a');
-$('#searchText, #powerSearchText').change(function() {
-       var searchterm = $(this).val();
-       headerLinks.each( function() {
-               var parts = $(this).attr('href').split( 'search=' );
-               var lastpart = '';
-               var prefix = 'search=';
-               if( parts.length > 1 && parts[1].indexOf('&') >= 0 ) {
-                       lastpart = parts[1].substring( parts[1].indexOf('&') );
-               } else {
-                       prefix = '&search=';
-               }
-               this.href = parts[0] + prefix + encodeURIComponent( searchterm ) + lastpart;
-       });
-}).trigger('change');
+               // Change the header search links to what user entered
+               $headerLinks = $( '.search-types a' );
+               $( '#searchText, #powerSearchText' ).change( function () {
+                       var searchterm = $(this).val();
+                       $headerLinks.each( function () {
+                               var parts = $(this).attr('href').split( 'search=' ),
+                                       lastpart = '',
+                                       prefix = 'search=';
+                               if ( parts.length > 1 && parts[1].indexOf('&') >= 0 ) {
+                                       lastpart = parts[1].substring( parts[1].indexOf('&') );
+                               } else {
+                                       prefix = '&search=';
+                               }
+                               this.href = parts[0] + prefix + encodeURIComponent( searchterm ) + lastpart;
+                       });
+               }).trigger( 'change' );
+
+       } );
 
-} ); } )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
index 33b8027..d20aab5 100644 (file)
@@ -1,10 +1,11 @@
-/*
- * JavaScript for Specical:Undelete
+/**
+ * JavaScript for Special:Undelete
  */
-jQuery( document ).ready( function( $ ) {
-       $( '#mw-undelete-invert' ).click( function( e ) {
+jQuery( document ).ready( function ( $ ) {
+       $( '#mw-undelete-invert' ).click( function ( e ) {
+               $( '#undelete input[type="checkbox"]' ).prop( 'checked', function ( i, val ) {
+                       return !val;
+               } );
                e.preventDefault();
-               $( '#undelete' ).find( 'input:checkbox' )
-                       .prop( 'checked', function( i, val ) { return !val; } );
        } );
 } );
index 63e8971..75532f1 100644 (file)
@@ -6,12 +6,12 @@
        /**
         * Add a preview to the upload form
         */
-       $( function ( $ ) {
+       $( document ).ready( function () {
                /**
                 * Is the FileAPI available with sufficient functionality?
                 */
                function hasFileAPI() {
-                       return typeof window.FileReader !== 'undefined';
+                       return window.FileReader !== undefined;
                }
 
                /**
@@ -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;
                }
                 * @param {File} file
                 */
                function showPreview( file ) {
-                       var     previewSize = 180,
+                       var $canvas,
+                               ctx,
+                               meta,
+                               previewSize = 180,
                                thumb = $( '<div id="mw-upload-thumbnail" class="thumb tright">' +
                                                        '<div class="thumbinner">' +
                                                                '<div class="mw-small-spinner" style="width: 180px; height: 180px"></div>' +
                                                                '<div class="thumbcaption"><div class="filename"></div><div class="fileinfo"></div></div>' +
                                                        '</div>' +
                                                '</div>' );
+
                        thumb.find( '.filename' ).text( file.name ).end()
                                .find( '.fileinfo' ).text( prettySize( file.size ) ).end();
 
-                       var     $canvas = $('<canvas width="' + previewSize + '" height="' + previewSize + '" ></canvas>'),
-                               ctx = $canvas[0].getContext( '2d' );
+                       $canvas = $('<canvas width="' + previewSize + '" height="' + previewSize + '" ></canvas>');
+                       ctx = $canvas[0].getContext( '2d' );
                        $( '#mw-htmlform-source' ).parent().prepend( thumb );
 
-                       var meta;
-                       fetchPreview( file, function( dataURL ) {
-                               var     img = new Image(),
+                       fetchPreview( file, function ( dataURL ) {
+                               var img = new Image(),
                                        rotation = 0;
 
                                if ( meta && meta.tiff && meta.tiff.Orientation ) {
@@ -79,7 +82,8 @@
                                }
 
                                img.onload = function () {
-                                       var width, height, x, y, dx, dy, logicalWidth, logicalHeight;
+                                       var info, width, height, x, y, dx, dy, logicalWidth, logicalHeight;
+
                                        // Fit the image within the previewSizexpreviewSize box
                                        if ( img.width > img.height ) {
                                                width = previewSize;
                                        thumb.find('.mw-small-spinner').replaceWith($canvas);
 
                                        // Image size
-                                       var info = mw.msg( 'widthheight', logicalWidth, logicalHeight ) +
+                                       info = mw.msg( 'widthheight', logicalWidth, logicalHeight ) +
                                                ', ' + prettySize( file.size );
+
                                        $( '#mw-upload-thumbnail .fileinfo' ).text( info );
                                };
                                img.src = dataURL;
                        }, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) {
+                               /*jshint camelcase: false, nomen: false */
                                try {
                                        meta = mw.libs.jpegmeta( data, file.fileName );
                                        meta._binary_data = null;
                                // However, our JPEG metadata library wants a string.
                                // So, this is going to be an ugly conversion.
                                reader.onload = function() {
-                                       var buffer = new Uint8Array( reader.result ),
+                                       var i,
+                                               buffer = new Uint8Array( reader.result ),
                                                string = '';
-                                       for ( var i = 0; i < buffer.byteLength; i++ ) {
+                                       for ( i = 0; i < buffer.byteLength; i++ ) {
                                                string += String.fromCharCode( buffer[i] );
                                        }
                                        callbackBinary( string );
                        } else {
                                // This ends up decoding the file to base-64 and back again, which
                                // feels horribly inefficient.
-                               reader.onload = function() {
+                               reader.onload = function () {
                                        callback( reader.result );
                                };
                                reader.readAsDataURL( file );
                 * Check if the file does not exceed the maximum size
                 */
                function checkMaxUploadSize( file ) {
+                       var maxSize, $error;
+
                        function getMaxUploadSize( type ) {
                                var sizes = mw.config.get( 'wgMaxUploadSize' );
+
                                if ( sizes[type] !== undefined ) {
                                        return sizes[type];
                                }
                                return sizes['*'];
                        }
+
                        $( '.mw-upload-source-error' ).remove();
 
-                       var maxSize = getMaxUploadSize( 'file' );
+                       maxSize = getMaxUploadSize( 'file' );
                        if ( file.size > maxSize ) {
-                               var error = $( '<p class="error mw-upload-source-error" id="wpSourceTypeFile-error">' +
-                                               mw.message( 'largefileserver', file.size, maxSize ).escaped() + '</p>' );
-                               $( '#wpUploadFile' ).after( error );
+                               $error = $( '<p class="error mw-upload-source-error" id="wpSourceTypeFile-error">' +
+                                       mw.message( 'largefileserver', file.size, maxSize ).escaped() + '</p>' );
+
+                               $( '#wpUploadFile' ).after( $error );
+
                                return false;
                        }
+
                        return true;
                }
 
        /**
         * Disable all upload source fields except the selected one
         */
-       $( function ( $ ) {
-               var i, row,
-                       rows = $( '.mw-htmlform-field-UploadSourceField' );
-               for ( i = rows.length; i; i-- ) {
-                       row = rows[i - 1];
-                       $( 'input[name="wpSourceType"]', row ).change( ( function () {
-                               var currentRow = row; // Store current row in our own scope
-                               return function () {
-                                       $( '.mw-upload-source-error' ).remove();
-                                       if ( this.checked ) {
-                                               // Disable all inputs
-                                               $( 'input[name!="wpSourceType"]', rows ).prop( 'disabled', true );
-                                               // Re-enable the current one
-                                               $( 'input', currentRow ).prop( 'disabled', false );
-                                       }
-                               };
-                       }() ) );
+       $( document ).ready( function () {
+               var i, $row,
+                       $rows = $( '.mw-htmlform-field-UploadSourceField' );
+
+               function createHandler( $currentRow ) {
+                       /**
+                        * @param {jQuery.Event}
+                        */
+                       return function () {
+                               $( '.mw-upload-source-error' ).remove();
+                               if ( this.checked ) {
+                                       // Disable all inputs
+                                       $rows.find( 'input[name!="wpSourceType"]' ).prop( 'disabled', true );
+                                       // Re-enable the current one
+                                       $currentRow.find( 'input' ).prop( 'disabled', false );
+                               }
+                       };
+               }
+
+               for ( i = $rows.length; i; i-- ) {
+                       $row = $rows.eq(i - 1);
+                       $row
+                               .find( 'input[name="wpSourceType"]' )
+                               .change( createHandler( $row ) );
                }
        } );
 
index 33cca58..dad6021 100644 (file)
@@ -133,11 +133,11 @@ var
                // In normal browsers the match-array contains null/undefined if there's no match,
                // IE returns an empty string.
                var matches = s.match( /^(?:([^:]+):)?(.*?)(?:\.(\w+))?$/ ),
-                       ns_match = getNsIdByName( matches[1] );
+                       nsMatch = getNsIdByName( matches[1] );
 
                // Namespace must be valid, and title must be a non-empty string.
-               if ( ns_match && typeof matches[2] === 'string' && matches[2] !== '' ) {
-                       title.ns = ns_match;
+               if ( nsMatch && typeof matches[2] === 'string' && matches[2] !== '' ) {
+                       title.ns = nsMatch;
                        title.name = fixName( matches[2] );
                        if ( typeof matches[3] === 'string' && matches[3] !== '' ) {
                                title.ext = fixExt( matches[3] );
index bd12b21..643e5c3 100644 (file)
        /**
         * Function that's useful when constructing the URI string -- we frequently encounter the pattern of
         * having to add something to the URI as we go, but only if it's present, and to include a character before or after if so.
-        * @param {String} to prepend, if value not empty
-        * @param {String} value to include, if not empty
-        * @param {String} to append, if value not empty
-        * @param {Boolean} raw -- if true, do not URI encode
-        * @return {String}
+        * @param {string|undefined} pre To prepend.
+        * @param {string} val To include.
+        * @param {string} post To append.
+        * @param {boolean} raw If true, val will not be encoded.
+        * @return {string} Result.
         */
        function cat( pre, val, post, raw ) {
                if ( val === undefined || val === null || val === '' ) {
@@ -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.
                /**
                 * Constructs URI object. Throws error if arguments are illegal/impossible, or otherwise don't parse.
                 * @constructor
-                * @param {Object|String} URI string, or an Object with appropriate properties (especially another URI object to clone).
+                * @param {Object|string} uri URI string, or an Object with appropriate properties (especially another URI object to clone).
                 * Object must have non-blank 'protocol', 'host', and 'path' properties.
-                * This parameter is optional. If omitted (or set to undefined, null or empty string), then an object will be created
-                * for the default uri of this constructor (e.g. document.location for mw.Uri in MediaWiki core).
-                * @param {Object|Boolean} Object with options, or (backwards compatibility) a boolean for strictMode
-                * - strictMode {Boolean} Trigger strict mode parsing of the url. Default: false
-                * - overrideKeys {Boolean} Wether to let duplicate query parameters override eachother (true) or automagically
-                *   convert to an array (false, default).
+                *  This parameter is optional. If omitted (or set to undefined, null or empty string), then an object will be created
+                *  for the default uri of this constructor (e.g. document.location for mw.Uri in MediaWiki core).
+                * @param {Object|boolean} Object with options, or (backwards compatibility) a boolean for strictMode
+                *  - {boolean} strictMode Trigger strict mode parsing of the url. Default: false
+                *  - {boolean} overrideKeys Wether to let duplicate query parameters override eachother (true) or automagically
+                *     convert to an array (false, default).
                 */
                function Uri( uri, options ) {
                        options = typeof options === 'object' ? options : { strictMode: !!options };
                        }
                        if ( this.path && this.path.charAt( 0 ) !== '/' ) {
                                // A real relative URL, relative to defaultUri.path. We can't really handle that since we cannot
-                               // figure out whether the last path compoennt of defaultUri.path is a directory or a file.
+                               // figure out whether the last path component of defaultUri.path is a directory or a file.
                                throw new Error( 'Bad constructor arguments' );
                        }
                        if ( !( this.protocol && this.host && this.path ) ) {
                /**
                 * Standard encodeURIComponent, with extra stuff to make all browsers work similarly and more compliant with RFC 3986
                 * Similar to rawurlencode from PHP and our JS library mw.util.rawurlencode, but we also replace space with a +
-                * @param {String} string
-                * @return {String} encoded for URI
+                * @param {string} s String to encode.
+                * @return {string} Encoded string for URI.
                 */
                Uri.encode = function ( s ) {
                        return encodeURIComponent( s )
                };
 
                /**
-                * Standard decodeURIComponent, with '+' to space
-                * @param {String} string encoded for URI
-                * @return {String} decoded string
+                * Standard decodeURIComponent, with '+' to space.
+                * @param {string} s String encoded for URI.
+                * @return {string} Decoded string.
                 */
                Uri.decode = function ( s ) {
                        return decodeURIComponent( s.replace( /\+/g, '%20' ) );
 
                        /**
                         * Parse a string and set our properties accordingly.
-                        * @param {String} URI
+                        * @param {string} str URI
                         * @param {Object} options
-                        * @return {Boolean} success
+                        * @return {boolean} Success.
                         */
                        parse: function ( str, options ) {
                                var q,
 
                        /**
                         * Returns user and password portion of a URI.
-                        * @return {String}
+                        * @return {string}
                         */
                        getUserInfo: function () {
                                return cat( '', this.user, cat( ':', this.password, '' ) );
 
                        /**
                         * Gets host and port portion of a URI.
-                        * @return {String}
+                        * @return {string}
                         */
                        getHostPort: function () {
                                return this.host + cat( ':', this.port, '' );
                        /**
                         * Returns the userInfo and host and port portion of the URI.
                         * In most real-world URLs, this is simply the hostname, but it is more general.
-                        * @return {String}
+                        * @return {string}
                         */
                        getAuthority: function () {
                                return cat( '', this.getUserInfo(), '@' ) + this.getHostPort();
                        /**
                         * Returns the query arguments of the URL, encoded into a string
                         * Does not preserve the order of arguments passed into the URI. Does handle escaping.
-                        * @return {String}
+                        * @return {string}
                         */
                        getQueryString: function () {
                                var args = [];
                                        var k = Uri.encode( key ),
                                                vals = $.isArray( val ) ? val : [ val ];
                                        $.each( vals, function ( i, v ) {
-                                               args.push( k + ( v === null ? '' : '=' + Uri.encode( v ) ) );
+                                               if ( v === null ) {
+                                                       args.push( k );
+                                               } else if ( k === 'title' ) {
+                                                       args.push( k + '=' + mw.util.wikiUrlencode( v ) );
+                                               } else {
+                                                       args.push( k + '=' + Uri.encode( v ) );
+                                               }
                                        } );
                                } );
                                return args.join( '&' );
 
                        /**
                         * Returns everything after the authority section of the URI
-                        * @return {String}
+                        * @return {string}
                         */
                        getRelativePath: function () {
                                return this.path + cat( '?', this.getQueryString(), '', true ) + cat( '#', this.fragment, '' );
 
                        /**
                         * Gets the entire URI string. May not be precisely the same as input due to order of query arguments.
-                        * @return {String} the URI string
+                        * @return {string} The URI string.
                         */
                        toString: function () {
                                return this.protocol + '://' + this.getAuthority() + this.getRelativePath();
index 634d02b..1afe51e 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * mediawiki.Feedback
+ * mediawiki.feedback
  *
  * @author Ryan Kaldari, 2010
  * @author Neil Kandalgaonkar, 2010-11
 
        mw.Feedback.prototype = {
                setup: function () {
-                       var fb = this;
+                       var $feedbackPageLink,
+                               $bugNoteLink,
+                               $bugsListLink,
+                               fb = this;
 
-                       var $feedbackPageLink = $( '<a>' )
-                               .attr( { 'href': fb.title.getUrl(), 'target': '_blank' } )
-                               .css( { 'white-space': 'nowrap' } );
+                       $feedbackPageLink = $( '<a>' )
+                               .attr( {
+                                       href: fb.title.getUrl(),
+                                       target: '_blank'
+                               } )
+                               .css( {
+                                       whiteSpace: 'nowrap'
+                               } );
 
-                       var $bugNoteLink = $( '<a>' ).attr( { 'href': '#' } ).click( function () {
+                       $bugNoteLink = $( '<a>' ).attr( { href: '#' } ).click( function () {
                                fb.displayBugs();
                        } );
 
-                       var $bugsListLink = $( '<a>' ).attr( { 'href': fb.bugsListLink, 'target': '_blank' } );
+                       $bugsListLink = $( '<a>' ).attr( {
+                               href: fb.bugsListLink,
+                               target: '_blank'
+                       } );
 
                        // TODO: Use a stylesheet instead of these inline styles
                        this.$dialog =
                                        ),
                                        $( '<div class="feedback-mode feedback-submitting" style="text-align: center; margin: 3em 0;"></div>' ).append(
                                                mw.msg( 'feedback-adding' ),
-                                               $( '<br/>' ),
+                                               $( '<br>' ),
                                                $( '<span class="feedback-spinner"></span>' )
                                        ),
                                        $( '<div class="feedback-mode feedback-thanks" style="text-align: center; margin:1em"></div>' ).msg(
                },
 
                displayBugs: function () {
-                       var fb = this;
+                       var fb = this,
+                               bugsButtons = {};
                        this.display( 'bugs' );
-                       var bugsButtons = {};
                        bugsButtons[ mw.msg( 'feedback-bugnew' ) ] = function () {
                                window.open( fb.bugsLink, '_blank' );
                        };
                },
 
                displayThanks: function () {
-                       var fb = this;
+                       var fb = this,
+                               closeButton = {};
                        this.display( 'thanks' );
-                       var closeButton = {};
                        closeButton[ mw.msg( 'feedback-close' ) ] = function () {
                                fb.$dialog.dialog( 'close' );
                        };
                 *      message: {String}
                 */
                displayForm: function ( contents ) {
-                       var fb = this;
+                       var fb = this,
+                               formButtons = {};
                        this.subjectInput.value = ( contents && contents.subject ) ? contents.subject : '';
                        this.messageInput.value = ( contents && contents.message ) ? contents.message : '';
 
                        this.display( 'form' );
 
                        // Set up buttons for dialog box. We have to do it the hard way since the json keys are localized
-                       var formButtons = {};
                        formButtons[ mw.msg( 'feedback-submit' ) ] = function () {
                                fb.submit();
                        };
                },
 
                displayError: function ( message ) {
-                       var fb = this;
+                       var fb = this,
+                               closeButton = {};
                        this.display( 'error' );
                        this.$dialog.find( '.feedback-error-msg' ).msg( message );
-                       var closeButton = {};
                        closeButton[ mw.msg( 'feedback-close' ) ] = function () {
                                fb.$dialog.dialog( 'close' );
                        };
                                }
                        }
 
-                       function err( code, info ) {
+                       function err() {
                                // ajax request failed
                                fb.displayError( 'feedback-error3' );
                        }
index 1979573..ecee450 100644 (file)
@@ -1,5 +1,5 @@
-$( function() {
+jQuery( function ( $ ) {
        // Apply hidpi images on DOM-ready
        // Some may have already partly preloaded at low resolution.
        $( 'body' ).hidpi();
-} );
\ No newline at end of file
+} );
index a4753b9..83bf2e3 100644 (file)
@@ -1,64 +1,62 @@
 /**
- * Utility functions for jazzing up HTMLForm elements
+ * Utility functions for jazzing up HTMLForm elements.
  */
 ( function ( $ ) {
 
-/**
- * jQuery plugin to fade or snap to visible state.
- *
- * @param boolean instantToggle (optional)
- * @return jQuery
- */
-$.fn.goIn = function ( instantToggle ) {
-       if ( instantToggle === true ) {
-               return $(this).show();
-       }
-       return $(this).stop( true, true ).fadeIn();
-};
-
-/**
- * jQuery plugin to fade or snap to hiding state.
- *
- * @param boolean instantToggle (optional)
- * @return jQuery
- */
-$.fn.goOut = function ( instantToggle ) {
-       if ( instantToggle === true ) {
-               return $(this).hide();
-       }
-       return $(this).stop( true, true ).fadeOut();
-};
-
-/**
- * Bind a function to the jQuery object via live(), and also immediately trigger
- * the function on the objects with an 'instant' parameter set to true
- * @param callback function taking one parameter, which is Bool true when the event
- *     is called immediately, and the EventArgs object when triggered from an event
- */
-$.fn.liveAndTestAtStart = function ( callback ){
-       $(this)
-               .live( 'change', callback )
-               .each( function ( index, element ){
-                       callback.call( this, true );
-               } );
-};
-
-// Document ready:
-$( function () {
-
-       // Animate the SelectOrOther fields, to only show the text field when
-       // 'other' is selected.
-       $( '.mw-htmlform-select-or-other' ).liveAndTestAtStart( function ( instant ) {
-               var $other = $( '#' + $(this).attr( 'id' ) + '-other' );
-               $other = $other.add( $other.siblings( 'br' ) );
-               if ( $(this).val() === 'other' ) {
-                       $other.goIn( instant );
-               } else {
-                       $other.goOut( instant );
+       /**
+        * jQuery plugin to fade or snap to visible state.
+        *
+        * @param {boolean} instantToggle [optional]
+        * @return {jQuery}
+        */
+       $.fn.goIn = function ( instantToggle ) {
+               if ( instantToggle === true ) {
+                       return $(this).show();
                }
-       });
-
-});
-
+               return $(this).stop( true, true ).fadeIn();
+       };
+
+       /**
+        * jQuery plugin to fade or snap to hiding state.
+        *
+        * @param {boolean} instantToggle [optional]
+        * @return jQuery
+        */
+       $.fn.goOut = function ( instantToggle ) {
+               if ( instantToggle === true ) {
+                       return $(this).hide();
+               }
+               return $(this).stop( true, true ).fadeOut();
+       };
+
+       /**
+        * Bind a function to the jQuery object via live(), and also immediately trigger
+        * the function on the objects with an 'instant' parameter set to true.
+        * @param {Function} callback Takes one parameter, which is {true} when the
+        *  event is called immediately, and {jQuery.Event} when triggered from an event.
+        */
+       $.fn.liveAndTestAtStart = function ( callback ){
+               $(this)
+                       .live( 'change', callback )
+                       .each( function () {
+                               callback.call( this, true );
+                       } );
+       };
+
+       $( function () {
+
+               // Animate the SelectOrOther fields, to only show the text field when
+               // 'other' is selected.
+               $( '.mw-htmlform-select-or-other' ).liveAndTestAtStart( function ( instant ) {
+                       var $other = $( '#' + $(this).attr( 'id' ) + '-other' );
+                       $other = $other.add( $other.siblings( 'br' ) );
+                       if ( $(this).val() === 'other' ) {
+                               $other.goIn( instant );
+                       } else {
+                               $other.goOut( instant );
+                       }
+               });
+
+       } );
 
 }( jQuery ) );
index 7364829..934e906 100644 (file)
@@ -5,7 +5,8 @@
 * @author neilk@wikimedia.org
 */
 ( function ( mw, $ ) {
-       var slice = Array.prototype.slice,
+       var oldParser,
+               slice = Array.prototype.slice,
                parserDefaults = {
                        magic : {
                                'SITENAME' : mw.config.get( 'wgSiteName' )
@@ -30,8 +31,8 @@
                 * @return {jQuery}
                 */
                return function ( args ) {
-                       var key = args[0];
-                       var argsArray = $.isArray( args[1] ) ? args[1] : slice.call( args, 1 );
+                       var key = args[0],
+                               argsArray = $.isArray( args[1] ) ? args[1] : slice.call( args, 1 );
                        try {
                                return parser.parse( key, argsArray );
                        } catch ( e ) {
                 * is equivalent to
                 *    somefunction(a, [b, c, d])
                 *
-                * @param {String} message key
-                * @param {Array} optional replacements (can also specify variadically)
-                * @return {String} rendered HTML as string
+                * @param {string} key Message key.
+                * @param {Array|mixed} replacements Optional variable replacements (variadically or an array).
+                * @return {string} Rendered HTML.
                 */
-               return function ( /* key, replacements */ ) {
+               return function () {
                        return failableParserFn( arguments ).html();
                };
        };
                 *    somefunction(a, [b, c, d])
                 *
                 * We append to 'this', which in a jQuery plugin context will be the selected elements.
-                * @param {String} message key
-                * @param {Array} optional replacements (can also specify variadically)
+                * @param {string} key Message key.
+                * @param {Array|mixed} replacements Optional variable replacements (variadically or an array).
                 * @return {jQuery} this
                 */
-               return function ( /* key, replacements */ ) {
+               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 );
                        } );
                 * Where the magic happens.
                 * Parses a message from the key, and swaps in replacements as necessary, wraps in jQuery
                 * If an error is thrown, returns original key, and logs the error
-                * @param {String} message key
-                * @param {Array} replacements for $1, $2... $n
+                * @param {String} key Message key.
+                * @param {Array} replacements Variable replacements for $1, $2... $n
                 * @return {jQuery}
                 */
                parse: function ( key, replacements ) {
                        if ( this.astCache[ key ] === undefined ) {
                                var wikiText = this.settings.messages.get( key );
                                if ( typeof wikiText !== 'string' ) {
-                                       wikiText = "\\[" + key + "\\]";
+                                       wikiText = '\\[' + key + '\\]';
                                }
                                this.astCache[ key ] = this.wikiTextToAst( wikiText );
                        }
                 * @return {Mixed} abstract syntax tree
                 */
                wikiTextToAst: function ( input ) {
+                       var pos,
+                               regularLiteral, regularLiteralWithoutBar, regularLiteralWithoutSpace, backslash, anyCharacter,
+                               escapedOrLiteralWithoutSpace, escapedOrLiteralWithoutBar, escapedOrRegularLiteral,
+                               whitespace, dollar, digits,
+                               openExtlink, closeExtlink, wikilinkPage, wikilinkContents, openLink, closeLink, templateName, pipe, colon,
+                               templateContents, openTemplate, closeTemplate,
+                               nonWhitespaceExpression, paramExpression, expression, result;
 
                        // Indicates current position in input as we parse through it.
                        // Shared among all parsing functions below.
-                       var pos = 0;
+                       pos = 0;
+
                        // =========================================================
                        // parsing combinators - could be a library on its own
                        // =========================================================
                        // Try parsers until one works, if none work return null
                        function choice( ps ) {
                                return function () {
-                                       for ( var i = 0; i < ps.length; i++ ) {
-                                               var result = ps[i]();
+                                       var i, result;
+                                       for ( i = 0; i < ps.length; i++ ) {
+                                               result = ps[i]();
                                                if ( result !== null ) {
                                                         return result;
                                                }
                        // try several ps in a row, all must succeed or return null
                        // this is the only eager one
                        function sequence( ps ) {
-                               var originalPos = pos;
-                               var result = [];
-                               for ( var i = 0; i < ps.length; i++ ) {
-                                       var res = ps[i]();
+                               var i, res,
+                                       originalPos = pos,
+                                       result = [];
+                               for ( i = 0; i < ps.length; i++ ) {
+                                       res = ps[i]();
                                        if ( res === null ) {
                                                pos = originalPos;
                                                return null;
                        // must succeed a minimum of n times or return null
                        function nOrMore( n, p ) {
                                return function () {
-                                       var originalPos = pos;
-                                       var result = [];
-                                       var parsed = p();
+                                       var originalPos = pos,
+                                               result = [],
+                                               parsed = p();
                                        while ( parsed !== null ) {
                                                result.push( parsed );
                                                parsed = p();
                        // but some debuggers can't tell you exactly where they come from. Also the mutually
                        // recursive functions seem not to work in all browsers then. (Tested IE6-7, Opera, Safari, FF)
                        // This may be because, to save code, memoization was removed
-                       var regularLiteral = makeRegexParser( /^[^{}\[\]$\\]/ );
-                       var regularLiteralWithoutBar = makeRegexParser(/^[^{}\[\]$\\|]/);
-                       var regularLiteralWithoutSpace = makeRegexParser(/^[^{}\[\]$\s]/);
-                       var backslash = makeStringParser( "\\" );
-                       var anyCharacter = makeRegexParser( /^./ );
+                       regularLiteral = makeRegexParser( /^[^{}\[\]$\\]/ );
+                       regularLiteralWithoutBar = makeRegexParser(/^[^{}\[\]$\\|]/);
+                       regularLiteralWithoutSpace = makeRegexParser(/^[^{}\[\]$\s]/);
+                       backslash = makeStringParser( '\\' );
+                       anyCharacter = makeRegexParser( /^./ );
                        function escapedLiteral() {
                                var result = sequence( [
                                        backslash,
                                ] );
                                return result === null ? null : result[1];
                        }
-                       var escapedOrLiteralWithoutSpace = choice( [
+                       escapedOrLiteralWithoutSpace = choice( [
                                escapedLiteral,
                                regularLiteralWithoutSpace
                        ] );
-                       var escapedOrLiteralWithoutBar = choice( [
+                       escapedOrLiteralWithoutBar = choice( [
                                escapedLiteral,
                                regularLiteralWithoutBar
                        ] );
-                       var escapedOrRegularLiteral = choice( [
+                       escapedOrRegularLiteral = choice( [
                                escapedLiteral,
                                regularLiteral
                        ] );
                                 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('');
                        }
-                       var whitespace = makeRegexParser( /^\s+/ );
-                       var dollar = makeStringParser( '$' );
-                       var digits = makeRegexParser( /^\d+/ );
+                       whitespace = makeRegexParser( /^\s+/ );
+                       dollar = makeStringParser( '$' );
+                       digits = makeRegexParser( /^\d+/ );
 
                        function replacement() {
                                var result = sequence( [
                                }
                                return [ 'REPLACE', parseInt( result[1], 10 ) - 1 ];
                        }
-                       var openExtlink = makeStringParser( '[' );
-                       var closeExtlink = makeStringParser( ']' );
+                       openExtlink = makeStringParser( '[' );
+                       closeExtlink = makeStringParser( ']' );
                        // this extlink MUST have inner text, e.g. [foo] not allowed; [foo bar] is allowed
                        function extlink() {
-                               var result = null;
-                               var parsedResult = sequence( [
+                               var result, parsedResult;
+                               result = null;
+                               parsedResult = sequence( [
                                        openExtlink,
                                        nonWhitespaceExpression,
                                        whitespace,
                                }
                                return [ 'LINKPARAM', parseInt( result[2], 10 ) - 1, result[4] ];
                        }
-                       var openLink = makeStringParser( '[[' );
-                       var closeLink = makeStringParser( ']]' );
+                       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 = null;
-                               var parsedResult = sequence( [
+                               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;
                        }
-                       var templateName = transform(
+                       templateName = transform(
                                // see $wgLegalTitleChars
                                // not allowing : due to the need to catch "PLURAL:$1"
                                makeRegexParser( /^[ !"$&'()*,.\/0-9;=?@A-Z\^_`a-z~\x80-\xFF+\-]+/ ),
                                function ( result ) { return result.toString(); }
                        );
                        function templateParam() {
-                               var result = sequence( [
+                               var expr, result;
+                               result = sequence( [
                                        pipe,
                                        nOrMore( 0, paramExpression )
                                ] );
                                if ( result === null ) {
                                        return null;
                                }
-                               var expr = result[1];
-                               // use a "CONCAT" operator if there are multiple nodes, otherwise return the first node, raw.
-                               return expr.length > 1 ? [ "CONCAT" ].concat( expr ) : expr[0];
+                               expr = result[1];
+                               // use a CONCAT operator if there are multiple nodes, otherwise return the first node, raw.
+                               return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0];
                        }
-                       var pipe = makeStringParser( '|' );
+
                        function templateWithReplacement() {
                                var result = sequence( [
                                        templateName,
                                ] );
                                return result === null ? null : [ result[0], result[2] ];
                        }
-                       var colon = makeStringParser(':');
-                       var templateContents = choice( [
+                       colon = makeStringParser(':');
+                       templateContents = choice( [
                                function () {
                                        var res = sequence( [
                                                // templates can have placeholders for dynamic replacement eg: {{PLURAL:$1|one car|$1 cars}}
                                        return [ res[0] ].concat( res[1] );
                                }
                        ] );
-                       var openTemplate = makeStringParser('{{');
-                       var closeTemplate = makeStringParser('}}');
-                       function template() {
-                               var result = sequence( [
-                                       openTemplate,
-                                       templateContents,
-                                       closeTemplate
-                               ] );
-                               return result === null ? null : result[1];
-                       }
-                       var nonWhitespaceExpression = choice( [
+                       openTemplate = makeStringParser('{{');
+                       closeTemplate = makeStringParser('}}');
+                       nonWhitespaceExpression = choice( [
                                template,
                                link,
                                extLinkParam,
                                replacement,
                                literalWithoutSpace
                        ] );
-                       var paramExpression = choice( [
+                       paramExpression = choice( [
                                template,
                                link,
                                extLinkParam,
                                replacement,
                                literalWithoutBar
                        ] );
-                       var expression = choice( [
+
+                       expression = choice( [
                                template,
                                link,
                                extLinkParam,
                                replacement,
                                literal
                        ] );
+
                        function start() {
                                var result = nOrMore( 0, expression )();
                                if ( result === null ) {
                                        return null;
                                }
-                               return [ "CONCAT" ].concat( result );
+                               return [ 'CONCAT' ].concat( result );
                        }
                        // everything above this point is supposed to be stateless/static, but
                        // I am deferring the work of turning it into prototypes & objects. It's quite fast enough
                        // finally let's do some actual work...
-                       var result = start();
+                       result = start();
 
                        /*
                         * For success, the p must have gotten to the end of the input
                         * and returned a non-null.
                         * n.b. This is part of language infrastructure, so we do not throw an internationalizable message.
                         */
-                       if (result === null || pos !== input.length) {
-                               throw new Error( "Parse error at position " + pos.toString() + " in input: " + input );
+                       if ( result === null || pos !== input.length ) {
+                               throw new Error( 'Parse error at position ' + pos.toString() + ' in input: ' + input );
                        }
                        return result;
                }
                 * @return {Mixed} single-string node or array of nodes suitable for jQuery appending
                 */
                this.emit = function ( node, replacements ) {
-                       var ret = null;
-                       var jmsg = this;
+                       var ret, subnodes, operation,
+                               jmsg = this;
                        switch ( typeof node ) {
                                case 'string':
                                case 'number':
                                        ret = node;
                                        break;
-                               case 'object': // node is an array of nodes
-                                       var subnodes = $.map( node.slice( 1 ), function ( n ) {
+                               // typeof returns object for arrays
+                               case 'object':
+                                       // node is an array of nodes
+                                       subnodes = $.map( node.slice( 1 ), function ( n ) {
                                                return jmsg.emit( n, replacements );
                                        } );
-                                       var operation = node[0].toLowerCase();
+                                       operation = node[0].toLowerCase();
                                        if ( typeof jmsg[operation] === 'function' ) {
                                                ret = jmsg[ operation ]( subnodes, replacements );
                                        } else {
                                                $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 ( nodes ) {
-                       return 'unimplemented';
+                       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 );
                },
 
                /**
                 * @return {jQuery}
                 */
                link: function ( nodes ) {
-                       var arg = nodes[0];
-                       var contents = nodes[1];
-                       var $el;
+                       var $el,
+                               arg = nodes[0],
+                               contents = nodes[1];
                        if ( arg instanceof jQuery ) {
                                $el = arg;
                        } else {
                 * @return {String} selected pluralized form according to current language
                 */
                plural: function ( nodes ) {
-                       var count = parseFloat( this.language.convertNumber( nodes[0], true ) );
-                       var forms = nodes.slice(1);
+                       var forms, count;
+                       count = parseFloat( this.language.convertNumber( nodes[0], true ) );
+                       forms = nodes.slice(1);
                        return forms.length ? this.language.convertPlural( count, forms ) : '';
                },
 
                 * @return {String} selected grammatical form according to current language
                 */
                grammar: function ( nodes ) {
-                       var form = nodes[0];
-                       var word = nodes[1];
+                       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.
        $.fn.msg = mw.jqueryMsg.getPlugin();
 
        // Replace the default message parser with jqueryMsg
-       var oldParser = mw.Message.prototype.parser;
+       oldParser = mw.Message.prototype.parser;
        mw.Message.prototype.parser = function () {
                // TODO: should we cache the message function so we don't create a new one every time? Benchmark this maybe?
                // 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 ]; }
 
index 690138c..b0abc9e 100644 (file)
@@ -3,7 +3,7 @@
  */
 
 var mw = ( function ( $, undefined ) {
-       "use strict";
+       'use strict';
 
        /* Private Members */
 
@@ -290,14 +290,14 @@ var mw = ( function ( $, undefined ) {
                 * Gets a message object, similar to wfMessage()
                 *
                 * @param key string Key of message to get
-                * @param parameter_1 mixed First argument in a list of variadic arguments,
+                * @param parameter1 mixed First argument in a list of variadic arguments,
                 *  each a parameter for $N replacement in messages.
                 * @return Message
                 */
-               message: function ( key, parameter_1 /* [, parameter_2] */ ) {
+               message: function ( key, parameter1 ) {
                        var parameters;
                        // Support variadic arguments
-                       if ( parameter_1 !== undefined ) {
+                       if ( parameter1 !== undefined ) {
                                parameters = slice.call( arguments );
                                parameters.shift();
                        } else {
@@ -473,32 +473,14 @@ var mw = ( function ( $, undefined ) {
                                }
                        }
 
-                       function compare( a, b ) {
-                               var i;
-                               if ( a.length !== b.length ) {
-                                       return false;
-                               }
-                               for ( i = 0; i < b.length; i += 1 ) {
-                                       if ( $.isArray( a[i] ) ) {
-                                               if ( !compare( a[i], b[i] ) ) {
-                                                       return false;
-                                               }
-                                       }
-                                       if ( a[i] !== b[i] ) {
-                                               return false;
-                                       }
-                               }
-                               return true;
-                       }
-
                        /**
                         * Generates an ISO8601 "basic" string from a UNIX timestamp
                         */
                        function formatVersionNumber( timestamp ) {
-                               var     pad = function ( a, b, c ) {
-                                               return [a < 10 ? '0' + a : a, b < 10 ? '0' + b : b, c < 10 ? '0' + c : c].join( '' );
-                                       },
-                                       d = new Date();
+                               var     d = new Date();
+                               function pad( a, b, c ) {
+                                       return [a < 10 ? '0' + a : a, b < 10 ? '0' + b : b, c < 10 ? '0' + c : c].join( '' );
+                               }
                                d.setTime( timestamp * 1000 );
                                return [
                                        pad( d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate() ), 'T',
@@ -712,7 +694,7 @@ var mw = ( function ( $, undefined ) {
                                                j -= 1;
                                                try {
                                                        if ( hasErrors ) {
-                                                               throw new Error ("Module " + module + " failed.");
+                                                               throw new Error( 'Module ' + module + ' failed.');
                                                        } else {
                                                                if ( $.isFunction( job.ready ) ) {
                                                                        job.ready();
@@ -957,7 +939,7 @@ var mw = ( function ( $, undefined ) {
                         *  document ready has not yet occurred
                         */
                        function request( dependencies, ready, error, async ) {
-                               var regItemDeps, regItemDepLen, n;
+                               var n;
 
                                // Allow calling by single module name
                                if ( typeof dependencies === 'string' ) {
@@ -1029,7 +1011,7 @@ var mw = ( function ( $, undefined ) {
                         */
                        function doRequest( moduleMap, currReqBase, sourceLoadScript, async ) {
                                var request = $.extend(
-                                       { 'modules': buildModulesString( moduleMap ) },
+                                       { modules: buildModulesString( moduleMap ) },
                                        currReqBase
                                );
                                request = sortQuery( request );
@@ -1126,7 +1108,7 @@ var mw = ( function ( $, undefined ) {
 
                                                        currReqBase = $.extend( { version: formatVersionNumber( maxVersion ) }, reqBase );
                                                        // For user modules append a user name to the request.
-                                                       if ( group === "user" && mw.config.get( 'wgUserName' ) !== null ) {
+                                                       if ( group === 'user' && mw.config.get( 'wgUserName' ) !== null ) {
                                                                currReqBase.user = mw.config.get( 'wgUserName' );
                                                        }
                                                        currReqBaseLength = $.param( currReqBase ).length;
@@ -1513,7 +1495,7 @@ var mw = ( function ( $, undefined ) {
                html: ( function () {
                        function escapeCallback( s ) {
                                switch ( s ) {
-                                       case "'":
+                                       case '\'':
                                                return '&#039;';
                                        case '"':
                                                return '&quot;';
index 58a3ab6..35cc6d8 100644 (file)
@@ -4,7 +4,8 @@
 ( function ( mw, $ ) {
        'use strict';
 
-       var isPageReady = false,
+       var notification,
+               isPageReady = false,
                isInitialized = false,
                preReadyNotifQueue = [],
                /**
@@ -88,7 +89,9 @@
                        // Other notification elements matching the same tag
                        $tagMatches,
                        outerHeight,
-                       placeholderHeight;
+                       placeholderHeight,
+                       autohideCount,
+                       notif;
 
                if ( this.isOpen ) {
                        return;
                                                }
                                        } );
 
+                       notif = this;
+
                        // Create a clear placeholder we can use to make the notifications around the notification that is being
                        // replaced expand or contract gracefully to fit the height of the new notification.
-                       var self = this;
-                       self.$replacementPlaceholder = $( '<div>' )
+                       notif.$replacementPlaceholder = $( '<div>' )
                                // Set the height to the space the previous notification or placeholder took
                                .css( 'height', outerHeight )
                                // Make sure that this placeholder is at the very end of this tagged notification group
                                                        // Reset the notification position after we've finished the space animation
                                                        // However do not do it if the placeholder was removed because another tagged
                                                        // notification went and closed this one.
-                                                       if ( self.$replacementPlaceholder ) {
+                                                       if ( notif.$replacementPlaceholder ) {
                                                                $notification.css( 'position', '' );
                                                        }
                                                        // Finally, remove the placeholder from the DOM
                // By default a notification is paused.
                // If this notification is within the first {autoHideLimit} notifications then
                // start the auto-hide timer as soon as it's created.
-               var autohideCount = $area.find( '.mw-notification-autohide' ).length;
+               autohideCount = $area.find( '.mw-notification-autohide' ).length;
                if ( autohideCount <= notification.autoHideLimit ) {
                        this.resume();
                }
                }
        }
 
-       var notification = {
+       notification = {
                /**
                 * Pause auto-hide timers for all notifications.
                 * Notifications will not auto-hide until resume is called.
index 4e515bc..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
@@ -62,7 +59,8 @@
 
                        /* Fill $content var */
                        util.$content = ( function () {
-                               var $content, selectors = [
+                               var i, l, $content, selectors;
+                               selectors = [
                                        // The preferred standard for setting $content (class="mw-body")
                                        // You may also use (class="mw-body mw-body-primary") if you use
                                        // mw-body in multiple locations.
@@ -94,7 +92,7 @@
                                        // not inserted bodytext yet. But in any case <body> should always exist
                                        'body'
                                ];
-                               for ( var i = 0, l = selectors.length; i < l; i++ ) {
+                               for ( i = 0, l = selectors.length; i < l; i++ ) {
                                        $content = $( selectors[i] ).first();
                                        if ( $content.length ) {
                                                return $content;
                        // just add it to the bottom of their 'sidebar' element as a fallback
                        switch ( mw.config.get( 'skin' ) ) {
                        case 'standard':
-                       case 'cologneblue':
                                $( '#quickbar' ).append( $link.after( '<br/>' ) );
                                return $link[0];
                        case 'nostalgia':
                 * is determined by validation.
                 */
                validateEmail: function ( mailtxt ) {
-                       var rfc5322_atext, rfc1034_ldh_str, HTML5_email_regexp;
+                       var rfc5322Atext, rfc1034LdhStr, html5EmailRegexp;
 
                        if ( mailtxt === '' ) {
                                return null;
                                                 "|" / "}" /
                                                 "~"
                        */
-                       rfc5322_atext = "a-z0-9!#$%&'*+\\-/=?^_`{|}~";
+                       rfc5322Atext = 'a-z0-9!#$%&\'*+\\-/=?^_`{|}~';
 
                        /**
                         * Next define the RFC 1034 'ldh-str'
                         *      <let-dig-hyp> ::= <let-dig> | "-"
                         *      <let-dig> ::= <letter> | <digit>
                         */
-                       rfc1034_ldh_str = "a-z0-9\\-";
+                       rfc1034LdhStr = 'a-z0-9\\-';
 
-                       HTML5_email_regexp = new RegExp(
+                       html5EmailRegexp = new RegExp(
                                // start of string
                                '^'
                                +
                                // User part which is liberal :p
-                               '[' + rfc5322_atext + '\\.]+'
+                               '[' + rfc5322Atext + '\\.]+'
                                +
                                // 'at'
                                '@'
                                +
                                // Domain first part
-                               '[' + rfc1034_ldh_str + ']+'
+                               '[' + rfc1034LdhStr + ']+'
                                +
                                // Optional second part and following are separated by a dot
-                               '(?:\\.[' + rfc1034_ldh_str + ']+)*'
+                               '(?:\\.[' + rfc1034LdhStr + ']+)*'
                                +
                                // End of string
                                '$',
                                // RegExp is case insensitive
                                'i'
                        );
-                       return (null !== mailtxt.match( HTML5_email_regexp ) );
+                       return (null !== mailtxt.match( html5EmailRegexp ) );
                },
 
                /**
index 7951af0..deff7e6 100644 (file)
@@ -3,19 +3,22 @@
  * continue loading the jquery and mediawiki modules. This code should work on
  * even the most ancient of browsers, so be very careful when editing.
  */
+
 /**
  * Returns false when run in a black-listed browser
  *
  * This function will be deleted after it's used, so do not expand it to be
- * generally useful beyond startup
+ * generally useful beyond startup.
  *
- * jQuery has minimum requirements of:
- * * Internet Explorer 6.0+
- * * Firefox 3.6+
- * * Safari 5.0+
- * * Opera 11+
- * * Chrome
+ * MediaWiki & jQuery compatibility:
+ * - Internet Explorer 6.0+
+ * - Firefox 10+
+ * - Safari 5.0+
+ * - Opera 11+
+ * - Chrome
  */
+
+/*jshint unused: false */
 function isCompatible() {
        // IE < 6.0
        if ( navigator.appVersion.indexOf( 'MSIE' ) !== -1
@@ -23,11 +26,9 @@ function isCompatible() {
        {
                return false;
        }
-       // @todo FIXME: Firefox < 3.6
-       // @todo FIXME: Safari < 5.0
-       // @todo FIXME: Opera < 11
        return true;
 }
+
 /**
- * The startUp() function will be generated and added here (at the bottom)
+ * The startUp() function will be auto-generated and added below.
  */
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 84042c3..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' );
@@ -71,8 +71,6 @@ class CologneBlueTemplate extends BaseTemplate {
        /**
         * Language/charset variant links for classic-style skins
         * @return string
-        *
-        * @fixed
         */
        function variantLinks() {
                $s = array();
@@ -86,7 +84,6 @@ class CologneBlueTemplate extends BaseTemplate {
                return $this->getSkin()->getLanguage()->pipeList( $s );
        }
 
-       // @fixed
        function otherLanguages() {
                global $wgHideInterlanguageLinks;
                if ( $wgHideInterlanguageLinks ) {
@@ -110,7 +107,6 @@ class CologneBlueTemplate extends BaseTemplate {
                        . $this->getSkin()->getLanguage()->pipeList( $s );
        }
 
-       // @fixed
        function pageTitleLinks() {
                $s = array();
                $footlinks = $this->getFooterLinks();
@@ -130,7 +126,6 @@ class CologneBlueTemplate extends BaseTemplate {
         * @param $message string Key of the message to use in place of standard text
         *
         * @return string
-        * @fixed
         */
        function processBottomLink( $key, $navlink, $message=null ) {
                if ( !$navlink ) {
@@ -145,7 +140,6 @@ class CologneBlueTemplate extends BaseTemplate {
                return $this->makeListItem( $key, $this->processNavlinkForDocument( $navlink ), array( 'tag' => 'span' ) );
        }
 
-       // @fixed
        function bottomLinks() {
                $toolbox = $this->getToolbox();
                $content_nav = $this->data['content_navigation'];
@@ -197,7 +191,6 @@ class CologneBlueTemplate extends BaseTemplate {
                return implode( array_filter( $lines ), "<br />\n" ) . "<br />\n";
        }
 
-       // @fixed
        function talkLink() {
                $title = $this->getSkin()->getTitle();
 
@@ -271,25 +264,19 @@ class CologneBlueTemplate extends BaseTemplate {
 
        /**
         * @return string
-        *
-        * @fixed
         */
        function beforeContent() {
                ob_start();
 ?>
 <div id="content">
        <div id="topbar">
-               <p id="sitetitle">
+               <p id="sitetitle" role="banner">
                        <a href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>">
                                <?php echo wfMessage( 'sitetitle' )->escaped() ?>
                        </a>
                </p>
                <p id="sitesub"><?php echo wfMessage( 'sitesubtitle' )->escaped() ?></p>
-               <div id="toplinks">
-                       <p id="syslinks"><?php echo $this->sysLinks() ?></p>
-                       <p id="variantlinks"><?php echo $this->variantLinks() ?></p>
-               </div>
-               <div id="linkcollection">
+               <div id="linkcollection" role="navigation">
                        <div id="langlinks"><?php echo str_replace( '<br />', '', $this->otherLanguages() ) ?></div>
                        <?php echo $this->getSkin()->getCategories() ?>
                        <div id="titlelinks"><?php echo $this->pageTitleLinks() ?></div>
@@ -298,11 +285,14 @@ class CologneBlueTemplate extends BaseTemplate {
                        <?php } ?>
                </div>
        </div>
-       <div id="article">
+       <div id="article" role="main">
                <?php if ( $this->getSkin()->getSiteNotice() ) { ?>
                <div id="siteNotice"><?php echo $this->getSkin()->getSiteNotice() ?></div>
                <?php } ?>
-               <h1 id="firstHeading"><span dir="auto"><?php echo $this->data['title'] ?></span></h1>
+               <h1 id="firstHeading" lang="<?php
+                       $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' ) ) { ?>
                <p class="tagline"><?php echo htmlspecialchars( $this->translator->translate( 'tagline' ) ) ?></p>
                <?php } ?>
@@ -321,14 +311,12 @@ class CologneBlueTemplate extends BaseTemplate {
 
        /**
         * @return string
-        *
-        * @fixed
         */
        function afterContent() {
                ob_start();
 ?>
        </div>
-       <div id='footer'>
+       <div id="footer" role="contentinfo">
 <?php
                // Page-related links
                echo $this->bottomLinks();
@@ -352,7 +340,14 @@ class CologneBlueTemplate extends BaseTemplate {
 ?>
        </div>
 </div>
-<?php echo $this->quickBar() ?>
+<div id="mw-navigation">
+       <h2><?php echo wfMessage( 'navigation-heading' )->escaped() ?></h2>
+       <div id="toplinks" role="navigation">
+               <p id="syslinks"><?php echo $this->sysLinks() ?></p>
+               <p id="variantlinks"><?php echo $this->variantLinks() ?></p>
+       </div>
+       <?php echo $this->quickBar() ?>
+</div>
 <?php
                $s = ob_get_contents();
                ob_end_clean();
@@ -362,8 +357,6 @@ class CologneBlueTemplate extends BaseTemplate {
 
        /**
         * @return string
-        *
-        * @fixed
         */
        function sysLinks() {
                $s = array(
@@ -397,8 +390,6 @@ class CologneBlueTemplate extends BaseTemplate {
         *
         * @param $bar sidebar data
         * @return array modified sidebar data
-        *
-        * @fixed
         */
        function sidebarAdditions( $bar ) {
                // "This page" and "Edit" menus
@@ -430,9 +421,10 @@ class CologneBlueTemplate extends BaseTemplate {
                        $qbmyoptions[$key] = null;
                }
 
-               $bar['qbedit'] = $qbedit;
-               $bar['qbpageoptions'] = $qbpageoptions;
-               $bar['qbmyoptions'] = $qbmyoptions;
+               // Use the closest reasonable name
+               $bar['cactions'] = $qbedit;
+               $bar['pageoptions'] = $qbpageoptions; // this is a non-standard portlet name, but nothing fits
+               $bar['personal'] = $qbmyoptions;
 
                return $bar;
        }
@@ -442,8 +434,6 @@ class CologneBlueTemplate extends BaseTemplate {
         * @access private
         *
         * @return string
-        *
-        * @fixed
         */
        function quickBar() {
                // Massage the sidebar. We want to:
@@ -479,12 +469,9 @@ class CologneBlueTemplate extends BaseTemplate {
                $bar = array();
                foreach ( $orig_bar as $heading => $data ) {
                        if ( $heading == 'SEARCH' ) {
-                               $bar['qbfind'] = $this->searchForm( 'sidebar' );
+                               $bar['search'] = $this->searchForm( 'sidebar' );
                        } elseif ( $heading == 'TOOLBOX' ) {
-                               $bar['toolbox'] = $this->getToolbox();
-                       } elseif ( $heading == 'navigation' ) {
-                               // Use the navigation heading from standard sidebar as the "browse" section
-                               $bar['qbbrowse'] = $data;
+                               $bar['tb'] = $this->getToolbox();
                        } else {
                                $bar[$heading] = $data;
                        }
@@ -492,12 +479,22 @@ class CologneBlueTemplate extends BaseTemplate {
 
 
                // Output the sidebar
+               // CologneBlue uses custom messages for some portlets, but we should keep the ids for consistency
+               $idToMessage = array(
+                       'search' => 'qbfind',
+                       'navigation' => 'qbbrowse',
+                       'tb' => 'toolbox',
+                       'cactions' => 'qbedit',
+                       'personal' => 'qbmyoptions',
+                       'pageoptions' => 'qbpageoptions',
+               );
+
                $s = "<div id='quickbar'>\n";
 
                foreach ( $bar as $heading => $data ) {
-                       $headingMsg = wfMessage( $heading );
-                       $headingHTML = "<h6>" . ( $headingMsg->exists() ? $headingMsg->escaped() : htmlspecialchars( $heading ) ) . "</h6>";
                        $portletId = Sanitizer::escapeId( "p-$heading" );
+                       $headingMsg = wfMessage( $idToMessage[$heading] ? $idToMessage[$heading] : $heading );
+                       $headingHTML = "<h3>" . ( $headingMsg->exists() ? $headingMsg->escaped() : htmlspecialchars( $heading ) ) . "</h3>";
                        $listHTML = "";
 
                        if ( is_array( $data ) ) {
@@ -517,7 +514,8 @@ class CologneBlueTemplate extends BaseTemplate {
                        }
 
                        if ( $listHTML ) {
-                               $s .= "<div class=\"portlet\" id=\"$portletId\">\n$headingHTML\n$listHTML\n</div>\n";
+                               $role = ( $heading == 'search' ) ? 'search' : 'navigation';
+                               $s .= "<div class=\"portlet\" id=\"$portletId\" role=\"$role\">\n$headingHTML\n$listHTML\n</div>\n";
                        }
                }
 
@@ -528,8 +526,6 @@ class CologneBlueTemplate extends BaseTemplate {
        /**
         * @param $label string
         * @return string
-        *
-        * @fixed
         */
        function searchForm( $which ) {
                global $wgUseTwoButtonsSearchForm;
index 4211bb8..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');
        }
@@ -65,7 +65,10 @@ class ModernTemplate extends MonoBookTemplate {
 ?>
 
        <!-- heading -->
-       <div id="mw_header"><h1 id="firstHeading"><span dir="auto"><?php $this->html('title') ?></span></h1></div>
+       <div id="mw_header"><h1 id="firstHeading" lang="<?php
+               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
+               $this->html( 'pageLanguage' );
+       ?>"><span dir="auto"><?php $this->html('title') ?></span></h1></div>
 
        <div id="mw_main">
        <div id="mw_contentwrapper">
@@ -73,7 +76,7 @@ class ModernTemplate extends MonoBookTemplate {
 <?php $this->cactions(); ?>
 
        <!-- content -->
-       <div id="mw_content">
+       <div id="mw_content" role="main">
        <!-- contentholder does nothing by default, but it allows users to style the text inside
             the content area without affecting the meaning of 'em' in #mw_content, which is used
             for the margins -->
@@ -103,6 +106,7 @@ class ModernTemplate extends MonoBookTemplate {
        </div><!-- mw_contentwrapper -->
 
        <div id="mw_portlets"<?php $this->html("userlangattributes") ?>>
+       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
 
        <!-- portlets -->
        <?php $this->renderPortals( $this->data['sidebar'] ); ?>
@@ -115,8 +119,8 @@ class ModernTemplate extends MonoBookTemplate {
        <div class="mw_clear"></div>
 
        <!-- personal portlet -->
-       <div class="portlet" id="p-personal">
-               <h5><?php $this->msg('personaltools') ?></h5>
+       <div class="portlet" id="p-personal" role="navigation">
+               <h3><?php $this->msg('personaltools') ?></h3>
                <div class="pBody">
                        <ul>
 <?php          foreach($this->getPersonalTools() as $key => $item) { ?>
@@ -129,7 +133,7 @@ class ModernTemplate extends MonoBookTemplate {
 
 
        <!-- footer -->
-       <div id="footer"<?php $this->html('userlangattributes') ?>>
+       <div id="footer" role="contentinfo"<?php $this->html('userlangattributes') ?>>
                        <ul id="f-list">
 <?php
                foreach( $this->getFooterLinks("flat") as $aLink ) {
index 0bd7134..f03d31b 100644 (file)
@@ -80,11 +80,14 @@ class MonoBookTemplate extends BaseTemplate {
 
                $this->html( 'headelement' );
 ?><div id="globalWrapper">
-<div id="column-content"><div id="content" class="mw-body-primary">
+<div id="column-content"><div id="content" class="mw-body-primary" role="main">
        <a id="top"></a>
        <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
 
-       <h1 id="firstHeading" class="firstHeading"><span dir="auto"><?php $this->html('title') ?></span></h1>
+       <h1 id="firstHeading" class="firstHeading" lang="<?php
+               $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">
                <div id="siteSub"><?php $this->msg('tagline') ?></div>
                <div id="contentSub"<?php $this->html('userlangattributes') ?>><?php $this->html('subtitle') ?></div>
@@ -104,9 +107,10 @@ class MonoBookTemplate extends BaseTemplate {
        </div>
 </div></div>
 <div id="column-one"<?php $this->html('userlangattributes')  ?>>
+       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
 <?php $this->cactions(); ?>
-       <div class="portlet" id="p-personal">
-               <h5><?php $this->msg('personaltools') ?></h5>
+       <div class="portlet" id="p-personal" role="navigation">
+               <h3><?php $this->msg('personaltools') ?></h3>
                <div class="pBody">
                        <ul<?php $this->html('userlangattributes') ?>>
 <?php          foreach($this->getPersonalTools() as $key => $item) { ?>
@@ -116,7 +120,7 @@ class MonoBookTemplate extends BaseTemplate {
                        </ul>
                </div>
        </div>
-       <div class="portlet" id="p-logo">
+       <div class="portlet" id="p-logo" role="banner">
 <?php
                        echo Html::element( 'a', array(
                                'href' => $this->data['nav_urls']['mainpage']['href'],
@@ -134,7 +138,7 @@ class MonoBookTemplate extends BaseTemplate {
        $validFooterLinks = $this->getFooterLinks( "flat" ); // Additional footer links
 
        if ( count( $validFooterIcons ) + count( $validFooterLinks ) > 0 ) { ?>
-<div id="footer"<?php $this->html('userlangattributes') ?>>
+<div id="footer" role="contentinfo"<?php $this->html('userlangattributes') ?>>
 <?php
                $footerEnd = '</div>';
        } else {
@@ -200,8 +204,8 @@ echo $footerEnd;
        function searchBox() {
                global $wgUseTwoButtonsSearchForm;
 ?>
-       <div id="p-search" class="portlet">
-               <h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+       <div id="p-search" class="portlet" role="search">
+               <h3><label for="searchInput"><?php $this->msg('search') ?></label></h3>
                <div id="searchBody" class="pBody">
                        <form action="<?php $this->text('wgScript') ?>" id="searchform">
                                <input type='hidden' name="title" value="<?php $this->text('searchtitle') ?>"/>
@@ -227,8 +231,8 @@ echo $footerEnd;
         */
        function cactions() {
 ?>
-       <div id="p-cactions" class="portlet">
-               <h5><?php $this->msg('views') ?></h5>
+       <div id="p-cactions" class="portlet" role="navigation">
+               <h3><?php $this->msg('views') ?></h3>
                <div class="pBody">
                        <ul><?php
                                foreach($this->data['content_actions'] as $key => $tab) {
@@ -244,8 +248,8 @@ echo $footerEnd;
        /*************************************************************************************************/
        function toolbox() {
 ?>
-       <div class="portlet" id="p-tb">
-               <h5><?php $this->msg('toolbox') ?></h5>
+       <div class="portlet" id="p-tb" role="navigation">
+               <h3><?php $this->msg('toolbox') ?></h3>
                <div class="pBody">
                        <ul>
 <?php
@@ -267,8 +271,8 @@ echo $footerEnd;
        function languageBox() {
                if( $this->data['language_urls'] ) {
 ?>
-       <div id="p-lang" class="portlet">
-               <h5<?php $this->html('userlangattributes') ?>><?php $this->msg('otherlanguages') ?></h5>
+       <div id="p-lang" class="portlet" role="navigation">
+               <h3<?php $this->html('userlangattributes') ?>><?php $this->msg('otherlanguages') ?></h3>
                <div class="pBody">
                        <ul>
 <?php          foreach($this->data['language_urls'] as $key => $langlink) { ?>
@@ -288,7 +292,7 @@ echo $footerEnd;
         * @param $cont array|string
         */
        function customBox( $bar, $cont ) {
-               $portletAttribs = array( 'class' => 'generated-sidebar portlet', 'id' => Sanitizer::escapeId( "p-$bar" ) );
+               $portletAttribs = array( 'class' => 'generated-sidebar portlet', 'id' => Sanitizer::escapeId( "p-$bar" ), 'role' => 'navigation' );
                $tooltip = Linker::titleAttrib( "p-$bar" );
                if ( $tooltip !== false ) {
                        $portletAttribs['title'] = $tooltip;
@@ -296,7 +300,7 @@ echo $footerEnd;
                echo '  ' . Html::openElement( 'div', $portletAttribs );
 ?>
 
-               <h5><?php $msg = wfMessage( $bar ); echo htmlspecialchars( $msg->exists() ? $msg->text() : $bar ); ?></h5>
+               <h3><?php $msg = wfMessage( $bar ); echo htmlspecialchars( $msg->exists() ? $msg->text() : $bar ); ?></h3>
                <div class='pBody'>
 <?php   if ( is_array( $cont ) ) { ?>
                        <ul>
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 de11639..5b358e0 100644 (file)
@@ -2,6 +2,22 @@
 /**
  * Standard (a.k.a. Classic) skin: old MediaWiki default skin
  *
+ * 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 Skins
  */
@@ -21,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 7fbca41..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' );
        }
@@ -156,7 +156,7 @@ class VectorTemplate extends BaseTemplate {
                <div id="mw-page-base" class="noprint"></div>
                <div id="mw-head-base" class="noprint"></div>
                <!-- content -->
-               <div id="content" class="mw-body">
+               <div id="content" class="mw-body" role="main">
                        <a id="top"></a>
                        <div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
                        <?php if ( $this->data['sitenotice'] ): ?>
@@ -165,7 +165,10 @@ class VectorTemplate extends BaseTemplate {
                        <!-- /sitenotice -->
                        <?php endif; ?>
                        <!-- firstHeading -->
-                       <h1 id="firstHeading" class="firstHeading"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+                       <h1 id="firstHeading" class="firstHeading" lang="<?php
+                               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
+                               $this->html( 'pageLanguage' );
+                       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
                        <!-- /firstHeading -->
                        <!-- bodyContent -->
                        <div id="bodyContent">
@@ -224,27 +227,30 @@ class VectorTemplate extends BaseTemplate {
                        <!-- /bodyContent -->
                </div>
                <!-- /content -->
-               <!-- header -->
-               <div id="mw-head" class="noprint">
-                       <?php $this->renderNavigation( 'PERSONAL' ); ?>
-                       <div id="left-navigation">
-                               <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
-                       </div>
-                       <div id="right-navigation">
-                               <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
+               <div id="mw-navigation">
+                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
+                       <!-- header -->
+                       <div id="mw-head" class="noprint">
+                               <?php $this->renderNavigation( 'PERSONAL' ); ?>
+                               <div id="left-navigation">
+                                       <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
+                               </div>
+                               <div id="right-navigation">
+                                       <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
+                               </div>
                        </div>
-               </div>
-               <!-- /header -->
-               <!-- panel -->
+                       <!-- /header -->
+                       <!-- panel -->
                        <div id="mw-panel" class="noprint">
                                <!-- logo -->
-                                       <div id="p-logo"><a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ) ?>></a></div>
+                                       <div id="p-logo" role="banner"><a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ) ?>></a></div>
                                <!-- /logo -->
                                <?php $this->renderPortals( $this->data['sidebar'] ); ?>
                        </div>
-               <!-- /panel -->
+                       <!-- /panel -->
+               </div>
                <!-- footer -->
-               <div id="footer"<?php $this->html( 'userlangattributes' ) ?>>
+               <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
                        <?php foreach( $this->getFooterLinks() as $category => $links ): ?>
                                <ul id="footer-<?php echo $category ?>">
                                        <?php foreach( $links as $link ): ?>
@@ -327,8 +333,8 @@ class VectorTemplate extends BaseTemplate {
                        $msg = $name;
                }
                ?>
-<div class="portal" id='<?php echo Sanitizer::escapeId( "p-$name" ) ?>'<?php echo Linker::tooltip( 'p-' . $name ) ?>>
-       <h5<?php $this->html( 'userlangattributes' ) ?>><?php $msgObj = wfMessage( $msg ); echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg ); ?></h5>
+<div class="portal" role="navigation" id='<?php echo Sanitizer::escapeId( "p-$name" ) ?>'<?php echo Linker::tooltip( 'p-' . $name ) ?>>
+       <h3<?php $this->html( 'userlangattributes' ) ?>><?php $msgObj = wfMessage( $msg ); echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg ); ?></h3>
        <div class="body">
 <?php
                if ( is_array( $content ) ): ?>
@@ -377,8 +383,8 @@ class VectorTemplate extends BaseTemplate {
                        switch ( $element ) {
                                case 'NAMESPACES':
 ?>
-<div id="p-namespaces" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h5><?php $this->msg( 'namespaces' ) ?></h5>
+<div id="p-namespaces" role="navigation" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+       <h3><?php $this->msg( 'namespaces' ) ?></h3>
        <ul<?php $this->html( 'userlangattributes' ) ?>>
                <?php foreach ( $this->data['namespace_urls'] as $link ): ?>
                        <li <?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></span></li>
@@ -389,15 +395,15 @@ class VectorTemplate extends BaseTemplate {
                                break;
                                case 'VARIANTS':
 ?>
-<div id="p-variants" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h4>
+<div id="p-variants" role="navigation" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+       <h3 id="mw-vector-current-variant">
        <?php foreach ( $this->data['variant_urls'] as $link ): ?>
                <?php if ( stripos( $link['attributes'], 'selected' ) !== false ): ?>
                        <?php echo htmlspecialchars( $link['text'] ) ?>
                <?php endif; ?>
        <?php endforeach; ?>
-       </h4>
-       <h5><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h5>
+       </h3>
+       <h3><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h3>
        <div class="menu">
                <ul>
                        <?php foreach ( $this->data['variant_urls'] as $link ): ?>
@@ -410,8 +416,8 @@ class VectorTemplate extends BaseTemplate {
                                break;
                                case 'VIEWS':
 ?>
-<div id="p-views" class="vectorTabs<?php if ( count( $this->data['view_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
-       <h5><?php $this->msg('views') ?></h5>
+<div id="p-views" role="navigation" class="vectorTabs<?php if ( count( $this->data['view_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
+       <h3><?php $this->msg('views') ?></h3>
        <ul<?php $this->html('userlangattributes') ?>>
                <?php foreach ( $this->data['view_urls'] as $link ): ?>
                        <li<?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php
@@ -427,8 +433,8 @@ class VectorTemplate extends BaseTemplate {
                                break;
                                case 'ACTIONS':
 ?>
-<div id="p-cactions" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h5><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h5>
+<div id="p-cactions" role="navigation" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+       <h3><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h3>
        <div class="menu">
                <ul<?php $this->html( 'userlangattributes' ) ?>>
                        <?php foreach ( $this->data['action_urls'] as $link ): ?>
@@ -441,21 +447,23 @@ class VectorTemplate extends BaseTemplate {
                                break;
                                case 'PERSONAL':
 ?>
-<div id="p-personal" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h5><?php $this->msg( 'personaltools' ) ?></h5>
+<div id="p-personal" role="navigation" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+       <h3><?php $this->msg( 'personaltools' ) ?></h3>
        <ul<?php $this->html( 'userlangattributes' ) ?>>
-<?php                  foreach( $this->getPersonalTools() as $key => $item ) { ?>
-               <?php echo $this->makeListItem( $key, $item ); ?>
-
-<?php                  } ?>
+<?php
+                                       $personalTools = $this->getPersonalTools();
+                                       foreach ( $personalTools as $key => $item ) {
+                                               echo $this->makeListItem( $key, $item );
+                                       }
+?>
        </ul>
 </div>
 <?php
                                break;
                                case 'SEARCH':
 ?>
-<div id="p-search">
-       <h5<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h5>
+<div id="p-search" role="search">
+       <h3<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
        <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
                <?php if ( $wgVectorUseSimpleSearch && $this->getSkin()->getUser()->getOption( 'vector-simplesearch' ) ): ?>
                <div id="simpleSearch">
index 0d9615f..349638a 100644 (file)
@@ -97,7 +97,13 @@ textarea {
        color: #446688;
 }
 
-#quickbar h6 {
+/* Hide, but keep accessible for screen-readers */
+#mw-navigation h2 {
+       position: absolute;
+       top: -9999px;
+}
+
+#quickbar h3 {
        font-family: Verdana, Arial, sans-serif;
        font-size: 10pt;
        font-weight: bold;
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 ed4e8c5..34d3357 100644 (file)
        direction: rtl;
 }
 
+/* User-Agent styles for new HTML5 elements */
+mark {
+       background-color: yellow;
+       color: black;
+}
+
 /* Input types that should follow user direction, like buttons */
 /* TODO: What about buttons in wikipage content ? */
 input[type="submit"],
index 80cdcda..f201209 100644 (file)
@@ -58,6 +58,7 @@ body {
        font-variant: small-caps;
 }
 
+#p-personal h3,
 #p-personal h5 {
        display: none;
 }
@@ -125,6 +126,12 @@ body {
        background-color: #f0f0f0;
 }
 
+/* Hide, but keep accessible for screen-readers */
+#mw_portlets h2 {
+       position: absolute;
+       top: -9999px;
+}
+
 #mw_main {
        padding: 0 0 0 0;
        margin: 0 0 0 0;
@@ -170,11 +177,13 @@ textarea {
        margin-top: .4em;
 }
 
+.portlet h3,
 .portlet h5 {
        padding: 0.1em 0 0.3em 1em;
        margin: 0 0 0 0;
        background-color: #dddddd;
        font-weight: bold;
+       font-size: 0.83em;
        border-bottom: solid 1px #3c78b5;
        height: 1.1em;
 }
@@ -243,6 +252,7 @@ ul {
        color: white;
 }
 
+#p-cactions h3,
 #p-cactions h5 {
        display: none;
 }
index 5866d97..4cbc093 100644 (file)
@@ -24,6 +24,11 @@ div#content {
 div#column-one {
        padding-top: 160px;
 }
+/* Hide, but keep accessible for screen-readers */
+#column-one h2 {
+       position: absolute;
+       top: -9999px;
+}
 div#content {
        background: white;
        color: black;
@@ -71,6 +76,7 @@ a.new,
 }
 
 ul {
+       list-style-type: square;
        /* @embed */
        list-style-image: url(bullet.gif);
 }
@@ -224,12 +230,7 @@ table.rimage {
        width: 11.6em;
        overflow: hidden;
 }
-.portlet h4 {
-       font-size: 95%;
-       font-weight: normal;
-       white-space: nowrap;
-}
-.portlet h5 {
+.portlet h3 {
        background: transparent;
        padding: 0 1em 0 .5em;
        display: inline;
@@ -239,18 +240,6 @@ table.rimage {
        font-weight: normal;
        white-space: nowrap;
 }
-.portlet h6 {
-       background: #ffae2e;
-       border: 1px solid #2f6fab;
-       border-style: solid solid none solid;
-       padding: 0 1em 0 1em;
-       text-transform: lowercase;
-       display: block;
-       font-size: 1em;
-       height: 1.2em;
-       font-weight: normal;
-       white-space: nowrap;
-}
 .pBody {
        font-size: 95%;
        background-color: white;
@@ -259,18 +248,8 @@ table.rimage {
        border: 1px solid #aaa;
        padding: 0 .8em .3em .5em;
 }
-.portlet h1,
-.portlet h2,
-.portlet h3,
-.portlet h4 {
-       margin: 0;
-       padding: 0;
-}
 .portlet ul {
        line-height: 1.5em;
-       list-style-type: square;
-       /* @embed */
-       list-style-image: url(bullet.gif);
        font-size: 95%;
 }
 .portlet li {
@@ -291,7 +270,7 @@ table.rimage {
        width: 12em;
        overflow: visible;
 }
-#p-logo h5 {
+#p-logo h3 {
        display: none;
 }
 #p-logo a,
@@ -352,7 +331,7 @@ input.searchButton {
        overflow: visible;
        line-height: 1.2em;
 }
-#p-personal h5 {
+#p-personal h3 {
        display: none;
 }
 #p-personal .portlet,
@@ -372,7 +351,8 @@ input.searchButton {
        padding: 0 2em 0 3em;
        margin: 0;
        text-align: right;
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
        z-index: 0;
        background: none;
        cursor: default;
@@ -432,11 +412,11 @@ li#pt-login {
        background: none;
        border-collapse: collapse;
        padding-left: 1em;
-       list-style: none;
        font-size: 95%;
 }
 #p-cactions ul {
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
 }
 #p-cactions li {
        display: inline;
@@ -474,7 +454,7 @@ li#pt-login {
        text-decoration: none;
        background-color: white;
 }
-#p-cactions h5 {
+#p-cactions h3 {
        display: none;
 }
 #p-cactions li.istalk {
@@ -515,8 +495,7 @@ li#ca-print {
 }
 
 /* Override text-transform on languages where capitalization is significant */
-.capitalize-all-nouns .portlet h5,
-.capitalize-all-nouns .portlet h6,
+.capitalize-all-nouns .portlet h3,
 .capitalize-all-nouns #p-personal ul,
 .capitalize-all-nouns #p-cactions ul li a {
        text-transform: none;
@@ -824,7 +803,8 @@ div#searchTarget {
 }
 
 div#searchTarget ul li {
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
 }
 
 div#searchTarget ul li:before {
index 7b4f2ae..edb1d7d 100644 (file)
@@ -84,6 +84,12 @@ a:hover {
        left: 0;
 }
 
+/* Hide, but keep accessible for screen-readers */
+#column-one h2 {
+       position: absolute;
+       top: -9999px;
+}
+
 body {
        margin: 0;
        padding: 0;
index 9042ff7..26967a5 100644 (file)
@@ -37,6 +37,11 @@ div#content {
        color: black;
        direction: ltr;
 }
+/* Hide, but keep accessible for screen-readers */
+#mw-navigation h2 {
+       position: absolute;
+       top: -9999px;
+}
 /* Head */
 #mw-page-base {
        height: 5em;
@@ -61,6 +66,7 @@ div#mw-head {
        right: 0;
        width: 100%;
 }
+div#mw-head h3,
 div#mw-head h5 {
        margin: 0;
        padding: 0;
@@ -74,12 +80,16 @@ div.emptyPortlet {
        position: absolute;
        top: 0.33em;
        right: 0.75em;
+       /* Display on top of page tabs - bug 37158 */
+       z-index: 1;
 }
+#p-personal h3,
 #p-personal h5 {
        display: none;
 }
 #p-personal ul {
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
        margin: 0;
        padding-left: 10em; /* Keep from overlapping logo */
 }
@@ -106,7 +116,9 @@ div.emptyPortlet {
        margin-top: 2.5em;
 }
 /* Navigation Labels */
+div.vectorTabs h3,
 div.vectorTabs h5,
+div.vectorMenu h3 span,
 div.vectorMenu h5 span {
        display: none;
 }
@@ -129,7 +141,8 @@ div.vectorTabs ul {
 }
 div.vectorTabs ul {
        height: 100%;
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
        margin: 0;
        padding: 0;
 }
@@ -226,6 +239,7 @@ body.rtl div.vectorMenu {
 }
 /* OVERRIDDEN BY COMPLIANT BROWSERS */
 /* @noflip */
+div#mw-head div.vectorMenu h3,
 div#mw-head div.vectorMenu h5 {
        float: left;
        /* @embed */
@@ -233,15 +247,18 @@ div#mw-head div.vectorMenu h5 {
        background-repeat: no-repeat;
 }
 /* This will be flipped - unlike the one above it */
+div#mw-head div.vectorMenu h3,
 div#mw-head div.vectorMenu h5 {
        background-position: bottom left;
        margin-left: -1px;
 }
 /* IGNORED BY IE6 */
+div#mw-head div.vectorMenu > h3,
 div#mw-head div.vectorMenu > h5 {
        background-image: none;
 }
-div#mw-head div.vectorMenu h4 {
+div#mw-head div.vectorMenu h4,
+div.vectorMenu#p-variants #mw-vector-current-variant {
        display: inline-block;
        float: left;
        font-size: 0.8em;
@@ -252,20 +269,23 @@ div#mw-head div.vectorMenu h4 {
 }
 /* OVERRIDDEN BY COMPLIANT BROWSERS */
 /* @noflip */
+div.vectorMenu h3 a,
 div.vectorMenu h5 a {
        display: inline-block;
        width: 24px;
-       height: 2.5em;
+       height: 1.9em;
        text-decoration: none;
        /* @embed */
        background-image: url(images/tab-break.png);
        background-repeat: no-repeat;
 }
 /* This will be flipped - unlike the one above it */
+div.vectorMenu h3 a,
 div.vectorMenu h5 a {
        background-position: bottom right;
 }
 /* IGNORED BY IE6 */
+div.vectorMenu h3 > a,
 div.vectorMenu h5 > a {
        display: block;
 }
@@ -302,9 +322,8 @@ div.vectorMenu ul {
        background-color: white;
        border: solid 1px silver;
        border-top-width: 0;
-       list-style: none;
-       list-style-image: none;
        list-style-type: none;
+       list-style-image: none;
        padding: 0;
        margin: 0;
        margin-left: -1px;
@@ -346,6 +365,7 @@ div.vectorMenu li.selected a:visited {
        text-decoration: none;
 }
 /* Search */
+#p-search h3,
 #p-search h5 {
        display: none;
 }
@@ -463,6 +483,7 @@ div#mw-panel div.portal {
        padding-bottom: 1.5em;
        direction: ltr;
 }
+div#mw-panel div.portal h3,
 div#mw-panel div.portal h5 {
        font-weight: normal;
        color: #444;
@@ -483,9 +504,8 @@ div#mw-panel div.portal div.body {
        background-position: top left;
 }
 div#mw-panel div.portal div.body ul {
-       list-style: none;
-       list-style-image: none;
        list-style-type: none;
+       list-style-image: none;
        padding: 0;
        margin: 0;
 }
@@ -515,9 +535,8 @@ div#footer {
        direction: ltr;
 }
 div#footer ul {
-       list-style: none;
-       list-style-image: none;
        list-style-type: none;
+       list-style-image: none;
        margin: 0;
        padding: 0;
 }
@@ -685,6 +704,7 @@ div#content {
 }
 
 ul {
+       list-style-type: disc;
        /* @embed */
        list-style-image: url(images/bullet-icon.png);
 }
index 8b719e5..4427d9a 100644 (file)
@@ -4,7 +4,7 @@
 jQuery( function ( $ ) {
        $( 'div.vectorMenu' ).each( function () {
                var $el = $( this );
-               $el.find( 'h5:first a:first' )
+               $el.find( 'h3:first a:first' )
                        // For accessibility, show the menu when the hidden link in the menu is clicked (bug 24298)
                        .click( function ( e ) {
                                $el.find( '.menu:first' ).toggleClass( 'menuForceShow' );
index 8ed24bb..8373b51 100644 (file)
  */
 
 global $wgAutoloadClasses;
-$testFolder = __DIR__;
+$testDir = __DIR__;
 
 $wgAutoloadClasses += array(
 
-       //PHPUnit
-       'MediaWikiTestCase' => "$testFolder/phpunit/MediaWikiTestCase.php",
-       'MediaWikiPHPUnitCommand' => "$testFolder/phpunit/MediaWikiPHPUnitCommand.php",
-       'MediaWikiLangTestCase' => "$testFolder/phpunit/MediaWikiLangTestCase.php",
-       'NewParserTest' => "$testFolder/phpunit/includes/parser/NewParserTest.php",
+       # tests
+       'DbTestPreviewer' => "$testDir/testHelpers.inc",
+       'DbTestRecorder' => "$testDir/testHelpers.inc",
+       'DelayedParserTest' => "$testDir/testHelpers.inc",
+       'TestFileIterator' => "$testDir/testHelpers.inc",
+       'TestRecorder' => "$testDir/testHelpers.inc",
 
-       //includes
-       'BlockTest' => "$testFolder/phpunit/includes/BlockTest.php",
+       # tests/phpunit
+       'MediaWikiTestCase' => "$testDir/phpunit/MediaWikiTestCase.php",
+       'MediaWikiPHPUnitCommand' => "$testDir/phpunit/MediaWikiPHPUnitCommand.php",
+       'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php",
+       'MediaWikiProvide' => "$testDir/phpunit/includes/Providers.php",
+       'TestUser' => "$testDir/phpunit/includes/TestUser.php",
 
-       //API
-       'ApiFormatTestBase' => "$testFolder/phpunit/includes/api/format/ApiFormatTestBase.php",
-       'ApiTestCase' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
-       'TestUser' => "$testFolder/phpunit/includes/TestUser.php",
-       'MockApi' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
-       'RandomImageGenerator' => "$testFolder/phpunit/includes/api/RandomImageGenerator.php",
-       'UserWrapper' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
+       # tests/phpunit/includes
+       'BlockTest' => "$testDir/phpunit/includes/BlockTest.php",
+       'RevisionStorageTest' => "$testDir/phpunit/includes/RevisionStorageTest.php",
+       'WikiPageTest' => "$testDir/phpunit/includes/WikiPageTest.php",
+
+       //db
+       'ORMTableTest' => "$testDir/phpunit/includes/db/ORMTableTest.php",
 
        //Selenium
-       'SeleniumTestConstants' => "$testFolder/selenium/SeleniumTestConstants.php",
+       'SeleniumTestConstants' => "$testDir/selenium/SeleniumTestConstants.php",
+
+       # tests/phpunit/includes/api
+       'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
+       'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php",
+       'ApiTestContext' => "$testDir/phpunit/includes/api/ApiTestCase.php",
+       'MockApi' => "$testDir/phpunit/includes/api/ApiTestCase.php",
+       'RandomImageGenerator' => "$testDir/phpunit/includes/api/RandomImageGenerator.php",
+       'UserWrapper' => "$testDir/phpunit/includes/api/ApiTestCase.php",
+
+       # tests/phpunit/includes/content
+       'DummyContentHandlerForTesting' => "$testDir/phpunit/includes/content/ContentHandlerTest.php",
+       'DummyContentForTesting' => "$testDir/phpunit/includes/content/ContentHandlerTest.php",
+       'ContentHandlerTest' => "$testDir/phpunit/includes/content/ContentHandlerTest.php",
+       'JavaScriptContentTest' => "$testDir/phpunit/includes/content/JavaScriptContentTest.php",
+       'TextContentTest' => "$testDir/phpunit/includes/content/TextContentTest.php",
+       'WikitextContentTest' => "$testDir/phpunit/includes/content/WikitextContentTest.php",
+
+       # tests/phpunit/includes/db
+       'ORMRowTest' => "$testDir/phpunit/includes/db/ORMRowTest.php",
+
+       # tests/phpunit/includes/parser
+       'NewParserTest' => "$testDir/phpunit/includes/parser/NewParserTest.php",
+
+       # tests/phpunit/includes/libs
+       'GenericArrayObjectTest' => "$testDir/phpunit/includes/libs/GenericArrayObjectTest.php",
+
+       # tests/phpunit/includes/site
+       'SiteObjectTest' => "$testDir/phpunit/includes/site/SiteObjectTest.php",
+       'TestSites' => "$testDir/phpunit/includes/site/TestSites.php",
+
+       # tests/phpunit/languages
+       'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
 
-       //maintenance
-       'DumpTestCase' => "$testFolder/phpunit/maintenance/DumpTestCase.php",
-       'BackupDumper' => "$testFolder/../maintenance/backup.inc",
+       # tests/phpunit/maintenance
+       'DumpTestCase' => "$testDir/phpunit/maintenance/DumpTestCase.php",
 
-       //language
-       'LanguageClassesTestCase' => "$testFolder/phpunit/languages/LanguageClassesTestCase.php",
+       # tests/parser
+       'ParserTest' => "$testDir/parser/parserTest.inc",
+       'ParserTestParserHook' => "$testDir/parser/parserTestsParserHook.php",
 
-       //Generic providers
-       'MediaWikiProvide' => "$testFolder/phpunit/includes/Providers.php",
+       # tests/selenium
+       'Selenium' => "$testDir/selenium/Selenium.php",
+       'SeleniumLoader' => "$testDir/selenium/SeleniumLoader.php",
+       'SeleniumTestCase' => "$testDir/selenium/SeleniumTestCase.php",
+       'SeleniumTestConsoleLogger' => "$testDir/selenium/SeleniumTestConsoleLogger.php",
+       'SeleniumTestConstants' => "$testDir/selenium/SeleniumTestConstants.php",
+       'SeleniumTestHTMLLogger' => "$testDir/selenium/SeleniumTestHTMLLogger.php",
+       'SeleniumTestListener' => "$testDir/selenium/SeleniumTestListener.php",
+       'SeleniumTestSuite' => "$testDir/selenium/SeleniumTestSuite.php",
+       'SeleniumConfig' => "$testDir/selenium/SeleniumConfig.php",
 );
 
index b9f1817..ea1b290 100644 (file)
@@ -692,7 +692,6 @@ class ParserTest {
                        'wgExternalLinkTarget' => false,
                        'wgAlwaysUseTidy' => false,
                        'wgHtml5' => true,
-                       'wgCleanupPresentationalAttributes' => true,
                        'wgWellFormedXml' => true,
                        'wgAllowMicrodataAttributes' => true,
                        'wgAdaptiveMessageCache' => true,
index 2f20fbc..63c9e65 100644 (file)
@@ -48,7 +48,7 @@ Template:Blank
 !! endarticle
 
 !! article
-Template:!
+Template:pipe
 !! text
 |
 !! endarticle
@@ -65,6 +65,24 @@ Template:inner list
 * item 1
 !! endarticle
 
+!! article
+Template:tbl-start
+!! text
+{|
+!! endarticle
+
+!! article
+Template:tbl-end
+!! text
+|}
+!! endarticle
+
+!! article
+Template:!
+!! text
+|
+!! endarticle
+
 !! article
 Template:echo
 !! text
@@ -89,6 +107,19 @@ Template:attr_str
 {{{1}}}="{{{2}}}"
 !! endarticle
 
+!! article
+Template:table_attribs
+!! text
+<noinclude>
+|</noinclude>style="color: red"| Foo
+!! endarticle
+
+!! article
+A?b
+!! text
+Weirdo titles!
+!! endarticle
+
 ###
 ### Basic tests
 ###
@@ -523,7 +554,7 @@ nowiki 3
 ### Comments
 ###
 !! test
-Comments and Pre
+Comments and Indent-Pre
 !! input
 <!-- comment 1 --> asdf
 
@@ -754,6 +785,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
 ###
@@ -774,6 +823,17 @@ And a <a href="/wiki/Main_Page" title="Main Page">link</a>
 </pre>
 !! end
 
+!! test
+Ident preformatting with inline content
+!! input
+ a
+ ''b''
+!! result
+<pre>a
+<i>b</i>
+</pre>
+!! end
+
 !! test
 <pre> with <nowiki> inside (compatibility with 1.6 and earlier)
 !! input
@@ -908,8 +968,17 @@ Bug 6200: Preformatted in <blockquote>
 </p>
 !! end
 
+!! test
+</pre> inside nowiki
+!! input
+<nowiki></pre></nowiki>
+!! result
+<p>&lt;/pre&gt;
+</p>
+!! end
+
 !!test
-Templates: Pre: 1a. Templates that break a line should suppress <pre>
+Templates: Indent-Pre: 1a. Templates that break a line should suppress <pre>
 !!input
  {{echo|}}
 !!result
@@ -917,7 +986,7 @@ Templates: Pre: 1a. Templates that break a line should suppress <pre>
 !!end
 
 !!test
-Templates: Pre: 1b. Templates that break a line should suppress <pre>
+Templates: Indent-Pre: 1b. Templates that break a line should suppress <pre>
 !!input
  {{echo|
 foo}}
@@ -927,7 +996,7 @@ foo}}
 !!end
 
 !! test
-Templates: Pre: 1c: Wrapping should be based on expanded content
+Templates: Indent-Pre: 1c: Wrapping should be based on expanded content
 !! input
  {{echo|a
 b}}
@@ -939,7 +1008,7 @@ b}}
 !!end
 
 !! test
-Templates: Pre: 1d: Wrapping should be based on expanded content
+Templates: Indent-Pre: 1d: Wrapping should be based on expanded content
 !! input
  {{echo|a
 b
@@ -960,10 +1029,12 @@ c
 !!end
 
 !!test
-Templates: Pre: 1e. Wrapping should be based on expanded content
+Templates: Indent-Pre: 1e. Wrapping should be based on expanded content
 !!input
 {{echo| foo}}
 
+{{echo| foo}}{{echo| bar}}
+
 {{echo| foo}}
 {{echo| bar}}
 
@@ -975,6 +1046,8 @@ Templates: Pre: 1e. Wrapping should be based on expanded content
 !!result
 <pre>foo
 </pre>
+<pre>foo bar
+</pre>
 <pre>foo
 bar
 </pre>
@@ -986,12 +1059,98 @@ bar
 </pre>
 !!end
 
+!! test
+Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
+!! input
+{{echo| }}a
+
+{{echo|
+ }}a
+
+{{echo|
+ b}}
+
+{{echo|a
+ }}b
+
+{{echo|a
+}} b
+!!result
+<pre>a
+</pre>
+<p><br />
+</p>
+<pre>a
+</pre>
+<p><br />
+</p>
+<pre>b
+</pre>
+<p>a
+</p>
+<pre>b
+</pre>
+<p>a
+</p>
+<pre>b
+</pre>
+!!end
+
+!! test
+Templates: Single-line variant of parameter whitespace stripping test
+!! input
+{{echo| a}}
+
+{{echo|1= a}}
+
+{{echo|{{echo| a}}}}
+
+{{echo|1={{echo| a}}}}
+!! result
+<pre>a
+</pre>
+<p>a
+</p>
+<pre>a
+</pre>
+<p>a
+</p>
+!! end
+
+!! test
+Templates: Strip whitespace from named parameters, but not positional ones
+!! input
+{{echo|
+ foo}}
+
+{{echo|
+* foo}}
+
+{{echo| 1 =
+ foo}}
+
+{{echo| 1 =
+* foo}}
+!! result
+<pre>foo
+</pre>
+<p><br />
+</p>
+<ul><li> foo
+</li></ul>
+<p>foo
+</p>
+<ul><li> foo
+</li></ul>
+
+!! end
+
 ###
 ### Parsoid-centric tests for testing RT edge cases for pre
 ###
 
 !!test
-1a. Pre and Comments
+1a. Indent-Pre and Comments
 !!input
  a
 <!--a-->
@@ -1004,7 +1163,7 @@ c
 !!end
 
 !!test
-1b. Pre and Comments
+1b. Indent-Pre and Comments
 !!input
  a
  <!--a-->
@@ -1017,7 +1176,7 @@ c
 !!end
 
 !!test
-1c. Pre and Comments
+1c. Indent-Pre and Comments
 !!input
 <!--a-->  a
 
@@ -1030,7 +1189,7 @@ c
 !!end
 
 !!test
-2a. Pre and tables
+2a. Indent-Pre and tables
 !!input
  {|
  |-
@@ -1051,7 +1210,7 @@ c
 !!end
 
 !!test
-2b. Pre and tables
+2b. Indent-Pre and tables
 !!input
   {|
  |-
@@ -1067,7 +1226,24 @@ c
 !!end
 
 !!test
-3. Pre and block tags
+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
  <p> foo </p>
  <div> foo </div>
@@ -1079,6 +1255,58 @@ c
 </pre>
 !!end
 
+!!test
+3b. Indent-Pre and block tags (pre-content on separate line)
+!!input
+<p>
+ foo
+</p>
+
+<div>
+ foo
+</div>
+
+<center>
+ foo
+</center>
+
+<blockquote>
+ foo
+</blockquote>
+
+<table><tr><td>
+ foo
+</td></tr></table>
+
+<ul><li>
+  foo
+</li></ul>
+
+!!result
+<p>
+ foo
+</p>
+<div>
+<pre>foo
+</pre>
+</div>
+<center>
+<pre>foo
+</pre>
+</center>
+<blockquote>
+ foo
+</blockquote>
+<table><tr><td>
+<pre>foo
+</pre>
+</td></tr></table>
+<ul><li>
+  foo
+</li></ul>
+
+!!end
+
 !!test
 4. Multiple spaces at start-of-line
 !!input
@@ -1098,6 +1326,94 @@ 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)
+###
+
+!!test
+HTML-pre: 1. embedded newlines
+!!input
+<pre>foo</pre>
+
+<pre>
+foo
+</pre>
+
+<pre>
+
+foo
+</pre>
+
+<pre>
+
+
+foo
+</pre>
+!!result
+<pre>foo</pre>
+<pre>
+foo
+</pre>
+<pre>
+
+foo
+</pre>
+<pre>
+
+
+foo
+</pre>
+
+!!end
+
+!!test
+HTML-pre: 2: indented text
+!!input
+<pre>
+ foo
+</pre>
+!!result
+<pre>
+ foo
+</pre>
+
+!!end
+
+!!test
+HTML-pre: 3: other wikitext
+!!input
+<pre>
+* foo
+# bar
+= no-h =
+'' no-italic ''
+[[ NoLink ]]
+</pre>
+!!result
+<pre>
+* foo
+# bar
+= no-h =
+'' no-italic ''
+[[ NoLink ]]
+</pre>
+
+!!end
+
 ###
 ### Definition lists
 ###
@@ -1235,13 +1551,13 @@ Bug 11748: Literal closing tags
 Definition and unordered list using wiki syntax nested in unordered list using html tags.
 !! input
 <ul><li>
-; term : description 
+; term : description
 * unordered
 </li>
 </ul>
 !! result
 <ul><li>
-<dl><dt> term&#160;</dt><dd> description 
+<dl><dt> term&#160;</dt><dd> description
 </dd></dl>
 <ul><li> unordered
 </li></ul>
@@ -1391,6 +1707,66 @@ should be left alone
 ## See also: https://bugzilla.wikimedia.org/show_bug.cgi?id=6569
 ## and http://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html
 
+!! test
+Table / list interaction: indented table with lists in table contents
+!! input
+:{|
+|-
+| a
+* b
+|-
+| c
+* d
+|}
+!! result
+<dl><dd><table>
+
+<tr>
+<td> a
+<ul><li> b
+</li></ul>
+</td></tr>
+<tr>
+<td> c
+<ul><li> d
+</li></ul>
+</td></tr></table></dd></dl>
+
+!! end
+
+!!test
+Table / list interaction: lists nested in tables nested in indented lists
+!!input
+:{|
+|
+:a
+:b
+|
+*c
+*d
+|}
+
+*e
+*f
+!!result
+<dl><dd><table>
+<tr>
+<td>
+<dl><dd>a
+</dd><dd>b
+</dd></dl>
+</td>
+<td>
+<ul><li>c
+</li><li>d
+</li></ul>
+</td></tr></table></dd></dl>
+<ul><li>e
+</li><li>f
+</li></ul>
+
+!!end
+
 !! test
 Definition Lists: Nesting: Multi-level (Parsoid only)
 !! options
@@ -2105,6 +2481,15 @@ http:/example.com
 </p>
 !! end
 
+!! test
+Bracketed external links with template-generated invalid target
+!! input
+[{{echo|http:/example.com}} title]
+!! result
+<p>[http:/example.com title]
+</p>
+!! end
+
 !! test
 Bug 2702: Mismatched <i>, <b> and <a> tags are invalid
 !! input
@@ -2276,6 +2661,33 @@ http://[2404:130:0:1000::187:2]/index.php
 </p>
 !! end
 
+!! test
+Non-extlinks in brackets
+!! input
+[foo]
+[foo bar]
+[foo ''bar'']
+[fool's] errand
+[fool's errand]
+[{{echo|foo}}]
+[{{echo|foo}} bar]
+[{{echo|foo}} ''bar'']
+[{{echo|foo}}l's] errand
+[{{echo|foo}}l's errand]
+!! result
+<p>[foo]
+[foo bar]
+[foo <i>bar</i>]
+[fool's] errand
+[fool's errand]
+[foo]
+[foo bar]
+[foo <i>bar</i>]
+[fool's] errand
+[fool's errand]
+</p>
+!! end
+
 ###
 ### Quotes
 ###
@@ -2361,12 +2773,76 @@ 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
+{|
+| foo bar foo | baz
+| foo bar foo || baz
+| style='color:red;' | baz
+| style='color:red;' || baz
+|}
+!! result
+<table>
+<tr>
+<td> baz
+</td>
+<td> foo bar foo </td>
+<td> baz
+</td>
+<td style="color:red;"> baz
+</td>
+<td> style='color:red;' </td>
+<td> baz
+</td></tr></table>
+
+!! end
+
 !! test
 Simple table
 !! input
-{| 
+{|
 | 1 || 2
-|- 
+|-
 | 3 || 4
 |}
 !! result
@@ -2385,7 +2861,7 @@ Simple table
 !! test
 Simple table but with multiple dashes for row wikitext
 !! input
-{| 
+{|
 | foo
 |-----
 | bar
@@ -2471,25 +2947,104 @@ Multiplication table
 
 !! end
 
+!! test
+Accept "||" in table headings
+!! input
+{|
+!h1 || h2
+|}
+!! result
+<table>
+<tr>
+<th>h1 </th>
+<th> h2
+</th></tr></table>
+
+!! end
+
+!! test
+Accept "||" in indented table headings
+!! input
+:{|
+!h1 || h2
+|}
+!! result
+<dl><dd><table>
+<tr>
+<th>h1 </th>
+<th> h2
+</th></tr></table></dd></dl>
+
+!! end
+
+!! test
+Accept empty attributes in td/th cells (td/th cells starting with leading ||)
+!! input
+{|
+!| h1
+|| a
+|}
+!! result
+<table>
+<tr>
+<th> h1
+</th>
+<td> a
+</td></tr></table>
+
+!! end
+
+!!test
+Accept "| !" at start of line in tables (ignore !-attribute)
+!!input
+{|
+|-
+| !style="color:red" | bar
+|}
+!!result
+<table>
+
+<tr>
+<td> bar
+</td></tr></table>
+
+!!end
+
 !!test
-Allow +/- in 2nd and later cells in a row
+Allow +/- in 2nd and later cells in a row, in 1st cell when td-attrs are present, or in 1st cell when there is a space between "|" and +/- 
 !!input
 {|
+|-
+|style='color:red;'|+1
+|style='color:blue;'|-1
+|-
 | 1 || 2 || 3
+| 1 ||+2 ||-3
 |-
-| 1 || +2 || -3
+| +1
+| -1
 |}
 !!result
 <table>
+
+<tr>
+<td style="color:red;">+1
+</td>
+<td style="color:blue;">-1
+</td></tr>
 <tr>
 <td> 1 </td>
 <td> 2 </td>
 <td> 3
+</td>
+<td> 1 </td>
+<td>+2 </td>
+<td>-3
 </td></tr>
 <tr>
-<td> 1 </td>
-<td> +2 </td>
-<td> -3
+<td> +1
+</td>
+<td> -1
 </td></tr></table>
 
 !!end
@@ -2498,12 +3053,12 @@ Allow +/- in 2nd and later cells in a row
 Table rowspan
 !! input
 {| border=1
-| Cell 1, row 1 
-|rowspan=2| Cell 2, row 1 (and 2) 
-| Cell 3, row 1 
-|- 
-| Cell 1, row 2 
-| Cell 3, row 2 
+| Cell 1, row 1
+|rowspan=2| Cell 2, row 1 (and 2)
+| Cell 3, row 1
+|-
+| Cell 1, row 2
+| Cell 3, row 2
 |}
 !! result
 <table border="1">
@@ -2608,6 +3163,78 @@ Indented table markup mixed with indented pre content (proposed in bug 6200)
 
 !! end
 
+!! test
+Template-generated table cell attributes and cell content
+!! input
+{|
+|{{table_attribs}}
+|}
+!! result
+<table>
+<tr>
+<td style="color: red"> Foo
+</td></tr></table>
+
+!! end
+
+!! test
+Table with row followed by newlines and table heading
+!! input
+{|
+|-
+
+! foo
+|}
+!! result
+<table>
+
+
+<tr>
+<th> foo
+</th></tr></table>
+
+!! end
+
+# FIXME: Preserve the attribute properly (with an empty string as value) in
+# the PHP parser. Parsoid implements the behavior below.
+!! test
+Table attributes with empty value
+!! options
+disabled
+!! input
+{|
+| style=| hello
+|}
+!! result
+<table>
+<tr>
+<td style=""> hello
+</td></tr></table>
+
+!! end
+
+!! test
+Wikitext table with a lot of comments
+!! input
+{|
+<!-- c0 -->
+| foo
+<!-- c1 -->
+|- <!-- c2 -->
+<!-- c3 -->
+|<!-- c4 -->
+<!-- c5 -->
+|}
+!! result
+<table>
+<tr>
+<td> foo
+</td></tr>
+<tr>
+<td>
+</td></tr></table>
+
+!! end
 
 ###
 ### Internal links
@@ -2693,6 +3320,37 @@ 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
+[[Main Page]]&quot;, [[Main Page]]&#97;
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>&quot;, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>&#97;
+</p>
+!! end
+
 !! test
 Link with 3 brackets
 !! input
@@ -2889,6 +3547,18 @@ Plain link to protocol-relative URL with link text
 </p>
 !! end
 
+!! test
+Plain link to page with question mark in title
+!! input
+[[A?b]]
+
+[[A?b|Baz]]
+!! result
+<p><a href="/wiki/A%3Fb" title="A?b">A?b</a>
+</p><p><a href="/wiki/A%3Fb" title="A?b">Baz</a>
+</p>
+!! end
+
 
 # I'm fairly sure the expected result here is wrong.
 # We want these to be URL links, not pseudo-pages with URLs for titles....
@@ -3042,6 +3712,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)
 ###
@@ -3155,6 +3843,15 @@ language=ln
 </p>
 !! end
 
+!! test
+Broken br tag sanitization
+!! input
+</br>
+!! result
+<p>&lt;/br&gt;
+</p>
+!! end
+
 !! test
 Incorrecly removing closing slashes from correctly formed XHTML
 !! input
@@ -3270,6 +3967,15 @@ Horizontal ruler -- <4 dashes render as plain text
 </p>
 !! end
 
+!! test
+Horizontal ruler -- Supports content following dashes on same line
+!! input
+---- Foo
+!! result
+<hr /> Foo
+
+!! end
+
 ###
 ### Block-level elements
 ###
@@ -3486,6 +4192,54 @@ 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 items are not parsed correctly following a <pre> block (bug 785)
 !! input
@@ -3550,6 +4304,20 @@ List interrupted by empty line or heading
 
 !!end
 
+!!test
+Multiple list tags generated by templates
+!!input
+{{echo|<li>}}a
+{{echo|<li>}}b
+{{echo|<li>}}c
+!!result
+<li>a
+<li>b
+<li>c</li>
+</li>
+</li>
+
+!!end
 
 ###
 ### Magic Words
@@ -3961,7 +4729,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
 
@@ -3979,7 +4747,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
 
@@ -3996,6 +4764,24 @@ Nonexistent template
 </p>
 !! end
 
+!! test
+Template with invalid target containing tags
+!! input
+{{a<b>b</b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}}
+!! result
+<p>{{a<b>b</b>|foo|a=b|a = b}}
+</p>
+!! end
+
+!! test
+Template with invalid target containing unclosed tag
+!! input
+{{a<b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}}
+!! result
+<p>{{a<b>|foo|a=b|a = b}}</b>
+</p>
+!! end
+
 !! article
 Template:test
 !! text
@@ -4199,7 +4985,7 @@ Template with complex arguments
 !! test
 BUG 553: link with two variables in a piped link
 !! input
-{| 
+{|
 |[[{{{1}}}|{{{2}}}]]
 |}
 !! result
@@ -4268,8 +5054,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
 
@@ -4307,9 +5099,9 @@ Template from main namespace
 !! article
 Template:table
 !! text
-{| 
+{|
 | 1 || 2
-|- 
+|-
 | 3 || 4
 |}
 !! endarticle
@@ -4362,6 +5154,20 @@ BUG 41: Template parameters shown as broken links
 </p>
 !! end
 
+!! test
+Template with targets containing wikilinks
+!! input
+{{[[foo]]}}
+
+{{[[{{echo|foo}}]]}}
+
+{{{{echo|[[foo}}]]}}
+!! result
+<p>{{<a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">foo</a>}}
+</p><p>{{<a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">foo</a>}}
+</p><p>{{[[foo}}]]
+</p>
+!! end
 
 !! article
 Template:MSGNW test
@@ -4451,6 +5257,13 @@ Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
 </p>
 !! end
 
+!! test
+Un-closed <noinclude>
+!! input
+<noinclude>
+!! result
+!! end
+
 !! test
 <onlyinclude> on a page
 !! input
@@ -4460,6 +5273,47 @@ Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
 </p>
 !! end
 
+!! test
+Un-closed <onlyinclude>
+!! input
+<onlyinclude>
+!! result
+!! end
+
+!!test
+Self-closed noinclude, includeonly, onlyinclude tags
+!!input
+<noinclude />
+<includeonly />
+<onlyinclude />
+!!result
+<p><br />
+</p>
+!!end
+
+!!test
+Unbalanced includeonly and noinclude tags
+!!input
+{|
+|a</noinclude>
+|b</noinclude></noinclude>
+|c</noinclude></includeonly>
+|d</includeonly></includeonly>
+|}
+!!result
+<table>
+<tr>
+<td>a
+</td>
+<td>b
+</td>
+<td>c&lt;/includeonly&gt;
+</td>
+<td>d&lt;/includeonly&gt;&lt;/includeonly&gt;
+</td></tr></table>
+
+!!end
+
 !! article
 Template:Includeonly section
 !! text
@@ -4518,6 +5372,13 @@ section=1
 ==Section 1==
 !! end
 
+!! test
+Un-closed <includeonly>
+!! input
+<includeonly>
+!! result
+!! end
+
 ###
 ### <includeonly> and <noinclude> in attributes
 ###
@@ -4714,8 +5575,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
 
@@ -4801,7 +5677,7 @@ Templates: HTML Tag: 6. Generation of end piece of HTML attr value
 !!end
 
 !!test
-Templates: Tables: 1. Generating start of a HTML table
+Templates: HTML Tables: 1. Generating start of a HTML table
 !!input
 {{echo|<table><tr><td>foo</td>}}</tr></table>
 !!result
@@ -4810,7 +5686,7 @@ Templates: Tables: 1. Generating start of a HTML table
 !!end
 
 !!test
-Templates: Tables: 2a. Generating middle of a HTML table
+Templates: HTML Tables: 2a. Generating middle of a HTML table
 !!input
 <table><tr>{{echo|<td>foo</td>}}</tr></table>
 !!result
@@ -4819,7 +5695,7 @@ Templates: Tables: 2a. Generating middle of a HTML table
 !!end
 
 !!test
-Templates: Tables: 2b. Generating middle of a HTML table
+Templates: HTML Tables: 2b. Generating middle of a HTML table
 !!input
 <table>{{echo|<tr><td>foo</td></tr>}}</table>
 !!result
@@ -4828,7 +5704,7 @@ Templates: Tables: 2b. Generating middle of a HTML table
 !!end
 
 !!test
-Templates: Tables: 3. Generating end of a HTML table
+Templates: HTML Tables: 3. Generating end of a HTML table
 !!input
 <table><tr>{{echo|<td>foo</td></tr></table>}}
 !!result
@@ -4837,7 +5713,7 @@ Templates: Tables: 3. Generating end of a HTML table
 !!end
 
 !!test
-Templates: Tables: 4a. Generating a single tag of a HTML table
+Templates: HTML Tables: 4a. Generating a single tag of a HTML table
 !!input
 {{echo|<table>}}<tr><td>foo</td></tr></table>
 !!result
@@ -4846,7 +5722,7 @@ Templates: Tables: 4a. Generating a single tag of a HTML table
 !!end
 
 !!test
-Templates: Tables: 4b. Generating a single tag of a HTML table
+Templates: HTML Tables: 4b. Generating a single tag of a HTML table
 !!input
 <table>{{echo|<tr>}}<td>foo</td></tr></table>
 !!result
@@ -4855,7 +5731,7 @@ Templates: Tables: 4b. Generating a single tag of a HTML table
 !!end
 
 !!test
-Templates: Tables: 4c. Generating a single tag of a HTML table
+Templates: HTML Tables: 4c. Generating a single tag of a HTML table
 !!input
 <table><tr>{{echo|<td>}}foo</td></tr></table>
 !!result
@@ -4864,7 +5740,7 @@ Templates: Tables: 4c. Generating a single tag of a HTML table
 !!end
 
 !!test
-Templates: Tables: 4d. Generating a single tag of a HTML table
+Templates: HTML Tables: 4d. Generating a single tag of a HTML table
 !!input
 <table><tr><td>foo{{echo|</td>}}</tr></table>
 !!result
@@ -4873,7 +5749,7 @@ Templates: Tables: 4d. Generating a single tag of a HTML table
 !!end
 
 !!test
-Templates: Tables: 4e. Generating a single tag of a HTML table
+Templates: HTML Tables: 4e. Generating a single tag of a HTML table
 !!input
 <table><tr><td>foo</td>{{echo|</tr>}}</table>
 !!result
@@ -4882,7 +5758,7 @@ Templates: Tables: 4e. Generating a single tag of a HTML table
 !!end
 
 !!test
-Templates: Tables: 4f. Generating a single tag of a HTML table
+Templates: HTML Tables: 4f. Generating a single tag of a HTML table
 !!input
 <table><tr><td>foo</td></tr>{{echo|</table>}}
 !!result
@@ -4890,6 +5766,101 @@ Templates: Tables: 4f. Generating a single tag of a HTML table
 
 !!end
 
+!!test
+Templates: Wiki Tables: 1. Fostering of entire template content
+!!input
+{|
+{{echo|a}}
+|}
+!!result
+<table>
+a
+<tr><td></td></tr></table>
+
+!!end
+
+!!test
+Templates: Wiki Tables: 2. Fostering of partial template content
+!!input
+{|
+{{echo|a
+<div>b</div>}}
+|}
+!!result
+<table>
+a
+<div>b</div>
+<tr><td></td></tr></table>
+
+!!end
+
+!!test
+Templates: Wiki Tables: 3. td-content via multiple templates
+!!input
+{|
+{{echo|{{pipe}}a}}{{echo|b}}
+|}
+!!result
+<table>
+<tr>
+<td>ab
+</td></tr></table>
+
+!!end
+
+!!test
+Templates: Wiki Tables: 4. Templated tags, no content
+!!input
+{{tbl-start}}
+{{tbl-end}}
+!!result
+<table>
+<tr><td></td></tr></table>
+
+!!end
+
+!!test
+Templates: Wiki Tables: 4. Templated tags, regular td-tags
+!!input
+{{tbl-start}}
+|foo
+{{tbl-end}}
+!!result
+<table>
+<tr>
+<td>foo
+</td></tr></table>
+
+!!end
+
+!!test
+Templates: Wiki Tables: 4. Templated tags, templated td-tags
+!!input
+{{tbl-start}}
+{{!}}foo
+{{tbl-end}}
+!!result
+<table>
+<tr>
+<td>foo
+</td></tr></table>
+
+!!end
+
+!!test
+Templates: Lists: Multi-line list-items via templates
+!!input
+*{{echo|a {{nonexistent|
+unused}}}}
+*{{echo|b {{nonexistent|
+unused}}}}
+!!result
+<ul><li>a <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a>
+</li><li>b <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a>
+</li></ul>
+
+!!end
+
 !!test
 Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo)
 !!input
@@ -4943,7 +5914,7 @@ disabled
 |bar
 |}
 !!result
-<table data-parsoid="{&quot;src&quot;:&quot;{|\n|{{echo|foo&lt;/table&gt;}}\n|bar\n|}&quot;}" about="#mwt1" typeof="mw:Object/Template ">
+<table  about="#mwt1" typeof="mw:Object/Template ">
 <tbody><tr><td>foo</td></tr></tbody></table><span about="#mwt1">
 bar</span><span about="#mwt1">
 </span>
@@ -4975,14 +5946,14 @@ disabled
   </tr>
 </table>
 !!result
-<table data-parsoid="{&quot;src&quot;:&quot;&lt;table&gt;\n  &lt;tr&gt;\n    &lt;td&gt;\n    &lt;table&gt;\n      &lt;tr&gt;\n        &lt;td&gt;1. {{echo|foo &lt;/table&gt;}}&lt;/td&gt;\n        &lt;td&gt; bar &lt;/td&gt;\n        &lt;td&gt;2. {{echo|baz &lt;/table&gt;}}&lt;/td&gt;\n      &lt;/tr&gt;\n      &lt;tr&gt;\n        &lt;td&gt;abc&lt;/td&gt;\n      &lt;/tr&gt;\n    &lt;/table&gt;\n    &lt;/td&gt;\n  &lt;/tr&gt;\n  &lt;tr&gt;\n    &lt;td&gt;xyz&lt;/td&gt;\n  &lt;/tr&gt;\n&lt;/table&gt;&quot;}" about="#mwt1" typeof="mw:Object/Template">
-  <tbody><tr data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
-    <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
-    <table data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
-      <tbody><tr data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
-        <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">1. foo </td></tr></tbody></table></td>
-        <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}"> bar </td>
-        <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">2. baz </td></tr></tbody></table><span about="#mwt1">
+<table  about="#mwt1" typeof="mw:Object/Template">
+  <tbody><tr >
+    <td >
+    <table >
+      <tbody><tr >
+        <td >1. foo </td></tr></tbody></table></td>
+        <td > bar </td>
+        <td >2. baz </td></tr></tbody></table><span about="#mwt1">
       </span><span about="#mwt1">
       
         abc</span><span about="#mwt1">
@@ -4996,6 +5967,28 @@ disabled
 </span>
 !!end
 
+!! test
+Templates: Ugly templates: 3. newline-only template parameter
+!! input
+foo {{echo|
+}}
+!! result
+<p>foo 
+</p>
+!! end
+
+# This looks like a bug: a single newline triggers p/br for some reason.
+!! test
+Templates: Ugly templates: 4. newline-only template parameter inconsistency
+!! input
+{{echo|
+}}
+!! result
+<p><br />
+</p>
+!! end
+
+
 !!test
 Parser Functions: 1. Simple example
 !!input
@@ -5706,6 +6699,19 @@ Image with multiple captions -- only last one is accepted
 
 !! end
 
+!! test
+Image with width attribute at different positions
+!! input
+[[Image:foobar.jpg|200px|right|Caption]]
+[[Image:foobar.jpg|right|200px|Caption]]
+[[Image:foobar.jpg|right|Caption|200px]]
+!! result
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+
+!! end
+
 !! test
 Image with link parameter, wiki target
 !! input
@@ -5901,7 +6907,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
 
@@ -6741,6 +7747,10 @@ Namespaced link must have a title (bad fragment version)
 !!end
 
 
+###
+### HTML tags and HTML attributes
+###
+
 !! test
 div with no attributes
 !! input
@@ -6786,6 +7796,49 @@ div with illegal double attributes
 
 !!end
 
+# FIXME: produce empty string instead of "class" in the PHP parser, following
+# the HTML5 spec.
+!! test
+div with empty attribute value, space before equals
+!! options
+disabled
+!! input
+<div class =>HTML rocks</div>
+!! result
+<div class="">HTML rocks</div>
+
+!! end
+
+# The PHP parser escapes the opening brace to &#123; for some reason, so
+# disabled this test for it.
+!! test
+div with braces in attribute value
+!! options
+disabled
+!! input
+<div title="{}">Foo</div>
+!! result
+<div title="{}">Foo</div>
+!! end
+
+# This it very inconsistent in the PHP parser: it returns 
+# class="class" if there is a space between the name and the equal sign (see
+# 'div with empty attribute value, space before equals'), but strips the
+# attribute completely if the space is missing. We hope that not much content
+# depends on this, so are implementing the behavior below in Parsoid for
+# consistencies' sake. Disabled for the PHP parser. 
+# FIXME: fix this behavior in the PHP parser?
+!! test
+div with empty attribute value, no space before equals
+!! options
+disabled
+!! input
+<div class=>HTML rocks</div>
+!! result
+<div class="">HTML rocks</div>
+
+!! end
+
 !! test
 HTML multiple attributes correction
 !! input
@@ -6818,6 +7871,23 @@ DIV IN UPPERCASE
 
 !!end
 
+!! test
+Non-ASCII pseudo-tags are rendered as text
+!! input
+<khyô>
+!! result
+<p>&lt;khyô&gt;
+</p>
+!! end
+
+!! test
+Pseudo-tag with URL 'name' renders as url link
+!! input
+<http://example.com/>
+!! result
+<p>&lt;<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&gt;
+</p>
+!! end
 
 !! test
 text with amp in the middle of nowhere
@@ -6837,6 +7907,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
@@ -7604,6 +8683,30 @@ disabled
 Something need to be done. foo-2 ? 
 !! end
 
+!! test
+Sanitizer: Validating that <meta> and <link> work, but only for Microdata
+!! input
+<div itemscope>
+       <meta itemprop="hello" content="world">
+       <meta http-equiv="refresh" content="5">
+       <meta itemprop="hello" http-equiv="refresh" content="5">
+       <link itemprop="hello" href="{{SERVER}}">
+       <link rel="stylesheet" href="{{SERVER}}">
+       <link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
+</div>
+!! result
+<div itemscope="itemscope">
+<p>    <meta itemprop="hello" content="world" />
+       &lt;meta http-equiv="refresh" content="5"&gt;
+       <meta itemprop="hello" content="5" />
+</p>
+       <link itemprop="hello" href="http&#58;//Britney-Spears" />
+       &lt;link rel="stylesheet" href="<a rel="nofollow" class="external free" href="http://Britney-Spears">http://Britney-Spears</a>"&gt;
+       <link itemprop="hello" href="http&#58;//Britney-Spears" />
+</div>
+
+!! end
+
 !! test
 Language converter: output gets cut off unexpectedly (bug 5757)
 !! options
@@ -9414,7 +10517,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
 
@@ -9432,7 +10535,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
 
@@ -9964,6 +11067,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
@@ -10036,6 +11162,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
@@ -10090,6 +11230,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
@@ -10126,6 +11280,29 @@ Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiw
 </p>
 !! end
 
+!! test
+Proper conversion of text in external links
+!! options
+language=sr variant=sr-ec
+!! input
+http://www.google.com
+gopher://www.google.com
+[http://www.google.com http://www.google.com]
+[gopher://www.google.com gopher://www.google.com]
+[https://www.google.com irc://www.google.com]
+[ftp://www.google.com www.google.com/ftp://dir]
+[//www.google.com www.google.com]
+!! result
+<p><a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
+<a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
+<a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
+<a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
+<a rel="nofollow" class="external text" href="https://www.google.com">irc://www.google.com</a>
+<a rel="nofollow" class="external text" href="ftp://www.google.com">www.гоогле.цом/фтп://дир</a>
+<a rel="nofollow" class="external text" href="//www.google.com">www.гоогле.цом</a>
+</p>
+!! end
+
 !! test
 Do not convert roman numbers to language variants
 !! options
@@ -10176,6 +11353,29 @@ Bug 529: Uncovered bullet
 
 !! end
 
+# Plain MediaWiki does not remove empty lists, but tidy actually does.
+# Templates in Wikipedia rely on this behavior, as tidy has always been
+# enabled there. These tests are normally run *without* tidy, so specify the
+# full output here. 
+# To test realistic parsing behavior, apply a tidy-like transformation to both
+# the expected output and your parser's output.
+!! test
+Bug 529: Uncovered bullet leaving empty list, normally removed by tidy
+!! input
+******* Foo {{bullet}}
+!! result
+<ul><li><ul><li><ul><li><ul><li><ul><li><ul><li><ul><li> Foo 
+</li></ul>
+</li></ul>
+</li></ul>
+</li></ul>
+</li></ul>
+</li></ul>
+</li><li> Bar
+</li></ul>
+
+!! end
+
 !! test
 Bug 529: Uncovered table already at line-start
 !! input
@@ -11071,22 +12271,6 @@ Bug 31098 Template which includes system messages which includes the template
 </p>
 !! end
 
-!! test
-Deprecated presentational attributes are converted to css
-!! input
-{|
-| valign=top align=left width=100 height=25% | Asdf
-|}
-<ul type="disc"></ul>
-!! result
-<table>
-<tr>
-<td style="text-align: left; height: 25%; vertical-align: top; width: 100px;"> Asdf
-</td></tr></table>
-<ul style="list-style-type: disc;"></ul>
-
-!! end
-
 !! test
 Bug31490 Turkish: ucfirst 'blah'
 !! options
@@ -11587,7 +12771,7 @@ Headings: 0. Unnested
 !!end
 
 !! test
-Headings: 1. Nested inside html 
+Headings: 1. Nested inside html
 !! options
 disabled
 !! input
@@ -11624,7 +12808,7 @@ disabled
 !!end
 
 !! test
-Headings: 3. Nested inside html with wikitext split by html tags 
+Headings: 3. Nested inside html with wikitext split by html tags
 !! options
 disabled
 !! input
@@ -11696,7 +12880,7 @@ disabled
 #### ----------------------------------------
 
 !! test
-Lists: 0. Outside nests 
+Lists: 0. Outside nests
 !! input
 <nowiki>*foo</nowiki>
 
@@ -11840,7 +13024,7 @@ disabled
 !!end
 
 !! test
-Lists: 7. Escape bullets in a multi-line context 
+Lists: 7. Escape bullets in a multi-line context
 !! input
 <nowiki>a
 *b</nowiki>
@@ -11855,7 +13039,7 @@ Lists: 7. Escape bullets in a multi-line context
 #### -----------------------------------
 
 !! test
-HRs: 1. Single line 
+HRs: 1. Single line
 !! options
 disabled
 !! input
@@ -12076,6 +13260,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
@@ -12090,7 +13291,7 @@ disabled
 !! input
 [[Foo|<nowiki>Foo''boo''</nowiki>]]
 !! result
-<a rel="mw:WikiLink" href="Foo" data-parsoid="{&quot;tsr&quot;:[0,7],&quot;contentPos&quot;:[5,5],&quot;src&quot;:&quot;[[Foo]]&quot;,&quot;bsp&quot;:[0,7],&quot;stx&quot;:&quot;simple&quot;}">Foo''boo''</a>
+<a rel="mw:WikiLink" href="Foo">Foo''boo''</a>
 !! end
 
 !! test
@@ -12189,7 +13390,7 @@ disabled
 
 !! test
 2. Link fragments inside <i> and <b>
-(FIXME: Escaping one or both of [[ and ]] is also acceptable -- 
+(FIXME: Escaping one or both of [[ and ]] is also acceptable --
  this is one of the shortcomings of this format)
 !! input
 ''[[foo''<nowiki>]]</nowiki>
@@ -12291,6 +13492,65 @@ Escaping nowikis
 </p>
 !! end
 
+!! test
+Tag-like HTML structures are passed through as text
+!! input
+<x y>
+
+<x.y>
+
+<x-y>
+
+1>2
+
+x<y
+
+a>b
+
+1<d e>f
+!! result
+<p>&lt;x y&gt;
+</p><p>&lt;x.y&gt;
+</p><p>&lt;x-y&gt;
+</p><p>1&gt;2
+</p><p>x&lt;y
+</p><p>a&gt;b
+</p><p>1&lt;d e&gt;f
+</p>
+!! end
+
+
+# This fails in the PHP parser (see bug 40670,
+# https://bugzilla.wikimedia.org/show_bug.cgi?id=40670), so disabled for it.
+!! test
+Tag names followed by punctuation should not be recognized as tags
+!! options
+disabled
+!! input
+<s.ome> text
+!! result
+<p>&lt;s.ome&gt text
+</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
+
 TODO:
 more images
 more tables
index 4df9a61..1ef6473 100644 (file)
@@ -28,6 +28,7 @@ $otions = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record', 'ru
 $optionsWithArgs = array( 'regex', 'filter', 'seed', 'setversion' );
 
 require_once( __DIR__ . '/../maintenance/commandLine.inc' );
+require_once( __DIR__ . '/TestsAutoLoader.php' );
 
 if ( isset( $options['help'] ) ) {
        echo <<<ENDS
diff --git a/tests/phpunit/AutoLoaderTest.php b/tests/phpunit/AutoLoaderTest.php
new file mode 100644 (file)
index 0000000..c8f3868
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+class AutoLoaderTest extends MediaWikiTestCase {
+
+       public function testAutoLoadConfig() {
+               $results = self::checkAutoLoadConf();
+
+               $this->assertEquals(
+                       $results['expected'],
+                       $results['actual']
+               );
+       }
+
+       protected static function checkAutoLoadConf() {
+               global $wgAutoloadLocalClasses, $wgAutoloadClasses, $IP;
+               static $supportsParsekit;
+               $supportsParsekit = function_exists( 'parsekit_compile_file' );
+
+               // wgAutoloadLocalClasses has precedence, just like in includes/AutoLoader.php
+               $expected = $wgAutoloadLocalClasses + $wgAutoloadClasses;
+               $actual = array();
+
+               $files = array_unique( $expected );
+
+               foreach ( $files as $file ) {
+                       // Only prefix $IP if it doesn't have it already.
+                       // Generally local classes don't have it, and those from extensions and test suites do.
+                       if ( substr( $file, 0, 1 ) != '/' && substr( $file, 1, 1 ) != ':' ) {
+                               $filePath = "$IP/$file";
+                       } else {
+                               $filePath = $file;
+                       }
+                       if ( $supportsParsekit ) {
+                               $parseInfo = parsekit_compile_file( "$filePath" );
+                               $classes = array_keys( $parseInfo['class_table'] );
+                       } else {
+                               $contents = file_get_contents( "$filePath" );
+                               $m = array();
+                               preg_match_all( '/\n\s*(?:final)?\s*(?:abstract)?\s*(?:class|interface)\s+([a-zA-Z0-9_]+)/', $contents, $m, PREG_PATTERN_ORDER );
+                               $classes = $m[1];
+                       }
+                       foreach ( $classes as $class ) {
+                               $actual[$class] = $file;
+                       }
+               }
+
+               return array(
+                       'expected' => $expected,
+                       'actual' => $actual,
+               );
+       }
+}
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 fca3251..3894435 100644 (file)
@@ -6,9 +6,11 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                'regex=' => false,
                'file=' => false,
                'use-filebackend=' => false,
+               'use-bagostuff=' => false,
                'keep-uploads' => false,
                'use-normal-tables' => false,
                'reuse-db' => false,
+               'wiki=' => false,
        );
 
        public function __construct() {
@@ -53,6 +55,26 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                }
        }
 
+       public function run( array $argv, $exit = true ) {
+               wfProfileIn( __METHOD__ );
+
+               $ret = parent::run( $argv, false );
+
+               wfProfileOut( __METHOD__ );
+
+               // Return to real wiki db, so profiling data is preserved
+               MediaWikiTestCase::teardownTestDB();
+
+               // Log profiling data, e.g. in the database or UDP
+               wfLogProfilingData();
+
+               if ( $exit ) {
+                       exit( $ret );
+               } else {
+                       return $ret;
+               }
+       }
+
        public function showHelp() {
                parent::showHelp();
 
index db41a4d..cbf9a8e 100644 (file)
@@ -5,6 +5,20 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        public $regex = '';
        public $runDisabled = false;
 
+       /**
+        * $called tracks whether the setUp and tearDown method has been called.
+        * class extending MediaWikiTestCase usually override setUp and tearDown
+        * but forget to call the parent.
+        *
+        * The array format takes a method name as key and anything as a value.
+        * By asserting the key exist, we know the child class has called the
+        * parent.
+        *
+        * This property must be private, we do not want child to override it,
+        * they should call the appropriate parent method instead.
+        */
+       private $called = array();
+
        /**
         * @var Array of TestUser
         */
@@ -14,12 +28,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @var DatabaseBase
         */
        protected $db;
-       protected $oldTablePrefix;
-       protected $useTemporaryTables = true;
-       protected $reuseDB = false;
        protected $tablesUsed = array(); // tables with data
 
+       private static $useTemporaryTables = true;
+       private static $reuseDB = false;
        private static $dbSetup = false;
+       private static $oldTablePrefix = false;
 
        /**
         * Holds the paths of temporary files/directories created through getNewTempFile,
@@ -64,31 +78,48 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                 */
                ObjectCache::$instances[CACHE_DB] = new HashBagOStuff;
 
+               $needsResetDB = false;
+               $logName = get_class( $this ) . '::' . $this->getName( false );
+
                if( $this->needsDB() ) {
-                       global $wgDBprefix;
-                       
-                       $this->useTemporaryTables = !$this->getCliArg( 'use-normal-tables' );
-                       $this->reuseDB = $this->getCliArg('reuse-db');
+                       // set up a DB connection for this test to use
+
+                       self::$useTemporaryTables = !$this->getCliArg( 'use-normal-tables' );
+                       self::$reuseDB = $this->getCliArg('reuse-db');
 
                        $this->db = wfGetDB( DB_MASTER );
 
                        $this->checkDbIsSupported();
 
-                       $this->oldTablePrefix = $wgDBprefix;
-
                        if( !self::$dbSetup ) {
-                               $this->initDB();
-                               self::$dbSetup = true;
+                               wfProfileIn( $logName . ' (clone-db)' );
+
+                               // switch to a temporary clone of the database
+                               self::setupTestDB( $this->db, $this->dbPrefix() );
+
+                               if ( ( $this->db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
+                                       $this->resetDB();
+                               }
+
+                               wfProfileOut( $logName . ' (clone-db)' );
                        }
 
+                       wfProfileIn( $logName . ' (prepare-db)' );
                        $this->addCoreDBData();
                        $this->addDBData();
+                       wfProfileOut( $logName . ' (prepare-db)' );
+
+                       $needsResetDB = true;
+               }
 
-                       parent::run( $result );
+               wfProfileIn( $logName );
+               parent::run( $result );
+               wfProfileOut( $logName );
 
+               if( $needsResetDB ) {
+                       wfProfileIn( $logName . ' (reset-db)' );
                        $this->resetDB();
-               } else {
-                       parent::run( $result );
+                       wfProfileOut( $logName . ' (reset-db)' );
                }
        }
 
@@ -131,7 +162,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * happen in reverse order.
         */
        protected function setUp() {
+               wfProfileIn( __METHOD__ );
                parent::setUp();
+               $this->called['setUp'] = 1;
 
                /*
                //@todo: global variables to restore for *every* test
@@ -153,15 +186,22 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        }
                }
 
-               // Clean up open transactions
                if ( $this->needsDB() && $this->db ) {
+                       // Clean up open transactions
                        while( $this->db->trxLevel() > 0 ) {
                                $this->db->rollback();
                        }
+
+                       // don't ignore DB errors
+                       $this->db->ignoreErrors( false );
                }
+
+               wfProfileOut( __METHOD__ );
        }
 
        protected function tearDown() {
+               wfProfileIn( __METHOD__ );
+
                // Cleaning up temporary files
                foreach ( $this->tmpfiles as $fname ) {
                        if ( is_file( $fname ) || ( is_link( $fname ) ) ) {
@@ -171,11 +211,14 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        }
                }
 
-               // Clean up open transactions
                if ( $this->needsDB() && $this->db ) {
+                       // Clean up open transactions
                        while( $this->db->trxLevel() > 0 ) {
                                $this->db->rollback();
                        }
+
+                       // don't ignore DB errors
+                       $this->db->ignoreErrors( false );
                }
 
                // Restore mw globals
@@ -185,6 +228,17 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->mwGlobals = array();
 
                parent::tearDown();
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Make sure MediaWikiTestCase extending classes have called their
+        * parent setUp method
+        */
+       final public function testMediaWikiTestCaseParentSetupCalled() {
+               $this->assertArrayHasKey( 'setUp', $this->called,
+                       get_called_class() . "::setUp() must call parent::setUp()"
+               );
        }
 
        /**
@@ -349,26 +403,67 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
-       private function initDB() {
+       /**
+        * Restores MediaWiki to using the table set (table prefix) it was using before
+        * setupTestDB() was called. Useful if we need to perform database operations
+        * after the test run has finished (such as saving logs or profiling info).
+        */
+       public static function teardownTestDB() {
+               if ( !self::$dbSetup ) {
+                       return;
+               }
+
+               CloneDatabase::changePrefix( self::$oldTablePrefix );
+
+               self::$oldTablePrefix = false;
+               self::$dbSetup = false;
+       }
+
+       /**
+        * Creates an empty skeleton of the wiki database by cloning its structure
+        * to equivalent tables using the given $prefix. Then sets MediaWiki to
+        * use the new set of tables (aka schema) instead of the original set.
+        *
+        * This is used to generate a dummy table set, typically consisting of temporary
+        * tables, that will be used by tests instead of the original wiki database tables.
+        *
+        * @note: the original table prefix is stored in self::$oldTablePrefix. This is used
+        * by teardownTestDB() to return the wiki to using the original table set.
+        *
+        * @note: this method only works when first called. Subsequent calls have no effect,
+        * even if using different parameters.
+        *
+        * @param DatabaseBase $db The database connection
+        * @param String  $prefix The prefix to use for the new table set (aka schema).
+        *
+        * @throws MWException if the database table prefix is already $prefix
+        */
+       public static function setupTestDB( DatabaseBase $db, $prefix ) {
                global $wgDBprefix;
-               if ( $wgDBprefix === $this->dbPrefix() ) {
-                       throw new MWException( 'Cannot run unit tests, the database prefix is already "unittest_"' );
+               if ( $wgDBprefix === $prefix ) {
+                       throw new MWException( 'Cannot run unit tests, the database prefix is already "' . $prefix . '"' );
                }
 
-               $tablesCloned = $this->listTables();
-               $dbClone = new CloneDatabase( $this->db, $tablesCloned, $this->dbPrefix() );
-               $dbClone->useTemporaryTables( $this->useTemporaryTables );
+               if ( self::$dbSetup ) {
+                       return;
+               }
 
-               if ( ( $this->db->getType() == 'oracle' || !$this->useTemporaryTables ) && $this->reuseDB ) {
-                       CloneDatabase::changePrefix( $this->dbPrefix() );
-                       $this->resetDB();
+               $tablesCloned = self::listTables( $db );
+               $dbClone = new CloneDatabase( $db, $tablesCloned, $prefix );
+               $dbClone->useTemporaryTables( self::$useTemporaryTables );
+
+               self::$dbSetup = true;
+               self::$oldTablePrefix = $wgDBprefix;
+
+               if ( ( $db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
+                       CloneDatabase::changePrefix( $prefix );
                        return;
                } else {
                        $dbClone->cloneTableStructure();
                }
 
-               if ( $this->db->getType() == 'oracle' ) {
-                       $this->db->query( 'BEGIN FILL_WIKI_INFO; END;' );
+               if ( $db->getType() == 'oracle' ) {
+                       $db->query( 'BEGIN FILL_WIKI_INFO; END;' );
                }
        }
 
@@ -378,7 +473,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        private function resetDB() {
                if( $this->db ) {
                        if ( $this->db->getType() == 'oracle' )  {
-                               if ( $this->useTemporaryTables ) {
+                               if ( self::$useTemporaryTables ) {
                                        wfGetLB()->closeAll();
                                        $this->db = wfGetDB( DB_MASTER );
                                } else {
@@ -427,16 +522,16 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return strpos( $table, 'unittest_' ) !== 0;
        }
 
-       protected function listTables() {
+       public static function listTables( $db ) {
                global $wgDBprefix;
 
-               $tables = $this->db->listTables( $wgDBprefix, __METHOD__ );
+               $tables = $db->listTables( $wgDBprefix, __METHOD__ );
                $tables = array_map( array( __CLASS__, 'unprefixTable' ), $tables );
 
                // Don't duplicate test tables from the previous fataled run
                $tables = array_filter( $tables, array( __CLASS__, 'isNotUnittest' ) );
 
-               if ( $this->db->getType() == 'sqlite' ) {
+               if ( $db->getType() == 'sqlite' ) {
                        $tables = array_flip( $tables );
                        // these are subtables of searchindex and don't need to be duped/dropped separately
                        unset( $tables['searchindex_content'] );
@@ -746,4 +841,52 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                //        But frequently, this is used in fixture setup.
                throw new MWException( "No namespace defaults to wikitext!" );
        }
+
+       /**
+        * Check, if $wgDiff3 is set and ready to merge
+        * Will mark the calling test as skipped, if not ready
+        *
+        * @since 1.21
+        */
+       protected function checkHasDiff3() {
+               global $wgDiff3;
+
+               # This check may also protect against code injection in
+               # case of broken installations.
+               wfSuppressWarnings();
+               $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
+               wfRestoreWarnings();
+
+               if( !$haveDiff3 ) {
+                       $this->markTestSkipped( "Skip test, since diff3 is not configured" );
+               }
+       }
+
+       /**
+        * Asserts that an exception of the specified type occurs when running
+        * the provided code.
+        *
+        * @since 1.21
+        *
+        * @param callable $code
+        * @param string $expected
+        * @param string $message
+        */
+       protected function assertException( $code, $expected = 'Exception', $message = '' ) {
+               $pokemons = null;
+
+               try {
+                       call_user_func( $code );
+               }
+               catch ( Exception $pokemons ) {
+                       // Gotta Catch 'Em All!
+               }
+
+               if ( $message === '' ) {
+                       $message = 'An exception of type "' . $expected . '" should have been thrown';
+               }
+
+               $this->assertInstanceOf( $expected, $pokemons, $message );
+       }
+
 }
index 17ea06c..dfbcc9d 100644 (file)
@@ -8,6 +8,7 @@ class StructureTest extends MediaWikiTestCase {
        /**
         * Verify all files that appear to be tests have file names ending in
         * Test.  If the file names do not end in Test, they will not be run.
+        * @group medium
         */
        public function testUnitTestFileNamesEndWithTest() {
                if ( wfIsWindows() ) {
index 20952b1..82b947b 100644 (file)
@@ -62,6 +62,7 @@ class ArticleTest extends MediaWikiTestCase {
        function testStaticFunctions() {
                $this->hideDeprecated( 'Article::getAutosummary' );
                $this->hideDeprecated( 'WikiPage::getAutosummary' );
+               $this->hideDeprecated( 'CategoryPage::getAutosummary' ); // Inherited from Article
 
                $this->assertEquals( WikiPage::selectFields(), Article::selectFields(),
                        "Article static functions" );
index d46e683..361b412 100644 (file)
@@ -14,6 +14,7 @@ class DiffHistoryBlobTest extends MediaWikiTestCase {
                        $this->markTestSkipped( 'Neither the hash nor mhash extension is available' );
                        return;
                }
+               parent::setUp();
        }
 
        /**
index eee5f37..36fde85 100644 (file)
@@ -1,7 +1,13 @@
 <?php
 
 /**
- * @group Editing      
+ * @group Editing
+ *
+ * @group Database
+ *        ^--- tell jenkins this test needs the database
+ *
+ * @group medium
+ *        ^--- tell phpunit that these test cases may take longer than 2 seconds.
  */
 class EditPageTest extends MediaWikiTestCase {
 
@@ -37,4 +43,375 @@ class EditPageTest extends MediaWikiTestCase {
                        ),
                );
        }
+
+       protected function forceRevisionDate( WikiPage $page, $timestamp ) {
+               $dbw = wfGetDB( DB_MASTER );
+
+               $dbw->update( 'revision',
+                       array( 'rev_timestamp' => $timestamp ),
+                       array( 'rev_id' => $page->getLatest() ) );
+
+               $page->clear();
+       }
+
+       /**
+        * User input text is passed to rtrim() by edit page. This is a simple
+        * wrapper around assertEquals() which calls rrtrim() to normalize the
+        * expected and actual texts.
+        */
+       function assertEditedTextEquals( $expected, $actual, $msg='' ) {
+               return $this->assertEquals( rtrim($expected), rtrim($actual), $msg );
+       }
+
+       /**
+        * Performs an edit and checks the result.
+        *
+        * @param String|Title $title The title of the page to edit
+        * @param String|null $baseText Some text to create the page with before attempting the edit.
+        * @param User|String|null $user The user to perform the edit as.
+        * @param array $edit An array of request parameters used to define the edit to perform.
+        *              Some well known fields are:
+        *              * wpTextbox1: the text to submit
+        *              * wpSummary: the edit summary
+        *              * wpEditToken: the edit token (will be inserted if not provided)
+        *              * wpEdittime: timestamp of the edit's base revision (will be inserted if not provided)
+        *              * wpStarttime: timestamp when the edit started (will be inserted if not provided)
+        *              * wpSectionTitle: the section to edit
+        *              * wpMinorEdit: mark as minor edit
+        *              * wpWatchthis: whether to watch the page
+        * @param int|null $expectedCode The expected result code (EditPage::AS_XXX constants).
+        *                  Set to null to skip the check. Defaults to EditPage::AS_OK.
+        * @param String|null $expectedText The text expected to be on the page after the edit.
+        *                  Set to null to skip the check.
+        * @param String|null $message An optional message to show along with any error message.
+        *
+        * @return WikiPage The page that was just edited, useful for getting the edit's rev_id, etc.
+        */
+       protected function assertEdit( $title, $baseText, $user = null, array $edit,
+               $expectedCode = EditPage::AS_OK, $expectedText = null, $message = null
+       ) {
+               if ( is_string( $title ) ) {
+                       $ns = $this->getDefaultWikitextNS();
+                       $title = Title::newFromText( $title, $ns );
+               }
+
+               if ( is_string( $user ) ) {
+                       $user = User::newFromName( $user );
+
+                       if ( $user->getId() === 0 ) {
+                               $user->addToDatabase();
+                       }
+               }
+
+               $page = WikiPage::factory( $title );
+
+               if ( $baseText !== null ) {
+                       $content = ContentHandler::makeContent( $baseText, $title );
+                       $page->doEditContent( $content, "base text for test" );
+                       $this->forceRevisionDate( $page, '20120101000000' );
+
+                       //sanity check
+                       $page->clear();
+                       $currentText = ContentHandler::getContentText( $page->getContent() );
+
+                       # EditPage rtrim() the user input, so we alter our expected text
+                       # to reflect that.
+                       $this->assertEditedTextEquals( $baseText, $currentText );
+               }
+
+               if ( $user == null ) {
+                       $user = $GLOBALS['wgUser'];
+               } else {
+                       $this->setMwGlobals( 'wgUser', $user );
+               }
+
+               if ( !isset( $edit['wpEditToken'] ) ) {
+                       $edit['wpEditToken'] = $user->getEditToken();
+               }
+
+               if ( !isset( $edit['wpEdittime'] ) ) {
+                       $edit['wpEdittime'] = $page->exists() ? $page->getTimestamp() : '';
+               }
+
+               if ( !isset( $edit['wpStarttime'] ) ) {
+                       $edit['wpStarttime'] = wfTimestampNow();
+               }
+
+               $req = new FauxRequest( $edit, true ); // session ??
+
+               $ep = new EditPage( new Article( $title ) );
+               $ep->setContextTitle( $title );
+               $ep->importFormData( $req );
+
+               $bot = isset( $edit['bot'] ) ? (bool)$edit['bot'] : false;
+
+               // this is where the edit happens!
+               // Note: don't want to use EditPage::AttemptSave, because it messes with $wgOut
+               // and throws exceptions like PermissionsError
+               $status = $ep->internalAttemptSave( $result, $bot );
+
+               if ( $expectedCode !== null ) {
+                       // check edit code
+                       $this->assertEquals( $expectedCode, $status->value,
+                               "Expected result code mismatch. $message" );
+               }
+
+               $page = WikiPage::factory( $title );
+
+               if ( $expectedText !== null ) {
+                       // check resulting page text
+                       $content = $page->getContent();
+                       $text = ContentHandler::getContentText( $content );
+
+                       # EditPage rtrim() the user input, so we alter our expected text
+                       # to reflect that.
+                       $this->assertEditedTextEquals( $expectedText, $text,
+                               "Expected article text mismatch. $message" );
+               }
+
+               return $page;
+       }
+
+       public function testCreatePage() {
+               $text = "Hello World!";
+               $edit = array(
+                       'wpTextbox1' => $text,
+                       'wpSummary' => 'just testing',
+               );
+
+               $this->assertEdit( 'EditPageTest_testCreatePafe', null, null, $edit,
+                       EditPage::AS_SUCCESS_NEW_ARTICLE, $text,
+                       "expected successfull creation with given text" );
+       }
+
+       public function testUpdatePage() {
+               $text = "one";
+               $edit = array(
+                       'wpTextbox1' => $text,
+                       'wpSummary' => 'first update',
+               );
+
+               $page = $this->assertEdit( 'EditPageTest_testUpdatePage', "zero", null, $edit,
+                       EditPage::AS_SUCCESS_UPDATE, $text,
+                       "expected successfull update with given text" );
+
+               $this->forceRevisionDate( $page, '20120101000000' );
+
+               $text = "two";
+               $edit = array(
+                       'wpTextbox1' => $text,
+                       'wpSummary' => 'second update',
+               );
+
+               $this->assertEdit( 'EditPageTest_testUpdatePage', null, null, $edit,
+                       EditPage::AS_SUCCESS_UPDATE, $text,
+                       "expected successfull update with given text" );
+       }
+
+       public static function provideSectionEdit() {
+               $text =
+'Intro
+
+== one ==
+first section.
+
+== two ==
+second section.
+';
+
+               $sectionOne =
+'== one ==
+hello
+';
+
+               $newSection =
+'== new section ==
+
+hello
+';
+
+               $textWithNewSectionOne = preg_replace( '/== one ==.*== two ==/ms',
+                                                                               "$sectionOne\n== two ==", $text );
+
+               $textWithNewSectionAdded = "$text\n$newSection";
+
+               return array(
+                       array( #0
+                               $text,
+                               '',
+                               'hello',
+                               'replace all',
+                               'hello'
+                       ),
+
+                       array( #1
+                               $text,
+                               '1',
+                               $sectionOne,
+                               'replace first section',
+                               $textWithNewSectionOne,
+                       ),
+
+                       array( #2
+                               $text,
+                               'new',
+                               'hello',
+                               'new section',
+                               $textWithNewSectionAdded,
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSectionEdit
+        */
+       public function testSectionEdit( $base, $section, $text, $summary, $expected ) {
+               $edit = array(
+                       'wpTextbox1' => $text,
+                       'wpSummary' => $summary,
+                       'wpSection' => $section,
+               );
+
+               $this->assertEdit( 'EditPageTest_testSectionEdit', $base, null, $edit,
+                       EditPage::AS_SUCCESS_UPDATE, $expected,
+                       "expected successfull update of section" );
+       }
+
+       public static function provideAutoMerge() {
+               $tests = array();
+
+               $tests[] = array( #0: plain conflict
+                       "Elmo", # base edit user
+                       "one\n\ntwo\n\nthree\n",
+                       array( #adam's edit
+                               'wpStarttime' => 1,
+                               'wpTextbox1' => "ONE\n\ntwo\n\nthree\n",
+                       ),
+                       array( #berta's edit
+                               'wpStarttime' => 2,
+                               'wpTextbox1' => "(one)\n\ntwo\n\nthree\n",
+                       ),
+                       EditPage::AS_CONFLICT_DETECTED, # expected code
+                       "ONE\n\ntwo\n\nthree\n", # expected text
+                       'expected edit conflict', # message
+               );
+
+               $tests[] = array( #1: successful merge
+                       "Elmo", # base edit user
+                       "one\n\ntwo\n\nthree\n",
+                       array( #adam's edit
+                               'wpStarttime' => 1,
+                               'wpTextbox1' => "ONE\n\ntwo\n\nthree\n",
+                       ),
+                       array( #berta's edit
+                               'wpStarttime' => 2,
+                               'wpTextbox1' => "one\n\ntwo\n\nTHREE\n",
+                       ),
+                       EditPage::AS_SUCCESS_UPDATE, # expected code
+                       "ONE\n\ntwo\n\nTHREE\n", # expected text
+                       'expected automatic merge', # message
+               );
+
+               $text = "Intro\n\n";
+               $text .= "== first section ==\n\n";
+               $text .= "one\n\ntwo\n\nthree\n\n";
+               $text .= "== second section ==\n\n";
+               $text .= "four\n\nfive\n\nsix\n\n";
+
+               // extract the first section.
+               $section = preg_replace( '/.*(== first section ==.*)== second section ==.*/sm', '$1', $text );
+
+               // generate expected text after merge
+               $expected = str_replace( 'one', 'ONE', str_replace( 'three', 'THREE', $text ) );
+
+               $tests[] = array( #2: merge in section
+                       "Elmo", # base edit user
+                       $text,
+                       array( #adam's edit
+                               'wpStarttime' => 1,
+                               'wpTextbox1' => str_replace( 'one', 'ONE', $section ),
+                               'wpSection' => '1'
+                       ),
+                       array( #berta's edit
+                               'wpStarttime' => 2,
+                               'wpTextbox1' => str_replace( 'three', 'THREE', $section ),
+                               'wpSection' => '1'
+                       ),
+                       EditPage::AS_SUCCESS_UPDATE, # expected code
+                       $expected, # expected text
+                       'expected automatic section merge', # message
+               );
+
+               // see whether it makes a difference who did the base edit
+               $testsWithAdam = array_map( function( $test ) {
+                       $test[0] = 'Adam'; // change base edit user
+                       return $test;
+               }, $tests );
+
+               $testsWithBerta = array_map( function( $test ) {
+                       $test[0] = 'Berta'; // change base edit user
+                       return $test;
+               }, $tests );
+
+               return array_merge( $tests, $testsWithAdam, $testsWithBerta );
+       }
+
+       /**
+        * @dataProvider provideAutoMerge
+        */
+       public function testAutoMerge( $baseUser, $text, $adamsEdit, $bertasEdit,
+                               $expectedCode, $expectedText, $message = null
+       ) {
+               $this->checkHasDiff3();
+
+               //create page
+               $ns = $this->getDefaultWikitextNS();
+               $title = Title::newFromText( 'EditPageTest_testAutoMerge', $ns );
+               $page = WikiPage::factory( $title );
+
+               if ( $page->exists() ) {
+                       $page->doDeleteArticle( "clean slate for testing" );
+               }
+
+               $baseEdit = array(
+                       'wpTextbox1' => $text,
+               );
+
+               $page = $this->assertEdit( 'EditPageTest_testAutoMerge', null,
+                                       $baseUser, $baseEdit, null, null, __METHOD__ );
+
+               $this->forceRevisionDate( $page, '20120101000000' );
+
+               $edittime = $page->getTimestamp();
+
+               // start timestamps for conflict detection
+               if ( !isset( $adamsEdit['wpStarttime'] ) ) {
+                       $adamsEdit['wpStarttime'] = 1;
+               }
+
+               if ( !isset( $bertasEdit['wpStarttime'] ) ) {
+                       $bertasEdit['wpStarttime'] = 2;
+               }
+
+               $starttime = wfTimestampNow();
+               $adamsTime = wfTimestamp( TS_MW, (int)wfTimestamp( TS_UNIX, $starttime ) + (int)$adamsEdit['wpStarttime'] );
+               $bertasTime = wfTimestamp( TS_MW, (int)wfTimestamp( TS_UNIX, $starttime ) + (int)$bertasEdit['wpStarttime'] );
+
+               $adamsEdit['wpStarttime'] = $adamsTime;
+               $bertasEdit['wpStarttime'] = $bertasTime;
+
+               $adamsEdit['wpSummary'] = 'Adam\'s edit';
+               $bertasEdit['wpSummary'] = 'Bertas\'s edit';
+
+               $adamsEdit['wpEdittime'] = $edittime;
+               $bertasEdit['wpEdittime'] = $edittime;
+
+               // first edit
+               $this->assertEdit( 'EditPageTest_testAutoMerge', null, 'Adam', $adamsEdit,
+                       EditPage::AS_SUCCESS_UPDATE, null, "expected successfull update" );
+
+               // second edit
+               $this->assertEdit( 'EditPageTest_testAutoMerge', null, 'Berta', $bertasEdit,
+                       $expectedCode, $expectedText, $message );
+       }
 }
index e8aabfd..1a02cb8 100644 (file)
@@ -488,6 +488,89 @@ class GlobalTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @param String $old: Text as it was in the database
+        * @param String $mine: Text submitted while user was editing
+        * @param String $yours: Text submitted by the user
+        * @param Boolean $expectedMergeResult Whether the merge should be a success
+        * @param String $expectedText: Text after merge has been completed
+        *
+        * @dataProvider provideMerge()
+        * @group medium
+        */
+       public function testMerge( $old, $mine, $yours, $expectedMergeResult, $expectedText ) {
+               $this->checkHasDiff3();
+
+               $mergedText = null;
+               $isMerged = wfMerge( $old, $mine, $yours, $mergedText );
+
+               $msg = 'Merge should be a ';
+               $msg .= $expectedMergeResult ? 'success' : 'failure';
+               $this->assertEquals( $expectedMergeResult, $isMerged, $msg );
+
+               if( $isMerged ) {
+                       // Verify the merged text
+                       $this->assertEquals( $expectedText, $mergedText,
+                               'is merged text as expected?' );
+               }
+       }
+
+       public static function provideMerge() {
+               $EXPECT_MERGE_SUCCESS = true;
+               $EXPECT_MERGE_FAILURE = false;
+
+               return array(
+
+                       // #0: clean merge
+                       array(
+                               // old:
+                               "one one one\n" . // trimmed
+                               "\n" .
+                               "two two two",
+
+                               // mine:
+                               "one one one ONE ONE\n" .
+                               "\n" .
+                               "two two two\n", // with tailing whitespace
+
+                               // yours:
+                               "one one one\n" .
+                               "\n" .
+                               "two two TWO TWO", // trimmed
+
+                               // ok:
+                               $EXPECT_MERGE_SUCCESS,
+
+                               // result:
+                               "one one one ONE ONE\n" .
+                               "\n" .
+                               "two two TWO TWO\n", // note: will always end in a newline
+                       ),
+
+                       // #1: conflict, fail
+                       array(
+                               // old:
+                               "one one one", // trimmed
+
+                               // mine:
+                               "one one one ONE ONE\n" .
+                               "\n" .
+                               "bla bla\n" .
+                               "\n", // with tailing whitespace
+
+                               // yours:
+                               "one one one\n" .
+                               "\n" .
+                               "two two", // trimmed
+
+                               $EXPECT_MERGE_FAILURE,
+
+                               // result:
+                               null,
+                       ),
+               );
+       }
+
        /**
         * @dataProvider provideMakeUrlIndexes()
         */
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 95a6cb0..47fa5f4 100644 (file)
@@ -73,7 +73,7 @@ class HtmlTest extends MediaWikiTestCase {
        }
 
        public function testExpandAttributesSkipsNullAndFalse() {
-               
+
                ### EMPTY ########
                $this->assertEmpty(
                        Html::expandAttributes( array( 'foo' => null ) ),
@@ -442,7 +442,7 @@ class HtmlTest extends MediaWikiTestCase {
        }
 
        /**
-        * Test out Html::element drops default value
+        * Test out Html::element drops or enforces default value
         * @cover Html::dropDefaults
         * @dataProvider provideElementsWithAttributesHavingDefaultValues
         */
@@ -461,15 +461,12 @@ class HtmlTest extends MediaWikiTestCase {
                        'area', array( 'shape' => 'rect' )
                );
 
-               $cases[] = array( '<button></button>',
+               $cases[] = array( '<button type=submit></button>',
                        'button', array( 'formaction' => 'GET' )
                );
-               $cases[] = array( '<button></button>',
+               $cases[] = array( '<button type=submit></button>',
                        'button', array( 'formenctype' => 'application/x-www-form-urlencoded' )
                );
-               $cases[] = array( '<button></button>',
-                       'button', array( 'type' => 'submit' )
-               );
 
                $cases[] = array( '<canvas></canvas>',
                        'canvas', array( 'height' => '150' )
@@ -560,6 +557,13 @@ class HtmlTest extends MediaWikiTestCase {
                        'input', array( 'type' => 'range', 'value' => '' ),
                );
 
+               # <button> specific handling
+               # see remarks on http://msdn.microsoft.com/en-us/library/ie/ms535211%28v=vs.85%29.aspx
+               $cases[] = array( '<button type=submit></button>',
+                       'button', array( 'type' => 'submit' ),
+                       'According to standard the default type is "submit". Depending on compatibility mode IE might use "button", instead.',
+               );
+
                # <select> specifc handling
                $cases[] = array( '<select multiple></select>',
                        'select', array( 'size' => '4', 'multiple' => true ),
@@ -601,4 +605,16 @@ class HtmlTest extends MediaWikiTestCase {
                return $ret;
        }
 
+       public function testFormValidationBlacklist() {
+               $this->assertEmpty(
+                       Html::expandAttributes( array( 'min' => 1, 'max' => 100, 'pattern' => 'abc', 'required' => true, 'step' => 2 ) ),
+                       'Blacklist form validation attributes.'
+               );
+               $this->assertEquals(
+                       ' step=any',
+                       Html::expandAttributes( array( 'min' => 1, 'max' => 100, 'pattern' => 'abc', 'required' => true, 'step' => 'any' ) ),
+                       'Allow special case "step=any".'
+               );
+       }
+
 }
index 9fc6f4d..eb8912d 100644 (file)
@@ -9,6 +9,7 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
 
                $this->setMwGlobals( array(
                        'wgContLang' => Language::factory( 'tg' ),
+                       'wgLanguageCode' => 'tg',
                        'wgDefaultLanguageVariant' => false,
                        'wgMemc' => new EmptyBagOStuff,
                        'wgRequest' => new FauxRequest( array() ),
diff --git a/tests/phpunit/includes/LinkerTest.php b/tests/phpunit/includes/LinkerTest.php
new file mode 100644 (file)
index 0000000..abb8374
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+class LinkerTest extends MediaWikiLangTestCase {
+
+       /**
+        * @dataProvider provideCasesForUserLink
+        * @cover Linker::userLink
+        */
+       function testUserLink( $expected, $userId, $userName, $altUserName = false, $msg='' ) {
+               $this->setMwGlobals( array(
+                       'wgArticlePath' => '/wiki/$1',
+                       'wgWellFormedXml' => true,
+               ) );
+
+               $this->assertEquals( $expected,
+                       Linker::userLink( $userId, $userName, $altUserName, $msg )
+               );
+       }
+
+       function provideCasesForUserLink() {
+               # Format:
+               # - expected
+               # - userid
+               # - username
+               # - optional altUserName
+               # - optional message
+               return array(
+
+                       ### ANONYMOUS USER ########################################
+                       array(
+                               '<a href="/wiki/Special:Contributions/JohnDoe" title="Special:Contributions/JohnDoe" class="mw-userlink">JohnDoe</a>',
+                               0, 'JohnDoe', false,
+                       ),
+                       array(
+                               '<a href="/wiki/Special:Contributions/::1" title="Special:Contributions/::1" class="mw-userlink">::1</a>',
+                               0, '::1', false,
+                               'Anonymous with pretty IPv6'
+                       ),
+                       array(
+                               '<a href="/wiki/Special:Contributions/0:0:0:0:0:0:0:1" title="Special:Contributions/0:0:0:0:0:0:0:1" class="mw-userlink">::1</a>',
+                               0, '0:0:0:0:0:0:0:1', false,
+                               'Anonymous with almost pretty IPv6'
+                       ),
+                       array(
+                               '<a href="/wiki/Special:Contributions/0000:0000:0000:0000:0000:0000:0000:0001" title="Special:Contributions/0000:0000:0000:0000:0000:0000:0000:0001" class="mw-userlink">::1</a>',
+                               0, '0000:0000:0000:0000:0000:0000:0000:0001', false,
+                               'Anonymous with full IPv6'
+                       ),
+                       array(
+                               '<a href="/wiki/Special:Contributions/::1" title="Special:Contributions/::1" class="mw-userlink">AlternativeUsername</a>',
+                               0, '::1', 'AlternativeUsername',
+                               'Anonymous with pretty IPv6 and an alternative username'
+                       ),
+
+                       # IPV4
+                       array(
+                               '<a href="/wiki/Special:Contributions/127.0.0.1" title="Special:Contributions/127.0.0.1" class="mw-userlink">127.0.0.1</a>',
+                               0, '127.0.0.1', false,
+                               'Anonymous with IPv4'
+                       ),
+                       array(
+                               '<a href="/wiki/Special:Contributions/127.0.0.1" title="Special:Contributions/127.0.0.1" class="mw-userlink">AlternativeUsername</a>',
+                               0, '127.0.0.1', 'AlternativeUsername',
+                               'Anonymous with IPv4 and an alternative username'
+                       ),
+
+                       ### Regular user ##########################################
+                       # TODO!
+               );
+       }
+}
index 7499272..3325885 100644 (file)
@@ -129,7 +129,7 @@ class LinksUpdateTest extends MediaWikiTestCase {
        public function testUpdate_langlinks() {
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
-               $po->addLanguageLink( Title::newFromText( "en:Foo" ) );
+               $po->addLanguageLink( Title::newFromText( "en:Foo" )->getFullText() );
 
 
                $this->assertLinksUpdate( $t, $po, 'langlinks', 'll_lang, ll_title', 'll_from = 111', array(
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 1a8a4cc..5e546ce 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+/**
+ * @group Database
+ */
 class PreferencesTest extends MediaWikiTestCase {
        /** Array of User objects */
        private $prefUsers;
index a1f808c..5b99628 100644 (file)
@@ -57,16 +57,18 @@ class RecentChangeTest extends MediaWikiTestCase {
         * @covers LogFormatter::getIRCActionText
         */
        function testIrcMsgForLogTypeBlock() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
                # block/block
                $this->assertIRCComment(
-                       $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep .  $this->user_comment,
                        'block', 'block',
                        array(),
                        $this->user_comment
                );
                # block/unblock
                $this->assertIRCComment(
-                       $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep .  $this->user_comment,
                        'block', 'unblock',
                        array(),
                        $this->user_comment
@@ -77,9 +79,11 @@ class RecentChangeTest extends MediaWikiTestCase {
         * @covers LogFormatter::getIRCActionText
         */
        function testIrcMsgForLogTypeDelete() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
                # delete/delete
                $this->assertIRCComment(
-                       $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . $sep .  $this->user_comment,
                        'delete', 'delete',
                        array(),
                        $this->user_comment
@@ -87,7 +91,7 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # delete/restore
                $this->assertIRCComment(
-                       $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . $sep .  $this->user_comment,
                        'delete', 'restore',
                        array(),
                        $this->user_comment
@@ -128,10 +132,11 @@ class RecentChangeTest extends MediaWikiTestCase {
                        '4::target'  => $this->target->getPrefixedText(),
                        '5::noredir' => 0,
                );
+               $sep = $this->context->msg( 'colon-separator' )->text();
 
                # move/move
                $this->assertIRCComment(
-                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )->plain() . $sep .  $this->user_comment,
                        'move', 'move',
                        $move_params,
                        $this->user_comment
@@ -139,7 +144,7 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # move/move_redir
                $this->assertIRCComment(
-                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )->plain() . $sep .  $this->user_comment,
                        'move', 'move_redir',
                        $move_params,
                        $this->user_comment
@@ -169,10 +174,11 @@ class RecentChangeTest extends MediaWikiTestCase {
                $protectParams = array(
                        '[edit=sysop] (indefinite) ‎[move=sysop] (indefinite)'
                );
+               $sep = $this->context->msg( 'colon-separator' )->text();
 
                # protect/protect
                $this->assertIRCComment(
-                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )->plain() . $sep .  $this->user_comment,
                        'protect', 'protect',
                        $protectParams,
                        $this->user_comment
@@ -180,7 +186,7 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # protect/unprotect
                $this->assertIRCComment(
-                       $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . $sep .  $this->user_comment,
                        'protect', 'unprotect',
                        array(),
                        $this->user_comment
@@ -188,7 +194,7 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # protect/modify
                $this->assertIRCComment(
-                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )->plain() . $sep .  $this->user_comment,
                        'protect', 'modify',
                        $protectParams,
                        $this->user_comment
@@ -199,9 +205,11 @@ class RecentChangeTest extends MediaWikiTestCase {
         * @covers LogFormatter::getIRCActionText
         */
        function testIrcMsgForLogTypeUpload() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
                # upload/upload
                $this->assertIRCComment(
-                       $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . $sep .  $this->user_comment,
                        'upload', 'upload',
                        array(),
                        $this->user_comment
@@ -209,7 +217,7 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # upload/overwrite
                $this->assertIRCComment(
-                       $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . ': ' .  $this->user_comment,
+                       $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . $sep .  $this->user_comment,
                        'upload', 'overwrite',
                        array(),
                        $this->user_comment
diff --git a/tests/phpunit/includes/RequestContextTest.php b/tests/phpunit/includes/RequestContextTest.php
new file mode 100644 (file)
index 0000000..48cf6dc
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+class RequestContextTest extends MediaWikiTestCase {
+
+       /**
+        * Test the relationship between title and wikipage in RequestContext
+        */
+       public function testWikiPageTitle() {
+               $context = new RequestContext();
+
+               $curTitle = Title::newFromText( "A" );
+               $context->setTitle( $curTitle );
+               $this->assertTrue( $curTitle->equals( $context->getWikiPage()->getTitle() ),
+                       "When a title is first set WikiPage should be created on-demand for that title." );
+
+               $curTitle = Title::newFromText( "B" );
+               $context->setWikiPage( WikiPage::factory( $curTitle ) );
+               $this->assertTrue( $curTitle->equals( $context->getTitle() ),
+                       "Title must be updated when a new WikiPage is provided." );
+
+               $curTitle = Title::newFromText( "C" );
+               $context->setTitle( $curTitle );
+               $this->assertTrue( $curTitle->equals( $context->getWikiPage()->getTitle() ),
+                       "When a title is updated the WikiPage should be purged and recreated on-demand with the new title." );
+
+       }
+
+}
index fbaa34c..4fa42f3 100644 (file)
@@ -268,6 +268,25 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->assertEquals( 'hello hello.', $rev->getText() );
        }
 
+       /**
+        * @covers Revision::getContent
+        */
+       public function testGetContent_failure()
+       {
+               $rev = new Revision( array(
+                       'page'       =>  $this->the_page->getId(),
+                       'content_model' => $this->the_page->getContentModel(),
+                       'text_id' => 123456789, // not in the test DB
+               ) );
+
+               $this->assertNull( $rev->getContent(),
+                       "getContent() should return null if the revision's text blob could not be loaded." );
+
+               //NOTE: check this twice, once for lazy initialization, and once with the cached value.
+               $this->assertNull( $rev->getContent(),
+                       "getContent() should return null if the revision's text blob could not be loaded." );
+       }
+
        /**
         * @covers Revision::getContent
         */
index 00e7119..9cddbe8 100644 (file)
@@ -11,6 +11,7 @@ class RevisionTest extends MediaWikiTestCase {
 
                $this->setMwGlobals( array(
                        'wgContLang' => Language::factory( 'en' ),
+                       'wgLanguageCode' => 'en',
                        'wgLegacyEncoding' => false,
                        'wgCompressRevisions' => false,
 
index 2f55de4..88bbc07 100644 (file)
@@ -15,6 +15,7 @@ class TestSample extends MediaWikiLangTestCase {
                // after each test.
                $this->setMwGlobals( array(
                        'wgContLang' => Language::factory( 'en' ),
+                       'wgLanguageCode' => 'en',
                ) );
        }
 
@@ -26,7 +27,7 @@ class TestSample extends MediaWikiLangTestCase {
        }
 
        /**
-        * Name tests so that PHPUnit can turn them into sentances when
+        * Name tests so that PHPUnit can turn them into sentences when
         * they run.  While MediaWiki isn't strictly an Agile Programming
         * project, you are encouraged to use the naming described under
         * "Agile Documentation" at
@@ -34,12 +35,11 @@ class TestSample extends MediaWikiLangTestCase {
         */
        function testTitleObjectStringConversion() {
                $title = Title::newFromText("text");
-               $this->assertEquals("Text", $title->__toString(), "Title creation");
-               $this->assertEquals("Text", "Text", "Automatic string conversion");
+               $this->assertInstanceOf('Title', $title, "Title creation");
+               $this->assertEquals("Text", $title, "Automatic string conversion");
 
                $title = Title::newFromText("text", NS_MEDIA);
-               $this->assertEquals("Media:Text", $title->__toString(), "Title creation with namespace");
-
+               $this->assertEquals("Media:Text", $title, "Title creation with namespace");
        }
 
        /**
index dc672ba..28e2e30 100644 (file)
@@ -5,8 +5,6 @@ class SanitizerTest extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $this->setMwGlobals( 'wgCleanupPresentationalAttributes', true );
-
                AutoLoader::loadClass( 'Sanitizer' );
        }
 
@@ -64,113 +62,141 @@ class SanitizerTest extends MediaWikiTestCase {
                $this->assertEquals( UTF8_REPLACEMENT, Sanitizer::decodeCharReferences( "&#88888888888888;" ), 'Invalid numbered entity' );
        }
 
+       /**
+        * @cover Sanitizer::removeHTMLtags
+        * @dataProvider provideHtml5Tags
+        *
+        * @param String $tag Name of an HTML5 element (ie: 'video')
+        * @param Boolean $escaped Wheter sanitizer let the tag in or escape it (ie: '&lt;video&gt;')
+        */
+       function testRemovehtmltagsOnHtml5Tags( $tag, $escaped ) {
+               $this->setMwGlobals( array(
+                       # Enable HTML5 mode
+                       'wgHtml5' => true,
+                       'wgUseTidy' => false
+               ));
+
+               if( $escaped ) {
+                       $this->assertEquals( "&lt;$tag&gt;",
+                               Sanitizer::removeHTMLtags( "<$tag>" )
+                       );
+               } else {
+                       $this->assertEquals( "<$tag></$tag>\n",
+                               Sanitizer::removeHTMLtags( "<$tag>" )
+                       );
+               }
+       }
+
+       /**
+        * Provide HTML5 tags
+        */
+       function provideHtml5Tags() {
+               $ESCAPED  = true; # We want tag to be escaped
+               $VERBATIM = false;  # We want to keep the tag
+               return array(
+                       array( 'data', $VERBATIM ),
+                       array( 'mark', $VERBATIM ),
+                       array( 'time', $VERBATIM ),
+                       array( 'video', $ESCAPED ),
+               );
+       }
+
        function testSelfClosingTag() {
-               $GLOBALS['wgUseTidy'] = false;
+               $this->setMwGlobals( array(
+                       'wgUseTidy' => false
+               ));
+
                $this->assertEquals(
                        '<div>Hello world</div>',
                        Sanitizer::removeHTMLtags( '<div>Hello world</div />' ),
                        '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 provideDeprecatedAttributes
+        * @dataProvider provideTagAttributesToDecode
+        * @cover Sanitizer::decodeTagAttributes
         */
-       function testDeprecatedAttributes( $input, $tag, $expected, $message = null ) {
-               $this->assertEquals( $expected, Sanitizer::fixTagAttributes( $input, $tag ), $message );
+       function testDecodeTagAttributes( $expected, $attributes, $message = '' ) {
+               $this->assertEquals( $expected,
+                       Sanitizer::decodeTagAttributes( $attributes ),
+                       $message
+               );
        }
 
-       function testDeprecatedAttributesDisabled() {
-               global $wgCleanupPresentationalAttributes;
-
-               $wgCleanupPresentationalAttributes = false;
+       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' ),
+               );
+       }
 
-               $this->assertEquals( ' clear="left"', Sanitizer::fixTagAttributes( 'clear="left"', 'br' ), 'Deprecated attributes are not converted to styles when enabled.' );
+       /**
+        * @dataProvider provideDeprecatedAttributes
+        * @cover Sanitizer::fixTagAttributes
+        */
+       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', ' style="clear: left;"', 'Deprecated attributes are converted to styles when enabled.' ),
-                       array( 'clear="all"', 'br', ' style="clear: both;"', 'clear=all is converted to clear: both; not clear: all;' ),
-                       array( 'CLEAR="ALL"', 'br', ' style="clear: both;"', 'clear=ALL is not treated differently from clear=all' ),
-                       array( 'width="100"', 'td', ' style="width: 100px;"', 'Numeric sizes use pixels instead of numbers.' ),
-                       array( 'width="100%"', 'td', ' style="width: 100%;"', 'Units are allowed in sizes.' ),
-                       array( 'WIDTH="100%"', 'td', ' style="width: 100%;"', 'Uppercase WIDTH is treated as lowercase width.' ),
-                       array( 'WiDTh="100%"', 'td', ' style="width: 100%;"', 'Mixed case does not break WiDTh.' ),
-                       array( 'nowrap="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute is output as white-space: nowrap; not something else.' ),
-                       array( 'nowrap=""', 'td', ' style="white-space: nowrap;"', 'nowrap="" is considered true, not false' ),
-                       array( 'NOWRAP="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when uppercase.' ),
-                       array( 'NoWrAp="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when mixed-case.' ),
-                       array( 'align="right"', 'td', ' style="text-align: right;"'   , 'align on table cells gets converted to text-align' ),
-                       array( 'align="center"', 'td', ' style="text-align: center;"' , 'align on table cells gets converted to text-align' ),
-                       array( 'align="left"'  , 'div', ' style="text-align: left;"'  , 'align=(left|right) on div elements gets converted to text-align' ),
-                       array( 'align="center"', 'div', ' style="text-align: center;"', 'align="center" on div elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'p',   ' style="text-align: left;"'  , 'align on p elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'h1',  ' style="text-align: left;"'  , 'align on h1 elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'h1',  ' style="text-align: left;"'  , 'align on h1 elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'caption',' style="text-align: left;"','align on caption elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'tfoot',' style="text-align: left;"' , 'align on tfoot elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'tbody',' style="text-align: left;"' , 'align on tbody elements gets converted to text-align' ),
-
-                       # <tr>
-                       array( 'align="right"' , 'tr', ' style="text-align: right;"' , 'align on table row get converted to text-align' ),
-                       array( 'align="center"', 'tr', ' style="text-align: center;"', 'align on table row get converted to text-align' ),
-                       array( 'align="left"'  , 'tr', ' style="text-align: left;"'  , 'align on table row get converted to text-align' ),
-
-                       #table
-                       array( 'align="left"'  , 'table', ' style="float: left;"'    , 'align on table converted to float' ),
-                       array( 'align="center"', 'table', ' style="margin-left: auto; margin-right: auto;"', 'align center on table converted to margins' ),
-                       array( 'align="right"' , 'table', ' style="float: right;"'   , 'align on table converted to float' ),
+                       array( 'clear="left"', 'br' ),
+                       array( 'clear="all"', 'br' ),
+                       array( 'width="100"', 'td' ),
+                       array( 'nowrap="true"', 'td' ),
+                       array( 'nowrap=""', 'td' ),
+                       array( 'align="right"', 'td' ),
+                       array( 'align="center"', 'table' ),
+                       array( 'align="left"', 'tr' ),
+                       array( 'align="center"', 'div' ),
+                       array( 'align="left"', 'h1' ),
+                       array( 'align="left"', 'span' ),
                );
        }
 
        /**
         * @dataProvider provideCssCommentsFixtures
+        * @cover Sanitizer::checkCss
         */
        function testCssCommentsChecking( $expected, $css, $message = '' ) {
-               $this->assertEquals(
-                       $expected,
+               $this->assertEquals( $expected,
                        Sanitizer::checkCss( $css ),
                        $message
                );
diff --git a/tests/phpunit/includes/StringUtilsTest.php b/tests/phpunit/includes/StringUtilsTest.php
new file mode 100644 (file)
index 0000000..401b322
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+
+class StringUtilsTest extends MediaWikiTestCase {
+
+       /**
+        * This test StringUtils::isUtf8 whenever we have mbstring extension
+        * loaded.
+        *
+        * @cover StringUtils::isUtf8
+        * @dataProvider provideStringsForIsUtf8Check
+        */
+       function testIsUtf8WithMbstring($expected, $string ) {
+               if( !function_exists( 'mb_check_encoding' ) ) {
+                       $this->markTestSkipped( 'Test requires the mbstring PHP extension' );
+               }
+               $this->assertEquals( $expected,
+                       StringUtils::isUtf8( $string ),
+                       'Testing string "' . $this->escaped( $string ) . '" with mb_check_encoding'
+               );
+       }
+
+       /**
+        * This test StringUtils::isUtf8 making sure we use the pure PHP
+        * implementation used as a fallback when mb_check_encoding() is
+        * not available.
+        *
+        * @cover StringUtils::isUtf8
+        * @dataProvider provideStringsForIsUtf8Check
+        */
+       function testIsUtf8WithPhpFallbackImplementation($expected, $string ) {
+               $this->assertEquals( $expected,
+                       StringUtils::isUtf8( $string, /** disable mbstring: */ true ),
+                       'Testing string "' . $this->escaped( $string ) . '" with pure PHP implementation'
+               );
+       }
+
+       /**
+        * Print high range characters as an hexadecimal
+        */
+       function escaped( $string ) {
+               $escaped = '';
+               for($i=0; $i<strlen($string);$i++) {
+                       $char = $string[$i];
+                       $val = ord($char);
+                       if( $val > 127 ) {
+                               $escaped .='\x' . dechex($val);
+                       } else {
+                               $escaped .= $char;
+                       }
+               }
+               return $escaped;
+       }
+
+       /**
+        * See also "UTF-8 decoder capability and stress test" by
+        * Markus Kuhn:
+        * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
+        */
+       function provideStringsForIsUtf8Check() {
+               // Expected return values for StringUtils::isUtf8()
+               $PASS = true;
+               $FAIL = false;
+
+               return array(
+                       array( $PASS, 'Some ASCII' ),
+                       array( $PASS, "Euro sign €" ),
+
+                       # First possible sequences
+                       array( $PASS, "\x00" ),
+                       array( $PASS, "\xc2\x80" ),
+                       array( $PASS, "\xe0\xa0\x80" ),
+                       array( $PASS, "\xf0\x90\x80\x80" ),
+                       array( $PASS, "\xf8\x88\x80\x80\x80" ),
+                       array( $PASS, "\xfc\x84\x80\x80\x80\x80" ),
+
+                       # Last possible sequence
+                       array( $PASS, "\x7f" ),
+                       array( $PASS, "\xdf\xbf" ),
+                       array( $PASS, "\xef\xbf\xbf" ),
+                       array( $PASS, "\xf7\xbf\xbf\xbf" ),
+                       array( $PASS, "\xfb\xbf\xbf\xbf\xbf" ),
+                       array( $FAIL, "\xfd\xbf\xbf\xbf\xbf\xbf" ),
+
+                       # boundaries:
+                       array( $PASS, "\xed\x9f\xbf" ),
+                       array( $PASS, "\xee\x80\x80" ),
+                       array( $PASS, "\xef\xbf\xbd" ),
+                       array( $PASS, "\xf4\x8f\xbf\xbf" ),
+                       array( $PASS, "\xf4\x90\x80\x80" ),
+
+                       # Malformed
+                       array( $FAIL, "\x80" ),
+                       array( $FAIL, "\xBF" ),
+                       array( $FAIL, "\x80\xbf" ),
+                       array( $FAIL, "\x80\xbf\x80" ),
+                       array( $FAIL, "\x80\xbf\x80\xbf" ),
+                       array( $FAIL, "\x80\xbf\x80\xbf\x80" ),
+                       array( $FAIL, "\x80\xbf\x80\xbf\x80\xbf" ),
+                       array( $FAIL, "\x80\xbf\x80\xbf\x80\xbf\x80" ),
+
+                       # last byte missing
+                       array( $FAIL, "\xc0" ),
+                       array( $FAIL, "\xe0\x80" ),
+                       array( $FAIL, "\xf0\x80\x80" ),
+                       array( $FAIL, "\xf8\x80\x80\x80" ),
+                       array( $FAIL, "\xfc\x80\x80\x80\x80" ),
+                       array( $FAIL, "\xdf" ),
+                       array( $FAIL, "\xef\xbf" ),
+                       array( $FAIL, "\xf7\xbf\xbf" ),
+                       array( $FAIL, "\xfb\xbf\xbf\xbf" ),
+                       array( $FAIL, "\xfd\xbf\xbf\xbf\xbf" ),
+
+                       # impossible bytes
+                       array( $FAIL, "\xfe" ),
+                       array( $FAIL, "\xff" ),
+                       array( $FAIL, "\xfe\xfe\xff\xff" ),
+
+                       /**
+                       # The PHP implementation does not handle characters
+                       # being represented in a form which is too long :(
+
+                       # overlong sequences
+                       array( $FAIL, "\xc0\xaf" ),
+                       array( $FAIL, "\xe0\x80\xaf" ),
+                       array( $FAIL, "\xf0\x80\x80\xaf" ),
+                       array( $FAIL, "\xf8\x80\x80\x80\xaf" ),
+                       array( $FAIL, "\xfc\x80\x80\x80\x80\xaf" ),
+
+                       # Maximum overlong sequences
+                       array( $FAIL, "\xc1\xbf" ),
+                       array( $FAIL, "\xe0\x9f\xbf" ),
+                       array( $FAIL, "\xf0\x8F\xbf\xbf" ),
+                       array( $FAIL, "\xf8\x87\xbf\xbf" ),
+                       array( $FAIL, "\xfc\x83\xbf\xbf\xbf\xbf" ),
+                       **/
+
+                       # non characters
+                       array( $PASS, "\xef\xbf\xbe" ),
+                       array( $PASS, "\xef\xbf\xbf" ),
+               );
+       }
+}
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 db4162f..07ce84b 100644 (file)
@@ -7,6 +7,7 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
                $this->setMwGlobals( array(
                        'wgLocalTZoffset' => null,
                        'wgContLang' => Language::factory( 'en' ),
+                       'wgLanguageCode' => 'en',
                ) );
 
                $this->iniSet( 'precision', 15 );
index 6352160..d7da0db 100644 (file)
@@ -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 c12fb22..89812c9 100644 (file)
@@ -2,6 +2,7 @@
 
 /**
  * @group ContentHandler
+ * @group Database
  *
  * @note: We don't make assumptions about the main namespace.
  *        But we do expect the Help namespace to contain Wikitext.
@@ -10,7 +11,7 @@
 class TitleMethodsTest extends MediaWikiTestCase {
 
        public function setup() {
-               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContLang;
+               global $wgContLang;
 
                parent::setUp();
 
index 55c5610..05f1408 100644 (file)
@@ -30,6 +30,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $this->setMwGlobals( array(
                        'wgMemc' => new EmptyBagOStuff,
                        'wgContLang' => $langObj,
+                       'wgLanguageCode' => 'en',
                        'wgLang' => $langObj,
                        'wgLocaltimezone' => $localZone,
                        'wgLocalTZoffset' => $localOffset,
@@ -355,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 0a3f6f6..8647954 100644 (file)
@@ -126,11 +126,11 @@ class TitleTest extends MediaWikiTestCase {
                # - wgDefaultLanguageVariant
                # - Optional message
                return array(
-                       array( 'fr', 'Main_page', 'fr', 'fr', false ),
-                       array( 'es', 'Main_page', 'es', 'zh-tw', false ),
-                       array( 'zh', 'Main_page', 'zh', 'zh-tw', false ),
+                       array( 'fr', 'Help:I_need_somebody', 'fr', 'fr', false ),
+                       array( 'es', 'Help:I_need_somebody', 'es', 'zh-tw', false ),
+                       array( 'zh', 'Help:I_need_somebody', 'zh', 'zh-tw', false ),
 
-                       array( 'es',    'Main_page',                 'es', 'zh-tw', 'zh-cn' ),
+                       array( 'es',    'Help:I_need_somebody',      'es', 'zh-tw', 'zh-cn' ),
                        array( 'es',    'MediaWiki:About',           'es', 'zh-tw', 'zh-cn' ),
                        array( 'es',    'MediaWiki:About/',          'es', 'zh-tw', 'zh-cn' ),
                        array( 'de',    'MediaWiki:About/de',        'es', 'zh-tw', 'zh-cn' ),
@@ -139,7 +139,7 @@ class TitleTest extends MediaWikiTestCase {
                        array( 'en',    'User:JohnDoe/Common.js',    'es', 'zh-tw', 'zh-cn' ),
                        array( 'en',    'User:JohnDoe/Monobook.css', 'es', 'zh-tw', 'zh-cn' ),
 
-                       array( 'zh-cn', 'Main_page',                 'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'zh-cn', 'Help:I_need_somebody',      'zh', 'zh-tw', 'zh-cn' ),
                        array( 'zh',    'MediaWiki:About',           'zh', 'zh-tw', 'zh-cn' ),
                        array( 'zh',    'MediaWiki:About/',          'zh', 'zh-tw', 'zh-cn' ),
                        array( 'de',    'MediaWiki:About/de',        'zh', 'zh-tw', 'zh-cn' ),
index bf9468a..e5a014d 100644 (file)
@@ -173,7 +173,7 @@ class UserTest extends MediaWikiTestCase {
                $user->addToDatabase();
 
                // let the user have a few (3) edits
-               $page = WikiPage::factory( Title::newFromText( 'UserTest_EditCount' ) );
+               $page = WikiPage::factory( Title::newFromText( 'Help:UserTest_EditCount' ) );
                for( $i = 0; $i < 3; $i++ ) {
                        $page->doEdit( (string) $i, 'test', 0, false, $user );
                }
index fb20ce6..9300d4b 100644 (file)
@@ -546,9 +546,9 @@ class WikiPageTest extends MediaWikiLangTestCase {
 
                $title = Title::newFromText( $title );
 
-               if ( !$wgContentHandlerUseDB && ContentHandler::getDefaultModelFor( $title ) != $model ) {
+               if ( !$wgContentHandlerUseDB && $model && ContentHandler::getDefaultModelFor( $title ) != $model ) {
                        $this->markTestSkipped( "Can not use non-default content model $model for "
-                               . $title->getPrefixedDBkey() . " with \wgArticleCountMethod disabled." );
+                               . $title->getPrefixedDBkey() . " with \$wgContentHandlerUseDB disabled." );
                }
 
                $page = $this->createPage( $title, $text, $model );
@@ -704,16 +704,7 @@ more stuff
 
        /* @todo FIXME: fix this!
        public function testGetUndoText() {
-               global $wgDiff3;
-
-               wfSuppressWarnings();
-               $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
-               wfRestoreWarnings();
-
-               if( !$haveDiff3 ) {
-                       $this->markTestSkipped( "diff3 not installed or not found" );
-                       return;
-               }
+               $this->checkHasDiff3();
 
                $text = "one";
                $page = $this->createPage( "WikiPageTest_testGetUndoText", $text );
index 1b48ad2..7c9cbe3 100644 (file)
@@ -6,6 +6,10 @@ class XmlSelectTest extends MediaWikiTestCase {
 
        protected function setUp() {
                parent::setUp();
+               $this->setMwGlobals( array(
+                       'wgHtml5' => true,
+                       'wgWellFormedXml' => true,
+               ));
                $this->select = new XmlSelect();
        }
        protected function tearDown() {
index 3cc5422..b54731b 100644 (file)
@@ -29,6 +29,8 @@ class XmlTest extends MediaWikiTestCase {
 
                $this->setMwGlobals( array(
                        'wgLang' => $langObj,
+                       'wgHtml5' => true,
+                       'wgWellFormedXml' => true,
                ) );
        }
 
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 624cf49..eaab300 100644 (file)
@@ -7,6 +7,7 @@
  *
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiEditPageTest extends ApiTestCase {
 
@@ -196,4 +197,153 @@ class ApiEditPageTest extends ApiTestCase {
        function testUndo() {
                $this->markTestIncomplete( "not yet implemented" );
        }
+
+       function testEditConflict() {
+               static $count = 0;
+               $count++;
+
+               // assume NS_HELP defaults to wikitext
+               $name = "Help:ApiEditPageTest_testEditConflict_$count";
+               $title = Title::newFromText( $name );
+
+               $page = WikiPage::factory( $title );
+
+               // base edit
+               $page->doEditContent( new WikitextContent( "Foo" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $page, '20120101000000' );
+               $baseTime = $page->getRevision()->getTimestamp();
+
+               // conflicting edit
+               $page->doEditContent( new WikitextContent( "Foo bar" ),
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+               $this->forceRevisionDate( $page, '20120101020202' );
+
+               // try to save edit, expect conflict
+               try {
+                       list( $re,, ) = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $name,
+                               'text' => 'nix bar!',
+                               'basetimestamp' => $baseTime,
+                               ), null, self::$users['sysop']->user );
+
+                       $this->fail( 'edit conflict expected' );
+               } catch ( UsageException $ex ) {
+                       $this->assertEquals( 'editconflict', $ex->getCodeString() );
+               }
+       }
+
+       function testEditConflict_redirect() {
+               static $count = 0;
+               $count++;
+
+               // assume NS_HELP defaults to wikitext
+               $name = "Help:ApiEditPageTest_testEditConflict_redirect_$count";
+               $title = Title::newFromText( $name );
+               $page = WikiPage::factory( $title );
+
+               $rname = "Help:ApiEditPageTest_testEditConflict_redirect_r$count";
+               $rtitle = Title::newFromText( $rname );
+               $rpage = WikiPage::factory( $rtitle );
+
+               // base edit for content
+               $page->doEditContent( new WikitextContent( "Foo" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $page, '20120101000000' );
+               $baseTime = $page->getRevision()->getTimestamp();
+
+               // base edit for redirect
+               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $rpage, '20120101000000' );
+
+               // conflicting edit to redirect
+               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+               $this->forceRevisionDate( $rpage, '20120101020202' );
+
+               // try to save edit; should work, because we follow the redirect
+               list( $re,, ) = $this->doApiRequestWithToken( array(
+                       'action' => 'edit',
+                       'title' => $rname,
+                       'text' => 'nix bar!',
+                       'basetimestamp' => $baseTime,
+                       'redirect' => true,
+               ), null, self::$users['sysop']->user );
+
+               $this->assertEquals( 'Success', $re['edit']['result'],
+                       "no edit conflict expected when following redirect" );
+
+               // try again, without following the redirect. Should fail.
+               try {
+                       list( $re,, ) = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $rname,
+                               'text' => 'nix bar!',
+                               'basetimestamp' => $baseTime,
+                       ), null, self::$users['sysop']->user );
+
+                       $this->fail( 'edit conflict expected' );
+               } catch ( UsageException $ex ) {
+                       $this->assertEquals( 'editconflict', $ex->getCodeString() );
+               }
+       }
+
+       function testEditConflict_bug41990() {
+               static $count = 0;
+               $count++;
+
+               /*
+               * bug 41990: if the target page has a newer revision than the redirect, then editing the
+               * redirect while specifying 'redirect' and *not* specifying 'basetimestamp' erronously
+               * caused an edit conflict to be detected.
+               */
+
+               // assume NS_HELP defaults to wikitext
+               $name = "Help:ApiEditPageTest_testEditConflict_redirect_bug41990_$count";
+               $title = Title::newFromText( $name );
+               $page = WikiPage::factory( $title );
+
+               $rname = "Help:ApiEditPageTest_testEditConflict_redirect_bug41990_r$count";
+               $rtitle = Title::newFromText( $rname );
+               $rpage = WikiPage::factory( $rtitle );
+
+               // base edit for content
+               $page->doEditContent( new WikitextContent( "Foo" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $page, '20120101000000' );
+
+               // base edit for redirect
+               $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+               $this->forceRevisionDate( $rpage, '20120101000000' );
+               $baseTime = $rpage->getRevision()->getTimestamp();
+
+               // new edit to content
+               $page->doEditContent( new WikitextContent( "Foo bar" ),
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+               $this->forceRevisionDate( $rpage, '20120101020202' );
+
+               // try to save edit; should work, following the redirect.
+               list( $re,, ) = $this->doApiRequestWithToken( array(
+                       'action' => 'edit',
+                       'title' => $rname,
+                       'text' => 'nix bar!',
+                       'redirect' => true,
+               ), null, self::$users['sysop']->user );
+
+               $this->assertEquals( 'Success', $re['edit']['result'],
+                       "no edit conflict expected here" );
+       }
+
+       protected function forceRevisionDate( WikiPage $page, $timestamp ) {
+               $dbw = wfGetDB( DB_MASTER );
+
+               $dbw->update( 'revision',
+                       array( 'rev_timestamp' => $timestamp ),
+                       array( 'rev_id' => $page->getLatest() ) );
+
+               $page->clear();
+       }
 }
index 60ae608..e5a8717 100644 (file)
@@ -1,4 +1,8 @@
 <?php
+
+/**
+ * @group API
+ */
 class ApiGeneratorTest extends MediaWikiTestCase {
 
        /**
index 4684c55..902b7b8 100644 (file)
@@ -2,11 +2,15 @@
 
 /**
  * @group API
+ * @group Database
+ * @group medium
  */
 class ApiOptionsTest extends MediaWikiLangTestCase {
 
        private $mTested, $mUserMock, $mContext, $mSession;
 
+       private $mOldGetPreferencesHooks = false;
+
        private static $Success = array( 'options' => 'success' );
 
        protected function setUp() {
@@ -16,8 +20,17 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                        ->disableOriginalConstructor()
                        ->getMock();
 
+               // Set up groups
+               $this->mUserMock->expects( $this->any() )
+                       ->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() );
+               $this->mContext->getContext()->setTitle( Title::newFromText( 'Test' ) );
                $this->mContext->setUser( $this->mUserMock );
 
                $main = new ApiMain( $this->mContext );
@@ -26,6 +39,84 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mSession = array();
 
                $this->mTested = new ApiOptions( $main, 'options' );
+
+               global $wgHooks;
+               if ( !isset( $wgHooks['GetPreferences'] ) ) {
+                       $wgHooks['GetPreferences'] = array();
+               }
+               $this->mOldGetPreferencesHooks = $wgHooks['GetPreferences'];
+               $wgHooks['GetPreferences'][] = array( $this, 'hookGetPreferences' );
+       }
+
+       protected function tearDown() {
+               global $wgHooks;
+
+               if ( $this->mOldGetPreferencesHooks !== false ) {
+                       $wgHooks['GetPreferences'] = $this->mOldGetPreferencesHooks;
+                       $this->mOldGetPreferencesHooks = false;
+               }
+
+               parent::tearDown();
+       }
+
+       public function hookGetPreferences( $user, &$preferences ) {
+               $preferences = array();
+
+               foreach ( array( 'name', 'willBeNull', 'willBeEmpty', 'willBeHappy' ) as $k ) {
+                       $preferences[$k] = array(
+                               'type' => 'text',
+                               'section' => 'test',
+                               'label' => '&#160;',
+                       );
+               }
+
+               $preferences['testmultiselect'] = array(
+                       'type' => 'multiselect',
+                       'options' => array(
+                               'Test' => array(
+                                       '<span dir="auto">Some HTML here for option 1</span>' => 'opt1',
+                                       '<span dir="auto">Some HTML here for option 2</span>' => 'opt2',
+                                       '<span dir="auto">Some HTML here for option 3</span>' => 'opt3',
+                                       '<span dir="auto">Some HTML here for option 4</span>' => 'opt4',
+                               ),
+                       ),
+                       'section' => 'test',
+                       'label' => '&#160;',
+                       'prefix' => 'testmultiselect-',
+                       'default' => array(),
+               );
+
+               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() ) {
@@ -107,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' );
@@ -122,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' );
@@ -146,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' );
@@ -161,15 +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( 3 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'willBeNull' ), $this->equalTo( null ) );
+                       ->with( $this->equalTo( 'willBeNull' ), $this->identicalTo( null ) );
 
-               $this->mUserMock->expects( $this->at( 2 ) )
+               $this->mUserMock->expects( $this->at( 4 ) )
+                       ->method( 'getOptions' );
+
+               $this->mUserMock->expects( $this->at( 5 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeEmpty' ), $this->equalTo( '' ) );
 
-               $this->mUserMock->expects( $this->at( 3 ) )
+               $this->mUserMock->expects( $this->at( 6 ) )
+                       ->method( 'getOptions' );
+
+               $this->mUserMock->expects( $this->at( 7 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
 
@@ -187,11 +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( 4 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
 
-               $this->mUserMock->expects( $this->at( 3 ) )
+               $this->mUserMock->expects( $this->at( 5 ) )
+                       ->method( 'getOptions' );
+
+               $this->mUserMock->expects( $this->at( 6 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'name' ), $this->equalTo( 'value' ) );
 
@@ -209,4 +334,79 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                $this->assertEquals( self::$Success, $response );
        }
+
+       public function testMultiSelect() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->at( 2 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'testmultiselect-opt1' ), $this->identicalTo( true ) );
+
+               $this->mUserMock->expects( $this->at( 3 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'testmultiselect-opt2' ), $this->identicalTo( null ) );
+
+               $this->mUserMock->expects( $this->at( 4 ) )
+                       ->method( 'setOption' )
+                       ->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' );
+
+               $request = $this->getSampleRequest( array(
+                       'change' => 'testmultiselect-opt1=1|testmultiselect-opt2|testmultiselect-opt3=|testmultiselect-opt4=0'
+               ) );
+
+               $response = $this->executeQuery( $request );
+
+               $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 {
 
diff --git a/tests/phpunit/includes/api/ApiQueryRevisionsTest.php b/tests/phpunit/includes/api/ApiQueryRevisionsTest.php
new file mode 100644 (file)
index 0000000..19da81c
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @group API
+ * @group Database
+ * @group medium
+ */
+class ApiQueryRevisionsTest extends ApiTestCase {
+
+       /**
+        * @group medium
+        */
+       function testContentComesWithContentModelAndFormat() {
+
+               $pageName = 'Help:' . __METHOD__ ;
+               $title = Title::newFromText( $pageName );
+               $page = WikiPage::factory( $title );
+               $page->doEdit( 'Some text', 'inserting content' );
+
+               $apiResult = $this->doApiRequest( array(
+                       'action' => 'query',
+                       'prop' => 'revisions',
+                       'titles' => $pageName,
+                       'rvprop' => 'content',
+               ) );
+               $this->assertArrayHasKey( 'query', $apiResult[0] );
+               $this->assertArrayHasKey( 'pages', $apiResult[0]['query'] );
+               foreach( $apiResult[0]['query']['pages'] as $page ) {
+                       $this->assertArrayHasKey( 'revisions', $page );
+                       foreach( $page['revisions'] as $revision ) {
+                               $this->assertArrayHasKey( 'contentformat', $revision,
+                                       'contentformat should be included when asking content so'
+                                       . ' client knows how to interpretate it'
+                               );
+                               $this->assertArrayHasKey( 'contentmodel', $revision,
+                                       'contentmodel should be included when asking content so'
+                                       . ' client knows how to interpretate it'
+                               );
+                       }
+               }
+       }
+}
index dbf02f7..1b1886e 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiQueryTest extends ApiTestCase {
 
index 9806a1c..2f2f5f9 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiTest extends ApiTestCase {
 
@@ -11,7 +12,7 @@ class ApiTest extends ApiTestCase {
 
                $this->assertEquals(
                        null, $mock->requireOnlyOneParameter( array( "filename" => "foo.txt",
-                                                                                                          "enablechunks" => false ), "filename", "enablechunks" ) );
+                               "enablechunks" => false ), "filename", "enablechunks" ) );
        }
 
        /**
@@ -22,7 +23,7 @@ class ApiTest extends ApiTestCase {
 
                $this->assertEquals(
                        null, $mock->requireOnlyOneParameter( array( "filename" => "foo.txt",
-                                                                                                          "enablechunks" => 0 ), "filename", "enablechunks" ) );
+                               "enablechunks" => 0 ), "filename", "enablechunks" ) );
        }
 
        /**
@@ -33,7 +34,7 @@ class ApiTest extends ApiTestCase {
 
                $this->assertEquals(
                        null, $mock->requireOnlyOneParameter( array( "filename" => "foo.txt",
-                                                                                                          "enablechunks" => true ), "filename", "enablechunks" ) );
+                               "enablechunks" => true ), "filename", "enablechunks" ) );
        }
 
        /**
@@ -43,7 +44,6 @@ class ApiTest extends ApiTestCase {
         * @expectedException UsageException
         */
        function testApi() {
-       
                $api = new ApiMain(
                        new FauxRequest( array( 'action' => 'help', 'format' => 'xml' ) )
                );
@@ -194,7 +194,7 @@ class ApiTest extends ApiTestCase {
 
                return $cj;
        }
-       
+
        function testRunLogin() {
                $sysopUser = self::$users['sysop'];
                $data = $this->doApiRequest( array(
@@ -217,10 +217,10 @@ class ApiTest extends ApiTestCase {
                $this->assertArrayHasKey( "result", $data[0]['login'] );
                $this->assertEquals( "Success", $data[0]['login']['result'] );
                $this->assertArrayHasKey( 'lgtoken', $data[0]['login'] );
-               
+
                return $data;
        }
-       
+
        function testGettingToken() {
                foreach ( self::$users as $user ) {
                        $this->runTokenTest( $user );
@@ -228,7 +228,6 @@ class ApiTest extends ApiTestCase {
        }
 
        function runTokenTest( $user ) {
-               
                $data = $this->getTokenList( $user );
 
                $this->assertArrayHasKey( 'query', $data[0] );
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 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..d34e799 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiFormatPhpTest extends ApiFormatTestBase {
 
index 60baedc..73d0012 100644 (file)
@@ -233,8 +233,6 @@ class ContentHandlerTest extends MediaWikiTestCase {
         * @dataProvider dataMakeContent
         */
        public function testMakeContent( $data, $title, $modelId, $format, $expectedModelId, $expectedNativeData, $shouldFail ) {
-               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers;
-
                $title = Title::newFromText( $title );
 
                try {
diff --git a/tests/phpunit/includes/content/JavaScriptContentTest.php b/tests/phpunit/includes/content/JavaScriptContentTest.php
new file mode 100644 (file)
index 0000000..18df53f
--- /dev/null
@@ -0,0 +1,273 @@
+<?php
+
+/**
+ * @group ContentHandler
+ * @group Database
+ *        ^--- needed, because we do need the database to test link updates
+ */
+class JavaScriptContentTest extends TextContentTest {
+
+       public function newContent( $text ) {
+               return new JavaScriptContent( $text );
+       }
+
+       public static function dataGetParserOutput() {
+               return array(
+                       array(
+                               'MediaWiki:Test.js',
+                               null,
+                               "hello <world>\n",
+                               "<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello &lt;world&gt;\n\n</pre>"
+                       ),
+                       array(
+                               'MediaWiki:Test.js',
+                               null,
+                               "hello(); // [[world]]\n",
+                               "<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello(); // [[world]]\n\n</pre>",
+                               array(
+                                       'Links' => array(
+                                               array( 'World' => 0 )
+                                       )
+                               )
+                       ),
+
+                       // TODO: more...?
+               );
+       }
+
+       // XXX: Unused function
+       public static function dataGetSection() {
+               return array(
+                       array( WikitextContentTest::$sections,
+                              '0',
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              '2',
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              '8',
+                              null
+                       ),
+               );
+       }
+
+       // XXX: Unused function
+       public static function dataReplaceSection() {
+               return array(
+                       array( WikitextContentTest::$sections,
+                              '0',
+                              'No more',
+                              null,
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              '',
+                              'No more',
+                              null,
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              '2',
+                              "== TEST ==\nmore fun",
+                              null,
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              '8',
+                              'No more',
+                              null,
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              'new',
+                              'No more',
+                              'New',
+                              null
+                       ),
+               );
+       }
+
+       public function testAddSectionHeader( ) {
+               $content = $this->newContent( 'hello world' );
+               $c = $content->addSectionHeader( 'test' );
+
+               $this->assertTrue( $content->equals( $c ) );
+       }
+
+       // XXX: currently, preSaveTransform is applied to scripts. this may change or become optional.
+       public static function dataPreSaveTransform() {
+               return array(
+                       array( 'hello this is ~~~',
+                               "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
+                       ),
+                       array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+                               'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+                       ),
+                       array( " Foo \n ",
+                               " Foo",
+                       ),
+               );
+       }
+
+       public static function dataPreloadTransform() {
+               return array(
+                       array( 'hello this is ~~~',
+                              'hello this is ~~~',
+                       ),
+                       array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
+                              'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
+                       ),
+               );
+       }
+
+       public static function dataGetRedirectTarget() {
+               return array(
+                       array( '#REDIRECT [[Test]]',
+                              null,
+                       ),
+                       array( '#REDIRECT Test',
+                              null,
+                       ),
+                       array( '* #REDIRECT [[Test]]',
+                              null,
+                       ),
+               );
+       }
+
+       /**
+        * @todo: test needs database!
+        */
+       /*
+       public function getRedirectChain() {
+               $text = $this->getNativeData();
+               return Title::newFromRedirectArray( $text );
+       }
+       */
+
+       /**
+        * @todo: test needs database!
+        */
+       /*
+       public function getUltimateRedirectTarget() {
+               $text = $this->getNativeData();
+               return Title::newFromRedirectRecurse( $text );
+       }
+       */
+
+       public static function dataIsCountable() {
+               return array(
+                       array( '',
+                              null,
+                              'any',
+                              true
+                       ),
+                       array( 'Foo',
+                              null,
+                              'any',
+                              true
+                       ),
+                       array( 'Foo',
+                              null,
+                              'comma',
+                              false
+                       ),
+                       array( 'Foo, bar',
+                              null,
+                              'comma',
+                              false
+                       ),
+                       array( 'Foo',
+                              null,
+                              'link',
+                              false
+                       ),
+                       array( 'Foo [[bar]]',
+                              null,
+                              'link',
+                              false
+                       ),
+                       array( 'Foo',
+                              true,
+                              'link',
+                              false
+                       ),
+                       array( 'Foo [[bar]]',
+                              false,
+                              'link',
+                              false
+                       ),
+                       array( '#REDIRECT [[bar]]',
+                              true,
+                              'any',
+                              true
+                       ),
+                       array( '#REDIRECT [[bar]]',
+                              true,
+                              'comma',
+                              false
+                       ),
+                       array( '#REDIRECT [[bar]]',
+                              true,
+                              'link',
+                              false
+                       ),
+               );
+       }
+
+       public static function dataGetTextForSummary() {
+               return array(
+                       array( "hello\nworld.",
+                              16,
+                              'hello world.',
+                       ),
+                       array( 'hello world.',
+                              8,
+                              'hello...',
+                       ),
+                       array( '[[hello world]].',
+                              8,
+                              '[[hel...',
+                       ),
+               );
+       }
+
+       public function testMatchMagicWord( ) {
+               $mw = MagicWord::get( "staticredirect" );
+
+               $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
+               $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word, since it's not wikitext" );
+       }
+
+       public function testUpdateRedirect( ) {
+               $target = Title::newFromText( "testUpdateRedirect_target" );
+
+               $content = $this->newContent( "#REDIRECT [[Someplace]]" );
+               $newContent = $content->updateRedirect( $target );
+
+               $this->assertTrue( $content->equals( $newContent ), "content should be unchanged since it's not wikitext" );
+       }
+
+       public function testGetModel() {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getModel() );
+       }
+
+       public function testGetContentHandler() {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getContentHandler()->getModelID() );
+       }
+
+       public static function dataEquals( ) {
+               return array(
+                       array( new JavaScriptContent( "hallo" ), null, false ),
+                       array( new JavaScriptContent( "hallo" ), new JavaScriptContent( "hallo" ), true ),
+                       array( new JavaScriptContent( "hallo" ), new CssContent( "hallo" ), false ),
+                       array( new JavaScriptContent( "hallo" ), new JavaScriptContent( "HALLO" ), false ),
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/content/JavascriptContentTest.php b/tests/phpunit/includes/content/JavascriptContentTest.php
deleted file mode 100644 (file)
index e08252c..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-
-/**
- * @group ContentHandler
- * @group Database
- *        ^--- needed, because we do need the database to test link updates
- */
-class JavascriptContentTest extends TextContentTest {
-
-       public function newContent( $text ) {
-               return new JavascriptContent( $text );
-       }
-
-       public static function dataGetParserOutput() {
-               return array(
-                       array(
-                               'MediaWiki:Test.js',
-                               null,
-                               "hello <world>\n",
-                               "<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello &lt;world&gt;\n\n</pre>"
-                       ),
-                       array(
-                               'MediaWiki:Test.js',
-                               null,
-                               "hello(); // [[world]]\n",
-                               "<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello(); // [[world]]\n\n</pre>",
-                               array(
-                                       'Links' => array(
-                                               array( 'World' => 0 )
-                                       )
-                               )
-                       ),
-
-                       // TODO: more...?
-               );
-       }
-
-       // XXX: Unused function
-       public static function dataGetSection() {
-               return array(
-                       array( WikitextContentTest::$sections,
-                              '0',
-                              null
-                       ),
-                       array( WikitextContentTest::$sections,
-                              '2',
-                              null
-                       ),
-                       array( WikitextContentTest::$sections,
-                              '8',
-                              null
-                       ),
-               );
-       }
-
-       // XXX: Unused function
-       public static function dataReplaceSection() {
-               return array(
-                       array( WikitextContentTest::$sections,
-                              '0',
-                              'No more',
-                              null,
-                              null
-                       ),
-                       array( WikitextContentTest::$sections,
-                              '',
-                              'No more',
-                              null,
-                              null
-                       ),
-                       array( WikitextContentTest::$sections,
-                              '2',
-                              "== TEST ==\nmore fun",
-                              null,
-                              null
-                       ),
-                       array( WikitextContentTest::$sections,
-                              '8',
-                              'No more',
-                              null,
-                              null
-                       ),
-                       array( WikitextContentTest::$sections,
-                              'new',
-                              'No more',
-                              'New',
-                              null
-                       ),
-               );
-       }
-
-       public function testAddSectionHeader( ) {
-               $content = $this->newContent( 'hello world' );
-               $c = $content->addSectionHeader( 'test' );
-
-               $this->assertTrue( $content->equals( $c ) );
-       }
-
-       // XXX: currently, preSaveTransform is applied to scripts. this may change or become optional.
-       public static function dataPreSaveTransform() {
-               return array(
-                       array( 'hello this is ~~~',
-                               "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
-                       ),
-                       array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
-                               'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
-                       ),
-                       array( " Foo \n ",
-                               " Foo",
-                       ),
-               );
-       }
-
-       public static function dataPreloadTransform() {
-               return array(
-                       array( 'hello this is ~~~',
-                              'hello this is ~~~',
-                       ),
-                       array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
-                              'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
-                       ),
-               );
-       }
-
-       public static function dataGetRedirectTarget() {
-               return array(
-                       array( '#REDIRECT [[Test]]',
-                              null,
-                       ),
-                       array( '#REDIRECT Test',
-                              null,
-                       ),
-                       array( '* #REDIRECT [[Test]]',
-                              null,
-                       ),
-               );
-       }
-
-       /**
-        * @todo: test needs database!
-        */
-       /*
-       public function getRedirectChain() {
-               $text = $this->getNativeData();
-               return Title::newFromRedirectArray( $text );
-       }
-       */
-
-       /**
-        * @todo: test needs database!
-        */
-       /*
-       public function getUltimateRedirectTarget() {
-               $text = $this->getNativeData();
-               return Title::newFromRedirectRecurse( $text );
-       }
-       */
-
-       public static function dataIsCountable() {
-               return array(
-                       array( '',
-                              null,
-                              'any',
-                              true
-                       ),
-                       array( 'Foo',
-                              null,
-                              'any',
-                              true
-                       ),
-                       array( 'Foo',
-                              null,
-                              'comma',
-                              false
-                       ),
-                       array( 'Foo, bar',
-                              null,
-                              'comma',
-                              false
-                       ),
-                       array( 'Foo',
-                              null,
-                              'link',
-                              false
-                       ),
-                       array( 'Foo [[bar]]',
-                              null,
-                              'link',
-                              false
-                       ),
-                       array( 'Foo',
-                              true,
-                              'link',
-                              false
-                       ),
-                       array( 'Foo [[bar]]',
-                              false,
-                              'link',
-                              false
-                       ),
-                       array( '#REDIRECT [[bar]]',
-                              true,
-                              'any',
-                              true
-                       ),
-                       array( '#REDIRECT [[bar]]',
-                              true,
-                              'comma',
-                              false
-                       ),
-                       array( '#REDIRECT [[bar]]',
-                              true,
-                              'link',
-                              false
-                       ),
-               );
-       }
-
-       public static function dataGetTextForSummary() {
-               return array(
-                       array( "hello\nworld.",
-                              16,
-                              'hello world.',
-                       ),
-                       array( 'hello world.',
-                              8,
-                              'hello...',
-                       ),
-                       array( '[[hello world]].',
-                              8,
-                              '[[hel...',
-                       ),
-               );
-       }
-
-       public function testMatchMagicWord( ) {
-               $mw = MagicWord::get( "staticredirect" );
-
-               $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
-               $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word, since it's not wikitext" );
-       }
-
-       public function testUpdateRedirect( ) {
-               $target = Title::newFromText( "testUpdateRedirect_target" );
-
-               $content = $this->newContent( "#REDIRECT [[Someplace]]" );
-               $newContent = $content->updateRedirect( $target );
-
-               $this->assertTrue( $content->equals( $newContent ), "content should be unchanged since it's not wikitext" );
-       }
-
-       public function testGetModel() {
-               $content = $this->newContent( "hello world." );
-
-               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getModel() );
-       }
-
-       public function testGetContentHandler() {
-               $content = $this->newContent( "hello world." );
-
-               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getContentHandler()->getModelID() );
-       }
-
-       public static function dataEquals( ) {
-               return array(
-                       array( new JavascriptContent( "hallo" ), null, false ),
-                       array( new JavascriptContent( "hallo" ), new JavascriptContent( "hallo" ), true ),
-                       array( new JavascriptContent( "hallo" ), new CssContent( "hallo" ), false ),
-                       array( new JavascriptContent( "hallo" ), new JavascriptContent( "HALLO" ), false ),
-               );
-       }
-
-}
index c867a83..3501aec 100644 (file)
@@ -5,7 +5,7 @@
  * @group Database
  *        ^--- needed, because we do need the database to test link updates
  */
-class TextContentTest extends MediaWikiTestCase {
+class TextContentTest extends MediaWikiLangTestCase {
        protected $context;
 
        protected function setUp() {
@@ -21,7 +21,8 @@ class TextContentTest extends MediaWikiTestCase {
                                CONTENT_MODEL_WIKITEXT,
                                CONTENT_MODEL_CSS,
                                CONTENT_MODEL_JAVASCRIPT,
-                       )
+                       ),
+                       'wgAlwaysUseTidy' => false,
                ) );
 
                $this->context = new RequestContext( new FauxRequest() );
@@ -317,7 +318,7 @@ class TextContentTest extends MediaWikiTestCase {
                return array(
                        array( new TextContent( "hallo" ), null, false ),
                        array( new TextContent( "hallo" ), new TextContent( "hallo" ), true ),
-                       array( new TextContent( "hallo" ), new JavascriptContent( "hallo" ), false ),
+                       array( new TextContent( "hallo" ), new JavaScriptContent( "hallo" ), false ),
                        array( new TextContent( "hallo" ), new WikitextContent( "hallo" ), false ),
                        array( new TextContent( "hallo" ), new TextContent( "HALLO" ), false ),
                );
@@ -378,4 +379,49 @@ class TextContentTest extends MediaWikiTestCase {
                }
        }
 
+       public static function provideConvert() {
+               return array(
+                       array( // #0
+                               'Hallo Welt',
+                               CONTENT_MODEL_WIKITEXT,
+                               'lossless',
+                               'Hallo Welt'
+                       ),
+                       array( // #1
+                               'Hallo Welt',
+                               CONTENT_MODEL_WIKITEXT,
+                               'lossless',
+                               'Hallo Welt'
+                       ),
+                       array( // #1
+                               'Hallo Welt',
+                               CONTENT_MODEL_CSS,
+                               'lossless',
+                               'Hallo Welt'
+                       ),
+                       array( // #1
+                               'Hallo Welt',
+                               CONTENT_MODEL_JAVASCRIPT,
+                               'lossless',
+                               'Hallo Welt'
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideConvert
+        */
+       public function testConvert( $text, $model, $lossy, $expectedNative ) {
+               $content = $this->newContent( $text );
+
+               $converted = $content->convert( $model, $lossy );
+
+               if ( $expectedNative === false ) {
+                       $this->assertFalse( $converted, "conversion to $model was expected to fail!" );
+               } else {
+                       $this->assertInstanceOf( 'Content', $converted );
+                       $this->assertEquals( $expectedNative, $converted->getNativeData() );
+               }
+       }
+
 }
index d68c3e5..8121099 100644 (file)
@@ -103,16 +103,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
         * @dataProvider dataMerge3
         */
        public function testMerge3( $old, $mine, $yours, $expected ) {
-               global $wgDiff3;
-
-               if ( !$wgDiff3 ) {
-                       $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is not configured" );
-               }
-
-               if ( !file_exists( $wgDiff3 ) ) {
-                       #XXX: this sucks, since it uses arcane internal knowledge about TextContentHandler::merge3 and wfMerge.
-                       $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is misconfigured: can't find $wgDiff3" );
-               }
+               $this->checkHasDiff3();
 
                // test merge
                $oldContent = new WikitextContent( $old );
@@ -169,8 +160,6 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
         * @dataProvider dataGetAutosummary
         */
        public function testGetAutosummary( $old, $new, $flags, $expected ) {
-               global $wgLanguageCode, $wgContLang;
-
                $oldContent = is_null( $old ) ? null : new WikitextContent( $old );
                $newContent = is_null( $new ) ? null : new WikitextContent( $new );
 
index ceb6d48..b76e9aa 100644 (file)
@@ -362,7 +362,7 @@ just a test"
                return array(
                        array( new WikitextContent( "hallo" ), null, false ),
                        array( new WikitextContent( "hallo" ), new WikitextContent( "hallo" ), true ),
-                       array( new WikitextContent( "hallo" ), new JavascriptContent( "hallo" ), false ),
+                       array( new WikitextContent( "hallo" ), new JavaScriptContent( "hallo" ), false ),
                        array( new WikitextContent( "hallo" ), new TextContent( "hallo" ), false ),
                        array( new WikitextContent( "hallo" ), new WikitextContent( "HALLO" ), false ),
                );
index 0c9f749..51127f8 100644 (file)
@@ -9,6 +9,7 @@
 class DatabaseSQLTest extends MediaWikiTestCase {
 
        protected function setUp() {
+               parent::setUp();
                // TODO support other DBMS or find another way to do it
                if ( $this->db->getType() !== 'mysql' ) {
                        $this->markTestSkipped( 'No mysql database' );
index faa9abd..a391fc5 100644 (file)
@@ -20,6 +20,7 @@ class MockDatabaseSqlite extends DatabaseSqliteStandalone {
 /**
  * @group sqlite
  * @group Database
+ * @group medium
  */
 class DatabaseSqliteTest extends MediaWikiTestCase {
        var $db;
@@ -231,7 +232,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(
@@ -250,6 +251,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 );
 
index 9dcaf2b..8516241 100644 (file)
@@ -136,7 +136,7 @@ abstract class ORMRowTest extends \MediaWikiTestCase {
        /**
         * @dataProvider constructorTestProvider
         */
-       public function testSave( array $data, $loadDefaults ) {
+       public function testSaveAndRemove( array $data, $loadDefaults ) {
                $item = $this->getRowInstance( $data, $loadDefaults );
 
                $this->assertTrue( $item->save() );
@@ -151,15 +151,6 @@ abstract class ORMRowTest extends \MediaWikiTestCase {
                $this->assertEquals( $id, $item->getId() );
 
                $this->verifyFields( $item, $data );
-       }
-
-       /**
-        * @dataProvider constructorTestProvider
-        */
-       public function testRemove( array $data, $loadDefaults ) {
-               $item = $this->getRowInstance( $data, $loadDefaults );
-
-               $this->assertTrue( $item->save() );
 
                $this->assertTrue( $item->remove() );
 
diff --git a/tests/phpunit/includes/db/ORMTableTest.php b/tests/phpunit/includes/db/ORMTableTest.php
new file mode 100644 (file)
index 0000000..4cadf31
--- /dev/null
@@ -0,0 +1,146 @@
+<?php
+/**
+ * Abstract class to construct tests for ORMTable deriving classes.
+ *
+ * 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 Test
+ *
+ * @group ORM
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Daniel Kinzler
+ */
+class ORMTableTest extends MediaWikiTestCase {
+
+       /**
+        * @since 1.21
+        * @return string
+        */
+       protected function getTableClass() {
+               return 'PageORMTableForTesting';
+       }
+
+       /**
+        * @since 1.21
+        * @return IORMTable
+        */
+       public function getTable() {
+               $class = $this->getTableClass();
+               return $class::singleton();
+       }
+
+       /**
+        * @since 1.21
+        * @return string
+        */
+       public function getRowClass() {
+               return $this->getTable()->getRowClass();
+       }
+
+       /**
+        * @since 1.21
+        */
+       public function testSingleton() {
+               $class = $this->getTableClass();
+
+               $this->assertInstanceOf( $class, $class::singleton() );
+               $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 c7bea3b..9739f4c 100644 (file)
@@ -78,15 +78,24 @@ class TestORMRowTest extends ORMRowTest {
                                test_stuff                 BLOB                NOT NULL,
                                test_moarstuff             BLOB                NOT NULL,
                                test_time                  varbinary(14)       NOT NULL
-                       );'
+                       );',
+                       __METHOD__
                );
        }
 
+       protected function tearDown() {
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->dropTable( 'orm_test', __METHOD__ );
+
+               parent::tearDown();
+       }
+
        public function constructorTestProvider() {
                return array(
                        array(
                                array(
                                        'name' => 'Foobar',
+                                       'time' => '20120101020202',
                                        'age' => 42,
                                        'height' => 9000.1,
                                        'awesome' => true,
@@ -155,7 +164,7 @@ class TestORMTable extends ORMTable {
                        'awesome' => 'bool',
                        'stuff' => 'array',
                        'moarstuff' => 'blob',
-                       'time' => 'int', // TS_MW
+                       'time' => 'str', // TS_MW
                );
        }
 
index da36e90..7beb4fe 100644 (file)
@@ -585,6 +585,73 @@ class FileBackendTest extends MediaWikiTestCase {
                return $cases;
        }
 
+       /**
+        * @dataProvider provider_testDescribe
+        */
+       public function testDescribe( $op, $withSource, $okStatus ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDescribe( $op, $withSource, $okStatus );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDescribe( $op, $withSource, $okStatus );
+               $this->tearDownFiles();
+       }
+
+       private function doTestDescribe( $op, $withSource, $okStatus ) {
+               $backendName = $this->backendClass();
+
+               $source = $op['src'];
+               $this->prepare( array( 'dir' => dirname( $source ) ) );
+
+               if ( $withSource ) {
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $source succeeded ($backendName)." );
+               }
+
+               $status = $this->backend->doOperation( $op );
+               if ( $okStatus ) {
+                       $this->assertGoodStatus( $status,
+                               "Describe of file at $source succeeded without warnings ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Describe of file at $source succeeded ($backendName)." );
+                       $this->assertEquals( array( 0 => true ), $status->success,
+                               "Describe of file at $source has proper 'success' field in Status ($backendName)." );
+               } else {
+                       $this->assertEquals( false, $status->isOK(),
+                               "Describe of file at $source failed ($backendName)." );
+               }
+
+               $this->assertBackendPathsConsistent( array( $source ) );
+       }
+
+       public static function provider_testDescribe() {
+               $cases = array();
+
+               $source = self::baseStorePath() . '/unittest-cont1/e/myfacefile.txt';
+
+               $op = array( 'op' => 'describe', 'src' => $source,
+                       'headers' => array( 'X-Content-Length' => '91.3', 'Content-Old-Header' => '' ),
+                       'disposition' => 'inline' );
+               $cases[] = array(
+                       $op, // operation
+                       true, // with source
+                       true // succeeds
+               );
+
+               $cases[] = array(
+                       $op, // operation
+                       false, // without source
+                       false // fails
+               );
+
+               return $cases;
+       }
+
        /**
         * @dataProvider provider_testCreate
         */
@@ -1181,6 +1248,50 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->assertEquals( null, $tmpFile, "Local ref of not existing file is null ($backendName)." );
        }
 
+       /**
+        * @dataProvider provider_testGetFileHttpUrl
+        */
+       public function testGetFileHttpUrl( $source, $content ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileHttpUrl( $source, $content );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileHttpUrl( $source, $content );
+               $this->tearDownFiles();
+       }
+
+       private function doTestGetFileHttpUrl( $source, $content ) {
+               $backendName = $this->backendClass();
+
+               $this->prepare( array( 'dir' => dirname( $source ) ) );
+               $status = $this->backend->doOperation(
+                       array( 'op' => 'create', 'content' => $content, 'dst' => $source ) );
+               $this->assertGoodStatus( $status,
+                       "Creation of file at $source succeeded ($backendName)." );
+
+               $url = $this->backend->getFileHttpUrl( array( 'src' => $source ) );
+
+               if ( $url !== null ) { // supported
+                       $data = Http::request( "GET", $url );
+                       $this->assertEquals( $content, $data,
+                               "HTTP GET of URL has right contents ($backendName)." );
+               }
+       }
+
+       function provider_testGetFileHttpUrl() {
+               $cases = array();
+
+               $base = self::baseStorePath();
+               $cases[] = array( "$base/unittest-cont1/e/a/z/some_file.txt", "some file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/some-other_file.txt", "more file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/\$odd&.txt", "test file contents" );
+
+               return $cases;
+       }
+
        /**
         * @dataProvider provider_testPrepareAndClean
         */
@@ -1245,6 +1356,8 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $base = self::baseStorePath();
                $dirs = array(
+                       "$base/unittest-cont1",
+                       "$base/unittest-cont1/e",
                        "$base/unittest-cont1/e/a",
                        "$base/unittest-cont1/e/a/b",
                        "$base/unittest-cont1/e/a/b/c",
@@ -1316,6 +1429,8 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->prepare( array( 'dir' => dirname( $fileD ) ) );
 
                $status = $this->backend->doOperations( array(
+                       array( 'op' => 'describe', 'src' => $fileA,
+                               'headers' => array( 'X-Content-Length' => '91.3' ), 'disposition' => 'inline' ),
                        array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC, 'overwrite' => 1 ),
                        // Now: A:<A>, B:<B>, C:<A>, D:<empty> (file:<orginal contents>)
                        array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileA, 'overwriteSame' => 1 ),
@@ -1346,7 +1461,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $this->assertGoodStatus( $status, "Operation batch succeeded" );
                $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
-               $this->assertEquals( 13, count( $status->success ),
+               $this->assertEquals( 14, count( $status->success ),
                        "Operation batch has correct success array" );
 
                $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileA ) ),
@@ -1978,6 +2093,8 @@ class FileBackendTest extends MediaWikiTestCase {
                        foreach ( $iter as $file ) {
                                $this->backend->quickDelete( array( 'src' => "$base/$container/$file" ) );
                        }
+                       // free the directory, to avoid Permission denied under windows on rmdir
+                       unset( $iter );
                }
                $this->backend->clean( array( 'dir' => "$base/$container", 'recursive' => 1 ) );
        }
index 398ad2d..c0f8a96 100644 (file)
@@ -110,7 +110,10 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
         * @param GenericArrayObject $list
         */
        public function testUnset( GenericArrayObject $list ) {
-               if ( !$list->isEmpty() ) {
+               if ( $list->isEmpty() ) {
+                       $this->assertTrue( true ); // We cannot test unset if there are no elements
+               }
+               else {
                        $offset = $list->getIterator()->key();
                        $count = $list->count();
                        $list->offsetUnset( $offset );
@@ -123,10 +126,6 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
                        unset( $list[$offset] );
                        $this->assertEquals( $count - 1, $list->count() );
                }
-
-               $exception = null;
-               try { $list->offsetUnset( 'sdfsedtgsrdysftu' ); } catch ( \Exception $exception ){}
-               $this->assertInstanceOf( '\Exception', $exception );
        }
 
        /**
@@ -171,7 +170,7 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
 
                $elementClass = $list->getObjectType();
 
-               foreach ( array( 42, 'foo', array(), new \stdClass(), 4.2 ) as $element ) {
+               foreach ( array( 42, 'foo', array(), new stdClass(), 4.2 ) as $element ) {
                        $validValid = $element instanceof $elementClass;
 
                        try{
@@ -242,4 +241,24 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
                } );
        }
 
+       /**
+        * @dataProvider instanceProvider
+        *
+        * @since 1.21
+        *
+        * @param GenericArrayObject $list
+        */
+       public function testSerialization( GenericArrayObject $list ) {
+               $serialization = serialize( $list );
+               $copy = unserialize( $serialization );
+
+               $this->assertEquals( $serialization, serialize( $copy ) );
+               $this->assertEquals( count( $list ), count( $copy ) );
+
+               $list = $list->getArrayCopy();
+               $copy = $copy->getArrayCopy();
+
+               $this->assertArrayEquals( $list, $copy, true, true );
+       }
+
 }
diff --git a/tests/phpunit/includes/logging/LogFormatterTest.php b/tests/phpunit/includes/logging/LogFormatterTest.php
new file mode 100755 (executable)
index 0000000..2fa2cc0
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+/**
+ * @group Database
+ */
+class LogFormatterTest extends MediaWikiLangTestCase {
+
+       /**
+        * @var User
+        */
+       protected $user;
+
+       /**
+        * @var Title
+        */
+       protected $title;
+
+       /**
+        * @var RequestContext
+        */
+       protected $context;
+
+       protected function setUp() {
+               parent::setUp();
+
+               global $wgLang;
+
+               $this->setMwGlobals( array(
+                       'wgLogTypes' => array( 'phpunit' ),
+                       'wgLogActionsHandlers' => array( 'phpunit/test' => 'LogFormatter',
+                               'phpunit/param' => 'LogFormatter' ),
+                       'wgUser' => User::newFromName( 'Testuser' ),
+                       'wgExtensionMessagesFiles' => array( 'LogTests' => __DIR__.'/LogTests.i18n.php' ),
+               ) );
+
+               $wgLang->getLocalisationCache()->recache( $wgLang->getCode() );
+
+               $this->user = User::newFromName( 'Testuser' );
+               $this->title = Title::newMainPage();
+
+               $this->context = new RequestContext();
+               $this->context->setUser( $this->user );
+               $this->context->setTitle( $this->title );
+               $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 );
+               $logEntry->setTarget( $this->title );
+               $logEntry->setComment( 'A very good reason' );
+
+               $logEntry->setParameters( $params );
+
+               return $logEntry;
+       }
+
+       public function testNormalLogParams() {
+               $entry = $this->newLogEntry( 'test', array() );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $formatter->setShowUserToolLinks( false );
+               $paramsWithoutTools = $formatter->getMessageParametersForTesting();
+               unset( $formatter->parsedParameters );
+
+               $formatter->setShowUserToolLinks( true );
+               $paramsWithTools = $formatter->getMessageParametersForTesting();
+
+               $userLink = Linker::userLink(
+                       $this->user->getId(),
+                       $this->user->getName()
+               );
+
+               $userTools = Linker::userToolLinksRedContribs(
+                       $this->user->getId(),
+                       $this->user->getName(),
+                       $this->user->getEditCount()
+               );
+
+               $titleLink = Linker::link( $this->title, null, array(), array() );
+
+               // $paramsWithoutTools and $paramsWithTools should be only different
+               // in index 0
+               $this->assertEquals( $paramsWithoutTools[1], $paramsWithTools[1] );
+               $this->assertEquals( $paramsWithoutTools[2], $paramsWithTools[2] );
+
+               $this->assertEquals( $userLink, $paramsWithoutTools[0]['raw'] );
+               $this->assertEquals( $userLink . $userTools, $paramsWithTools[0]['raw'] );
+
+               $this->assertEquals( $this->user->getName(), $paramsWithoutTools[1] );
+
+               $this->assertEquals( $titleLink, $paramsWithoutTools[2]['raw'] );
+       }
+
+       public function testLogParamsTypeRaw() {
+               $params = array( '4:raw:raw' => Linker::link( $this->title, null, array(), array() ) );
+               $expected = Linker::link( $this->title, null, array(), array() );
+
+               $entry = $this->newLogEntry( 'param', $params );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $logParam = $formatter->getActionText();
+
+               $this->assertEquals( $expected, $logParam );
+       }
+
+       public function testLogParamsTypeMsg() {
+               $params = array( '4:msg:msg' => 'log-description-phpunit' );
+               $expected = wfMessage( 'log-description-phpunit' )->text();
+
+               $entry = $this->newLogEntry( 'param', $params );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $logParam = $formatter->getActionText();
+
+               $this->assertEquals( $expected, $logParam );
+       }
+
+       public function testLogParamsTypeMsgContent() {
+               $params = array( '4:msg-content:msgContent' => 'log-description-phpunit' );
+               $expected = wfMessage( 'log-description-phpunit' )->inContentLanguage()->text();
+
+               $entry = $this->newLogEntry( 'param', $params );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $logParam = $formatter->getActionText();
+
+               $this->assertEquals( $expected, $logParam );
+       }
+
+       public function testLogParamsTypeNumber() {
+               global $wgLang;
+
+               $params = array( '4:number:number' => 123456789 );
+               $expected = $wgLang->formatNum( 123456789 );
+
+               $entry = $this->newLogEntry( 'param', $params );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $logParam = $formatter->getActionText();
+
+               $this->assertEquals( $expected, $logParam );
+       }
+
+       public function testLogParamsTypeUserLink() {
+               $params = array( '4:user-link:userLink' => $this->user->getName() );
+               $expected = Linker::userLink(
+                       $this->user->getId(),
+                       $this->user->getName()
+               );
+
+               $entry = $this->newLogEntry( 'param', $params );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $logParam = $formatter->getActionText();
+
+               $this->assertEquals( $expected, $logParam );
+       }
+
+       public function testLogParamsTypeTitleLink() {
+               $params = array( '4:title-link:titleLink' => $this->title->getText() );
+               $expected = Linker::link( $this->title, null, array(), array() );
+
+               $entry = $this->newLogEntry( 'param', $params );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $logParam = $formatter->getActionText();
+
+               $this->assertEquals( $expected, $logParam );
+       }
+
+       public function testLogParamsTypePlain() {
+               $params = array( '4:plain:plain' => 'Some plain text' );
+               $expected = 'Some plain text';
+
+               $entry = $this->newLogEntry( 'param', $params );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $logParam = $formatter->getActionText();
+
+               $this->assertEquals( $expected, $logParam );
+       }
+
+       public function testLogComment() {
+               $entry = $this->newLogEntry( 'test', array() );
+               $formatter = LogFormatter::newFromEntry( $entry );
+               $formatter->setContext( $this->context );
+
+               $comment = ltrim( Linker::commentBlock( $entry->getComment() ) );
+
+               $this->assertEquals( $comment, $formatter->getComment() );
+       }
+}
diff --git a/tests/phpunit/includes/logging/LogTests.i18n.php b/tests/phpunit/includes/logging/LogTests.i18n.php
new file mode 100755 (executable)
index 0000000..8a0a421
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Internationalisation file for log tests.
+ *
+ * @file
+ */
+
+$messages = array();
+
+$messages['en'] = array(
+       'log-name-phpunit'        => 'PHPUnit-log',
+       '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 692a5f9..d52fecc 100644 (file)
@@ -1,7 +1,8 @@
 <?php
-
 /**
- * Tests related to auto rotation
+ * Tests related to auto rotation.
+ *
+ * @group medium
  */
 class ExifRotationTest extends MediaWikiTestCase {
 
diff --git a/tests/phpunit/includes/mobile/DeviceDetectionTest.php b/tests/phpunit/includes/mobile/DeviceDetectionTest.php
deleted file mode 100644 (file)
index 2588691..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/**
- * @group Mobile
- */
- class DeviceDetectionTest extends MediaWikiTestCase {
-
-       /**
-        * @dataProvider provideTestFormatName
-        */
-       public function testFormatName( $format, $userAgent ) {
-               $detector = new DeviceDetection();
-               $this->assertEquals( $format, $detector->detectFormatName( $userAgent ) );
-       }
-
-       public static function provideTestFormatName() {
-               return array(
-                       array( 'android',   'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' ),
-                       array( 'iphone2',   'Mozilla/5.0 (ipod: U;CPU iPhone OS 2_2 like Mac OS X: es_es) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.0 Mobile/3B48b Safari/419.3' ),
-                       array( 'iphone',    'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3B48b Safari/419.3' ),
-                       array( 'nokia',     'Mozilla/5.0 (SymbianOS/9.1; U; [en]; SymbianOS/91 Series60/3.0) AppleWebKit/413 (KHTML, like Gecko) Safari/413' ),
-                       array( 'palm_pre',  'Mozilla/5.0 (webOS/1.0; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0' ),
-                       array( 'wii',       'Opera/9.00 (Nintendo Wii; U; ; 1309-9; en)' ),
-                       array( 'operamini', 'Opera/9.50 (J2ME/MIDP; Opera Mini/4.0.10031/298; U; en)' ),
-                       array( 'operamobile',    'Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en)' ),
-                       array( 'kindle',    'Mozilla/4.0 (compatible; Linux 2.6.10) NetFront/3.3 Kindle/1.0 (screen 600x800)' ),
-                       array( 'kindle2',   'Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 824x1200; rotate)' ),
-                       array( 'capable',   'Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1' ),
-                       array( 'netfront',  'Mozilla/4.08 (Windows; Mobile Content Viewer/1.0) NetFront/3.2' ),
-                       array( 'wap2',      'SonyEricssonK608i/R2L/SN356841000828910 Browser/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1' ),
-                       array( 'wap2',      'NokiaN73-2/3.0-630.0.2 Series60/3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1' ),
-                       array( 'psp',       'Mozilla/4.0 (PSP (PlayStation Portable); 2.00)' ),
-                       array( 'ps3',       'Mozilla/5.0 (PLAYSTATION 3; 1.00)' ),
-                       array( 'ie', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' ),
-                       array( 'ie', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)' ),
-                       array( 'blackberry', 'BlackBerry9300/5.0.0.716 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/133' ),
-                       array( 'blackberry-lt5', 'BlackBerry7250/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1' ),
-               );
-       }
-}
diff --git a/tests/phpunit/includes/objectcache/BagOStuffTest.php b/tests/phpunit/includes/objectcache/BagOStuffTest.php
new file mode 100644 (file)
index 0000000..ab3d811
--- /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 611a45a..5f670fc 100644 (file)
@@ -33,7 +33,10 @@ class MagicVariableTest extends MediaWikiTestCase {
                parent::setUp();
 
                $contLang = Language::factory( 'en' );
-               $this->setMwGlobals( 'wgContLang', $contLang );
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => 'en',
+                       'wgContLang' => $contLang,
+               ) );
 
                $this->testParser = new Parser();
                $this->testParser->Options( ParserOptions::newFromUserAndLang( new User, $contLang ) );
@@ -78,7 +81,7 @@ class MagicVariableTest extends MediaWikiTestCase {
        function testLocaldaytwoIsZeroPadded( $day ) {
                $this->assertZeroPadded( 'localday2', $day );
        }
-       
+
        # month
 
        /** @dataProvider MediaWikiProvide::Months */
@@ -109,7 +112,7 @@ class MagicVariableTest extends MediaWikiTestCase {
        function testRevisiondaytwoIsZeroPadded( $day ) {
                $this->assertZeroPadded( 'revisionday2', $day );
        }
-       
+
        # revision month
 
        /** @dataProvider MediaWikiProvide::Months */
@@ -153,26 +156,26 @@ class MagicVariableTest extends MediaWikiTestCase {
 
        /**
         * Main assertion helper for magic variables padding
-        * @param $magic string Magic variable name 
+        * @param $magic string Magic variable name
         * @param $value mixed Month or day
-        * @param $format string sprintf format for $value 
+        * @param $format string sprintf format for $value
         */
        private function assertMagicPadding( $magic, $value, $format ) {
                # Initialize parser timestamp as year 2010 at 12h34 56s.
                # month and day are given by the caller ($value). Month < 12!
                if( $value > 12 ) { $month = $value % 12; }
                else { $month = $value; }
-       
+
                $this->setParserTS(
                        sprintf( '2010%02d%02d123456', $month, $value )
                );
 
-               # please keep the following commented line of code. It helps debugging. 
+               # please keep the following commented line of code. It helps debugging.
                //print "\nDEBUG (value $value):" . sprintf( '2010%02d%02d123456', $value, $value ) . "\n";
 
                # format expectation and test it
                $expected = sprintf( $format, $value );
-               $this->assertMagic( $expected, $magic ); 
+               $this->assertMagic( $expected, $magic );
        }
 
        /** helper to set the parser timestamp and revision timestamp */
index 6a6fded..b15365c 100644 (file)
@@ -22,15 +22,13 @@ class MediaWikiParserTest {
                         * and then was ucfirst( basename( $filename, '.txt' )
                         * but that didn't work with names like foo.tests.txt
                         */
-                       $className = str_replace( '.', '_',  ucfirst( basename( $filename, '.txt' ) ) );
-                       
+                       $className = str_replace( '.', '_',  ucfirst( $testsName ) );
+
                        eval( "/** @group Database\n@group Parser\n*/ class $className extends NewParserTest { protected \$file = '" . strtr( $filename, array( "'" => "\\'", '\\' => '\\\\' ) ) . "'; } " );
 
                        $parserTester = new $className( $testsName );
                        $suite->addTestSuite( new ReflectionClass ( $parserTester ) );
                }
-               
-
                return $suite;
        }
 }
index 804726b..3e3b141 100644 (file)
@@ -32,8 +32,13 @@ class NewParserTest extends MediaWikiTestCase {
        protected $file = false;
 
        protected function setUp() {
-               global $wgContLang, $wgNamespaceProtection, $wgNamespaceAliases;
+               global $wgContLang, $wgLanguageCode;
+               global $wgNamespaceProtection, $wgNamespaceAliases;
                global $wgHooks, $IP;
+
+               parent::setUp();
+
+               $wgLanguageCode = 'en';
                $wgContLang = Language::factory( 'en' );
 
                //Setup CLI arguments
@@ -114,6 +119,8 @@ class NewParserTest extends MediaWikiTestCase {
                // Restore backends
                RepoGroup::destroySingleton();
                FileBackendGroup::destroySingleton();
+
+               parent::tearDown();
        }
 
        function addDBData() {
@@ -326,7 +333,6 @@ class NewParserTest extends MediaWikiTestCase {
                        'wgExternalLinkTarget' => false,
                        'wgAlwaysUseTidy' => false,
                        'wgHtml5' => true,
-                       'wgCleanupPresentationalAttributes' => true,
                        'wgWellFormedXml' => true,
                        'wgAllowMicrodataAttributes' => true,
                        'wgAdaptiveMessageCache' => true,
@@ -466,6 +472,16 @@ class NewParserTest extends MediaWikiTestCase {
                                "$base/local-thumb/3/3a/Foobar.jpg/200px-Foobar.jpg",
                                "$base/local-thumb/3/3a/Foobar.jpg/640px-Foobar.jpg",
                                "$base/local-thumb/3/3a/Foobar.jpg/120px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/20px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/270px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/300px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/30px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/360px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/400px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/40px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/70px-Foobar.jpg",
+                               "$base/local-thumb/3/3a/Foobar.jpg/960px-Foobar.jpg",
 
                                "$base/local-public/0/09/Bad.jpg",
                                "$base/local-thumb/0/09/Bad.jpg",
index 362d9f7..8b83b67 100644 (file)
@@ -119,7 +119,7 @@ class PreprocessorTest extends MediaWikiTestCase {
                if ( method_exists( $this->mPreprocessor, 'preprocessToXml' ) ) {
                        return $this->normalizeXml( $this->mPreprocessor->preprocessToXml( $wikiText ) );
                }
-               
+
                $dom = $this->mPreprocessor->preprocessToObj( $wikiText );
                if ( is_callable( array( $dom, 'saveXML' ) ) ) {
                        return $dom->saveXML();
@@ -136,11 +136,6 @@ class PreprocessorTest extends MediaWikiTestCase {
         */
        function normalizeXml( $xml ) {
                return preg_replace( '!<([a-z]+)/>!', '<$1></$1>', str_replace( ' />', '/>', $xml ) );
-               
-               $dom = new DOMDocument();
-               // 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2 don't barf when the XML is >256 levels deep
-               $dom->loadXML( $xml, 1 << 19 );
-               return $dom->saveXML();
        }
 
        /**
index d089aff..292f13a 100644 (file)
@@ -12,7 +12,13 @@ class TagHookTest extends MediaWikiTestCase {
        public static function provideBadNames() {
                return array( array( "foo<bar" ), array( "foo>bar" ), array( "foo\nbar" ),  array( "foo\rbar" ) );
        }
-               
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgAlwaysUseTidy', false );
+       }
+
        /**
         * @dataProvider provideValidNames
         */
index 395e1a0..7339fb8 100644 (file)
@@ -4,7 +4,7 @@
  * @group Search
  * @group Database
  */
-class SearchEngineTest extends MediaWikiTestCase {
+class SearchEngineTest extends MediaWikiLangTestCase {
        protected $search, $pageList;
 
        /**
@@ -13,6 +13,7 @@ class SearchEngineTest extends MediaWikiTestCase {
         */
        protected function setUp() {
                parent::setUp();
+
                // Search tests require MySQL or SQLite with FTS
                # Get database type and version
                $dbType = $this->db->getType();
@@ -30,6 +31,8 @@ class SearchEngineTest extends MediaWikiTestCase {
 
        protected function tearDown() {
                unset( $this->search );
+
+               parent::tearDown();
        }
 
        function pageExists( $title ) {
index 021691a..613f63f 100644 (file)
@@ -65,4 +65,28 @@ class SiteArrayTest extends GenericArrayObjectTest {
                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 e8358f3..207f46c 100644 (file)
@@ -25,6 +25,7 @@
  * @ingroup Test
  *
  * @group Site
+ * @group Database
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
@@ -57,9 +58,9 @@ class SiteObjectTest extends ORMRowTest {
        public function constructorTestProvider() {
                $argLists = array();
 
-               $argLists[] = array( 'global_key' => '42' );
+               $argLists[] = array( 'global_key' => 'foo' );
 
-               $argLists[] = array( 'global_key' => '42', 'type' => Site::TYPE_MEDIAWIKI );
+               $argLists[] = array( 'global_key' => 'bar', 'type' => Site::TYPE_MEDIAWIKI );
 
                $constructorArgs = array();
 
@@ -229,6 +230,17 @@ class SiteObjectTest extends ORMRowTest {
                $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
index 59663ba..a693cdb 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group Broken
  * @group Upload
+ * @group Database
  */
 class UploadFromUrlTest extends ApiTestCase {
 
@@ -36,9 +37,9 @@ class UploadFromUrlTest extends ApiTestCase {
         * Ensure that the job queue is empty before continuing
         */
        public function testClearQueue() {
-               $job = Job::pop();
+               $job = JobQueueGroup::singleton()->pop();
                while ( $job ) {
-                       $job = Job::pop();
+                       $job = JobQueueGroup::singleton()->pop();
                }
                $this->assertFalse( $job );
        }
@@ -141,7 +142,7 @@ class UploadFromUrlTest extends ApiTestCase {
 
                $this->assertEquals( $data[0]['upload']['result'], 'Queued', 'Queued upload' );
 
-               $job = Job::pop();
+               $job = JobQueueGroup::singleton()->pop();
                $this->assertThat( $job, $this->isInstanceOf( 'UploadFromUrlJob' ), 'Queued upload inserted' );
        }
 
@@ -202,7 +203,7 @@ class UploadFromUrlTest extends ApiTestCase {
        public function testSyncDownload( $data ) {
                $token = $this->user->getEditToken();
 
-               $job = Job::pop();
+               $job = JobQueueGroup::singleton()->pop();
                $this->assertFalse( $job, 'Starting with an empty jobqueue' );
 
                $this->user->addGroup( 'users' );
@@ -214,7 +215,7 @@ class UploadFromUrlTest extends ApiTestCase {
                        'token' => $token,
                ), $data );
 
-               $job = Job::pop();
+               $job = JobQueueGroup::singleton()->pop();
                $this->assertFalse( $job );
 
                $this->assertEquals( 'Success', $data[0]['upload']['result'] );
@@ -244,7 +245,7 @@ class UploadFromUrlTest extends ApiTestCase {
                        'ignorewarnings' => 1,
                ) );
 
-               $job = Job::pop();
+               $job = JobQueueGroup::singleton()->pop();
                $this->assertEquals( 'UploadFromUrlJob', get_class( $job ) );
                $job->run();
 
@@ -272,7 +273,7 @@ class UploadFromUrlTest extends ApiTestCase {
                }
                $this->assertTrue( $exception );
 
-               $job = Job::pop();
+               $job = JobQueueGroup::singleton()->pop();
                $this->assertFalse( $job );
 
                return;
@@ -314,7 +315,7 @@ class UploadFromUrlTest extends ApiTestCase {
                $this->assertTrue( isset( $data[0]['upload']['statuskey'] ) );
                $statusKey = $data[0]['upload']['statuskey'];
 
-               $job = Job::pop();
+               $job = JobQueueGroup::singleton()->pop();
                $this->assertEquals( 'UploadFromUrlJob', get_class( $job ) );
 
                $status = $job->run();
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 5ca2bc9..575b277 100644 (file)
@@ -37,4 +37,41 @@ class LanguageHeTest extends LanguageClassesTestCase {
                        array( 'other', 3 ), // Plural
                );
        }
+
+       /** @dataProvider providerGrammar */
+       function testGrammar( $result, $word, $case ) {
+               $this->assertEquals( $result, $this->getLang()->convertGrammar( $word, $case ) );
+       }
+
+       // The comments in the beginning of the line help avoid RTL problems
+       // with text editors.
+       function providerGrammar() {
+               return array (
+                       array(
+                               /* result */ 'וויקיפדיה',
+                               /* word   */ 'ויקיפדיה',
+                               /* case   */ 'תחילית',
+                       ),
+                       array(
+                               /* result */ 'וולפגנג',
+                               /* word   */ 'וולפגנג',
+                               /* case   */ 'prefixed',
+                       ),
+                       array(
+                               /* result */ 'קובץ',
+                               /* word   */ 'הקובץ',
+                               /* case   */ 'תחילית',
+                       ),
+                       array(
+                               /* result */ '־Wikipedia',
+                               /* word   */ 'Wikipedia',
+                               /* case   */ 'תחילית',
+                       ),
+                       array(
+                               /* result */ '־1995',
+                               /* word   */ '1995',
+                               /* case   */ 'תחילית',
+                       ),
+               );
+       }
 }
index c66df69..5d32ff4 100644 (file)
@@ -847,35 +847,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 +888,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 +911,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 +921,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' ),
                        ),
@@ -1078,5 +1079,97 @@ class LanguageTest extends LanguageClassesTestCase {
                        ) ),
                );
        }
+
+       /**
+        * @covers Language::translateBlockExpiry()
+        * @dataProvider provideTranslateBlockExpiry
+        */
+       function testTranslateBlockExpiry( $expectedData, $str, $desc ) {
+               $lang = $this->getLang();
+               if ( is_array( $expectedData ) ) {
+                       list( $func, $arg ) = $expectedData;
+                       $expected = $lang->$func( $arg );
+               } else {
+                       $expected = $expectedData;
+               }
+               $this->assertEquals( $expected, $lang->translateBlockExpiry( $str ), $desc );
+       }
+
+       function provideTranslateBlockExpiry() {
+               return array(
+                       array( '2 hours', '2 hours', 'simple data from ipboptions' ),
+                       array( 'indefinite', 'infinite', 'infinite from ipboptions' ),
+                       array( 'indefinite', 'infinity', 'alternative infinite from ipboptions' ),
+                       array( 'indefinite', 'indefinite', 'another alternative infinite from ipboptions' ),
+                       array( array( 'formatDuration', 1023 * 60 * 60 ), '1023 hours', 'relative' ),
+                       array( array( 'formatDuration', -1023 ), '-1023 seconds', 'negative relative' ),
+                       array( array( 'formatDuration', 0 ), 'now', 'now' ),
+                       array( array( 'timeanddate', '20120102070000' ), '2012-1-1 7:00 +1 day', 'mixed, handled as absolute' ),
+                       array( array( 'timeanddate', '19910203040506' ), '1991-2-3 4:05:06', 'absolute' ),
+                       array( array( 'timeanddate', '19700101000000' ), '1970-1-1 0:00:00', 'absolute at epoch' ),
+                       array( array( 'timeanddate', '19691231235959' ), '1969-12-31 23:59:59', 'time before epoch' ),
+                       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 4a6f08f..a0ed745 100644 (file)
@@ -88,15 +88,16 @@ class MaintenanceFixup extends Maintenance {
         * Safety net around register_shutdown_function of Maintenance.php
         */
        public function __destruct() {
-               if ( ( ! $this->shutdownSimulated ) && ( ! $this->testCase->hasFailed() ) ) {
+               if ( ! $this->shutdownSimulated ) {
                        // Someone generated a MaintenanceFixup instance without calling
                        // simulateShutdown. We'd have to raise a PHPUnit exception to correctly
                        // flag this illegal usage. However, we are already in a destruktor, which
                        // would trigger undefined behaviour. Hence, we can only report to the
                        // error output :( Hopefully people read the PHPUnit output.
-                       fwrite( STDERR, "ERROR! Instance of " . __CLASS__ . " destructed without "
-                               . "calling simulateShutdown method. Call simulateShutdown on the "
-                               . "instance before it gets destructed." );
+                       $name = $this->testCase->getName();
+                       fwrite( STDERR, "ERROR! Instance of " . __CLASS__ . " for test $name "
+                               . "destructed without calling simulateShutdown method. Call "
+                               . "simulateShutdown on the instance before it gets destructed." );
                }
 
                // The following guard is required, as PHP does not offer default destructors :(
@@ -148,6 +149,14 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m = new MaintenanceFixup( $this );
        }
 
+       protected function tearDown() {
+               if ( $this->m ) {
+                       $this->m->simulateShutdown();
+                       $this->m = null;
+               }
+               parent::tearDown();
+       }
+
 
        /**
         * asserts the output before and after simulating shutdown
@@ -167,6 +176,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                                "Output before shutdown simulation" );
 
                $this->m->simulateShutdown();
+               $this->m = null;
 
                $postShutdownOutput = $preShutdownOutput . ( $expectNLAppending ? "\n" : "" );
                $this->expectOutputString( $postShutdownOutput );
@@ -809,4 +819,4 @@ class MaintenanceTest extends MediaWikiTestCase {
        }
 
 
-}
\ No newline at end of file
+}
index 149845e..6cdc4ec 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';
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 7079e0e..911dc3a 100644 (file)
@@ -135,6 +135,9 @@ class GenerateJqueryMsgData extends Maintenance {
                        . "// languages, and parser modes. Intended for use by a unit test framework by looping\n"
                        . "// through the object and comparing its parser return value with the 'result' property.\n"
                        . '// Last generated with ' . basename( __FILE__ ) . ' at ' . gmdate( 'r' ) . "\n"
+                       // This file will contain unquoted JSON strings as javascript native object literals,
+                       // flip the quotemark convention for this file.
+                       . "/*jshint quotmark: double */\n"
                        . "\n"
                        . 'mediaWiki.libs.phpParserData = ' . FormatJson::encode( $phpParserData, true ) . ";\n";
 
index 05bb5c8..776ee24 100644 (file)
@@ -1,7 +1,8 @@
 // This file stores the output from the PHP parser for various messages, arguments,
 // languages, and parser modes. Intended for use by a unit test framework by looping
 // through the object and comparing its parser return value with the 'result' property.
-// Last generated with generateJqueryMsgData.php at Sun, 07 Oct 2012 07:30:16 +0000
+// Last generated with generateJqueryMsgData.php at Sat, 03 Nov 2012 21:32:01 +0000
+/*jshint quotmark: double */
 
 mediaWiki.libs.phpParserData = {
        "messages": {
index efa6549..0c3d364 100644 (file)
-( function ( $, mw, QUnit, undefined ) {
 /*global CompletenessTest */
-/*jshint evil:true */
-'use strict';
-
-var mwTestIgnore, mwTester, addons;
-
-/**
- * Add bogus to url to prevent IE crazy caching
- *
- * @param value {String} a relative path (eg. 'data/foo.js'
- * or 'data/test.php?foo=bar').
- * @return {String} Such as 'data/foo.js?131031765087663960'
- */
-QUnit.fixurl = function ( value ) {
-       return value + (/\?/.test( value ) ? '&' : '?')
-               + String( new Date().getTime() )
-               + String( parseInt( Math.random() * 100000, 10 ) );
-};
-
-/**
- * Configuration
- */
-
-// When a test() indicates asynchronicity with stop(),
-// allow 10 seconds to pass before killing the test(),
-// and assuming failure.
-QUnit.config.testTimeout = 10 * 1000;
-
-// Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
-QUnit.config.urlConfig.push( {
-       id: 'debug',
-       label: 'Enable ResourceLoaderDebug',
-       tooltip: 'Enable debug mode in ResourceLoader'
-} );
-
-/**
- * Load TestSwarm agent
- */
-// Only if the current url indicates that there is a TestSwarm instance watching us
-// (TestSwarm appends swarmURL to the test suites url it loads in iframes).
-// Otherwise this is just a simple view of Special:JavaScriptTest/qunit directly,
-// no point in loading inject.js in that case. Also, make sure that this instance
-// of MediaWiki has actually been configured with the required url to that inject.js
-// script. By default it is false.
-if ( QUnit.urlParams.swarmURL && mw.config.get( 'QUnitTestSwarmInjectJSPath' ) ) {
-       document.write( "<scr" + "ipt src='" + QUnit.fixurl( mw.config.get( 'QUnitTestSwarmInjectJSPath' ) ) + "'></scr" + "ipt>" );
-}
-
-/**
- * CompletenessTest
- */
-// Adds toggle checkbox to header
-QUnit.config.urlConfig.push( {
-       id: 'completenesstest',
-       label: 'Run CompletenessTest',
-       tooltip: 'Run the completeness test'
-} );
-
-// Initiate when enabled
-if ( QUnit.urlParams.completenesstest ) {
-
-       // Return true to ignore
-       mwTestIgnore = function ( val, tester, funcPath ) {
-
-               // Don't record methods of the properties of constructors,
-               // to avoid getting into a loop (prototype.constructor.prototype..).
-               // Since we're therefor skipping any injection for
-               // "new mw.Foo()", manually set it to true here.
-               if ( val instanceof mw.Map ) {
-                       tester.methodCallTracker.Map = true;
-                       return true;
-               }
-               if ( val instanceof mw.Title ) {
-                       tester.methodCallTracker.Title = true;
-                       return true;
-               }
-
-               // Don't record methods of the properties of a jQuery object
-               if ( val instanceof $ ) {
-                       return true;
-               }
-
-               return false;
+/*jshint evil: true */
+( function ( $, mw, QUnit, undefined ) {
+       'use strict';
+
+       var mwTestIgnore, mwTester,
+               addons,
+               envExecCount;
+
+       /**
+        * Add bogus to url to prevent IE crazy caching
+        *
+        * @param value {String} a relative path (eg. 'data/foo.js'
+        * or 'data/test.php?foo=bar').
+        * @return {String} Such as 'data/foo.js?131031765087663960'
+        */
+       QUnit.fixurl = function ( value ) {
+               return value + (/\?/.test( value ) ? '&' : '?')
+                       + String( new Date().getTime() )
+                       + String( parseInt( Math.random() * 100000, 10 ) );
        };
 
-       mwTester = new CompletenessTest( mw, mwTestIgnore );
-}
-
-/**
- * Test environment recommended for all QUnit test modules
- */
-// Whether to log environment changes to the console
-QUnit.config.urlConfig.push( 'mwlogenv' );
-
-/**
- * Reset mw.config and others to a fresh copy of the live config for each test(),
- * and restore it back to the live one afterwards.
- * @param localEnv {Object} [optional]
- * @example (see test suite at the bottom of this file)
- * </code>
- */
-QUnit.newMwEnvironment = ( function () {
-       var log, liveConfig, liveMessages;
-
-       liveConfig = mw.config.values;
-       liveMessages = mw.messages.values;
-
-       function freshConfigCopy( custom ) {
-               // "deep=true" is important here.
-               // Otherwise we just create a new object with values referring to live config.
-               // e.g. mw.config.set( 'wgFileExtensions', [] ) would not effect liveConfig,
-               // but mw.config.get( 'wgFileExtensions' ).push( 'png' ) would as the array
-               // was passed by reference in $.extend's loop.
-               return $.extend( {}, liveConfig, custom, /*deep=*/true );
+       /**
+        * Configuration
+        */
+
+       // When a test() indicates asynchronicity with stop(),
+       // allow 10 seconds to pass before killing the test(),
+       // and assuming failure.
+       QUnit.config.testTimeout = 10 * 1000;
+
+       // Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
+       QUnit.config.urlConfig.push( {
+               id: 'debug',
+               label: 'Enable ResourceLoaderDebug',
+               tooltip: 'Enable debug mode in ResourceLoader'
+       } );
+
+       /**
+        * Load TestSwarm agent
+        */
+       // Only if the current url indicates that there is a TestSwarm instance watching us
+       // (TestSwarm appends swarmURL to the test suites url it loads in iframes).
+       // Otherwise this is just a simple view of Special:JavaScriptTest/qunit directly,
+       // no point in loading inject.js in that case. Also, make sure that this instance
+       // of MediaWiki has actually been configured with the required url to that inject.js
+       // script. By default it is false.
+       if ( QUnit.urlParams.swarmURL && mw.config.get( 'QUnitTestSwarmInjectJSPath' ) ) {
+               document.write( '<scr' + 'ipt src="' + QUnit.fixurl( mw.config.get( 'QUnitTestSwarmInjectJSPath' ) ) + '"></scr' + 'ipt>' );
        }
 
-       function freshMessagesCopy( custom ) {
-               return $.extend( {}, liveMessages, custom, /*deep=*/true );
+       /**
+        * CompletenessTest
+        */
+       // Adds toggle checkbox to header
+       QUnit.config.urlConfig.push( {
+               id: 'completenesstest',
+               label: 'Run CompletenessTest',
+               tooltip: 'Run the completeness test'
+       } );
+
+       // Initiate when enabled
+       if ( QUnit.urlParams.completenesstest ) {
+
+               // Return true to ignore
+               mwTestIgnore = function ( val, tester ) {
+
+                       // Don't record methods of the properties of constructors,
+                       // to avoid getting into a loop (prototype.constructor.prototype..).
+                       // Since we're therefor skipping any injection for
+                       // "new mw.Foo()", manually set it to true here.
+                       if ( val instanceof mw.Map ) {
+                               tester.methodCallTracker.Map = true;
+                               return true;
+                       }
+                       if ( val instanceof mw.Title ) {
+                               tester.methodCallTracker.Title = true;
+                               return true;
+                       }
+
+                       // Don't record methods of the properties of a jQuery object
+                       if ( val instanceof $ ) {
+                               return true;
+                       }
+
+                       return false;
+               };
+
+               mwTester = new CompletenessTest( mw, mwTestIgnore );
        }
 
-       log = QUnit.urlParams.mwlogenv ? mw.log : function () {};
+       /**
+        * Test environment recommended for all QUnit test modules
+        */
+       // Whether to log environment changes to the console
+       QUnit.config.urlConfig.push( 'mwlogenv' );
+
+       /**
+        * Reset mw.config and others to a fresh copy of the live config for each test(),
+        * and restore it back to the live one afterwards.
+        * @param localEnv {Object} [optional]
+        * @example (see test suite at the bottom of this file)
+        * </code>
+        */
+       QUnit.newMwEnvironment = ( function () {
+               var log, liveConfig, liveMessages;
+
+               liveConfig = mw.config.values;
+               liveMessages = mw.messages.values;
+
+               function freshConfigCopy( custom ) {
+                       // "deep=true" is important here.
+                       // Otherwise we just create a new object with values referring to live config.
+                       // e.g. mw.config.set( 'wgFileExtensions', [] ) would not effect liveConfig,
+                       // but mw.config.get( 'wgFileExtensions' ).push( 'png' ) would as the array
+                       // was passed by reference in $.extend's loop.
+                       return $.extend( {}, liveConfig, custom, /*deep=*/true );
+               }
 
-       return function ( localEnv ) {
-               localEnv = $.extend( {
-                       // QUnit
-                       setup: $.noop,
-                       teardown: $.noop,
-                       // MediaWiki
-                       config: {},
-                       messages: {}
-               }, localEnv );
+               function freshMessagesCopy( custom ) {
+                       return $.extend( {}, liveMessages, custom, /*deep=*/true );
+               }
 
-               return {
-                       setup: function () {
-                               log( 'MwEnvironment> SETUP    for "' + QUnit.config.current.module
-                                       + ': ' + QUnit.config.current.testName + '"' );
+               log = QUnit.urlParams.mwlogenv ? mw.log : function () {};
+
+               return function ( localEnv ) {
+                       localEnv = $.extend( {
+                               // QUnit
+                               setup: $.noop,
+                               teardown: $.noop,
+                               // MediaWiki
+                               config: {},
+                               messages: {}
+                       }, localEnv );
+
+                       return {
+                               setup: function () {
+                                       log( 'MwEnvironment> SETUP    for "' + QUnit.config.current.module
+                                               + ': ' + QUnit.config.current.testName + '"' );
+
+                                       // Greetings, mock environment!
+                                       mw.config.values = freshConfigCopy( localEnv.config );
+                                       mw.messages.values = freshMessagesCopy( localEnv.messages );
+
+                                       localEnv.setup();
+                               },
+
+                               teardown: function () {
+                                       log( 'MwEnvironment> TEARDOWN for "' + QUnit.config.current.module
+                                               + ': ' + QUnit.config.current.testName + '"' );
+
+                                       localEnv.teardown();
+
+                                       // Farewell, mock environment!
+                                       mw.config.values = liveConfig;
+                                       mw.messages.values = liveMessages;
+                               }
+                       };
+               };
+       }() );
 
-                               // Greetings, mock environment!
-                               mw.config.values = freshConfigCopy( localEnv.config );
-                               mw.messages.values = freshMessagesCopy( localEnv.messages );
+       // $.when stops as soon as one fails, which makes sense in most
+       // practical scenarios, but not in a unit test where we really do
+       // need to wait until all of them are finished.
+       QUnit.whenPromisesComplete = function () {
+               var altPromises = [];
 
-                               localEnv.setup();
-                       },
+               $.each( arguments, function ( i, arg ) {
+                       var alt = $.Deferred();
+                       altPromises.push( alt );
 
-                       teardown: function () {
-                               log( 'MwEnvironment> TEARDOWN for "' + QUnit.config.current.module
-                                       + ': ' + QUnit.config.current.testName + '"' );
+                       // Whether this one fails or not, forwards it to
+                       // the 'done' (resolve) callback of the alternative promise.
+                       arg.always( alt.resolve );
+               });
 
-                               localEnv.teardown();
+               return $.when.apply( $, altPromises );
+       };
 
-                               // Farewell, mock environment!
-                               mw.config.values = liveConfig;
-                               mw.messages.values = liveMessages;
-                       }
-               };
+       /**
+        * Add-on assertion helpers
+        */
+       // Define the add-ons
+       addons = {
+
+               // Expect boolean true
+               assertTrue: function ( actual, message ) {
+                       QUnit.push( actual === true, actual, true, message );
+               },
+
+               // Expect boolean false
+               assertFalse: function ( actual, message ) {
+                       QUnit.push( actual === false, actual, false, message );
+               },
+
+               // Expect numerical value less than X
+               lt: function ( actual, expected, message ) {
+                       QUnit.push( actual < expected, actual, 'less than ' + expected, message );
+               },
+
+               // Expect numerical value less than or equal to X
+               ltOrEq: function ( actual, expected, message ) {
+                       QUnit.push( actual <= expected, actual, 'less than or equal to ' + expected, message );
+               },
+
+               // Expect numerical value greater than X
+               gt: function ( actual, expected, message ) {
+                       QUnit.push( actual > expected, actual, 'greater than ' + expected, message );
+               },
+
+               // Expect numerical value greater than or equal to X
+               gtOrEq: function ( actual, expected, message ) {
+                       QUnit.push( actual >= expected, actual, 'greater than or equal to ' + expected, message );
+               }
        };
-}() );
 
-// $.when stops as soon as one fails, which makes sense in most
-// practical scenarios, but not in a unit test where we really do
-// need to wait until all of them are finished.
-QUnit.whenPromisesComplete = function () {
-       var altPromises = [];
+       $.extend( QUnit.assert, addons );
+
+       /**
+        * Small test suite to confirm proper functionality of the utilities and
+        * initializations defined above in this file.
+        */
+       envExecCount = 0;
+       QUnit.module( 'mediawiki.tests.qunit.testrunner', QUnit.newMwEnvironment({
+               setup: function () {
+                       envExecCount += 1;
+                       this.mwHtmlLive = mw.html;
+                       mw.html = {
+                               escape: function () {
+                                       return 'mocked-' + envExecCount;
+                               }
+                       };
+               },
+               teardown: function () {
+                       mw.html = this.mwHtmlLive;
+               },
+               config: {
+                       testVar: 'foo'
+               },
+               messages: {
+                       testMsg: 'Foo.'
+               }
+       }) );
 
-       $.each( arguments, function ( i, arg ) {
-               var alt = $.Deferred();
-               altPromises.push( alt );
+       QUnit.test( 'Setup', 3, function ( assert ) {
+               assert.equal( mw.html.escape( 'foo' ), 'mocked-1', 'extra setup() callback was ran.' );
+               assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object applied' );
+               assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object applied' );
 
-               // Whether this one fails or not, forwards it to
-               // the 'done' (resolve) callback of the alternative promise.
-               arg.always( alt.resolve );
+               mw.config.set( 'testVar', 'bar' );
+               mw.messages.set( 'testMsg', 'Bar.' );
        });
 
-       return $.when.apply( $, altPromises );
-};
-
-/**
- * Add-on assertion helpers
- */
-// Define the add-ons
-addons = {
-
-       // Expect boolean true
-       assertTrue: function ( actual, message ) {
-               QUnit.push( actual === true, actual, true, message );
-       },
-
-       // Expect boolean false
-       assertFalse: function ( actual, message ) {
-               QUnit.push( actual === false, actual, false, message );
-       },
-
-       // Expect numerical value less than X
-       lt: function ( actual, expected, message ) {
-               QUnit.push( actual < expected, actual, 'less than ' + expected, message );
-       },
-
-       // Expect numerical value less than or equal to X
-       ltOrEq: function ( actual, expected, message ) {
-               QUnit.push( actual <= expected, actual, 'less than or equal to ' + expected, message );
-       },
-
-       // Expect numerical value greater than X
-       gt: function ( actual, expected, message ) {
-               QUnit.push( actual > expected, actual, 'greater than ' + expected, message );
-       },
-
-       // Expect numerical value greater than or equal to X
-       gtOrEq: function ( actual, expected, message ) {
-               QUnit.push( actual >= expected, actual, 'greater than or equal to ' + expected, message );
-       }
-};
-
-$.extend( QUnit.assert, addons );
-
-/**
- * Small test suite to confirm proper functionality of the utilities and
- * initializations in this file.
- */
-var envExecCount = 0;
-QUnit.module( 'mediawiki.tests.qunit.testrunner', QUnit.newMwEnvironment({
-       setup: function () {
-               envExecCount += 1;
-               this.mwHtmlLive = mw.html;
-               mw.html = {
-                       escape: function () {
-                               return 'mocked-' + envExecCount;
-                       }
-               };
-       },
-       teardown: function () {
-               mw.html = this.mwHtmlLive;
-       },
-       config: {
-               testVar: 'foo'
-       },
-       messages: {
-               testMsg: 'Foo.'
-       }
-}) );
-
-QUnit.test( 'Setup', 3, function ( assert ) {
-       assert.equal( mw.html.escape( 'foo' ), 'mocked-1', 'extra setup() callback was ran.' );
-       assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object applied' );
-       assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object applied' );
-
-       mw.config.set( 'testVar', 'bar' );
-       mw.messages.set( 'testMsg', 'Bar.' );
-});
-
-QUnit.test( 'Teardown', 3, function ( assert ) {
-       assert.equal( mw.html.escape( 'foo' ), 'mocked-2', 'extra setup() callback was re-ran.' );
-       assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object restored and re-applied after test()' );
-       assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
-});
-
-QUnit.module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() );
-
-QUnit.test( 'Teardown', 3, function ( assert ) {
-       assert.equal( mw.html.escape( '<' ), '&lt;', 'extra teardown() callback was ran.' );
-       assert.equal( mw.config.get( 'testVar' ), null, 'config object restored to live in next module()' );
-       assert.equal( mw.messages.get( 'testMsg' ), null, 'messages object restored to live in next module()' );
-});
+       QUnit.test( 'Teardown', 3, function ( assert ) {
+               assert.equal( mw.html.escape( 'foo' ), 'mocked-2', 'extra setup() callback was re-ran.' );
+               assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object restored and re-applied after test()' );
+               assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
+       });
+
+       QUnit.module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() );
+
+       QUnit.test( 'Teardown', 3, function ( assert ) {
+               assert.equal( mw.html.escape( '<' ), '&lt;', 'extra teardown() callback was ran.' );
+               assert.equal( mw.config.get( 'testVar' ), null, 'config object restored to live in next module()' );
+               assert.equal( mw.messages.get( 'testMsg' ), null, 'messages object restored to live in next module()' );
+       });
 
 }( jQuery, mediaWiki, QUnit ) );
index 0dee2ef..feeec55 100644 (file)
@@ -1,52 +1,58 @@
-( function ( mw, $ ) {
+( function ( $ ) {
 
-QUnit.module( 'jquery.autoEllipsis', QUnit.newMwEnvironment() );
+       QUnit.module( 'jquery.autoEllipsis', QUnit.newMwEnvironment() );
 
-function createWrappedDiv( text, width ) {
-       var $wrapper = $( '<div>' ).css( 'width', width );
-       var $div = $( '<div>' ).text( text );
-       $wrapper.append( $div );
-       return $wrapper;
-}
-
-function findDivergenceIndex( a, b ) {
-       var i = 0;
-       while ( i < a.length && i < b.length && a[i] === b[i] ) {
-               i++;
+       function createWrappedDiv( text, width ) {
+               var $wrapper = $( '<div>' ).css( 'width', width ),
+                       $div = $( '<div>' ).text( text );
+               $wrapper.append( $div );
+               return $wrapper;
        }
-       return i;
-}
-
-QUnit.test( 'Position right', 4, function ( assert ) {
-       // We need this thing to be visible, so append it to the DOM
-       var origText = 'This is a really long random string and there is no way it fits in 100 pixels.';
-       var $wrapper = createWrappedDiv( origText, '100px' );
-       $( '#qunit-fixture' ).append( $wrapper );
-       $wrapper.autoEllipsis( { position: 'right' } );
-
-       // Verify that, and only one, span element was created
-       var $span = $wrapper.find( '> span' );
-       assert.strictEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' );
-
-       // Check that the text fits by turning on word wrapping
-       $span.css( 'whiteSpace', 'nowrap' );
-       assert.ltOrEq( $span.width(), $span.parent().width(), "Text fits (making the span 'white-space:nowrap' does not make it wider than its parent)" );
-
-       // Add two characters using scary black magic
-       var spanText = $span.text();
-       var d = findDivergenceIndex( origText, spanText );
-       var spanTextNew = spanText.substr( 0, d ) + origText[d] + origText[d] + '...';
-
-       assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
-
-       // Put this text in the span and verify it doesn't fit
-       $span.text( spanTextNew );
-       // In IE6 width works like min-width, allow IE6's width to be "equal to"
-       if ( $.browser.msie && Number( $.browser.version ) === 6 ) {
-               assert.gtOrEq( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more) - IE6: Maybe equal to as well due to width behaving like min-width in IE6' );
-       } else {
-               assert.gt( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more)' );
+
+       function findDivergenceIndex( a, b ) {
+               var i = 0;
+               while ( i < a.length && i < b.length && a[i] === b[i] ) {
+                       i++;
+               }
+               return i;
        }
-});
 
-}( mediaWiki, jQuery ) );
+       QUnit.test( 'Position right', 4, function ( assert ) {
+               // We need this thing to be visible, so append it to the DOM
+               var $span, spanText, d, spanTextNew,
+                       origText = 'This is a really long random string and there is no way it fits in 100 pixels.',
+                       $wrapper = createWrappedDiv( origText, '100px' );
+
+               $( '#qunit-fixture' ).append( $wrapper );
+               $wrapper.autoEllipsis( { position: 'right' } );
+
+               // Verify that, and only one, span element was created
+               $span = $wrapper.find( '> span' );
+               assert.strictEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' );
+
+               // Check that the text fits by turning on word wrapping
+               $span.css( 'whiteSpace', 'nowrap' );
+               assert.ltOrEq(
+                       $span.width(),
+                       $span.parent().width(),
+                       'Text fits (making the span "white-space: nowrap" does not make it wider than its parent)'
+               );
+
+               // Add two characters using scary black magic
+               spanText = $span.text();
+               d = findDivergenceIndex( origText, spanText );
+               spanTextNew = spanText.substr( 0, d ) + origText[d] + origText[d] + '...';
+
+               assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
+
+               // Put this text in the span and verify it doesn't fit
+               $span.text( spanTextNew );
+               // In IE6 width works like min-width, allow IE6's width to be "equal to"
+               if ( $.browser.msie && Number( $.browser.version ) === 6 ) {
+                       assert.gtOrEq( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more) - IE6: Maybe equal to as well due to width behaving like min-width in IE6' );
+               } else {
+                       assert.gt( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more)' );
+               }
+       });
+
+}( jQuery ) );
index 8d4ac03..378ea4b 100644 (file)
@@ -1,33 +1,35 @@
-QUnit.module( 'jquery.byteLength', QUnit.newMwEnvironment() );
+( function ( $ ) {
+       QUnit.module( 'jquery.byteLength', QUnit.newMwEnvironment() );
 
-QUnit.test( 'Simple text', 5, function ( assert ) {
-       var     azLc = 'abcdefghijklmnopqrstuvwxyz',
-               azUc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
-               num = '0123456789',
-               x = '*',
-               space = '   ';
+       QUnit.test( 'Simple text', 5, function ( assert ) {
+               var     azLc = 'abcdefghijklmnopqrstuvwxyz',
+                       azUc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+                       num = '0123456789',
+                       x = '*',
+                       space = '   ';
 
-       assert.equal( $.byteLength( azLc ), 26, 'Lowercase a-z' );
-       assert.equal( $.byteLength( azUc ), 26, 'Uppercase A-Z' );
-       assert.equal( $.byteLength( num ), 10, 'Numbers 0-9' );
-       assert.equal( $.byteLength( x ), 1, 'An asterisk' );
-       assert.equal( $.byteLength( space ), 3, '3 spaces' );
+               assert.equal( $.byteLength( azLc ), 26, 'Lowercase a-z' );
+               assert.equal( $.byteLength( azUc ), 26, 'Uppercase A-Z' );
+               assert.equal( $.byteLength( num ), 10, 'Numbers 0-9' );
+               assert.equal( $.byteLength( x ), 1, 'An asterisk' );
+               assert.equal( $.byteLength( space ), 3, '3 spaces' );
 
-} );
+       } );
 
-QUnit.test( 'Special text', 5, function ( assert ) {
-       // http://en.wikipedia.org/wiki/UTF-8
-       var     U_0024 = '\u0024',
-               U_00A2 = '\u00A2',
-               U_20AC = '\u20AC',
-               U_024B62 = '\u024B62',
-               // The normal one doesn't display properly, try the below which is the same
-               // according to http://www.fileformat.info/info/unicode/char/24B62/index.htm
-               U_024B62_alt = '\uD852\uDF62';
+       QUnit.test( 'Special text', 5, function ( assert ) {
+               // http://en.wikipedia.org/wiki/UTF-8
+               var u0024 = '$',
+                       u00A2 = '\u00A2',
+                       u20AC = '\u20AC',
+                       u024B62 = '\u024B62',
+                       // The normal one doesn't display properly, try the below which is the same
+                       // according to http://www.fileformat.info/info/unicode/char/24B62/index.htm
+                       u024B62alt = '\uD852\uDF62';
 
-       assert.strictEqual( $.byteLength( U_0024 ), 1, 'U+0024: 1 byte. \u0024 (dollar sign)' );
-       assert.strictEqual( $.byteLength( U_00A2 ), 2, 'U+00A2: 2 bytes. \u00A2 (cent sign)' );
-       assert.strictEqual( $.byteLength( U_20AC ), 3, 'U+20AC: 3 bytes. \u20AC (euro sign)' );
-       assert.strictEqual( $.byteLength( U_024B62 ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character)' );
-       assert.strictEqual( $.byteLength( U_024B62_alt ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character) - alternative method' );
-} );
+               assert.strictEqual( $.byteLength( u0024 ), 1, 'U+0024: 1 byte. $ (dollar sign)' );
+               assert.strictEqual( $.byteLength( u00A2 ), 2, 'U+00A2: 2 bytes. \u00A2 (cent sign)' );
+               assert.strictEqual( $.byteLength( u20AC ), 3, 'U+20AC: 3 bytes. \u20AC (euro sign)' );
+               assert.strictEqual( $.byteLength( u024B62 ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character)' );
+               assert.strictEqual( $.byteLength( u024B62alt ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character) - alternative method' );
+       } );
+}( jQuery ) );
index 4f86eb9..2990de2 100644 (file)
        // Basic sendkey-implementation
        function addChars( $input, charstr ) {
                var c, len;
+               function x( $input, i ) {
+                       // Add character to the value
+                       return $input.val() + charstr.charAt( i );
+               }
                for ( c = 0, len = charstr.length; c < len; c += 1 ) {
                        $input
-                               .val( function ( i, val ) {
-                                       // Add character to the value
-                                       return val + charstr.charAt( c );
-                               } )
+                               .val( x( $input, c ) )
                                .trigger( 'change' );
                }
        }
                $el.byteLimit();
        });
 
+       QUnit.test( 'Trim from insertion when limit exceeded', 2, function ( assert ) {
+               var $el;
+
+               // Use a new <input /> because the bug only occurs on the first time
+               // the limit it reached (bug 40850)
+               $el = $( '<input type="text"/>' )
+                       .appendTo( '#qunit-fixture' )
+                       .byteLimit( 3 )
+                       .val( 'abc' ).trigger( 'change' )
+                       .val( 'zabc' ).trigger( 'change' );
+
+               assert.strictEqual( $el.val(), 'abc', 'Trim from the insertion point (at 0), not the end' );
+
+               $el = $( '<input type="text"/>' )
+                       .appendTo( '#qunit-fixture' )
+                       .byteLimit( 3 )
+                       .val( 'abc' ).trigger( 'change' )
+                       .val( 'azbc' ).trigger( 'change' );
+
+               assert.strictEqual( $el.val(), 'abc', 'Trim from the insertion point (at 1), not the end' );
+       });
+
 }( jQuery, mediaWiki ) );
index bf62b39..29c6657 100644 (file)
-QUnit.module( 'jquery.client', QUnit.newMwEnvironment() );
+( function ( $ ) {
+       var uacount, uas, testMap;
 
-/** Number of user-agent defined */
-var uacount = 0;
+       QUnit.module( 'jquery.client', QUnit.newMwEnvironment() );
 
-var uas = (function () {
+       /** Number of user-agent defined */
+       uacount = 0;
 
-       // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
-       // Info based on results from http://toolserver.org/~krinkle/testswarm/job/174/
-       var uas = {
-               // Internet Explorer 6
-               // Internet Explorer 7
-               'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)': {
-                       title: 'Internet Explorer 7',
-                       platform: 'Win32',
-                       profile: {
-                               "name": "msie",
-                               "layout": "trident",
-                               "layoutVersion": "unknown",
-                               "platform": "win",
-                               "version": "7.0",
-                               "versionBase": "7",
-                               "versionNumber": 7
+       uas = ( function () {
+
+               // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
+               // Info based on results from http://toolserver.org/~krinkle/testswarm/job/174/
+               var uas = {
+                       // Internet Explorer 6
+                       // Internet Explorer 7
+                       'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)': {
+                               title: 'Internet Explorer 7',
+                               platform: 'Win32',
+                               profile: {
+                                       name: 'msie',
+                                       layout: 'trident',
+                                       layoutVersion: 'unknown',
+                                       platform: 'win',
+                                       version: '7.0',
+                                       versionBase: '7',
+                                       versionNumber: 7
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: false
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: false
-                       }
-               },
-               // Internet Explorer 8
-               // Internet Explorer 9
-               // Internet Explorer 10
-               'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)': {
-                       title: 'Internet Explorer 10',
-                       platform: 'Win32',
-                       profile: {
-                               "name": "msie",
-                               "layout": "trident",
-                               "layoutVersion": "unknown", // should be able to report 6?
-                               "platform": "win",
-                               "version": "10.0",
-                               "versionBase": "10",
-                               "versionNumber": 10
+                       // Internet Explorer 8
+                       // Internet Explorer 9
+                       // Internet Explorer 10
+                       'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)': {
+                               title: 'Internet Explorer 10',
+                               platform: 'Win32',
+                               profile: {
+                                       name: 'msie',
+                                       layout: 'trident',
+                                       layoutVersion: 'unknown', // should be able to report 6?
+                                       platform: 'win',
+                                       version: '10.0',
+                                       versionBase: '10',
+                                       versionNumber: 10
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               // Firefox 2
-               // Firefox 3.5
-               'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19': {
-                       title: 'Firefox 3.5',
-                       platform: 'MacIntel',
-                       profile: {
-                               "name": "firefox",
-                               "layout": "gecko",
-                               "layoutVersion": 20110420,
-                               "platform": "mac",
-                               "version": "3.5.19",
-                               "versionBase": "3",
-                               "versionNumber": 3.5
+                       // Firefox 2
+                       // Firefox 3.5
+                       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19': {
+                               title: 'Firefox 3.5',
+                               platform: 'MacIntel',
+                               profile: {
+                                       name: 'firefox',
+                                       layout: 'gecko',
+                                       layoutVersion: 20110420,
+                                       platform: 'mac',
+                                       version: '3.5.19',
+                                       versionBase: '3',
+                                       versionNumber: 3.5
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               // Firefox 3.6
-               'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17': {
-                       title: 'Firefox 3.6',
-                       platform: 'Linux i686',
-                       profile: {
-                               "name": "firefox",
-                               "layout": "gecko",
-                               "layoutVersion": 20110422,
-                               "platform": "linux",
-                               "version": "3.6.17",
-                               "versionBase": "3",
-                               "versionNumber": 3.6
+                       // Firefox 3.6
+                       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17': {
+                               title: 'Firefox 3.6',
+                               platform: 'Linux i686',
+                               profile: {
+                                       name: 'firefox',
+                                       layout: 'gecko',
+                                       layoutVersion: 20110422,
+                                       platform: 'linux',
+                                       version: '3.6.17',
+                                       versionBase: '3',
+                                       versionNumber: 3.6
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               // Firefox 4
-               'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1': {
-                       title: 'Firefox 4',
-                       platform: 'Win32',
-                       profile: {
-                               "name": "firefox",
-                               "layout": "gecko",
-                               "layoutVersion": 20100101,
-                               "platform": "win",
-                               "version": "4.0.1",
-                               "versionBase": "4",
-                               "versionNumber": 4
+                       // Firefox 4
+                       'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1': {
+                               title: 'Firefox 4',
+                               platform: 'Win32',
+                               profile: {
+                                       name: 'firefox',
+                                       layout: 'gecko',
+                                       layoutVersion: 20100101,
+                                       platform: 'win',
+                                       version: '4.0.1',
+                                       versionBase: '4',
+                                       versionNumber: 4
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               // Firefox 10 nightly build
-               'Mozilla/5.0 (X11; Linux x86_64; rv:10.0a1) Gecko/20111103 Firefox/10.0a1': {
-                       title: 'Firefox 10 nightly',
-                       platform: 'Linux',
-                       profile: {
-                               "name": "firefox",
-                               "layout": "gecko",
-                               "layoutVersion": 20111103,
-                               "platform": "linux",
-                               "version": "10.0a1",
-                               "versionBase": "10",
-                               "versionNumber": 10
+                       // Firefox 10 nightly build
+                       'Mozilla/5.0 (X11; Linux x86_64; rv:10.0a1) Gecko/20111103 Firefox/10.0a1': {
+                               title: 'Firefox 10 nightly',
+                               platform: 'Linux',
+                               profile: {
+                                       name: 'firefox',
+                                       layout: 'gecko',
+                                       layoutVersion: 20111103,
+                                       platform: 'linux',
+                                       version: '10.0a1',
+                                       versionBase: '10',
+                                       versionNumber: 10
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               // Firefox 5
-               // Safari 3
-               // Safari 4
-               'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
-                       title: 'Safari 4',
-                       platform: 'MacIntel',
-                       profile: {
-                               "name": "safari",
-                               "layout": "webkit",
-                               "layoutVersion": 531,
-                               "platform": "mac",
-                               "version": "4.0.5",
-                               "versionBase": "4",
-                               "versionNumber": 4
+                       // Firefox 5
+                       // Safari 3
+                       // Safari 4
+                       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
+                               title: 'Safari 4',
+                               platform: 'MacIntel',
+                               profile: {
+                                       name: 'safari',
+                                       layout: 'webkit',
+                                       layoutVersion: 531,
+                                       platform: 'mac',
+                                       version: '4.0.5',
+                                       versionBase: '4',
+                                       versionNumber: 4
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
-                       title: 'Safari 4',
-                       platform: 'Win32',
-                       profile: {
-                               "name": "safari",
-                               "layout": "webkit",
-                               "layoutVersion": 533,
-                               "platform": "win",
-                               "version": "4.0.5",
-                               "versionBase": "4",
-                               "versionNumber": 4
+                       'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
+                               title: 'Safari 4',
+                               platform: 'Win32',
+                               profile: {
+                                       name: 'safari',
+                                       layout: 'webkit',
+                                       layoutVersion: 533,
+                                       platform: 'win',
+                                       version: '4.0.5',
+                                       versionBase: '4',
+                                       versionNumber: 4
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               // Safari 5
-               // Opera 10
-               // Chrome 5
-               // Chrome 6
-               // Chrome 7
-               // Chrome 8
-               // Chrome 9
-               // Chrome 10
-               // Chrome 11
-               // Chrome 12
-               'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30': {
-                       title: 'Chrome 12',
-                       platform: 'MacIntel',
-                       profile: {
-                               "name": "chrome",
-                               "layout": "webkit",
-                               "layoutVersion": 534,
-                               "platform": "mac",
-                               "version": "12.0.742.112",
-                               "versionBase": "12",
-                               "versionNumber": 12
+                       // Safari 5
+                       // Opera 10+
+                       'Opera/9.80 (Windows NT 5.1)': {
+                               title: 'Opera 10+ (exact version unspecified)',
+                               platform: 'Win32',
+                               profile: {
+                                       name: 'opera',
+                                       layout: 'presto',
+                                       layoutVersion: 'unknown',
+                                       platform: 'win',
+                                       version: '10',
+                                       versionBase: '10',
+                                       versionNumber: 10
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30': {
-                       title: 'Chrome 12',
-                       platform: 'Linux i686',
-                       profile: {
-                               "name": "chrome",
-                               "layout": "webkit",
-                               "layoutVersion": 534,
-                               "platform": "linux",
-                               "version": "12.0.742.68",
-                               "versionBase": "12",
-                               "versionNumber": 12
+                       // Opera 12
+                       'Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.11': {
+                               title: 'Opera 12',
+                               platform: 'Win32',
+                               profile: {
+                                       name: 'opera',
+                                       layout: 'presto',
+                                       layoutVersion: 'unknown',
+                                       platform: 'win',
+                                       version: '12.11',
+                                       versionBase: '12',
+                                       versionNumber: 12.11
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
-                       }
-               },
-               // Bug #34924
-               'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34': {
-                       title: 'Rekonq',
-                       platform: 'Linux i686',
-                       profile: {
-                               "name": "rekonq",
-                               "layout": "webkit",
-                               "layoutVersion": 534,
-                               "platform": "linux",
-                               "version": "534.34",
-                               "versionBase": "534",
-                               "versionNumber": 534.34
+                       // Chrome 5
+                       // Chrome 6
+                       // Chrome 7
+                       // Chrome 8
+                       // Chrome 9
+                       // Chrome 10
+                       // Chrome 11
+                       // Chrome 12
+                       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30': {
+                               title: 'Chrome 12',
+                               platform: 'MacIntel',
+                               profile: {
+                                       name: 'chrome',
+                                       layout: 'webkit',
+                                       layoutVersion: 534,
+                                       platform: 'mac',
+                                       version: '12.0.742.112',
+                                       versionBase: '12',
+                                       versionNumber: 12
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
+                       },
+                       'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30': {
+                               title: 'Chrome 12',
+                               platform: 'Linux i686',
+                               profile: {
+                                       name: 'chrome',
+                                       layout: 'webkit',
+                                       layoutVersion: 534,
+                                       platform: 'linux',
+                                       version: '12.0.742.68',
+                                       versionBase: '12',
+                                       versionNumber: 12
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        },
-                       wikiEditor: {
-                               ltr: true,
-                               rtl: true
+                       // Bug #34924
+                       'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34': {
+                               title: 'Rekonq',
+                               platform: 'Linux i686',
+                               profile: {
+                                       name: 'rekonq',
+                                       layout: 'webkit',
+                                       layoutVersion: 534,
+                                       platform: 'linux',
+                                       version: '534.34',
+                                       versionBase: '534',
+                                       versionNumber: 534.34
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        }
-               }
-       };
-       $.each( uas, function () {
-               uacount++;
-       });
-       return uas;
-}());
+               };
+               $.each( uas, function () {
+                       uacount++;
+               });
+               return uas;
+       }() );
 
-QUnit.test( 'profile userAgent support', uacount, function ( assert ) {
-       // Generate a client profile object and compare recursively
-       var uaTest = function( rawUserAgent, data ) {
-               var ret = $.client.profile( {
-                       userAgent: rawUserAgent,
-                       platform: data.platform
-               } );
-               assert.deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent );
-       };
+       QUnit.test( 'profile userAgent support', uacount, function ( assert ) {
+               // Generate a client profile object and compare recursively
+               var uaTest = function( rawUserAgent, data ) {
+                       var ret = $.client.profile( {
+                               userAgent: rawUserAgent,
+                               platform: data.platform
+                       } );
+                       assert.deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent );
+               };
 
-       // Loop through and run tests
-       $.each( uas, uaTest );
-} );
+               // Loop through and run tests
+               $.each( uas, uaTest );
+       } );
 
-QUnit.test( 'profile return validation for current user agent', 7, function ( assert ) {
-       var p = $.client.profile();
-       function unknownOrType( val, type, summary ) {
-               assert.ok( typeof val === type || val === 'unknown', summary );
-       }
+       QUnit.test( 'profile return validation for current user agent', 7, function ( assert ) {
+               var p = $.client.profile();
+               function unknownOrType( val, type, summary ) {
+                       assert.ok( typeof val === type || val === 'unknown', summary );
+               }
 
-       assert.equal( typeof p, 'object', 'profile returns an object' );
-       unknownOrType( p.layout, 'string', 'p.layout is a string (or "unknown")' );
-       unknownOrType( p.layoutVersion, 'number', 'p.layoutVersion is a number (or "unknown")' );
-       unknownOrType( p.platform, 'string', 'p.platform is a string (or "unknown")' );
-       unknownOrType( p.version, 'string', 'p.version is a string (or "unknown")' );
-       unknownOrType( p.versionBase, 'string', 'p.versionBase is a string (or "unknown")' );
-       assert.equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' );
-});
+               assert.equal( typeof p, 'object', 'profile returns an object' );
+               unknownOrType( p.layout, 'string', 'p.layout is a string (or "unknown")' );
+               unknownOrType( p.layoutVersion, 'number', 'p.layoutVersion is a number (or "unknown")' );
+               unknownOrType( p.platform, 'string', 'p.platform is a string (or "unknown")' );
+               unknownOrType( p.version, 'string', 'p.version is a string (or "unknown")' );
+               unknownOrType( p.versionBase, 'string', 'p.versionBase is a string (or "unknown")' );
+               assert.equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' );
+       });
 
-// Example from WikiEditor
-// Make sure to use raw numbers, a string like "7.0" would fail on a
-// version 10 browser since in string comparaison "10" is before "7.0" :)
-var testMap = {
-       'ltr': {
-               'msie': [['>=', 7.0]],
-               'firefox': [['>=', 2]],
-               'opera': [['>=', 9.6]],
-               'safari': [['>=', 3]],
-               'chrome': [['>=', 3]],
-               'netscape': [['>=', 9]],
-               'blackberry': false,
-               'ipod': false,
-               'iphone': false
-       },
-       'rtl': {
-               'msie': [['>=', 8]],
-               'firefox': [['>=', 2]],
-               'opera': [['>=', 9.6]],
-               'safari': [['>=', 3]],
-               'chrome': [['>=', 3]],
-               'netscape': [['>=', 9]],
-               'blackberry': false,
-               'ipod': false,
-               'iphone': false
-       }
-};
+       // Example from WikiEditor
+       // Make sure to use raw numbers, a string like "7.0" would fail on a
+       // version 10 browser since in string comparaison "10" is before "7.0" :)
+       testMap = {
+               'ltr': {
+                       'msie': [['>=', 7.0]],
+                       'firefox': [['>=', 2]],
+                       'opera': [['>=', 9.6]],
+                       'safari': [['>=', 3]],
+                       'chrome': [['>=', 3]],
+                       'netscape': [['>=', 9]],
+                       'blackberry': false,
+                       'ipod': false,
+                       'iphone': false
+               },
+               'rtl': {
+                       'msie': [['>=', 8]],
+                       'firefox': [['>=', 2]],
+                       'opera': [['>=', 9.6]],
+                       'safari': [['>=', 3]],
+                       'chrome': [['>=', 3]],
+                       'netscape': [['>=', 9]],
+                       'blackberry': false,
+                       'ipod': false,
+                       'iphone': false
+               }
+       };
 
-QUnit.test( 'test', 1, function ( assert ) {
-       // .test() uses eval, make sure no exceptions are thrown
-       // then do a basic return value type check
-       var testMatch = $.client.test( testMap );
+       QUnit.test( 'test', 1, function ( assert ) {
+               // .test() uses eval, make sure no exceptions are thrown
+               // then do a basic return value type check
+               var testMatch = $.client.test( testMap );
 
-       assert.equal( typeof testMatch, 'boolean', 'test returns a boolean value' );
+               assert.equal( typeof testMatch, 'boolean', 'test returns a boolean value' );
 
-});
+       });
 
-QUnit.test( 'User-agent matches against WikiEditor\'s compatibility map', uacount * 2, function ( assert ) {
-       var     $body = $( 'body' ),
-               bodyClasses = $body.attr( 'class' );
+       QUnit.test( 'User-agent matches against WikiEditor\'s compatibility map', uacount * 2, function ( assert ) {
+               var     $body = $( 'body' ),
+                       bodyClasses = $body.attr( 'class' );
 
-       // Loop through and run tests
-       $.each( uas, function ( agent, data ) {
-               $.each( ['ltr', 'rtl'], function ( i, dir ) {
-                       $body.removeClass( 'ltr rtl' ).addClass( dir );
-                       var profile = $.client.profile( {
-                               userAgent: agent,
-                               platform: data.platform
-                       } );
-                       var testMatch = $.client.test( testMap, profile );
-                       $body.removeClass( dir );
+               // Loop through and run tests
+               $.each( uas, function ( agent, data ) {
+                       $.each( ['ltr', 'rtl'], function ( i, dir ) {
+                               var profile, testMatch;
+                               $body.removeClass( 'ltr rtl' ).addClass( dir );
+                               profile = $.client.profile( {
+                                       userAgent: agent,
+                                       platform: data.platform
+                               } );
+                               testMatch = $.client.test( testMap, profile );
+                               $body.removeClass( dir );
 
-                       assert.equal( testMatch, data.wikiEditor[dir], 'testing comparison based on ' + dir + ', ' + agent );
+                               assert.equal( testMatch, data.wikiEditor[dir], 'testing comparison based on ' + dir + ', ' + agent );
+                       });
                });
-       });
-
-       // Restore body classes
-       $body.attr( 'class', bodyClasses );
-});
 
+               // Restore body classes
+               $body.attr( 'class', bodyClasses );
+       });
+}( jQuery ) );
index 7b37f5a..51a892e 100644 (file)
@@ -1,58 +1,62 @@
-QUnit.module( 'jquery.colorUtil', QUnit.newMwEnvironment() );
-
-QUnit.test( 'getRGB', 18, function ( assert ) {
-       assert.strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' );
-       assert.strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' );
-       assert.deepEqual( $.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Parse array of rgb values' );
-       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple rgb string' );
-       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple rgb string with spaces' );
-       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse rgb string with percentages' );
-       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse rgb string with percentages and spaces' );
-       assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' );
-       assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' );
-       assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' );
-       assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' );
-       assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' );
-       assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' );
-       assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' );
-
-       // Perhaps this is a bug in colorUtil, but it is the current behaviour so, let's keep
-       // track of it, so we will know in case it would ever change.
-       assert.strictEqual( $.colorUtil.getRGB( 'rgba(0,0,0,0)' ), undefined, 'Zero rgba without whitespace' );
-
-       assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' );
-       assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [255, 255, 255], 'Color names (transparent)' );
-       assert.strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' );
-});
-
-QUnit.test( 'rgbToHsl', 1, function ( assert ) {
-       var hsl = $.colorUtil.rgbToHsl( 144, 238, 144 );
-
-       // Cross-browser differences in decimals...
-       // Round to two decimals so they can be more reliably checked.
-       var dualDecimals = function(a,b){
-               return Math.round(a*100)/100;
-       };
-       // Re-create the rgbToHsl return array items, limited to two decimals.
-       var ret = [dualDecimals(hsl[0]), dualDecimals(hsl[1]), dualDecimals(hsl[2])];
-
-       assert.deepEqual( ret, [0.33, 0.73, 0.75], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
-});
-
-QUnit.test( 'hslToRgb', 1, function ( assert ) {
-       var rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 );
-
-       // Cross-browser differences in decimals...
-       // Re-create the hslToRgb return array items, rounded to whole numbers.
-       var ret = [Math.round(rgb[0]), Math.round(rgb[1]), Math.round(rgb[2])];
-
-       assert.deepEqual( ret ,[183, 240, 168], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
-});
-
-QUnit.test( 'getColorBrightness', 2, function ( assert ) {
-       var a = $.colorUtil.getColorBrightness( 'red', +0.1 );
-       assert.equal( a, 'rgb(255,50,50)', 'Start with named color "red", brighten 10%' );
-
-       var b = $.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 );
-       assert.equal( b, 'rgb(118,29,29)', 'Start with rgb string "rgb(200,50,50)", darken 20%' );
-});
+( function ( $ ) {
+       QUnit.module( 'jquery.colorUtil', QUnit.newMwEnvironment() );
+
+       QUnit.test( 'getRGB', 18, function ( assert ) {
+               assert.strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' );
+               assert.strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' );
+               assert.deepEqual( $.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Parse array of rgb values' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple rgb string' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple rgb string with spaces' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse rgb string with percentages' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse rgb string with percentages and spaces' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' );
+               assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' );
+
+               // Perhaps this is a bug in colorUtil, but it is the current behaviour so, let's keep
+               // track of it, so we will know in case it would ever change.
+               assert.strictEqual( $.colorUtil.getRGB( 'rgba(0,0,0,0)' ), undefined, 'Zero rgba without whitespace' );
+
+               assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' );
+               assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [255, 255, 255], 'Color names (transparent)' );
+               assert.strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' );
+       });
+
+       QUnit.test( 'rgbToHsl', 1, function ( assert ) {
+               var hsl, ret;
+
+               // Cross-browser differences in decimals...
+               // Round to two decimals so they can be more reliably checked.
+               function dualDecimals( a ) {
+                       return Math.round( a * 100 ) / 100;
+               }
+               // Re-create the rgbToHsl return array items, limited to two decimals.
+               hsl = $.colorUtil.rgbToHsl( 144, 238, 144 );
+               ret = [ dualDecimals( hsl[0] ), dualDecimals( hsl[1] ), dualDecimals( hsl[2] ) ];
+
+               assert.deepEqual( ret, [0.33, 0.73, 0.75], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
+       });
+
+       QUnit.test( 'hslToRgb', 1, function ( assert ) {
+               var rgb, ret;
+               rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 );
+
+               // Re-create the hslToRgb return array items, rounded to whole numbers.
+               ret = [ Math.round(rgb[0]), Math.round(rgb[1]), Math.round(rgb[2]) ];
+
+               assert.deepEqual( ret ,[183, 240, 168], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
+       });
+
+       QUnit.test( 'getColorBrightness', 2, function ( assert ) {
+               var a, b;
+               a = $.colorUtil.getColorBrightness( 'red', +0.1 );
+               assert.equal( a, 'rgb(255,50,50)', 'Start with named color "red", brighten 10%' );
+
+               b = $.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 );
+               assert.equal( b, 'rgb(118,29,29)', 'Start with rgb string "rgb(200,50,50)", darken 20%' );
+       });
+}( jQuery ) );
index a307983..3e7d5ff 100644 (file)
@@ -1,35 +1,37 @@
-QUnit.asyncTest('jquery.delayedBind with data option', 2, function ( assert ) {
-       var $fixture = $('<div>').appendTo('#qunit-fixture'),
-               data = { magic: "beeswax" },
-               delay = 50;
+( function ( $ ) {
+       QUnit.asyncTest('jquery.delayedBind with data option', 2, function ( assert ) {
+               var $fixture = $('<div>').appendTo('#qunit-fixture'),
+                       data = {
+                               magic: 'beeswax'
+                       },
+                       delay = 50;
 
-       $fixture.delayedBind(delay, 'testevent', data, function ( e ) {
-               QUnit.start(); // continue!
-               assert.ok( true, 'testevent fired');
-               assert.ok( e.data === data, 'data is passed through delayedBind');
+               $fixture.delayedBind(delay, 'testevent', data, function ( e ) {
+                       assert.ok( true, 'testevent fired');
+                       assert.ok( e.data === data, 'data is passed through delayedBind');
+                       QUnit.start();
+               });
+
+               // We'll trigger it thrice, but it should only happen once.
+               $fixture.trigger( 'testevent', {} );
+               $fixture.trigger( 'testevent', {} );
+               $fixture.trigger( 'testevent', {} );
+               $fixture.trigger( 'testevent', {} );
        });
 
-       // We'll trigger it thrice, but it should only happen once.
-       $fixture.trigger( 'testevent', {} );
-       $fixture.trigger( 'testevent', {} );
-       $fixture.trigger( 'testevent', {} );
-       $fixture.trigger( 'testevent', {} );
-});
+       QUnit.asyncTest('jquery.delayedBind without data option', 1, function ( assert ) {
+               var $fixture = $('<div>').appendTo('#qunit-fixture'),
+                       delay = 50;
 
-QUnit.asyncTest('jquery.delayedBind without data option', 1, function ( assert ) {
-       var $fixture = $('<div>').appendTo('#qunit-fixture'),
-               data = { magic: "beeswax" },
-               delay = 50;
+               $fixture.delayedBind(delay, 'testevent', function () {
+                       assert.ok(true, 'testevent fired');
+                       QUnit.start();
+               });
 
-       $fixture.delayedBind(delay, 'testevent', function ( e ) {
-               QUnit.start(); // continue!
-               assert.ok(true, 'testevent fired');
+               // We'll trigger it thrice, but it should only happen once.
+               $fixture.trigger( 'testevent', {} );
+               $fixture.trigger( 'testevent', {} );
+               $fixture.trigger( 'testevent', {} );
+               $fixture.trigger( 'testevent', {} );
        });
-
-       // We'll trigger it thrice, but it should only happen once.
-       $fixture.trigger( 'testevent', {} );
-       $fixture.trigger( 'testevent', {} );
-       $fixture.trigger( 'testevent', {} );
-       $fixture.trigger( 'testevent', {} );
-});
-
+}( jQuery ) );
index 6eef1ab..82566c2 100644 (file)
@@ -1,11 +1,13 @@
-QUnit.module( 'jquery.getAttrs', QUnit.newMwEnvironment() );
+( function ( $ ) {
+       QUnit.module( 'jquery.getAttrs', QUnit.newMwEnvironment() );
 
-QUnit.test( 'Check', 1, function ( assert ) {
-       var     attrs = {
-                       foo: 'bar',
-                       'class': 'lorem'
-               },
-               $el = jQuery( '<div>', attrs );
+       QUnit.test( 'Check', 1, function ( assert ) {
+               var     attrs = {
+                               foo: 'bar',
+                               'class': 'lorem'
+                       },
+                       $el = $( '<div>' ).attr( attrs );
 
-       assert.deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' );
-} );
+               assert.deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' );
+       } );
+}( jQuery ) );
index cf309df..d75c378 100644 (file)
@@ -1,20 +1,22 @@
-QUnit.module( 'jquery.hidpi', QUnit.newMwEnvironment() );
+( function ( $ ) {
+       QUnit.module( 'jquery.hidpi', QUnit.newMwEnvironment() );
 
-QUnit.test( 'devicePixelRatio', function ( assert ) {
-       var devicePixelRatio = $.devicePixelRatio();
-       assert.equal( typeof devicePixelRatio, 'number', '$.devicePixelRatio() returns a number' );
-});
+       QUnit.test( 'devicePixelRatio', function ( assert ) {
+               var devicePixelRatio = $.devicePixelRatio();
+               assert.equal( typeof devicePixelRatio, 'number', '$.devicePixelRatio() returns a number' );
+       });
 
-QUnit.test( 'matchSrcSet', function ( assert ) {
-       var srcset = 'onefive.png 1.5x, two.png 2x';
+       QUnit.test( 'matchSrcSet', function ( assert ) {
+               var srcset = 'onefive.png 1.5x, two.png 2x';
 
-       // Nice exact matches
-       assert.equal( $.matchSrcSet( 1, srcset ), null, '1.0 gives no match' );
-       assert.equal( $.matchSrcSet( 1.5, srcset ), 'onefive.png', '1.5 gives match' );
-       assert.equal( $.matchSrcSet( 2, srcset ), 'two.png', '2 gives match' );
+               // Nice exact matches
+               assert.equal( $.matchSrcSet( 1, srcset ), null, '1.0 gives no match' );
+               assert.equal( $.matchSrcSet( 1.5, srcset ), 'onefive.png', '1.5 gives match' );
+               assert.equal( $.matchSrcSet( 2, srcset ), 'two.png', '2 gives match' );
 
-       // Non-exact matches; should return the next-biggest specified
-       assert.equal( $.matchSrcSet( 1.25, srcset ), null, '1.25 gives no match' );
-       assert.equal( $.matchSrcSet( 1.75, srcset ), 'onefive.png', '1.75 gives match to 1.5' );
-       assert.equal( $.matchSrcSet( 2.25, srcset ), 'two.png', '2.25 gives match to 2' );
-});
+               // Non-exact matches; should return the next-biggest specified
+               assert.equal( $.matchSrcSet( 1.25, srcset ), null, '1.25 gives no match' );
+               assert.equal( $.matchSrcSet( 1.75, srcset ), 'onefive.png', '1.75 gives match to 1.5' );
+               assert.equal( $.matchSrcSet( 2.25, srcset ), 'two.png', '2.25 gives match to 2' );
+       });
+}( jQuery ) );
index a94dca3..e1fb96d 100644 (file)
-QUnit.module( 'jquery.highlightText', QUnit.newMwEnvironment() );
+( function ( $ ) {
+       QUnit.module( 'jquery.highlightText', QUnit.newMwEnvironment() );
 
-QUnit.test( 'Check', function ( assert ) {
-       var $fixture, cases = [
-               {
-                       desc: 'Test 001',
-                       text: 'Blue Öyster Cult',
-                       highlight: 'Blue',
-                       expected: '<span class="highlight">Blue</span> Öyster Cult'
-               },
-               {
-                       desc: 'Test 002',
-                       text: 'Blue Öyster Cult',
-                       highlight: 'Blue ',
-                       expected: '<span class="highlight">Blue</span> Öyster Cult'
-               },
-               {
-                       desc: 'Test 003',
-                       text: 'Blue Öyster Cult',
-                       highlight: 'Blue Ö',
-                       expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
-               },
-               {
-                       desc: 'Test 004',
-                       text: 'Blue Öyster Cult',
-                       highlight: 'Blue Öy',
-                       expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
-               },
-               {
-                       desc: 'Test 005',
-                       text: 'Blue Öyster Cult',
-                       highlight: ' Blue',
-                       expected: '<span class="highlight">Blue</span> Öyster Cult'
-               },
-               {
-                       desc: 'Test 006',
-                       text: 'Blue Öyster Cult',
-                       highlight: ' Blue ',
-                       expected: '<span class="highlight">Blue</span> Öyster Cult'
-               },
-               {
-                       desc: 'Test 007',
-                       text: 'Blue Öyster Cult',
-                       highlight: ' Blue Ö',
-                       expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
-               },
-               {
-                       desc: 'Test 008',
-                       text: 'Blue Öyster Cult',
-                       highlight: ' Blue Öy',
-                       expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
-               },
-               {
-                       desc: 'Test 009: Highlighter broken on starting Umlaut?',
-                       text: 'Österreich',
-                       highlight: 'Österreich',
-                       expected: '<span class="highlight">Österreich</span>'
-               },
-               {
-                       desc: 'Test 010: Highlighter broken on starting Umlaut?',
-                       text: 'Österreich',
-                       highlight: 'Ö',
-                       expected: '<span class="highlight">Ö</span>sterreich'
-               },
-               {
-                       desc: 'Test 011: Highlighter broken on starting Umlaut?',
-                       text: 'Österreich',
-                       highlight: 'Öst',
-                       expected: '<span class="highlight">Öst</span>erreich'
-               },
-               {
-                       desc: 'Test 012: Highlighter broken on starting Umlaut?',
-                       text: 'Österreich',
-                       highlight: 'Oe',
-                       expected: 'Österreich'
-               },
-               {
-                       desc: 'Test 013: Highlighter broken on punctuation mark?',
-                       text: 'So good. To be there',
-                       highlight: 'good',
-                       expected: 'So <span class="highlight">good</span>. To be there'
-               },
-               {
-                       desc: 'Test 014: Highlighter broken on space?',
-                       text: 'So good. To be there',
-                       highlight: 'be',
-                       expected: 'So good. To <span class="highlight">be</span> there'
-               },
-               {
-                       desc: 'Test 015: Highlighter broken on space?',
-                       text: 'So good. To be there',
-                       highlight: ' be',
-                       expected: 'So good. To <span class="highlight">be</span> there'
-               },
-               {
-                       desc: 'Test 016: Highlighter broken on space?',
-                       text: 'So good. To be there',
-                       highlight: 'be ',
-                       expected: 'So good. To <span class="highlight">be</span> there'
-               },
-               {
-                       desc: 'Test 017: Highlighter broken on space?',
-                       text: 'So good. To be there',
-                       highlight: ' be ',
-                       expected: 'So good. To <span class="highlight">be</span> there'
-               },
-               {
-                       desc: 'Test 018: en de Highlighter broken on special character at the end?',
-                       text: 'So good. xbß',
-                       highlight: 'xbß',
-                       expected: 'So good. <span class="highlight">xbß</span>'
-               },
-               {
-                       desc: 'Test 019: en de Highlighter broken on special character at the end?',
-                       text: 'So good. xbß.',
-                       highlight: 'xbß.',
-                       expected: 'So good. <span class="highlight">xbß.</span>'
-               },
-               {
-                       desc: 'Test 020: RTL he Hebrew',
-                       text: 'חסיד אומות העולם',
-                       highlight: 'חסיד אומות העולם',
-                       expected: '<span class="highlight">חסיד</span> <span class="highlight">אומות</span> <span class="highlight">העולם</span>'
-               },
-               {
-                       desc: 'Test 021: RTL he Hebrew',
-                       text: 'חסיד אומות העולם',
-                       highlight: 'חסי',
-                       expected: '<span class="highlight">חסי</span>ד אומות העולם'
-               },
-               {
-                       desc: 'Test 022: ja Japanese',
-                       text: '諸国民の中の正義の人',
-                       highlight: '諸国民の中の正義の人',
-                       expected: '<span class="highlight">諸国民の中の正義の人</span>'
-               },
-               {
-                       desc: 'Test 023: ja Japanese',
-                       text: '諸国民の中の正義の人',
-                       highlight: '諸国',
-                       expected: '<span class="highlight">諸国</span>民の中の正義の人'
-               },
-               {
-                       desc: 'Test 024: fr French text and « french quotes » (guillemets)',
-                       text: "« L'oiseau est sur l’île »",
-                       highlight: "« L'oiseau est sur l’île »",
-                       expected: '<span class="highlight">«</span> <span class="highlight">L\'oiseau</span> <span class="highlight">est</span> <span class="highlight">sur</span> <span class="highlight">l’île</span> <span class="highlight">»</span>'
-               },
-               {
-                       desc: 'Test 025: fr French text and « french quotes » (guillemets)',
-                       text: "« L'oiseau est sur l’île »",
-                       highlight: "« L'oise",
-                       expected: '<span class="highlight">«</span> <span class="highlight">L\'oise</span>au est sur l’île »'
-               },
-               {
-                       desc: 'Test 025a: fr French text and « french quotes » (guillemets) - does it match the single strings "«" and "L" separately?',
-                       text: "« L'oiseau est sur l’île »",
-                       highlight: "« L",
-                       expected: '<span class="highlight">«</span> <span class="highlight">L</span>\'oiseau est sur <span class="highlight">l</span>’île »'
-               },
-               {
-                       desc: 'Test 026: ru Russian',
-                       text: 'Праведники мира',
-                       highlight: 'Праведники мира',
-                       expected: '<span class="highlight">Праведники</span> <span class="highlight">мира</span>'
-               },
-               {
-                       desc: 'Test 027: ru Russian',
-                       text: 'Праведники мира',
-                       highlight: 'Праве',
-                       expected: '<span class="highlight">Праве</span>дники мира'
-               },
-               {
-                       desc: 'Test 028 ka Georgian',
-                       text: 'მთავარი გვერდი',
-                       highlight: 'მთავარი გვერდი',
-                       expected: '<span class="highlight">მთავარი</span> <span class="highlight">გვერდი</span>'
-               },
-               {
-                       desc: 'Test 029 ka Georgian',
-                       text: 'მთავარი გვერდი',
-                       highlight: 'მთა',
-                       expected: '<span class="highlight">მთა</span>ვარი გვერდი'
-               },
-               {
-                       desc: 'Test 030 hy Armenian',
-                       text: 'Նոնա Գափրինդաշվիլի',
-                       highlight: 'Նոնա Գափրինդաշվիլի',
-                       expected: '<span class="highlight">Նոնա</span> <span class="highlight">Գափրինդաշվիլի</span>'
-               },
-               {
-                       desc: 'Test 031 hy Armenian',
-                       text: 'Նոնա Գափրինդաշվիլի',
-                       highlight: 'Նոն',
-                       expected: '<span class="highlight">Նոն</span>ա Գափրինդաշվիլի'
-               },
-               {
-                       desc: 'Test 032: th Thai',
-                       text: 'พอล แอร์ดิช',
-                       highlight: 'พอล แอร์ดิช',
-                       expected: '<span class="highlight">พอล</span> <span class="highlight">แอร์ดิช</span>'
-               },
-               {
-                       desc: 'Test 033: th Thai',
-                       text: 'พอล แอร์ดิช',
-                       highlight: 'พอ',
-                       expected: '<span class="highlight">พอ</span>ล แอร์ดิช'
-               },
-               {
-                       desc: 'Test 034: RTL ar Arabic',
-                       text: 'بول إيردوس',
-                       highlight: 'بول إيردوس',
-                       expected: '<span class="highlight">بول</span> <span class="highlight">إيردوس</span>'
-               },
-               {
-                       desc: 'Test 035: RTL ar Arabic',
-                       text: 'بول إيردوس',
-                       highlight: 'بو',
-                       expected: '<span class="highlight">بو</span>ل إيردوس'
-               }
-       ];
-       QUnit.expect( cases.length );
+       QUnit.test( 'Check', function ( assert ) {
+               var $fixture, cases = [
+                       {
+                               desc: 'Test 001',
+                               text: 'Blue Öyster Cult',
+                               highlight: 'Blue',
+                               expected: '<span class="highlight">Blue</span> Öyster Cult'
+                       },
+                       {
+                               desc: 'Test 002',
+                               text: 'Blue Öyster Cult',
+                               highlight: 'Blue ',
+                               expected: '<span class="highlight">Blue</span> Öyster Cult'
+                       },
+                       {
+                               desc: 'Test 003',
+                               text: 'Blue Öyster Cult',
+                               highlight: 'Blue Ö',
+                               expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
+                       },
+                       {
+                               desc: 'Test 004',
+                               text: 'Blue Öyster Cult',
+                               highlight: 'Blue Öy',
+                               expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
+                       },
+                       {
+                               desc: 'Test 005',
+                               text: 'Blue Öyster Cult',
+                               highlight: ' Blue',
+                               expected: '<span class="highlight">Blue</span> Öyster Cult'
+                       },
+                       {
+                               desc: 'Test 006',
+                               text: 'Blue Öyster Cult',
+                               highlight: ' Blue ',
+                               expected: '<span class="highlight">Blue</span> Öyster Cult'
+                       },
+                       {
+                               desc: 'Test 007',
+                               text: 'Blue Öyster Cult',
+                               highlight: ' Blue Ö',
+                               expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
+                       },
+                       {
+                               desc: 'Test 008',
+                               text: 'Blue Öyster Cult',
+                               highlight: ' Blue Öy',
+                               expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
+                       },
+                       {
+                               desc: 'Test 009: Highlighter broken on starting Umlaut?',
+                               text: 'Österreich',
+                               highlight: 'Österreich',
+                               expected: '<span class="highlight">Österreich</span>'
+                       },
+                       {
+                               desc: 'Test 010: Highlighter broken on starting Umlaut?',
+                               text: 'Österreich',
+                               highlight: 'Ö',
+                               expected: '<span class="highlight">Ö</span>sterreich'
+                       },
+                       {
+                               desc: 'Test 011: Highlighter broken on starting Umlaut?',
+                               text: 'Österreich',
+                               highlight: 'Öst',
+                               expected: '<span class="highlight">Öst</span>erreich'
+                       },
+                       {
+                               desc: 'Test 012: Highlighter broken on starting Umlaut?',
+                               text: 'Österreich',
+                               highlight: 'Oe',
+                               expected: 'Österreich'
+                       },
+                       {
+                               desc: 'Test 013: Highlighter broken on punctuation mark?',
+                               text: 'So good. To be there',
+                               highlight: 'good',
+                               expected: 'So <span class="highlight">good</span>. To be there'
+                       },
+                       {
+                               desc: 'Test 014: Highlighter broken on space?',
+                               text: 'So good. To be there',
+                               highlight: 'be',
+                               expected: 'So good. To <span class="highlight">be</span> there'
+                       },
+                       {
+                               desc: 'Test 015: Highlighter broken on space?',
+                               text: 'So good. To be there',
+                               highlight: ' be',
+                               expected: 'So good. To <span class="highlight">be</span> there'
+                       },
+                       {
+                               desc: 'Test 016: Highlighter broken on space?',
+                               text: 'So good. To be there',
+                               highlight: 'be ',
+                               expected: 'So good. To <span class="highlight">be</span> there'
+                       },
+                       {
+                               desc: 'Test 017: Highlighter broken on space?',
+                               text: 'So good. To be there',
+                               highlight: ' be ',
+                               expected: 'So good. To <span class="highlight">be</span> there'
+                       },
+                       {
+                               desc: 'Test 018: en de Highlighter broken on special character at the end?',
+                               text: 'So good. xbß',
+                               highlight: 'xbß',
+                               expected: 'So good. <span class="highlight">xbß</span>'
+                       },
+                       {
+                               desc: 'Test 019: en de Highlighter broken on special character at the end?',
+                               text: 'So good. xbß.',
+                               highlight: 'xbß.',
+                               expected: 'So good. <span class="highlight">xbß.</span>'
+                       },
+                       {
+                               desc: 'Test 020: RTL he Hebrew',
+                               text: 'חסיד אומות העולם',
+                               highlight: 'חסיד אומות העולם',
+                               expected: '<span class="highlight">חסיד</span> <span class="highlight">אומות</span> <span class="highlight">העולם</span>'
+                       },
+                       {
+                               desc: 'Test 021: RTL he Hebrew',
+                               text: 'חסיד אומות העולם',
+                               highlight: 'חסי',
+                               expected: '<span class="highlight">חסי</span>ד אומות העולם'
+                       },
+                       {
+                               desc: 'Test 022: ja Japanese',
+                               text: '諸国民の中の正義の人',
+                               highlight: '諸国民の中の正義の人',
+                               expected: '<span class="highlight">諸国民の中の正義の人</span>'
+                       },
+                       {
+                               desc: 'Test 023: ja Japanese',
+                               text: '諸国民の中の正義の人',
+                               highlight: '諸国',
+                               expected: '<span class="highlight">諸国</span>民の中の正義の人'
+                       },
+                       {
+                               desc: 'Test 024: fr French text and « french quotes » (guillemets)',
+                               text: '« L\'oiseau est sur l’île »',
+                               highlight: '« L\'oiseau est sur l’île »',
+                               expected: '<span class="highlight">«</span> <span class="highlight">L\'oiseau</span> <span class="highlight">est</span> <span class="highlight">sur</span> <span class="highlight">l’île</span> <span class="highlight">»</span>'
+                       },
+                       {
+                               desc: 'Test 025: fr French text and « french quotes » (guillemets)',
+                               text: '« L\'oiseau est sur l’île »',
+                               highlight: '« L\'oise',
+                               expected: '<span class="highlight">«</span> <span class="highlight">L\'oise</span>au est sur l’île »'
+                       },
+                       {
+                               desc: 'Test 025a: fr French text and « french quotes » (guillemets) - does it match the single strings "«" and "L" separately?',
+                               text: '« L\'oiseau est sur l’île »',
+                               highlight: '« L',
+                               expected: '<span class="highlight">«</span> <span class="highlight">L</span>\'oiseau est sur <span class="highlight">l</span>’île »'
+                       },
+                       {
+                               desc: 'Test 026: ru Russian',
+                               text: 'Праведники мира',
+                               highlight: 'Праведники мира',
+                               expected: '<span class="highlight">Праведники</span> <span class="highlight">мира</span>'
+                       },
+                       {
+                               desc: 'Test 027: ru Russian',
+                               text: 'Праведники мира',
+                               highlight: 'Праве',
+                               expected: '<span class="highlight">Праве</span>дники мира'
+                       },
+                       {
+                               desc: 'Test 028 ka Georgian',
+                               text: 'მთავარი გვერდი',
+                               highlight: 'მთავარი გვერდი',
+                               expected: '<span class="highlight">მთავარი</span> <span class="highlight">გვერდი</span>'
+                       },
+                       {
+                               desc: 'Test 029 ka Georgian',
+                               text: 'მთავარი გვერდი',
+                               highlight: 'მთა',
+                               expected: '<span class="highlight">მთა</span>ვარი გვერდი'
+                       },
+                       {
+                               desc: 'Test 030 hy Armenian',
+                               text: 'Նոնա Գափրինդաշվիլի',
+                               highlight: 'Նոնա Գափրինդաշվիլի',
+                               expected: '<span class="highlight">Նոնա</span> <span class="highlight">Գափրինդաշվիլի</span>'
+                       },
+                       {
+                               desc: 'Test 031 hy Armenian',
+                               text: 'Նոնա Գափրինդաշվիլի',
+                               highlight: 'Նոն',
+                               expected: '<span class="highlight">Նոն</span>ա Գափրինդաշվիլի'
+                       },
+                       {
+                               desc: 'Test 032: th Thai',
+                               text: 'พอล แอร์ดิช',
+                               highlight: 'พอล แอร์ดิช',
+                               expected: '<span class="highlight">พอล</span> <span class="highlight">แอร์ดิช</span>'
+                       },
+                       {
+                               desc: 'Test 033: th Thai',
+                               text: 'พอล แอร์ดิช',
+                               highlight: 'พอ',
+                               expected: '<span class="highlight">พอ</span>ล แอร์ดิช'
+                       },
+                       {
+                               desc: 'Test 034: RTL ar Arabic',
+                               text: 'بول إيردوس',
+                               highlight: 'بول إيردوس',
+                               expected: '<span class="highlight">بول</span> <span class="highlight">إيردوس</span>'
+                       },
+                       {
+                               desc: 'Test 035: RTL ar Arabic',
+                               text: 'بول إيردوس',
+                               highlight: 'بو',
+                               expected: '<span class="highlight">بو</span>ل إيردوس'
+                       }
+               ];
+               QUnit.expect( cases.length );
 
-       $.each( cases, function ( i, item ) {
-               $fixture = $( '<p>' ).text( item.text ).highlightText( item.highlight );
-               assert.equal(
-                       $fixture.html(),
-                       $( '<p>' ).html( item.expected ).html(), // re-parse to normalize!
-                       item.desc || undefined
-               );
+               $.each( cases, function ( i, item ) {
+                       $fixture = $( '<p>' ).text( item.text ).highlightText( item.highlight );
+                       assert.equal(
+                               $fixture.html(),
+                               // Re-parse to normalize
+                               $( '<p>' ).html( item.expected ).html(),
+                               item.desc || undefined
+                       );
+               } );
        } );
-} );
+}( jQuery ) );
index c8e1d9f..3810a04 100644 (file)
-QUnit.module( 'jquery.localize', QUnit.newMwEnvironment() );
+( function ( $, mw ) {
+       QUnit.module( 'jquery.localize', QUnit.newMwEnvironment() );
 
-QUnit.test( 'Handle basic replacements', 4, function ( assert ) {
-       var html, $lc;
-       mw.messages.set( 'basic', 'Basic stuff' );
+       QUnit.test( 'Handle basic replacements', 4, function ( assert ) {
+               var html, $lc;
+               mw.messages.set( 'basic', 'Basic stuff' );
 
-       // Tag: html:msg
-       html = '<div><span><html:msg key="basic" /></span></div>';
-       $lc = $( html ).localize().find( 'span' );
+               // Tag: html:msg
+               html = '<div><span><html:msg key="basic" /></span></div>';
+               $lc = $( html ).localize().find( 'span' );
 
-       assert.strictEqual( $lc.text(), 'Basic stuff', 'Tag: html:msg' );
+               assert.strictEqual( $lc.text(), 'Basic stuff', 'Tag: html:msg' );
 
-       // Attribute: title-msg
-       html = '<div><span title-msg="basic"></span></div>';
-       $lc = $( html ).localize().find( 'span' );
+               // Attribute: title-msg
+               html = '<div><span title-msg="basic"></span></div>';
+               $lc = $( html ).localize().find( 'span' );
 
-       assert.strictEqual( $lc.attr( 'title' ), 'Basic stuff', 'Attribute: title-msg' );
+               assert.strictEqual( $lc.attr( 'title' ), 'Basic stuff', 'Attribute: title-msg' );
 
-       // Attribute: alt-msg
-       html = '<div><span alt-msg="basic"></span></div>';
-       $lc = $( html ).localize().find( 'span' );
+               // Attribute: alt-msg
+               html = '<div><span alt-msg="basic"></span></div>';
+               $lc = $( html ).localize().find( 'span' );
 
-       assert.strictEqual( $lc.attr( 'alt' ), 'Basic stuff', 'Attribute: alt-msg' );
+               assert.strictEqual( $lc.attr( 'alt' ), 'Basic stuff', 'Attribute: alt-msg' );
 
-       // Attribute: placeholder-msg
-       html = '<div><input placeholder-msg="basic" /></div>';
-       $lc = $( html ).localize().find( 'input' );
+               // Attribute: placeholder-msg
+               html = '<div><input placeholder-msg="basic" /></div>';
+               $lc = $( html ).localize().find( 'input' );
 
-       assert.strictEqual( $lc.attr( 'placeholder' ), 'Basic stuff', 'Attribute: placeholder-msg' );
-} );
+               assert.strictEqual( $lc.attr( 'placeholder' ), 'Basic stuff', 'Attribute: placeholder-msg' );
+       } );
+
+       QUnit.test( 'Proper escaping', 2, function ( assert ) {
+               var html, $lc;
+               mw.messages.set( 'properfoo', '<proper esc="test">' );
+
+               // This is handled by jQuery inside $.fn.localize, just a simple sanity checked
+               // making sure it is actually using text() and attr() (or something with the same effect)
 
-QUnit.test( 'Proper escaping', 2, function ( assert ) {
-       var html, $lc;
-       mw.messages.set( 'properfoo', '<proper esc="test">' );
+               // Text escaping
+               html = '<div><span><html:msg key="properfoo"></span></div>';
+               $lc = $( html ).localize().find( 'span' );
 
-       // This is handled by jQuery inside $.fn.localize, just a simple sanity checked
-       // making sure it is actually using text() and attr() (or something with the same effect)
+               assert.strictEqual( $lc.text(), mw.msg( 'properfoo' ), 'Content is inserted as text, not as html.' );
 
-       // Text escaping
-       html = '<div><span><html:msg key="properfoo"></span></div>';
-       $lc = $( html ).localize().find( 'span' );
+               // Attribute escaping
+               html = '<div><span title-msg="properfoo"></span></div>';
+               $lc = $( html ).localize().find( 'span' );
 
-       assert.strictEqual( $lc.text(), mw.msg( 'properfoo' ), 'Content is inserted as text, not as html.' );
+               assert.strictEqual( $lc.attr( 'title' ), mw.msg( 'properfoo' ), 'Attributes are not inserted raw.' );
+       } );
 
-       // Attribute escaping
-       html = '<div><span title-msg="properfoo"></span></div>';
-       $lc = $( html ).localize().find( 'span' );
+       QUnit.test( 'Options', 7, function ( assert ) {
+               mw.messages.set( {
+                       'foo-lorem': 'Lorem',
+                       'foo-ipsum': 'Ipsum',
+                       'foo-bar-title': 'Read more about bars',
+                       'foo-bar-label': 'The Bars',
+                       'foo-bazz-title': 'Read more about bazz at $1 (last modified: $2)',
+                       'foo-bazz-label': 'The Bazz ($1)',
+                       'foo-welcome': 'Welcome to $1! (last visit: $2)'
+               } );
+               var html, $lc, x, sitename = 'Wikipedia';
+
+               // Message key prefix
+               html = '<div><span title-msg="lorem"><html:msg key="ipsum"></span></div>';
+               $lc = $( html ).localize( {
+                       prefix: 'foo-'
+               } ).find( 'span' );
+
+               assert.strictEqual( $lc.attr( 'title' ), 'Lorem', 'Message key prefix - attr' );
+               assert.strictEqual( $lc.text(), 'Ipsum', 'Message key prefix - text' );
+
+               // Variable keys mapping
+               x = 'bar';
+               html = '<div><span title-msg="title"><html:msg key="label"></span></div>';
+               $lc = $( html ).localize( {
+                       keys: {
+                               'title': 'foo-' + x + '-title',
+                               'label': 'foo-' + x + '-label'
+                       }
+               } ).find( 'span' );
+
+               assert.strictEqual( $lc.attr( 'title' ), 'Read more about bars', 'Variable keys mapping - attr' );
+               assert.strictEqual( $lc.text(), 'The Bars', 'Variable keys mapping - text' );
+
+               // Passing parameteters to mw.msg
+               html = '<div><span><html:msg key="foo-welcome"></span></div>';
+               $lc = $( html ).localize( {
+                       params: {
+                               'foo-welcome': [sitename, 'yesterday']
+                       }
+               } ).find( 'span' );
+
+               assert.strictEqual( $lc.text(), 'Welcome to Wikipedia! (last visit: yesterday)', 'Passing parameteters to mw.msg' );
+
+               // Combination of options prefix, params and keys
+               x = 'bazz';
+               html = '<div><span title-msg="title"><html:msg key="label"></span></div>';
+               $lc = $( html ).localize( {
+                       prefix: 'foo-',
+                       keys: {
+                               'title': x + '-title',
+                               'label': x + '-label'
+                       },
+                       params: {
+                               'title': [sitename, '3 minutes ago'],
+                               'label': [sitename, '3 minutes ago']
+
+                       }
+               } ).find( 'span' );
+
+               assert.strictEqual( $lc.text(), 'The Bazz (Wikipedia)', 'Combination of options prefix, params and keys - text' );
+               assert.strictEqual( $lc.attr( 'title' ), 'Read more about bazz at Wikipedia (last modified: 3 minutes ago)', 'Combination of options prefix, params and keys - attr' );
+       } );
 
-       assert.strictEqual( $lc.attr( 'title' ), mw.msg( 'properfoo' ), 'Attributes are not inserted raw.' );
-} );
+       QUnit.test( 'Handle data text', 2, function ( assert ) {
+               var html, $lc;
+               mw.messages.set( 'option-one', 'Item 1' );
+               mw.messages.set( 'option-two', 'Item 2' );
+               html = '<select><option data-msg-text="option-one"></option><option data-msg-text="option-two"></option></select>';
+               $lc = $( html ).localize().find( 'option' );
+               assert.strictEqual( $lc.eq( 0 ).text(), mw.msg( 'option-one' ), 'data-msg-text becomes text of options' );
+               assert.strictEqual( $lc.eq( 1 ).text(), mw.msg( 'option-two' ), 'data-msg-text becomes text of options' );
+       } );
 
-QUnit.test( 'Options', 7, function ( assert ) {
-       mw.messages.set( {
-               'foo-lorem': 'Lorem',
-               'foo-ipsum': 'Ipsum',
-               'foo-bar-title': 'Read more about bars',
-               'foo-bar-label': 'The Bars',
-               'foo-bazz-title': 'Read more about bazz at $1 (last modified: $2)',
-               'foo-bazz-label': 'The Bazz ($1)',
-               'foo-welcome': 'Welcome to $1! (last visit: $2)'
+       QUnit.test( 'Handle data html', 2, function ( assert ) {
+               var html, $lc;
+               mw.messages.set( 'html', 'behold... there is a <a>link</a> here!!' );
+               html = '<div><div data-msg-html="html"></div></div>';
+               $lc = $( html ).localize().find( 'a' );
+               assert.strictEqual( $lc.length, 1, 'link is created' );
+               assert.strictEqual( $lc.text(), 'link', 'the link text got added' );
        } );
-       var html, $lc, attrs, x, sitename = 'Wikipedia';
-
-       // Message key prefix
-       html = '<div><span title-msg="lorem"><html:msg key="ipsum"></span></div>';
-       $lc = $( html ).localize( {
-               prefix: 'foo-'
-       } ).find( 'span' );
-
-       assert.strictEqual( $lc.attr( 'title' ), 'Lorem', 'Message key prefix - attr' );
-       assert.strictEqual( $lc.text(), 'Ipsum', 'Message key prefix - text' );
-
-       // Variable keys mapping
-       x = 'bar';
-       html = '<div><span title-msg="title"><html:msg key="label"></span></div>';
-       $lc = $( html ).localize( {
-               keys: {
-                       'title': 'foo-' + x + '-title',
-                       'label': 'foo-' + x + '-label'
-               }
-       } ).find( 'span' );
-
-       assert.strictEqual( $lc.attr( 'title' ), 'Read more about bars', 'Variable keys mapping - attr' );
-       assert.strictEqual( $lc.text(), 'The Bars', 'Variable keys mapping - text' );
-
-       // Passing parameteters to mw.msg
-       html = '<div><span><html:msg key="foo-welcome"></span></div>';
-       $lc = $( html ).localize( {
-               params: {
-                       'foo-welcome': [sitename, 'yesterday']
-               }
-       } ).find( 'span' );
-
-       assert.strictEqual( $lc.text(), 'Welcome to Wikipedia! (last visit: yesterday)', 'Passing parameteters to mw.msg' );
-
-       // Combination of options prefix, params and keys
-       x = 'bazz';
-       html = '<div><span title-msg="title"><html:msg key="label"></span></div>';
-       $lc = $( html ).localize( {
-               prefix: 'foo-',
-               keys: {
-                       'title': x + '-title',
-                       'label': x + '-label'
-               },
-               params: {
-                       'title': [sitename, '3 minutes ago'],
-                       'label': [sitename, '3 minutes ago']
-
-               }
-       } ).find( 'span' );
-
-       assert.strictEqual( $lc.text(), 'The Bazz (Wikipedia)', 'Combination of options prefix, params and keys - text' );
-       assert.strictEqual( $lc.attr( 'title' ), 'Read more about bazz at Wikipedia (last modified: 3 minutes ago)', 'Combination of options prefix, params and keys - attr' );
-} );
-
-QUnit.test( 'Handle data text', 2, function ( assert ) {
-       var html, $lc;
-       mw.messages.set( 'option-one', 'Item 1' );
-       mw.messages.set( 'option-two', 'Item 2' );
-       html = '<select><option data-msg-text="option-one"></option><option data-msg-text="option-two"></option></select>';
-       $lc = $( html ).localize().find( 'option' );
-       assert.strictEqual( $lc.eq( 0 ).text(), mw.msg( 'option-one' ), 'data-msg-text becomes text of options' );
-       assert.strictEqual( $lc.eq( 1 ).text(), mw.msg( 'option-two' ), 'data-msg-text becomes text of options' );
-} );
-
-QUnit.test( 'Handle data html', 2, function ( assert ) {
-       var html, $lc;
-       mw.messages.set( 'html', 'behold... there is a <a>link</a> here!!' );
-       html = '<div><div data-msg-html="html"></div></div>';
-       $lc = $( html ).localize().find( 'a' );
-       assert.strictEqual( $lc.length, 1, 'link is created' );
-       assert.strictEqual( $lc.text(), 'link', 'the link text got added' );
-} );
+}( jQuery, mediaWiki ) ) ;
index 5b566ae..3ffcbf5 100644 (file)
@@ -1,58 +1,60 @@
-QUnit.module( 'jquery.mwExtension', QUnit.newMwEnvironment() );
-
-QUnit.test( 'String functions', function ( assert ) {
-
-       assert.equal( $.trimLeft( '  foo bar  ' ), 'foo bar  ', 'trimLeft' );
-       assert.equal( $.trimRight( '  foo bar  ' ), '  foo bar', 'trimRight' );
-       assert.equal( $.ucFirst( 'foo' ), 'Foo', 'ucFirst' );
-
-       assert.equal( $.escapeRE( '<!-- ([{+mW+}]) $^|?>' ),
-        '<!\\-\\- \\(\\[\\{\\+mW\\+\\}\\]\\) \\$\\^\\|\\?>', 'escapeRE - Escape specials' );
-       assert.equal( $.escapeRE( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ),
-        'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'escapeRE - Leave uppercase alone' );
-       assert.equal( $.escapeRE( 'abcdefghijklmnopqrstuvwxyz' ),
-        'abcdefghijklmnopqrstuvwxyz', 'escapeRE - Leave lowercase alone' );
-       assert.equal( $.escapeRE( '0123456789' ), '0123456789', 'escapeRE - Leave numbers alone' );
-});
-
-QUnit.test( 'Is functions', function ( assert ) {
-
-       assert.strictEqual( $.isDomElement( document.getElementById( 'qunit-header' ) ), true,
-        'isDomElement: #qunit-header Node' );
-       assert.strictEqual( $.isDomElement( document.getElementById( 'random-name' ) ), false,
-        'isDomElement: #random-name (null)' );
-       assert.strictEqual( $.isDomElement( document.getElementsByTagName( 'div' ) ), false,
-        'isDomElement: getElementsByTagName Array' );
-       assert.strictEqual( $.isDomElement( document.getElementsByTagName( 'div' )[0] ), true,
-        'isDomElement: getElementsByTagName(..)[0] Node' );
-       assert.strictEqual( $.isDomElement( $( 'div' ) ), false,
-        'isDomElement: jQuery object' );
-       assert.strictEqual( $.isDomElement( $( 'div' ).get(0) ), true,
-        'isDomElement: jQuery object > Get node' );
-       assert.strictEqual( $.isDomElement( document.createElement( 'div' ) ), true,
-        'isDomElement: createElement' );
-       assert.strictEqual( $.isDomElement( { foo: 1 } ), false,
-        'isDomElement: Object' );
-
-       assert.strictEqual( $.isEmpty( 'string' ), false, 'isEmptry: "string"' );
-       assert.strictEqual( $.isEmpty( '0' ), true, 'isEmptry: "0"' );
-       assert.strictEqual( $.isEmpty( '' ), true, 'isEmptry: ""' );
-       assert.strictEqual( $.isEmpty( 1 ), false, 'isEmptry: 1' );
-       assert.strictEqual( $.isEmpty( [] ), true, 'isEmptry: []' );
-       assert.strictEqual( $.isEmpty( {} ), true, 'isEmptry: {}' );
-
-       // Documented behaviour
-       assert.strictEqual( $.isEmpty( { length: 0 } ), true, 'isEmptry: { length: 0 }' );
-});
-
-QUnit.test( 'Comparison functions', function ( assert ) {
-
-       assert.ok( $.compareArray( [0, 'a', [], [2, 'b'] ], [0, "a", [], [2, "b"] ] ),
-        'compareArray: Two deep arrays that are excactly the same' );
-       assert.ok( !$.compareArray( [1], [2] ), 'compareArray: Two different arrays (false)' );
-
-       assert.ok( $.compareObject( {}, {} ), 'compareObject: Two empty objects' );
-       assert.ok( $.compareObject( { foo: 1 }, { foo: 1 } ), 'compareObject: Two the same objects' );
-       assert.ok( !$.compareObject( { bar: true }, { baz: false } ),
-        'compareObject: Two different objects (false)' );
-});
+( function ( $ ) {
+       QUnit.module( 'jquery.mwExtension', QUnit.newMwEnvironment() );
+
+       QUnit.test( 'String functions', function ( assert ) {
+
+               assert.equal( $.trimLeft( '  foo bar  ' ), 'foo bar  ', 'trimLeft' );
+               assert.equal( $.trimRight( '  foo bar  ' ), '  foo bar', 'trimRight' );
+               assert.equal( $.ucFirst( 'foo' ), 'Foo', 'ucFirst' );
+
+               assert.equal( $.escapeRE( '<!-- ([{+mW+}]) $^|?>' ),
+                '<!\\-\\- \\(\\[\\{\\+mW\\+\\}\\]\\) \\$\\^\\|\\?>', 'escapeRE - Escape specials' );
+               assert.equal( $.escapeRE( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ),
+                'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'escapeRE - Leave uppercase alone' );
+               assert.equal( $.escapeRE( 'abcdefghijklmnopqrstuvwxyz' ),
+                'abcdefghijklmnopqrstuvwxyz', 'escapeRE - Leave lowercase alone' );
+               assert.equal( $.escapeRE( '0123456789' ), '0123456789', 'escapeRE - Leave numbers alone' );
+       });
+
+       QUnit.test( 'Is functions', function ( assert ) {
+
+               assert.strictEqual( $.isDomElement( document.getElementById( 'qunit-header' ) ), true,
+                'isDomElement: #qunit-header Node' );
+               assert.strictEqual( $.isDomElement( document.getElementById( 'random-name' ) ), false,
+                'isDomElement: #random-name (null)' );
+               assert.strictEqual( $.isDomElement( document.getElementsByTagName( 'div' ) ), false,
+                'isDomElement: getElementsByTagName Array' );
+               assert.strictEqual( $.isDomElement( document.getElementsByTagName( 'div' )[0] ), true,
+                'isDomElement: getElementsByTagName(..)[0] Node' );
+               assert.strictEqual( $.isDomElement( $( 'div' ) ), false,
+                'isDomElement: jQuery object' );
+               assert.strictEqual( $.isDomElement( $( 'div' ).get(0) ), true,
+                'isDomElement: jQuery object > Get node' );
+               assert.strictEqual( $.isDomElement( document.createElement( 'div' ) ), true,
+                'isDomElement: createElement' );
+               assert.strictEqual( $.isDomElement( { foo: 1 } ), false,
+                'isDomElement: Object' );
+
+               assert.strictEqual( $.isEmpty( 'string' ), false, 'isEmptry: "string"' );
+               assert.strictEqual( $.isEmpty( '0' ), true, 'isEmptry: "0"' );
+               assert.strictEqual( $.isEmpty( '' ), true, 'isEmptry: ""' );
+               assert.strictEqual( $.isEmpty( 1 ), false, 'isEmptry: 1' );
+               assert.strictEqual( $.isEmpty( [] ), true, 'isEmptry: []' );
+               assert.strictEqual( $.isEmpty( {} ), true, 'isEmptry: {}' );
+
+               // Documented behaviour
+               assert.strictEqual( $.isEmpty( { length: 0 } ), true, 'isEmptry: { length: 0 }' );
+       });
+
+       QUnit.test( 'Comparison functions', function ( assert ) {
+
+               assert.ok( $.compareArray( [0, 'a', [], [2, 'b'] ], [0, 'a', [], [2, 'b'] ] ),
+                'compareArray: Two deep arrays that are excactly the same' );
+               assert.ok( !$.compareArray( [1], [2] ), 'compareArray: Two different arrays (false)' );
+
+               assert.ok( $.compareObject( {}, {} ), 'compareObject: Two empty objects' );
+               assert.ok( $.compareObject( { foo: 1 }, { foo: 1 } ), 'compareObject: Two the same objects' );
+               assert.ok( !$.compareObject( { bar: true }, { baz: false } ),
+                'compareObject: Two different objects (false)' );
+       });
+}( jQuery ) );
index 161f0cd..e31fc63 100644 (file)
@@ -1,33 +1,37 @@
-QUnit.module( 'jquery.tabIndex', QUnit.newMwEnvironment() );
+( function ( $ ) {
+       QUnit.module( 'jquery.tabIndex', QUnit.newMwEnvironment() );
 
-QUnit.test( 'firstTabIndex', 2, function ( assert ) {
-       var testEnvironment =
-'<form>' +
-       '<input tabindex="7" />' +
-       '<input tabindex="9" />' +
-       '<textarea tabindex="2">Foobar</textarea>' +
-       '<textarea tabindex="5">Foobar</textarea>' +
-'</form>';
+       QUnit.test( 'firstTabIndex', 2, function ( assert ) {
+               var html, $testA, $testB;
+               html =
+       '<form>' +
+               '<input tabindex="7" />' +
+               '<input tabindex="9" />' +
+               '<textarea tabindex="2">Foobar</textarea>' +
+               '<textarea tabindex="5">Foobar</textarea>' +
+       '</form>';
 
-       var $testA = $( '<div>' ).html( testEnvironment ).appendTo( '#qunit-fixture' );
-       assert.strictEqual( $testA.firstTabIndex(), 2, 'First tabindex should be 2 within this context.' );
+               $testA = $( '<div>' ).html( html ).appendTo( '#qunit-fixture' );
+               assert.strictEqual( $testA.firstTabIndex(), 2, 'First tabindex should be 2 within this context.' );
 
-       var $testB = $( '<div>' );
-       assert.strictEqual( $testB.firstTabIndex(), null, 'Return null if none available.' );
-});
+               $testB = $( '<div>' );
+               assert.strictEqual( $testB.firstTabIndex(), null, 'Return null if none available.' );
+       });
 
-QUnit.test( 'lastTabIndex', 2, function ( assert ) {
-       var testEnvironment =
-'<form>' +
-       '<input tabindex="7" />' +
-       '<input tabindex="9" />' +
-       '<textarea tabindex="2">Foobar</textarea>' +
-       '<textarea tabindex="5">Foobar</textarea>' +
-'</form>';
+       QUnit.test( 'lastTabIndex', 2, function ( assert ) {
+               var html, $testA, $testB;
+               html =
+       '<form>' +
+               '<input tabindex="7" />' +
+               '<input tabindex="9" />' +
+               '<textarea tabindex="2">Foobar</textarea>' +
+               '<textarea tabindex="5">Foobar</textarea>' +
+       '</form>';
 
-       var $testA = $( '<div>' ).html( testEnvironment ).appendTo( '#qunit-fixture' );
-       assert.strictEqual( $testA.lastTabIndex(), 9, 'Last tabindex should be 9 within this context.' );
+               $testA = $( '<div>' ).html( html ).appendTo( '#qunit-fixture' );
+               assert.strictEqual( $testA.lastTabIndex(), 9, 'Last tabindex should be 9 within this context.' );
 
-       var $testB = $( '<div>' );
-       assert.strictEqual( $testB.lastTabIndex(), null, 'Return null if none available.' );
-});
+               $testB = $( '<div>' );
+               assert.strictEqual( $testB.lastTabIndex(), null, 'Return null if none available.' );
+       });
+}( jQuery ) );
index 291c6b8..0000f0c 100644 (file)
 ( function ( $, mw ) {
-
-var config = {
-       wgMonthNames: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
-       wgMonthNamesShort: ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
-       wgDefaultDateFormat: 'dmy',
-       wgContentLanguage: 'en'
-};
-
-QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment({ config: config }) );
-
-/**
- * Create an HTML table from an array of row arrays containing text strings.
- * First row will be header row. No fancy rowspan/colspan stuff.
- *
- * @param {String[]} header
- * @param {String[][]} data
- * @return jQuery
- */
-function tableCreate(  header, data ) {
-       var i,
-               $table = $( '<table class="sortable"><thead></thead><tbody></tbody></table>' ),
-               $thead = $table.find( 'thead' ),
-               $tbody = $table.find( 'tbody' ),
-               $tr = $( '<tr>' );
-
-       $.each( header, function ( i, str ) {
-               var $th = $( '<th>' );
-               $th.text( str ).appendTo( $tr );
-       });
-       $tr.appendTo( $thead );
-
-       for ( i = 0; i < data.length; i++ ) {
-               $tr = $( '<tr>' );
-               $.each( data[i], function ( j, str ) {
-                       var $td = $( '<td>' );
-                       $td.text( str ).appendTo( $tr );
+       /*jshint onevar: false */
+
+       var config = {
+               wgMonthNames: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
+               wgMonthNamesShort: ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+               wgDefaultDateFormat: 'dmy',
+               wgContentLanguage: 'en'
+       };
+
+       QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment({ config: config }) );
+
+       /**
+        * Create an HTML table from an array of row arrays containing text strings.
+        * First row will be header row. No fancy rowspan/colspan stuff.
+        *
+        * @param {String[]} header
+        * @param {String[][]} data
+        * @return jQuery
+        */
+       function tableCreate(  header, data ) {
+               var i,
+                       $table = $( '<table class="sortable"><thead></thead><tbody></tbody></table>' ),
+                       $thead = $table.find( 'thead' ),
+                       $tbody = $table.find( 'tbody' ),
+                       $tr = $( '<tr>' );
+
+               $.each( header, function ( i, str ) {
+                       var $th = $( '<th>' );
+                       $th.text( str ).appendTo( $tr );
                });
-               $tr.appendTo( $tbody );
+               $tr.appendTo( $thead );
+
+               for ( i = 0; i < data.length; i++ ) {
+                       /*jshint loopfunc: true */
+                       $tr = $( '<tr>' );
+                       $.each( data[i], function ( j, str ) {
+                               var $td = $( '<td>' );
+                               $td.text( str ).appendTo( $tr );
+                       });
+                       $tr.appendTo( $tbody );
+               }
+               return $table;
        }
-       return $table;
-}
-
-/**
- * Extract text from table.
- *
- * @param {jQuery} $table
- * @return String[][]
- */
-function tableExtract( $table ) {
-       var data = [];
-
-       $table.find( 'tbody' ).find( 'tr' ).each( function( i, tr ) {
-               var row = [];
-               $( tr ).find( 'td,th' ).each( function( i, td ) {
-                       row.push( $( td ).text() );
+
+       /**
+        * Extract text from table.
+        *
+        * @param {jQuery} $table
+        * @return String[][]
+        */
+       function tableExtract( $table ) {
+               var data = [];
+
+               $table.find( 'tbody' ).find( 'tr' ).each( function( i, tr ) {
+                       var row = [];
+                       $( tr ).find( 'td,th' ).each( function( i, td ) {
+                               row.push( $( td ).text() );
+                       });
+                       data.push( row );
                });
-               data.push( row );
-       });
-       return data;
-}
-
-/**
- * Run a table test by building a table with the given data,
- * running some callback on it, then checking the results.
- *
- * @param {String} msg text to pass on to qunit for the comparison
- * @param {String[]} header cols to make the table
- * @param {String[][]} data rows/cols to make the table
- * @param {String[][]} expected rows/cols to compare against at end
- * @param {function($table)} callback something to do with the table before we compare
- */
-function tableTest( msg, header, data, expected, callback ) {
-       QUnit.test( msg, 1, function ( assert ) {
-               var $table = tableCreate( header, data );
-
-               // Give caller a chance to set up sorting and manipulate the table.
-               callback( $table );
-
-               // Table sorting is done synchronously; if it ever needs to change back
-               // to asynchronous, we'll need a timeout or a callback here.
-               var extracted = tableExtract( $table );
-               assert.deepEqual( extracted, expected, msg );
-       });
-}
-
-function reversed(arr) {
-       // Clone array
-       var arr2 = arr.slice(0);
-
-       arr2.reverse();
-
-       return arr2;
-}
-
-// Sample data set using planets named and their radius
-var header  = [ 'Planet' , 'Radius (km)'],
-       mercury = [ 'Mercury', '2439.7' ],
-       venus   = [ 'Venus'  , '6051.8' ],
-       earth   = [ 'Earth'  , '6371.0' ],
-       mars    = [ 'Mars'   , '3390.0' ],
-       jupiter = [ 'Jupiter',  '69911' ],
-       saturn  = [ 'Saturn' ,  '58232' ];
-
-// Initial data set
-var planets         = [mercury, venus, earth, mars, jupiter, saturn];
-var ascendingName   = [earth, jupiter, mars, mercury, saturn, venus];
-var ascendingRadius = [mercury, mars, venus, earth, saturn, jupiter];
-
-tableTest(
-       'Basic planet table: sorting initially - ascending by name',
-       header,
-       planets,
-       ascendingName,
-       function ( $table ) {
-               $table.tablesorter( { sortList: [ { 0: 'asc' } ] } );
-       }
-);
-tableTest(
-       'Basic planet table: sorting initially - descending by radius',
-       header,
-       planets,
-       reversed(ascendingRadius),
-       function ( $table ) {
-               $table.tablesorter( { sortList: [ { 1: 'desc' } ] } );
-       }
-);
-tableTest(
-       'Basic planet table: ascending by name',
-       header,
-       planets,
-       ascendingName,
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
+               return data;
        }
-);
-tableTest(
-       'Basic planet table: ascending by name a second time',
-       header,
-       planets,
-       ascendingName,
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-tableTest(
-       'Basic planet table: descending by name',
-       header,
-       planets,
-       reversed(ascendingName),
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click().click();
-       }
-);
-tableTest(
-       'Basic planet table: ascending radius',
-       header,
-       planets,
-       ascendingRadius,
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(1)' ).click();
+
+       /**
+        * Run a table test by building a table with the given data,
+        * running some callback on it, then checking the results.
+        *
+        * @param {String} msg text to pass on to qunit for the comparison
+        * @param {String[]} header cols to make the table
+        * @param {String[][]} data rows/cols to make the table
+        * @param {String[][]} expected rows/cols to compare against at end
+        * @param {function($table)} callback something to do with the table before we compare
+        */
+       function tableTest( msg, header, data, expected, callback ) {
+               QUnit.test( msg, 1, function ( assert ) {
+                       var $table = tableCreate( header, data );
+
+                       // Give caller a chance to set up sorting and manipulate the table.
+                       callback( $table );
+
+                       // Table sorting is done synchronously; if it ever needs to change back
+                       // to asynchronous, we'll need a timeout or a callback here.
+                       var extracted = tableExtract( $table );
+                       assert.deepEqual( extracted, expected, msg );
+               });
        }
-);
-tableTest(
-       'Basic planet table: descending radius',
-       header,
-       planets,
-       reversed(ascendingRadius),
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(1)' ).click().click();
+
+       function reversed(arr) {
+               // Clone array
+               var arr2 = arr.slice(0);
+
+               arr2.reverse();
+
+               return arr2;
        }
-);
-
-// Sample data set to test multiple column sorting
-var header  = [ 'column1' , 'column2'],
-       a1 = [ 'A', '1' ],
-       a2 = [ 'A', '2' ],
-       a3 = [ 'A', '3' ],
-       b1 = [ 'B', '1' ],
-       b2 = [ 'B', '2' ],
-       b3 = [ 'B', '3' ];
-var initial = [a2, b3, a1, a3, b2, b1];
-var asc = [a1, a2, a3, b1, b2, b3];
-var descasc = [b1, b2, b3, a1, a2, a3];
-
-tableTest(
-       'Sorting multiple columns by passing sort list',
-       header,
-       initial,
-       asc,
-       function ( $table ) {
+
+       // Sample data set using planets named and their radius
+       var header  = [ 'Planet' , 'Radius (km)'],
+               mercury = [ 'Mercury', '2439.7' ],
+               venus   = [ 'Venus'  , '6051.8' ],
+               earth   = [ 'Earth'  , '6371.0' ],
+               mars    = [ 'Mars'   , '3390.0' ],
+               jupiter = [ 'Jupiter',  '69911' ],
+               saturn  = [ 'Saturn' ,  '58232' ];
+
+       // Initial data set
+       var planets         = [mercury, venus, earth, mars, jupiter, saturn];
+       var ascendingName   = [earth, jupiter, mars, mercury, saturn, venus];
+       var ascendingRadius = [mercury, mars, venus, earth, saturn, jupiter];
+
+       tableTest(
+               'Basic planet table: sorting initially - ascending by name',
+               header,
+               planets,
+               ascendingName,
+               function ( $table ) {
+                       $table.tablesorter( { sortList: [ { 0: 'asc' } ] } );
+               }
+       );
+       tableTest(
+               'Basic planet table: sorting initially - descending by radius',
+               header,
+               planets,
+               reversed(ascendingRadius),
+               function ( $table ) {
+                       $table.tablesorter( { sortList: [ { 1: 'desc' } ] } );
+               }
+       );
+       tableTest(
+               'Basic planet table: ascending by name',
+               header,
+               planets,
+               ascendingName,
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
+       );
+       tableTest(
+               'Basic planet table: ascending by name a second time',
+               header,
+               planets,
+               ascendingName,
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
+       );
+       tableTest(
+               'Basic planet table: descending by name',
+               header,
+               planets,
+               reversed(ascendingName),
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click().click();
+               }
+       );
+       tableTest(
+               'Basic planet table: ascending radius',
+               header,
+               planets,
+               ascendingRadius,
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(1)' ).click();
+               }
+       );
+       tableTest(
+               'Basic planet table: descending radius',
+               header,
+               planets,
+               reversed(ascendingRadius),
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(1)' ).click().click();
+               }
+       );
+
+       // Sample data set to test multiple column sorting
+       header = [ 'column1' , 'column2'];
+       var
+               a1 = [ 'A', '1' ],
+               a2 = [ 'A', '2' ],
+               a3 = [ 'A', '3' ],
+               b1 = [ 'B', '1' ],
+               b2 = [ 'B', '2' ],
+               b3 = [ 'B', '3' ];
+       var initial = [a2, b3, a1, a3, b2, b1];
+       var asc = [a1, a2, a3, b1, b2, b3];
+       var descasc = [b1, b2, b3, a1, a2, a3];
+
+       tableTest(
+               'Sorting multiple columns by passing sort list',
+               header,
+               initial,
+               asc,
+               function ( $table ) {
+                       $table.tablesorter(
+                               { sortList: [ { 0: 'asc' }, { 1: 'asc' } ] }
+                       );
+               }
+       );
+       tableTest(
+               'Sorting multiple columns by programmatically triggering sort()',
+               header,
+               initial,
+               descasc,
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.data( 'tablesorter' ).sort(
+                               [ { 0: 'desc' }, { 1: 'asc' } ]
+                       );
+               }
+       );
+       tableTest(
+               'Reset to initial sorting by triggering sort() without any parameters',
+               header,
+               initial,
+               asc,
+               function ( $table ) {
+                       $table.tablesorter(
+                               { sortList: [ { 0: 'asc' }, { 1: 'asc' } ] }
+                       );
+                       $table.data( 'tablesorter' ).sort(
+                               [ { 0: 'desc' }, { 1: 'asc' } ]
+                       );
+                       $table.data( 'tablesorter' ).sort();
+               }
+       );
+       QUnit.test( 'Reset sorting making table appear unsorted', 3, function ( assert ) {
+               var $table = tableCreate( header, initial );
                $table.tablesorter(
-                       { sortList: [ { 0: 'asc' }, { 1: 'asc' } ] }
+                       { sortList: [ { 0: 'desc' }, { 1: 'asc' } ] }
                );
-       }
-);
-tableTest(
-       'Sorting multiple columns by programmatically triggering sort()',
-       header,
-       initial,
-       descasc,
-       function ( $table ) {
-               $table.tablesorter();
-               $table.data( 'tablesorter' ).sort(
-                       [ { 0: 'desc' }, { 1: 'asc' } ]
+               $table.data( 'tablesorter' ).sort( [] );
+
+               assert.equal(
+                       $table.find( 'th.headerSortUp' ).length + $table.find( 'th.headerSortDown' ).length,
+                       0,
+                       'No sort specific sort classes addign to header cells'
                );
-       }
-);
-tableTest(
-       'Reset to initial sorting by triggering sort() without any parameters',
-       header,
-       initial,
-       asc,
-       function ( $table ) {
-               $table.tablesorter(
-                       { sortList: [ { 0: 'asc' }, { 1: 'asc' } ] }
+
+               assert.equal(
+                       $table.find( 'th' ).first().attr( 'title' ),
+                       mw.msg( 'sort-ascending' ),
+                       'First header cell has default title'
                );
-               $table.data( 'tablesorter' ).sort(
-                       [ { 0: 'desc' }, { 1: 'asc' } ]
+
+               assert.equal(
+                       $table.find( 'th' ).first().attr( 'title' ),
+                       $table.find( 'th' ).last().attr( 'title' ),
+                       'Both header cells\' titles match'
                );
-               $table.data( 'tablesorter' ).sort();
-       }
-);
-QUnit.test( 'Reset sorting making table appear unsorted', 3, function ( assert ) {
-       var $table = tableCreate( header, initial );
-       $table.tablesorter(
-               { sortList: [ { 0: 'desc' }, { 1: 'asc' } ] }
+       } );
+
+       // Sorting with colspans
+       header = [ 'column1a' , 'column1b', 'column1c', 'column2' ];
+       var
+               aaa1 = [ 'A', 'A', 'A', '1' ],
+               aab5 = [ 'A', 'A', 'B', '5' ],
+               abc3 = [ 'A', 'B', 'C', '3' ],
+               bbc2 = [ 'B', 'B', 'C', '2' ],
+               caa4 = [ 'C', 'A', 'A', '4' ];
+       // initial is already declared above
+       initial = [ aab5, aaa1, abc3, bbc2, caa4 ];
+       tableTest( 'Sorting with colspanned headers: spanned column',
+               header,
+               initial,
+               [ aaa1, aab5, abc3, bbc2, caa4 ],
+               function ( $table ) {
+                       // Make colspanned header for test
+                       $table.find( 'tr:eq(0) th:eq(1), tr:eq(0) th:eq(2)' ).remove();
+                       $table.find( 'tr:eq(0) th:eq(0)' ).prop( 'colspan', '3' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
        );
-       $table.data( 'tablesorter' ).sort( [] );
-
-       assert.equal(
-               $table.find( 'th.headerSortUp' ).length + $table.find( 'th.headerSortDown' ).length,
-               0,
-               'No sort specific sort classes addign to header cells'
+       tableTest( 'Sorting with colspanned headers: subsequent column',
+               header,
+               initial,
+               [ aaa1, bbc2, abc3, caa4, aab5 ],
+               function ( $table ) {
+                       // Make colspanned header for test
+                       $table.find( 'tr:eq(0) th:eq(1), tr:eq(0) th:eq(2)' ).remove();
+                       $table.find( 'tr:eq(0) th:eq(0)' ).prop( 'colspan', '3' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(1)' ).click();
+               }
        );
 
-       assert.equal(
-               $table.find( 'th' ).first().attr( 'title' ),
-               mw.msg( 'sort-ascending' ),
-               'First header cell has default title'
+       // Regression tests!
+       tableTest(
+               'Bug 28775: German-style (dmy) short numeric dates',
+               ['Date'],
+               [ // German-style dates are day-month-year
+                       ['11.11.2011'],
+                       ['01.11.2011'],
+                       ['02.10.2011'],
+                       ['03.08.2011'],
+                       ['09.11.2011']
+               ],
+               [ // Sorted by ascending date
+                       ['03.08.2011'],
+                       ['02.10.2011'],
+                       ['01.11.2011'],
+                       ['09.11.2011'],
+                       ['11.11.2011']
+               ],
+               function ( $table ) {
+                       mw.config.set( 'wgDefaultDateFormat', 'dmy' );
+                       mw.config.set( 'wgContentLanguage', 'de' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
        );
 
-       assert.equal(
-               $table.find( 'th' ).first().attr( 'title' ),
-               $table.find( 'th' ).last().attr( 'title' ),
-               'Both header cells\' titles match'
+       tableTest(
+               'Bug 28775: American-style (mdy) short numeric dates',
+               ['Date'],
+               [ // American-style dates are month-day-year
+                       ['11.11.2011'],
+                       ['01.11.2011'],
+                       ['02.10.2011'],
+                       ['03.08.2011'],
+                       ['09.11.2011']
+               ],
+               [ // Sorted by ascending date
+                       ['01.11.2011'],
+                       ['02.10.2011'],
+                       ['03.08.2011'],
+                       ['09.11.2011'],
+                       ['11.11.2011']
+               ],
+               function ( $table ) {
+                       mw.config.set( 'wgDefaultDateFormat', 'mdy' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
        );
-} );
-
-// Regression tests!
-tableTest(
-       'Bug 28775: German-style (dmy) short numeric dates',
-       ['Date'],
-       [ // German-style dates are day-month-year
-               ['11.11.2011'],
-               ['01.11.2011'],
-               ['02.10.2011'],
-               ['03.08.2011'],
-               ['09.11.2011']
-       ],
-       [ // Sorted by ascending date
-               ['03.08.2011'],
-               ['02.10.2011'],
-               ['01.11.2011'],
-               ['09.11.2011'],
-               ['11.11.2011']
-       ],
-       function ( $table ) {
-               mw.config.set( 'wgDefaultDateFormat', 'dmy' );
-               mw.config.set( 'wgContentLanguage', 'de' );
 
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-
-tableTest(
-       'Bug 28775: American-style (mdy) short numeric dates',
-       ['Date'],
-       [ // American-style dates are month-day-year
-               ['11.11.2011'],
-               ['01.11.2011'],
-               ['02.10.2011'],
-               ['03.08.2011'],
-               ['09.11.2011']
-       ],
-       [ // Sorted by ascending date
-               ['01.11.2011'],
-               ['02.10.2011'],
-               ['03.08.2011'],
-               ['09.11.2011'],
-               ['11.11.2011']
-       ],
-       function ( $table ) {
-               mw.config.set( 'wgDefaultDateFormat', 'mdy' );
+       var ipv4 = [
+               // Some randomly generated fake IPs
+               ['45.238.27.109'],
+               ['44.172.9.22'],
+               ['247.240.82.209'],
+               ['204.204.132.158'],
+               ['170.38.91.162'],
+               ['197.219.164.9'],
+               ['45.68.154.72'],
+               ['182.195.149.80']
+       ];
+       var ipv4Sorted = [
+               // Sort order should go octet by octet
+               ['44.172.9.22'],
+               ['45.68.154.72'],
+               ['45.238.27.109'],
+               ['170.38.91.162'],
+               ['182.195.149.80'],
+               ['197.219.164.9'],
+               ['204.204.132.158'],
+               ['247.240.82.209']
+       ];
+
+       tableTest(
+               'Bug 17141: IPv4 address sorting',
+               ['IP'],
+               ipv4,
+               ipv4Sorted,
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
+       );
+       tableTest(
+               'Bug 17141: IPv4 address sorting (reverse)',
+               ['IP'],
+               ipv4,
+               reversed(ipv4Sorted),
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click().click();
+               }
+       );
 
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-
-var ipv4 = [
-       // Some randomly generated fake IPs
-       ['45.238.27.109'],
-       ['44.172.9.22'],
-       ['247.240.82.209'],
-       ['204.204.132.158'],
-       ['170.38.91.162'],
-       ['197.219.164.9'],
-       ['45.68.154.72'],
-       ['182.195.149.80']
-];
-var ipv4Sorted = [
-       // Sort order should go octet by octet
-       ['44.172.9.22'],
-       ['45.68.154.72'],
-       ['45.238.27.109'],
-       ['170.38.91.162'],
-       ['182.195.149.80'],
-       ['197.219.164.9'],
-       ['204.204.132.158'],
-       ['247.240.82.209']
-];
-
-tableTest(
-       'Bug 17141: IPv4 address sorting',
-       ['IP'],
-       ipv4,
-       ipv4Sorted,
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-tableTest(
-       'Bug 17141: IPv4 address sorting (reverse)',
-       ['IP'],
-       ipv4,
-       reversed(ipv4Sorted),
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click().click();
-       }
-);
-
-var umlautWords = [
-       // Some words with Umlauts
-       ['Günther'],
-       ['Peter'],
-       ['Björn'],
-       ['Bjorn'],
-       ['Apfel'],
-       ['Äpfel'],
-       ['Strasse'],
-       ['Sträßschen']
-];
-
-var umlautWordsSorted = [
-       // Some words with Umlauts
-       ['Äpfel'],
-       ['Apfel'],
-       ['Björn'],
-       ['Bjorn'],
-       ['Günther'],
-       ['Peter'],
-       ['Sträßschen'],
-       ['Strasse']
-];
-
-tableTest(
-       'Accented Characters with custom collation',
-       ['Name'],
-       umlautWords,
-       umlautWordsSorted,
-       function ( $table ) {
-               mw.config.set( 'tableSorterCollation', {
-                       'ä': 'ae',
-                       'ö': 'oe',
-                       'ß': 'ss',
-                       'ü':'ue'
-               } );
+       var umlautWords = [
+               // Some words with Umlauts
+               ['Günther'],
+               ['Peter'],
+               ['Björn'],
+               ['Bjorn'],
+               ['Apfel'],
+               ['Äpfel'],
+               ['Strasse'],
+               ['Sträßschen']
+       ];
+
+       var umlautWordsSorted = [
+               // Some words with Umlauts
+               ['Äpfel'],
+               ['Apfel'],
+               ['Björn'],
+               ['Bjorn'],
+               ['Günther'],
+               ['Peter'],
+               ['Sträßschen'],
+               ['Strasse']
+       ];
+
+       tableTest(
+               'Accented Characters with custom collation',
+               ['Name'],
+               umlautWords,
+               umlautWordsSorted,
+               function ( $table ) {
+                       mw.config.set( 'tableSorterCollation', {
+                               'ä': 'ae',
+                               'ö': 'oe',
+                               'ß': 'ss',
+                               'ü':'ue'
+                       } );
 
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
+       );
 
-var planetsRowspan = [["Earth","6051.8"], jupiter, ["Mars","6051.8"], mercury, saturn, venus];
-var planetsRowspanII = [jupiter, mercury, saturn, venus, ['Venus', '6371.0'], ['Venus', '3390.0']];
+       QUnit.test( 'Rowspan not exploded on init', 1, function ( assert ) {
+               var $table = tableCreate( header, planets );
 
-tableTest(
-       'Basic planet table: same value for multiple rows via rowspan',
-       header,
-       planets,
-       planetsRowspan,
-       function ( $table ) {
                // Modify the table to have a multiple-row-spanning cell:
                // - Remove 2nd cell of 4th row, and, 2nd cell or 5th row.
                $table.find( 'tr:eq(3) td:eq(1), tr:eq(4) td:eq(1)' ).remove();
@@ -407,418 +441,444 @@ tableTest(
                $table.find( 'tr:eq(2) td:eq(1)' ).prop( 'rowspan', '3' );
 
                $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-tableTest(
-       'Basic planet table: same value for multiple rows via rowspan (sorting initially)',
-       header,
-       planets,
-       planetsRowspan,
-       function ( $table ) {
-               // Modify the table to have a multiple-row-spanning cell:
-               // - Remove 2nd cell of 4th row, and, 2nd cell or 5th row.
-               $table.find( 'tr:eq(3) td:eq(1), tr:eq(4) td:eq(1)' ).remove();
-               // - Set rowspan for 2nd cell of 3rd row to 3.
-               //   This covers the removed cell in the 4th and 5th row.
-               $table.find( 'tr:eq(2) td:eq(1)' ).prop( 'rowspan', '3' );
 
-               $table.tablesorter( { sortList: [ { 0: 'asc' } ] } );
-       }
-);
-tableTest(
-       'Basic planet table: Same value for multiple rows via rowspan II',
-       header,
-       planets,
-       planetsRowspanII,
-       function ( $table ) {
-               // Modify the table to have a multiple-row-spanning cell:
-               // - Remove 1st cell of 4th row, and, 1st cell or 5th row.
-               $table.find( 'tr:eq(3) td:eq(0), tr:eq(4) td:eq(0)' ).remove();
-               // - Set rowspan for 1st cell of 3rd row to 3.
-               //   This covers the removed cell in the 4th and 5th row.
-               $table.find( 'tr:eq(2) td:eq(0)' ).prop( 'rowspan', '3' );
-
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-
-var complexMDYDates = [
-       // Some words with Umlauts
-       ['January, 19 2010'],
-       ['April 21 1991'],
-       ['04 22 1991'],
-       ['5.12.1990'],
-       ['December 12 \'10']
-];
-
-var complexMDYSorted = [
-       ['5.12.1990'],
-       ['April 21 1991'],
-       ['04 22 1991'],
-       ['January, 19 2010'],
-       ['December 12 \'10']
-];
-
-tableTest(
-       'Complex date parsing I',
-       ['date'],
-       complexMDYDates,
-       complexMDYSorted,
-       function ( $table ) {
-               mw.config.set( 'wgDefaultDateFormat', 'mdy' );
-
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-
-var currencyUnsorted = [
-       ['1.02 $'],
-       ['$ 3.00'],
-       ['€ 2,99'],
-       ['$ 1.00'],
-       ['$3.50'],
-       ['$ 1.50'],
-       ['€ 0.99']
-];
-
-var currencySorted = [
-       ['€ 0.99'],
-       ['$ 1.00'],
-       ['1.02 $'],
-       ['$ 1.50'],
-       ['$ 3.00'],
-       ['$3.50'],
-       // Comma's sort after dots
-       // Not intentional but test to detect changes
-       ['€ 2,99']
-];
-
-tableTest(
-       'Currency parsing I',
-       ['currency'],
-       currencyUnsorted,
-       currencySorted,
-       function ( $table ) {
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-
-var ascendingNameLegacy = ascendingName.slice(0);
-ascendingNameLegacy[4] = ascendingNameLegacy[5];
-ascendingNameLegacy.pop();
-
-tableTest(
-       'Legacy compat with .sortbottom',
-       header,
-       planets,
-       ascendingNameLegacy,
-       function( $table ) {
-               $table.find( 'tr:last' ).addClass( 'sortbottom' );
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-
-QUnit.test( 'Test detection routine', function ( assert ) {
-       var $table;
-       $table = $(
-               '<table class="sortable">' +
-               '<caption>CAPTION</caption>' +
-               '<tr><th>THEAD</th></tr>' +
-               '<tr><td>1</td></tr>' +
-               '<tr class="sortbottom"><td>text</td></tr>' +
-               '</table>'
-       );
-       $table.tablesorter();
-
-       assert.equal(
-               $table.data( 'tablesorter' ).config.parsers[0].id,
-               'number',
-               'Correctly detected column content skipping sortbottom'
-       );
-} );
-
-/** FIXME: the diff output is not very readeable. */
-QUnit.test( 'bug 32047 - caption must be before thead', function ( assert ) {
-       var $table;
-       $table = $(
-               '<table class="sortable">' +
-               '<caption>CAPTION</caption>' +
-               '<tr><th>THEAD</th></tr>' +
-               '<tr><td>A</td></tr>' +
-               '<tr><td>B</td></tr>' +
-               '<tr class="sortbottom"><td>TFOOT</td></tr>' +
-               '</table>'
+               assert.equal(
+                       $table.find( 'tr:eq(2) td:eq(1)' ).prop( 'rowspan' ),
+                       3,
+                       'Rowspan not exploded'
                );
-       $table.tablesorter();
+       });
 
-       assert.equal(
-               $table.children( ).get( 0 ).nodeName,
-               'CAPTION',
-               'First element after <thead> must be <caption> (bug 32047)'
+       var planetsRowspan = [ [ 'Earth', '6051.8' ], jupiter, [ 'Mars', '6051.8' ], mercury, saturn, venus ];
+       var planetsRowspanII = [ jupiter, mercury, saturn, venus, [ 'Venus', '6371.0' ], [ 'Venus', '3390.0' ] ];
+
+       tableTest(
+               'Basic planet table: same value for multiple rows via rowspan',
+               header,
+               planets,
+               planetsRowspan,
+               function ( $table ) {
+                       // Modify the table to have a multiple-row-spanning cell:
+                       // - Remove 2nd cell of 4th row, and, 2nd cell or 5th row.
+                       $table.find( 'tr:eq(3) td:eq(1), tr:eq(4) td:eq(1)' ).remove();
+                       // - Set rowspan for 2nd cell of 3rd row to 3.
+                       //   This covers the removed cell in the 4th and 5th row.
+                       $table.find( 'tr:eq(2) td:eq(1)' ).prop( 'rowspan', '3' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
        );
-});
-
-QUnit.test( 'data-sort-value attribute, when available, should override sorting position', function ( assert ) {
-       var $table, data;
-
-       // Example 1: All cells except one cell without data-sort-value,
-       // which should be sorted at it's text content value.
-       $table = $(
-               '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
-                       '<tbody>' +
-                       '<tr><td>Cheetah</td></tr>' +
-                       '<tr><td data-sort-value="Apple">Bird</td></tr>' +
-                       '<tr><td data-sort-value="Bananna">Ferret</td></tr>' +
-                       '<tr><td data-sort-value="Drupe">Elephant</td></tr>' +
-                       '<tr><td data-sort-value="Cherry">Dolphin</td></tr>' +
-               '</tbody></table>'
+       tableTest(
+               'Basic planet table: same value for multiple rows via rowspan (sorting initially)',
+               header,
+               planets,
+               planetsRowspan,
+               function ( $table ) {
+                       // Modify the table to have a multiple-row-spanning cell:
+                       // - Remove 2nd cell of 4th row, and, 2nd cell or 5th row.
+                       $table.find( 'tr:eq(3) td:eq(1), tr:eq(4) td:eq(1)' ).remove();
+                       // - Set rowspan for 2nd cell of 3rd row to 3.
+                       //   This covers the removed cell in the 4th and 5th row.
+                       $table.find( 'tr:eq(2) td:eq(1)' ).prop( 'rowspan', '3' );
+
+                       $table.tablesorter( { sortList: [ { 0: 'asc' } ] } );
+               }
+       );
+       tableTest(
+               'Basic planet table: Same value for multiple rows via rowspan II',
+               header,
+               planets,
+               planetsRowspanII,
+               function ( $table ) {
+                       // Modify the table to have a multiple-row-spanning cell:
+                       // - Remove 1st cell of 4th row, and, 1st cell or 5th row.
+                       $table.find( 'tr:eq(3) td:eq(0), tr:eq(4) td:eq(0)' ).remove();
+                       // - Set rowspan for 1st cell of 3rd row to 3.
+                       //   This covers the removed cell in the 4th and 5th row.
+                       $table.find( 'tr:eq(2) td:eq(0)' ).prop( 'rowspan', '3' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
        );
-       $table.tablesorter().find( '.headerSort:eq(0)' ).click();
-
-       data = [];
-       $table.find( 'tbody > tr' ).each( function( i, tr ) {
-               $( tr ).find( 'td' ).each( function( i, td ) {
-                       data.push( {
-                               data: $( td ).data( 'sortValue' ),
-                               text: $( td ).text()
-                       } );
-               });
-       });
 
-       assert.deepEqual( data, [
-               {
-                       data: 'Apple',
-                       text: 'Bird'
-               }, {
-                       data: 'Bananna',
-                       text: 'Ferret'
-               }, {
-                       data: undefined,
-                       text: 'Cheetah'
-               }, {
-                       data: 'Cherry',
-                       text: 'Dolphin'
-               }, {
-                       data: 'Drupe',
-                       text: 'Elephant'
+       var complexMDYDates = [
+               // Some words with Umlauts
+               ['January, 19 2010'],
+               ['April 21 1991'],
+               ['04 22 1991'],
+               ['5.12.1990'],
+               ['December 12 \'10']
+       ];
+
+       var complexMDYSorted = [
+               ['5.12.1990'],
+               ['April 21 1991'],
+               ['04 22 1991'],
+               ['January, 19 2010'],
+               ['December 12 \'10']
+       ];
+
+       tableTest(
+               'Complex date parsing I',
+               ['date'],
+               complexMDYDates,
+               complexMDYSorted,
+               function ( $table ) {
+                       mw.config.set( 'wgDefaultDateFormat', 'mdy' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
                }
-       ], 'Order matches expected order (based on data-sort-value attribute values)' );
-
-       // Example 2
-       $table = $(
-               '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
-                       '<tbody>' +
-                       '<tr><td>D</td></tr>' +
-                       '<tr><td data-sort-value="E">A</td></tr>' +
-                       '<tr><td>B</td></tr>' +
-                       '<tr><td>G</td></tr>' +
-                       '<tr><td data-sort-value="F">C</td></tr>' +
-               '</tbody></table>'
        );
-       $table.tablesorter().find( '.headerSort:eq(0)' ).click();
-
-       data = [];
-       $table.find( 'tbody > tr' ).each( function ( i, tr ) {
-               $( tr ).find( 'td' ).each( function ( i, td ) {
-                       data.push( {
-                               data: $( td ).data( 'sortValue' ),
-                               text: $( td ).text()
-                       } );
-               });
-       });
 
-       assert.deepEqual( data, [
-               {
-                       data: undefined,
-                       text: 'B'
-               }, {
-                       data: undefined,
-                       text: 'D'
-               }, {
-                       data: 'E',
-                       text: 'A'
-               }, {
-                       data: 'F',
-                       text: 'C'
-               }, {
-                       data: undefined,
-                       text: 'G'
+       var currencyUnsorted = [
+               ['1.02 $'],
+               ['$ 3.00'],
+               ['€ 2,99'],
+               ['$ 1.00'],
+               ['$3.50'],
+               ['$ 1.50'],
+               ['€ 0.99']
+       ];
+
+       var currencySorted = [
+               ['€ 0.99'],
+               ['$ 1.00'],
+               ['1.02 $'],
+               ['$ 1.50'],
+               ['$ 3.00'],
+               ['$3.50'],
+               // Comma's sort after dots
+               // Not intentional but test to detect changes
+               ['€ 2,99']
+       ];
+
+       tableTest(
+               'Currency parsing I',
+               ['currency'],
+               currencyUnsorted,
+               currencySorted,
+               function ( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
                }
-       ], 'Order matches expected order (based on data-sort-value attribute values)' );
-
-       // Example 3: Test that live changes are used from data-sort-value,
-       // even if they change after the tablesorter is constructed (bug 38152).
-       $table = $(
-               '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
-                       '<tbody>' +
-                       '<tr><td>D</td></tr>' +
-                       '<tr><td data-sort-value="1">A</td></tr>' +
-                       '<tr><td>B</td></tr>' +
-                       '<tr><td data-sort-value="2">G</td></tr>' +
-                       '<tr><td>C</td></tr>' +
-               '</tbody></table>'
        );
-       // initialize table sorter and sort once
-       $table
-               .tablesorter()
-               .find( '.headerSort:eq(0)' ).click();
-
-       // Change the sortValue data properties (bug 38152)
-       // - change data
-       $table.find( 'td:contains(A)' ).data( 'sortValue', 3 );
-       // - add data
-       $table.find( 'td:contains(B)' ).data( 'sortValue', 1 );
-       // - remove data, bring back attribute: 2
-       $table.find( 'td:contains(G)' ).removeData( 'sortValue' );
-
-       // Now sort again (twice, so it is back at Ascending)
-       $table.find( '.headerSort:eq(0)' ).click();
-       $table.find( '.headerSort:eq(0)' ).click();
-
-       data = [];
-       $table.find( 'tbody > tr' ).each( function( i, tr ) {
-               $( tr ).find( 'td' ).each( function( i, td ) {
-                       data.push( {
-                               data: $( td ).data( 'sortValue' ),
-                               text: $( td ).text()
-                       } );
-               });
-       });
 
-       assert.deepEqual( data, [
-               {
-                       data: 1,
-                       text: "B"
-               }, {
-                       data: 2,
-                       text: "G"
-               }, {
-                       data: 3,
-                       text: "A"
-               }, {
-                       data: undefined,
-                       text: "C"
-               }, {
-                       data: undefined,
-                       text: "D"
+       var ascendingNameLegacy = ascendingName.slice(0);
+       ascendingNameLegacy[4] = ascendingNameLegacy[5];
+       ascendingNameLegacy.pop();
+
+       tableTest(
+               'Legacy compat with .sortbottom',
+               header,
+               planets,
+               ascendingNameLegacy,
+               function( $table ) {
+                       $table.find( 'tr:last' ).addClass( 'sortbottom' );
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
                }
-       ], 'Order matches expected order, using the current sortValue in $.data()' );
-
-});
-
-var numbers = [
-       [ '12'    ],
-       [  '7'    ],
-       [ '13,000'],
-       [  '9'    ],
-       [ '14'    ],
-       [  '8.0'  ]
-];
-var numbersAsc = [
-       [  '7'    ],
-       [  '8.0'  ],
-       [  '9'    ],
-       [ '12'    ],
-       [ '14'    ],
-       [ '13,000']
-];
-
-tableTest( 'bug 8115: sort numbers with commas (ascending)',
-       ['Numbers'], numbers, numbersAsc,
-       function( $table ) {
+       );
+
+       QUnit.test( 'Test detection routine', function ( assert ) {
+               var $table;
+               $table = $(
+                       '<table class="sortable">' +
+                       '<caption>CAPTION</caption>' +
+                       '<tr><th>THEAD</th></tr>' +
+                       '<tr><td>1</td></tr>' +
+                       '<tr class="sortbottom"><td>text</td></tr>' +
+                       '</table>'
+               );
                $table.tablesorter();
                $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
 
-tableTest( 'bug 8115: sort numbers with commas (descending)',
-       ['Numbers'], numbers, reversed(numbersAsc),
-       function( $table ) {
+               assert.equal(
+                       $table.data( 'tablesorter' ).config.parsers[0].id,
+                       'number',
+                       'Correctly detected column content skipping sortbottom'
+               );
+       } );
+
+       /** FIXME: the diff output is not very readeable. */
+       QUnit.test( 'bug 32047 - caption must be before thead', function ( assert ) {
+               var $table;
+               $table = $(
+                       '<table class="sortable">' +
+                       '<caption>CAPTION</caption>' +
+                       '<tr><th>THEAD</th></tr>' +
+                       '<tr><td>A</td></tr>' +
+                       '<tr><td>B</td></tr>' +
+                       '<tr class="sortbottom"><td>TFOOT</td></tr>' +
+                       '</table>'
+                       );
                $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click().click();
-       }
-);
-// TODO add numbers sorting tests for bug 8115 with a different language
-
-QUnit.test( 'bug 32888 - Tables inside a tableheader cell', 2, function ( assert ) {
-       var $table;
-       $table = $(
-               '<table class="sortable" id="mw-bug-32888">' +
-               '<tr><th>header<table id="mw-bug-32888-2">'+
-                       '<tr><th>1</th><th>2</th></tr>' +
-               '</table></th></tr>' +
-               '<tr><td>A</td></tr>' +
-               '<tr><td>B</td></tr>' +
-               '</table>'
+
+               assert.equal(
+                       $table.children( ).get( 0 ).nodeName,
+                       'CAPTION',
+                       'First element after <thead> must be <caption> (bug 32047)'
                );
-       $table.tablesorter();
+       });
 
-       assert.equal(
-               $table.find('> thead:eq(0) > tr > th.headerSort').length,
-               1,
-               'Child tables inside a headercell should not interfere with sortable headers (bug 32888)'
-       );
-       assert.equal(
-               $( '#mw-bug-32888-2' ).find('th.headerSort').length,
-               0,
-               'The headers of child tables inside a headercell should not be sortable themselves (bug 32888)'
-       );
-});
+       QUnit.test( 'data-sort-value attribute, when available, should override sorting position', function ( assert ) {
+               var $table, data;
+
+               // Example 1: All cells except one cell without data-sort-value,
+               // which should be sorted at it's text content value.
+               $table = $(
+                       '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
+                               '<tbody>' +
+                               '<tr><td>Cheetah</td></tr>' +
+                               '<tr><td data-sort-value="Apple">Bird</td></tr>' +
+                               '<tr><td data-sort-value="Bananna">Ferret</td></tr>' +
+                               '<tr><td data-sort-value="Drupe">Elephant</td></tr>' +
+                               '<tr><td data-sort-value="Cherry">Dolphin</td></tr>' +
+                       '</tbody></table>'
+               );
+               $table.tablesorter().find( '.headerSort:eq(0)' ).click();
+
+               data = [];
+               $table.find( 'tbody > tr' ).each( function( i, tr ) {
+                       $( tr ).find( 'td' ).each( function( i, td ) {
+                               data.push( {
+                                       data: $( td ).data( 'sortValue' ),
+                                       text: $( td ).text()
+                               } );
+                       });
+               });
 
+               assert.deepEqual( data, [
+                       {
+                               data: 'Apple',
+                               text: 'Bird'
+                       }, {
+                               data: 'Bananna',
+                               text: 'Ferret'
+                       }, {
+                               data: undefined,
+                               text: 'Cheetah'
+                       }, {
+                               data: 'Cherry',
+                               text: 'Dolphin'
+                       }, {
+                               data: 'Drupe',
+                               text: 'Elephant'
+                       }
+               ], 'Order matches expected order (based on data-sort-value attribute values)' );
+
+               // Example 2
+               $table = $(
+                       '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
+                               '<tbody>' +
+                               '<tr><td>D</td></tr>' +
+                               '<tr><td data-sort-value="E">A</td></tr>' +
+                               '<tr><td>B</td></tr>' +
+                               '<tr><td>G</td></tr>' +
+                               '<tr><td data-sort-value="F">C</td></tr>' +
+                       '</tbody></table>'
+               );
+               $table.tablesorter().find( '.headerSort:eq(0)' ).click();
+
+               data = [];
+               $table.find( 'tbody > tr' ).each( function ( i, tr ) {
+                       $( tr ).find( 'td' ).each( function ( i, td ) {
+                               data.push( {
+                                       data: $( td ).data( 'sortValue' ),
+                                       text: $( td ).text()
+                               } );
+                       });
+               });
 
-var correctDateSorting1 = [
-       ['01 January 2010'],
-       ['05 February 2010'],
-       ['16 January 2010']
-];
+               assert.deepEqual( data, [
+                       {
+                               data: undefined,
+                               text: 'B'
+                       }, {
+                               data: undefined,
+                               text: 'D'
+                       }, {
+                               data: 'E',
+                               text: 'A'
+                       }, {
+                               data: 'F',
+                               text: 'C'
+                       }, {
+                               data: undefined,
+                               text: 'G'
+                       }
+               ], 'Order matches expected order (based on data-sort-value attribute values)' );
+
+               // Example 3: Test that live changes are used from data-sort-value,
+               // even if they change after the tablesorter is constructed (bug 38152).
+               $table = $(
+                       '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
+                               '<tbody>' +
+                               '<tr><td>D</td></tr>' +
+                               '<tr><td data-sort-value="1">A</td></tr>' +
+                               '<tr><td>B</td></tr>' +
+                               '<tr><td data-sort-value="2">G</td></tr>' +
+                               '<tr><td>C</td></tr>' +
+                       '</tbody></table>'
+               );
+               // initialize table sorter and sort once
+               $table
+                       .tablesorter()
+                       .find( '.headerSort:eq(0)' ).click();
+
+               // Change the sortValue data properties (bug 38152)
+               // - change data
+               $table.find( 'td:contains(A)' ).data( 'sortValue', 3 );
+               // - add data
+               $table.find( 'td:contains(B)' ).data( 'sortValue', 1 );
+               // - remove data, bring back attribute: 2
+               $table.find( 'td:contains(G)' ).removeData( 'sortValue' );
+
+               // Now sort again (twice, so it is back at Ascending)
+               $table.find( '.headerSort:eq(0)' ).click();
+               $table.find( '.headerSort:eq(0)' ).click();
 
-var correctDateSortingSorted1 = [
-       ['01 January 2010'],
-       ['16 January 2010'],
-       ['05 February 2010']
-];
+               data = [];
+               $table.find( 'tbody > tr' ).each( function( i, tr ) {
+                       $( tr ).find( 'td' ).each( function( i, td ) {
+                               data.push( {
+                                       data: $( td ).data( 'sortValue' ),
+                                       text: $( td ).text()
+                               } );
+                       });
+               });
 
-tableTest(
-       'Correct date sorting I',
-       ['date'],
-       correctDateSorting1,
-       correctDateSortingSorted1,
-       function ( $table ) {
-               mw.config.set( 'wgDefaultDateFormat', 'mdy' );
+               assert.deepEqual( data, [
+                       {
+                               data: 1,
+                               text: 'B'
+                       }, {
+                               data: 2,
+                               text: 'G'
+                       }, {
+                               data: 3,
+                               text: 'A'
+                       }, {
+                               data: undefined,
+                               text: 'C'
+                       }, {
+                               data: undefined,
+                               text: 'D'
+                       }
+               ], 'Order matches expected order, using the current sortValue in $.data()' );
 
-               $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
-
-var correctDateSorting2 = [
-       ['January 01 2010'],
-       ['February 05 2010'],
-       ['January 16 2010']
-];
-
-var correctDateSortingSorted2 = [
-       ['January 01 2010'],
-       ['January 16 2010'],
-       ['February 05 2010']
-];
-
-tableTest(
-       'Correct date sorting II',
-       ['date'],
-       correctDateSorting2,
-       correctDateSortingSorted2,
-       function ( $table ) {
-               mw.config.set( 'wgDefaultDateFormat', 'dmy' );
+       });
 
+       var numbers = [
+               [ '12'    ],
+               [  '7'    ],
+               [ '13,000'],
+               [  '9'    ],
+               [ '14'    ],
+               [  '8.0'  ]
+       ];
+       var numbersAsc = [
+               [  '7'    ],
+               [  '8.0'  ],
+               [  '9'    ],
+               [ '12'    ],
+               [ '14'    ],
+               [ '13,000']
+       ];
+
+       tableTest( 'bug 8115: sort numbers with commas (ascending)',
+               ['Numbers'], numbers, numbersAsc,
+               function( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
+       );
+
+       tableTest( 'bug 8115: sort numbers with commas (descending)',
+               ['Numbers'], numbers, reversed(numbersAsc),
+               function( $table ) {
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click().click();
+               }
+       );
+       // TODO add numbers sorting tests for bug 8115 with a different language
+
+       QUnit.test( 'bug 32888 - Tables inside a tableheader cell', 2, function ( assert ) {
+               var $table;
+               $table = $(
+                       '<table class="sortable" id="mw-bug-32888">' +
+                       '<tr><th>header<table id="mw-bug-32888-2">'+
+                               '<tr><th>1</th><th>2</th></tr>' +
+                       '</table></th></tr>' +
+                       '<tr><td>A</td></tr>' +
+                       '<tr><td>B</td></tr>' +
+                       '</table>'
+                       );
                $table.tablesorter();
-               $table.find( '.headerSort:eq(0)' ).click();
-       }
-);
+
+               assert.equal(
+                       $table.find('> thead:eq(0) > tr > th.headerSort').length,
+                       1,
+                       'Child tables inside a headercell should not interfere with sortable headers (bug 32888)'
+               );
+               assert.equal(
+                       $( '#mw-bug-32888-2' ).find('th.headerSort').length,
+                       0,
+                       'The headers of child tables inside a headercell should not be sortable themselves (bug 32888)'
+               );
+       });
+
+
+       var correctDateSorting1 = [
+               ['01 January 2010'],
+               ['05 February 2010'],
+               ['16 January 2010']
+       ];
+
+       var correctDateSortingSorted1 = [
+               ['01 January 2010'],
+               ['16 January 2010'],
+               ['05 February 2010']
+       ];
+
+       tableTest(
+               'Correct date sorting I',
+               ['date'],
+               correctDateSorting1,
+               correctDateSortingSorted1,
+               function ( $table ) {
+                       mw.config.set( 'wgDefaultDateFormat', 'mdy' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
+       );
+
+       var correctDateSorting2 = [
+               ['January 01 2010'],
+               ['February 05 2010'],
+               ['January 16 2010']
+       ];
+
+       var correctDateSortingSorted2 = [
+               ['January 01 2010'],
+               ['January 16 2010'],
+               ['February 05 2010']
+       ];
+
+       tableTest(
+               'Correct date sorting II',
+               ['date'],
+               correctDateSorting2,
+               correctDateSortingSorted2,
+               function ( $table ) {
+                       mw.config.set( 'wgDefaultDateFormat', 'dmy' );
+
+                       $table.tablesorter();
+                       $table.find( '.headerSort:eq(0)' ).click();
+               }
+       );
 
 }( jQuery, mediaWiki ) );
index f0a210f..1795b95 100644 (file)
-QUnit.module( 'jquery.textSelection', QUnit.newMwEnvironment() );
-
-/**
- * Test factory for $.fn.textSelection( 'encapsulateText' )
- *
- * @param options {object} associative array containing:
- *   description {string}
- *   input {string}
- *   output {string}
- *   start {int} starting char for selection
- *   end {int} ending char for selection
- *   params {object} add'l parameters for $().textSelection( 'encapsulateText' )
- */
-function encapsulateTest( options ) {
-       var opt = $.extend({
-               description: '',
-               before: {},
-               after: {},
-               replace: {}
-       }, options);
-
-       opt.before = $.extend({
-               text: '',
-               start: 0,
-               end: 0
-       }, opt.before);
-       opt.after = $.extend({
-               text: '',
-               selected: null
-       }, opt.after);
-
-       QUnit.test( opt.description, function ( assert ) {
-               var tests = 1;
-               if ( opt.after.selected !== null ) {
-                       tests++;
-               }
-               QUnit.expect( tests );
-
-               var $textarea = $( '<textarea>' );
-
-               $( '#qunit-fixture' ).append( $textarea );
-
-               //$textarea.textSelection( 'setContents', opt.before.text); // this method is actually missing atm...
-               $textarea.val( opt.before.text ); // won't work with the WikiEditor iframe?
-
-               var     start = opt.before.start,
-                       end = opt.before.end;
-               if ( window.opera ) {
-                       // Compensate for Opera's craziness converting "\n" to "\r\n" and counting that as two chars
-                       var     newLinesBefore = opt.before.text.substring( 0, start ).split( "\n" ).length - 1,
-                               newLinesInside = opt.before.text.substring( start, end ).split( "\n" ).length - 1;
-                       start += newLinesBefore;
-                       end += newLinesBefore + newLinesInside;
-               }
-
-               var options = $.extend( {}, opt.replace ); // Clone opt.replace
-               options.selectionStart = start;
-               options.selectionEnd = end;
-               $textarea.textSelection( 'encapsulateSelection', options );
-
-               var text = $textarea.textSelection( 'getContents' ).replace( /\r\n/g, "\n" );
-
-               assert.equal( text, opt.after.text, 'Checking full text after encapsulation' );
-
-               if (opt.after.selected !== null) {
-                       var selected = $textarea.textSelection( 'getSelection' );
-                       assert.equal( selected, opt.after.selected, 'Checking selected text after encapsulation.' );
-               }
-
-       } );
-}
-
-var sig = {
-       'pre': "--~~~~"
-}, bold = {
-       pre: "'''",
-       peri: 'Bold text',
-       post: "'''"
-}, h2 = {
-       'pre': '== ',
-       'peri': 'Heading 2',
-       'post': ' ==',
-       'regex': /^(\s*)(={1,6})(.*?)\2(\s*)$/,
-       'regexReplace': "$1==$3==$4",
-       'ownline': true
-}, ulist = {
-       'pre': "* ",
-       'peri': 'Bulleted list item',
-       'post': "",
-       'ownline': true,
-       'splitlines': true
-};
-
-encapsulateTest({
-       description: "Adding sig to end of text",
-       before: {
-               text: "Wikilove dude! ",
-               start: 15,
-               end: 15
-       },
-       after: {
-               text: "Wikilove dude! --~~~~",
-               selected: ""
-       },
-       replace: sig
-});
-
-encapsulateTest({
-       description: "Adding bold to empty",
-       before: {
-               text: "",
-               start: 0,
-               end: 0
-       },
-       after: {
-               text: "'''Bold text'''",
-               selected: "Bold text" // selected because it's the default
-       },
-       replace: bold
-});
-
-encapsulateTest({
-       description: "Adding bold to existing text",
-       before: {
-               text: "Now is the time for all good men to come to the aid of their country",
-               start: 20,
-               end: 32
-       },
-       after: {
-               text: "Now is the time for '''all good men''' to come to the aid of their country",
-               selected: "" // empty because it's not the default'
-       },
-       replace: bold
-});
-
-encapsulateTest({
-       description: "ownline option: adding new h2",
-       before: {
-               text:"Before\nAfter",
-               start: 7,
-               end: 7
-       },
-       after: {
-               text: "Before\n== Heading 2 ==\nAfter",
-               selected: "Heading 2"
-       },
-       replace: h2
-});
-
-encapsulateTest({
-       description: "ownline option: turn a whole line into new h2",
-       before: {
-               text:"Before\nMy heading\nAfter",
-               start: 7,
-               end: 17
-       },
-       after: {
-               text: "Before\n== My heading ==\nAfter",
-               selected: ""
-       },
-       replace: h2
-});
-
-
-encapsulateTest({
-       description: "ownline option: turn a partial line into new h2",
-       before: {
-               text:"BeforeMy headingAfter",
-               start: 6,
-               end: 16
-       },
-       after: {
-               text: "Before\n== My heading ==\nAfter",
-               selected: ""
-       },
-       replace: h2
-});
-
-
-encapsulateTest({
-       description: "splitlines option: no selection, insert new list item",
-       before: {
-               text: "Before\nAfter",
-               start: 7,
-               end: 7
-       },
-       after: {
-               text: "Before\n* Bulleted list item\nAfter"
-       },
-       replace: ulist
-});
-
-encapsulateTest({
-       description: "splitlines option: single partial line selection, insert new list item",
-       before: {
-               text: "BeforeMy List ItemAfter",
-               start: 6,
-               end: 18
-       },
-       after: {
-               text: "Before\n* My List Item\nAfter"
-       },
-       replace: ulist
-});
-
-encapsulateTest({
-       description: "splitlines option: multiple lines",
-       before: {
-               text: "Before\nFirst\nSecond\nThird\nAfter",
-               start: 7,
-               end: 25
-       },
-       after: {
-               text: "Before\n* First\n* Second\n* Third\nAfter"
-       },
-       replace: ulist
-});
-
-
-function caretTest( options ) {
-       QUnit.test( options.description, 2, function ( assert ) {
-               var $textarea = $( '<textarea>' ).text( options.text );
-
-               $( '#qunit-fixture' ).append( $textarea );
-
-               if ( options.mode === 'set' ) {
-                       $textarea.textSelection('setSelection', {
-                               start: options.start,
-                               end: options.end
-                       });
-               }
-
-               function among( actual, expected, message ) {
-                       if ( $.isArray( expected ) ) {
-                               assert.ok( $.inArray( actual, expected ) !== -1 , message + ' (got ' + actual + '; expected one of ' + expected.join(', ') + ')' );
-                       } else {
-                               assert.equal( actual, expected, message );
+( function ( $ ) {
+
+       QUnit.module( 'jquery.textSelection', QUnit.newMwEnvironment() );
+
+       /**
+        * Test factory for $.fn.textSelection( 'encapsulateText' )
+        *
+        * @param options {object} associative array containing:
+        *   description {string}
+        *   input {string}
+        *   output {string}
+        *   start {int} starting char for selection
+        *   end {int} ending char for selection
+        *   params {object} add'l parameters for $().textSelection( 'encapsulateText' )
+        */
+       function encapsulateTest( options ) {
+               var opt = $.extend({
+                       description: '',
+                       before: {},
+                       after: {},
+                       replace: {}
+               }, options);
+
+               opt.before = $.extend({
+                       text: '',
+                       start: 0,
+                       end: 0
+               }, opt.before);
+               opt.after = $.extend({
+                       text: '',
+                       selected: null
+               }, opt.after);
+
+               QUnit.test( opt.description, function ( assert ) {
+                       /*jshint onevar: false */
+                       var tests = 1;
+                       if ( opt.after.selected !== null ) {
+                               tests++;
+                       }
+                       QUnit.expect( tests );
+
+                       var $textarea = $( '<textarea>' );
+
+                       $( '#qunit-fixture' ).append( $textarea );
+
+                       //$textarea.textSelection( 'setContents', opt.before.text); // this method is actually missing atm...
+                       $textarea.val( opt.before.text ); // won't work with the WikiEditor iframe?
+
+                       var     start = opt.before.start,
+                               end = opt.before.end;
+                       if ( window.opera ) {
+                               // Compensate for Opera's craziness converting \n to \r\n and counting that as two chars
+                               var     newLinesBefore = opt.before.text.substring( 0, start ).split( '\n' ).length - 1,
+                                       newLinesInside = opt.before.text.substring( start, end ).split( '\n' ).length - 1;
+                               start += newLinesBefore;
+                               end += newLinesBefore + newLinesInside;
+                       }
+
+                       var options = $.extend( {}, opt.replace ); // Clone opt.replace
+                       options.selectionStart = start;
+                       options.selectionEnd = end;
+                       $textarea.textSelection( 'encapsulateSelection', options );
+
+                       var text = $textarea.textSelection( 'getContents' ).replace( /\r\n/g, '\n' );
+
+                       assert.equal( text, opt.after.text, 'Checking full text after encapsulation' );
+
+                       if ( opt.after.selected !== null ) {
+                               var selected = $textarea.textSelection( 'getSelection' );
+                               assert.equal( selected, opt.after.selected, 'Checking selected text after encapsulation.' );
+                       }
+
+               } );
+       }
+
+       var caretSample,
+               sig = {
+                       pre: '--~~~~'
+               },
+               bold = {
+                       pre: '\'\'\'',
+                       peri: 'Bold text',
+                       post: '\'\'\''
+               },
+               h2 = {
+                       pre: '== ',
+                       peri: 'Heading 2',
+                       post: ' ==',
+                       regex: /^(\s*)(={1,6})(.*?)\2(\s*)$/,
+                       regexReplace: '$1==$3==$4',
+                       ownline: true
+               },
+               ulist = {
+                       pre: '* ',
+                       peri: 'Bulleted list item',
+                       post: '',
+                       ownline: true,
+                       splitlines: true
+               };
+
+       encapsulateTest({
+               description: 'Adding sig to end of text',
+               before: {
+                       text: 'Wikilove dude! ',
+                       start: 15,
+                       end: 15
+               },
+               after: {
+                       text: 'Wikilove dude! --~~~~',
+                       selected: ''
+               },
+               replace: sig
+       });
+
+       encapsulateTest({
+               description: 'Adding bold to empty',
+               before: {
+                       text: '',
+                       start: 0,
+                       end: 0
+               },
+               after: {
+                       text: '\'\'\'Bold text\'\'\'',
+                       selected: 'Bold text' // selected because it's the default
+               },
+               replace: bold
+       });
+
+       encapsulateTest({
+               description: 'Adding bold to existing text',
+               before: {
+                       text: 'Now is the time for all good men to come to the aid of their country',
+                       start: 20,
+                       end: 32
+               },
+               after: {
+                       text: 'Now is the time for \'\'\'all good men\'\'\' to come to the aid of their country',
+                       selected: '' // empty because it's not the default'
+               },
+               replace: bold
+       });
+
+       encapsulateTest({
+               description: 'ownline option: adding new h2',
+               before: {
+                       text:'Before\nAfter',
+                       start: 7,
+                       end: 7
+               },
+               after: {
+                       text: 'Before\n== Heading 2 ==\nAfter',
+                       selected: 'Heading 2'
+               },
+               replace: h2
+       });
+
+       encapsulateTest({
+               description: 'ownline option: turn a whole line into new h2',
+               before: {
+                       text:'Before\nMy heading\nAfter',
+                       start: 7,
+                       end: 17
+               },
+               after: {
+                       text: 'Before\n== My heading ==\nAfter',
+                       selected: ''
+               },
+               replace: h2
+       });
+
+
+       encapsulateTest({
+               description: 'ownline option: turn a partial line into new h2',
+               before: {
+                       text:'BeforeMy headingAfter',
+                       start: 6,
+                       end: 16
+               },
+               after: {
+                       text: 'Before\n== My heading ==\nAfter',
+                       selected: ''
+               },
+               replace: h2
+       });
+
+
+       encapsulateTest({
+               description: 'splitlines option: no selection, insert new list item',
+               before: {
+                       text: 'Before\nAfter',
+                       start: 7,
+                       end: 7
+               },
+               after: {
+                       text: 'Before\n* Bulleted list item\nAfter'
+               },
+               replace: ulist
+       });
+
+       encapsulateTest({
+               description: 'splitlines option: single partial line selection, insert new list item',
+               before: {
+                       text: 'BeforeMy List ItemAfter',
+                       start: 6,
+                       end: 18
+               },
+               after: {
+                       text: 'Before\n* My List Item\nAfter'
+               },
+               replace: ulist
+       });
+
+       encapsulateTest({
+               description: 'splitlines option: multiple lines',
+               before: {
+                       text: 'Before\nFirst\nSecond\nThird\nAfter',
+                       start: 7,
+                       end: 25
+               },
+               after: {
+                       text: 'Before\n* First\n* Second\n* Third\nAfter'
+               },
+               replace: ulist
+       });
+
+
+       function caretTest( options ) {
+               QUnit.test( options.description, 2, function ( assert ) {
+                       var pos, $textarea = $( '<textarea>' ).text( options.text );
+
+                       $( '#qunit-fixture' ).append( $textarea );
+
+                       if ( options.mode === 'set' ) {
+                               $textarea.textSelection('setSelection', {
+                                       start: options.start,
+                                       end: options.end
+                               });
+                       }
+
+                       function among( actual, expected, message ) {
+                               if ( $.isArray( expected ) ) {
+                                       assert.ok( $.inArray( actual, expected ) !== -1 , message + ' (got ' + actual + '; expected one of ' + expected.join(', ') + ')' );
+                               } else {
+                                       assert.equal( actual, expected, message );
+                               }
                        }
-               }
 
-               var pos = $textarea.textSelection('getCaretPosition', {startAndEnd: true});
-               among(pos[0], options.start, 'Caret start should be where we set it.');
-               among(pos[1], options.end, 'Caret end should be where we set it.');
+                       pos = $textarea.textSelection( 'getCaretPosition', { startAndEnd: true });
+                       among(pos[0], options.start, 'Caret start should be where we set it.');
+                       among(pos[1], options.end, 'Caret end should be where we set it.');
+               });
+       }
+
+       caretSample = 'Some big text that we like to work with. Nothing fancy... you know what I mean?';
+
+       /*
+       // @broken: Disabled per bug 34820
+       caretTest({
+               description: 'getCaretPosition with original/empty selection - bug 31847 with IE 6/7/8',
+               text: caretSample,
+               start: [0, caretSample.length], // Opera and Firefox (prior to FF 6.0) default caret to the end of the box (caretSample.length)
+               end: [0, caretSample.length], // Other browsers default it to the beginning (0), so check both.
+               mode: 'get'
+       });
+       */
+
+       caretTest({
+               description: 'set/getCaretPosition with forced empty selection',
+               text: caretSample,
+               start: 7,
+               end: 7,
+               mode: 'set'
        });
-}
-
-var caretSample = "Some big text that we like to work with. Nothing fancy... you know what I mean?";
-
-/*
- // @broken: Disabled per bug 34820
-caretTest({
-       description: 'getCaretPosition with original/empty selection - bug 31847 with IE 6/7/8',
-       text: caretSample,
-       start: [0, caretSample.length], // Opera and Firefox (prior to FF 6.0) default caret to the end of the box (caretSample.length)
-       end: [0, caretSample.length], // Other browsers default it to the beginning (0), so check both.
-       mode: 'get'
-});
-*/
-
-caretTest({
-       description: 'set/getCaretPosition with forced empty selection',
-       text: caretSample,
-       start: 7,
-       end: 7,
-       mode: 'set'
-});
-
-caretTest({
-       description: 'set/getCaretPosition with small selection',
-       text: caretSample,
-       start: 6,
-       end: 11,
-       mode: 'set'
-});
 
+       caretTest({
+               description: 'set/getCaretPosition with small selection',
+               text: caretSample,
+               start: 6,
+               end: 11,
+               mode: 'set'
+       });
+}( jQuery ) );
index 3d3f630..ec7179e 100644 (file)
@@ -1,26 +1,28 @@
-QUnit.module( 'mediawiki.api.parse', QUnit.newMwEnvironment() );
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.api.parse', QUnit.newMwEnvironment() );
 
-QUnit.asyncTest( 'Hello world', function ( assert ) {
-       var api;
-       QUnit.expect( 6 );
+       QUnit.asyncTest( 'Hello world', function ( assert ) {
+               var api;
+               QUnit.expect( 6 );
 
-       api = new mw.Api();
+               api = new mw.Api();
 
-       api.parse( "'''Hello world'''" )
-               .done( function ( html ) {
-                       // Parse into a document fragment instead of comparing HTML, due to
-                       // presence of Tidy influencing whitespace.
-                       // Html also contains "NewPP report" comment.
-                       var $res = $( '<div>' ).html( html ).children(),
-                               res = $res.get( 0 );
-                       assert.equal( $res.length, 1, 'Response contains 1 element' );
-                       assert.equal( res.nodeName.toLowerCase(), 'p', 'Response is a paragraph' );
-                       assert.equal( $res.children().length, 1, 'Response has 1 child element' );
-                       assert.equal( $res.children().get( 0 ).nodeName.toLowerCase(), 'b', 'Child element is a bold tag' );
-                       // Trim since Tidy may or may not mess with the spacing here
-                       assert.equal( $.trim( $res.text() ), 'Hello world', 'Response contains given text' );
-                       assert.equal( $res.find( 'b' ).text(), 'Hello world', 'Bold tag wraps the entire, same, text' );
+               api.parse( '\'\'\'Hello world\'\'\'' )
+                       .done( function ( html ) {
+                               // Parse into a document fragment instead of comparing HTML, due to
+                               // presence of Tidy influencing whitespace.
+                               // Html also contains "NewPP report" comment.
+                               var $res = $( '<div>' ).html( html ).children(),
+                                       res = $res.get( 0 );
+                               assert.equal( $res.length, 1, 'Response contains 1 element' );
+                               assert.equal( res.nodeName.toLowerCase(), 'p', 'Response is a paragraph' );
+                               assert.equal( $res.children().length, 1, 'Response has 1 child element' );
+                               assert.equal( $res.children().get( 0 ).nodeName.toLowerCase(), 'b', 'Child element is a bold tag' );
+                               // Trim since Tidy may or may not mess with the spacing here
+                               assert.equal( $.trim( $res.text() ), 'Hello world', 'Response contains given text' );
+                               assert.equal( $res.find( 'b' ).text(), 'Hello world', 'Bold tag wraps the entire, same, text' );
 
-                       QUnit.start();
-               });
-});
+                               QUnit.start();
+                       });
+       });
+}( mediaWiki, jQuery ) );
index 79bd730..50bbfd7 100644 (file)
@@ -1,59 +1,61 @@
-QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment() );
+( function ( mw ) {
+       QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment() );
+
+       QUnit.asyncTest( 'Basic functionality', function ( assert ) {
+               var api, d1, d2, d3;
+               QUnit.expect( 3 );
+
+               api = new mw.Api();
+
+               d1 = api.get( {} )
+                       .done( function ( data ) {
+                               assert.deepEqual( data, [], 'If request succeeds without errors, resolve deferred' );
+                       });
+
+               d2 = api.get({
+                               action: 'doesntexist'
+                       })
+                       .fail( function ( errorCode ) {
+                               assert.equal( errorCode, 'unknown_action', 'API error (e.g. "unknown_action") should reject the deferred' );
+                       });
+
+               d3 = api.post( {} )
+                       .done( function ( data ) {
+                               assert.deepEqual( data, [], 'Simple POST request' );
+                       });
+
+               // After all are completed, continue the test suite.
+               QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
+                       QUnit.start();
+               });
+       });
 
-QUnit.asyncTest( 'Basic functionality', function ( assert ) {
-       var api, d1, d2, d3;
-       QUnit.expect( 3 );
+       QUnit.asyncTest( 'Deprecated callback methods', function ( assert ) {
+               var api, d1, d2, d3;
+               QUnit.expect( 3 );
 
-       api = new mw.Api();
+               api = new mw.Api();
 
-       d1 = api.get( {} )
-               .done( function ( data ) {
-                       assert.deepEqual( data, [], 'If request succeeds without errors, resolve deferred' );
+               d1 = api.get( {}, function () {
+                       assert.ok( true, 'Function argument treated as success callback.' );
                });
 
-       d2 = api.get({
-                       action: 'doesntexist'
-               })
-               .fail( function ( errorCode, details ) {
-                       assert.equal( errorCode, 'unknown_action', 'API error (e.g. "unknown_action") should reject the deferred' );
+               d2 = api.get( {}, {
+                       ok: function () {
+                               assert.ok( true, '"ok" property treated as success callback.' );
+                       }
                });
 
-       d3 = api.post( {} )
-               .done( function ( data ) {
-                       assert.deepEqual( data, [], 'Simple POST request' );
+               d3 = api.get({
+                               action: 'doesntexist'
+                       }, {
+                       err: function () {
+                               assert.ok( true, '"err" property treated as error callback.' );
+                       }
                });
 
-       // After all are completed, continue the test suite.
-       QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
-               QUnit.start();
-       });
-});
-
-QUnit.asyncTest( 'Deprecated callback methods', function ( assert ) {
-       var api, d1, d2, d3;
-       QUnit.expect( 3 );
-
-       api = new mw.Api();
-
-       d1 = api.get( {}, function () {
-               assert.ok( true, 'Function argument treated as success callback.' );
-       });
-
-       d2 = api.get( {}, {
-               ok: function ( data ) {
-                       assert.ok( true, '"ok" property treated as success callback.' );
-               }
-       });
-
-       d3 = api.get({
-                       action: 'doesntexist'
-               }, {
-               err: function ( data ) {
-                       assert.ok( true, '"err" property treated as error callback.' );
-               }
-       });
-
-       QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
-               QUnit.start();
+               QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
+                       QUnit.start();
+               });
        });
-});
+}( mediaWiki ) );
index 7fe7baf..d7b0cb7 100644 (file)
@@ -1,62 +1,65 @@
-QUnit.module( 'mediawiki.special.recentchanges', QUnit.newMwEnvironment() );
-
-// TODO: verify checkboxes == [ 'nsassociated', 'nsinvert' ]
-
-QUnit.test( '"all" namespace disable checkboxes', function ( assert ) {
-
-       // from Special:Recentchanges
-       var select =
-       '<select id="namespace" name="namespace" class="namespaceselector">'
-       + '<option value="" selected="selected">all</option>'
-       + '<option value="0">(Main)</option>'
-       + '<option value="1">Talk</option>'
-       + '<option value="2">User</option>'
-       + '<option value="3">User talk</option>'
-       + '<option value="4">ProjectName</option>'
-       + '<option value="5">ProjectName talk</option>'
-       + '</select>'
-       + '<input name="invert" type="checkbox" value="1" id="nsinvert" title="no title" />'
-       + '<label for="nsinvert" title="no title">Invert selection</label>'
-       + '<input name="associated" type="checkbox" value="1" id="nsassociated" title="no title" />'
-       + '<label for="nsassociated" title="no title">Associated namespace</label>'
-       + '<input type="submit" value="Go" />'
-       + '<input type="hidden" value="Special:RecentChanges" name="title" />'
-       ;
-
-       var $env = $( '<div>' ).html( select ).appendTo( 'body' );
-
-       // TODO abstract the double strictEquals
-
-       // At first checkboxes are enabled
-       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
-       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
-
-       // Initiate the recentchanges module
-       mw.special.recentchanges.init();
-
-       // By default
-       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
-       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
-
-       // select second option...
-       var $options = $( '#namespace' ).find( 'option' );
-       $options.eq(0).removeProp( 'selected' );
-       $options.eq(1).prop( 'selected', true );
-       $( '#namespace' ).change();
-
-       // ... and checkboxes should be enabled again
-       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
-       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
-
-       // select first option ( 'all' namespace)...
-       $options.eq(1).removeProp( 'selected' );
-       $options.eq(0).prop( 'selected', true );
-       $( '#namespace' ).change();
-
-       // ... and checkboxes should now be disabled
-       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
-       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
-
-       // DOM cleanup
-       $env.remove();
-});
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.special.recentchanges', QUnit.newMwEnvironment() );
+
+       // TODO: verify checkboxes == [ 'nsassociated', 'nsinvert' ]
+
+       QUnit.test( '"all" namespace disable checkboxes', function ( assert ) {
+               var selectHtml, $env, $options;
+
+               // from Special:Recentchanges
+               selectHtml =
+               '<select id="namespace" name="namespace" class="namespaceselector">'
+               + '<option value="" selected="selected">all</option>'
+               + '<option value="0">(Main)</option>'
+               + '<option value="1">Talk</option>'
+               + '<option value="2">User</option>'
+               + '<option value="3">User talk</option>'
+               + '<option value="4">ProjectName</option>'
+               + '<option value="5">ProjectName talk</option>'
+               + '</select>'
+               + '<input name="invert" type="checkbox" value="1" id="nsinvert" title="no title" />'
+               + '<label for="nsinvert" title="no title">Invert selection</label>'
+               + '<input name="associated" type="checkbox" value="1" id="nsassociated" title="no title" />'
+               + '<label for="nsassociated" title="no title">Associated namespace</label>'
+               + '<input type="submit" value="Go" />'
+               + '<input type="hidden" value="Special:RecentChanges" name="title" />'
+               ;
+
+               $env = $( '<div>' ).html( selectHtml ).appendTo( 'body' );
+
+               // TODO abstract the double strictEquals
+
+               // At first checkboxes are enabled
+               assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
+               assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
+
+               // Initiate the recentchanges module
+               mw.special.recentchanges.init();
+
+               // By default
+               assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
+               assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
+
+               // select second option...
+               $options = $( '#namespace' ).find( 'option' );
+               $options.eq(0).removeProp( 'selected' );
+               $options.eq(1).prop( 'selected', true );
+               $( '#namespace' ).change();
+
+               // ... and checkboxes should be enabled again
+               assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
+               assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
+
+               // select first option ( 'all' namespace)...
+               $options.eq(1).removeProp( 'selected' );
+               $options.eq(0).prop( 'selected', true );
+               $( '#namespace' ).change();
+
+               // ... and checkboxes should now be disabled
+               assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
+               assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
+
+               // DOM cleanup
+               $env.remove();
+       });
+}( mediaWiki, jQuery ) );
index a736e12..52f0538 100644 (file)
@@ -1,58 +1,59 @@
-( function () {
+( function ( mw ) {
 
 // mw.Title relies on these three config vars
 // Restore them after each test run
 var config = {
-       "wgFormattedNamespaces": {
-               "-2": "Media",
-               "-1": "Special",
-               "0": "",
-               "1": "Talk",
-               "2": "User",
-               "3": "User talk",
-               "4": "Wikipedia",
-               "5": "Wikipedia talk",
-               "6": "File",
-               "7": "File talk",
-               "8": "MediaWiki",
-               "9": "MediaWiki talk",
-               "10": "Template",
-               "11": "Template talk",
-               "12": "Help",
-               "13": "Help talk",
-               "14": "Category",
-               "15": "Category talk",
+       wgFormattedNamespaces: {
+               '-2': 'Media',
+               '-1': 'Special',
+               0: '',
+               1: 'Talk',
+               2: 'User',
+               3: 'User talk',
+               4: 'Wikipedia',
+               5: 'Wikipedia talk',
+               6: 'File',
+               7: 'File talk',
+               8: 'MediaWiki',
+               9: 'MediaWiki talk',
+               10: 'Template',
+               11: 'Template talk',
+               12: 'Help',
+               13: 'Help talk',
+               14: 'Category',
+               15: 'Category talk',
                // testing custom / localized namespace
-               "100": "Penguins"
+               100: 'Penguins'
        },
-       "wgNamespaceIds": {
-               "media": -2,
-               "special": -1,
-               "": 0,
-               "talk": 1,
-               "user": 2,
-               "user_talk": 3,
-               "wikipedia": 4,
-               "wikipedia_talk": 5,
-               "file": 6,
-               "file_talk": 7,
-               "mediawiki": 8,
-               "mediawiki_talk": 9,
-               "template": 10,
-               "template_talk": 11,
-               "help": 12,
-               "help_talk": 13,
-               "category": 14,
-               "category_talk": 15,
-               "image": 6,
-               "image_talk": 7,
-               "project": 4,
-               "project_talk": 5,
+       wgNamespaceIds: {
+               /*jshint camelcase: false */
+               media: -2,
+               special: -1,
+               '': 0,
+               talk: 1,
+               user: 2,
+               user_talk: 3,
+               wikipedia: 4,
+               wikipedia_talk: 5,
+               file: 6,
+               file_talk: 7,
+               mediawiki: 8,
+               mediawiki_talk: 9,
+               template: 10,
+               template_talk: 11,
+               help: 12,
+               help_talk: 13,
+               category: 14,
+               category_talk: 15,
+               image: 6,
+               image_talk: 7,
+               project: 4,
+               project_talk: 5,
                /* testing custom / alias */
-               "penguins": 100,
-               "antarctic_waterfowl": 100
+               penguins: 100,
+               antarctic_waterfowl: 100
        },
-       "wgCaseSensitiveNamespaces": []
+       wgCaseSensitiveNamespaces: []
 };
 
 QUnit.module( 'mediawiki.Title', QUnit.newMwEnvironment({ config: config }) );
@@ -78,7 +79,7 @@ QUnit.test( 'Transformation', 8, function ( assert ) {
 
        title = new mw.Title( '   MediaWiki:  Foo   bar   .js   ' );
        // Don't ask why, it's the way the backend works. One space is kept of each set
-       assert.equal( title.getName(), 'Foo_bar_.js', "Merge multiple spaces to a single space." );
+       assert.equal( title.getName(), 'Foo_bar_.js', 'Merge multiple spaces to a single space.' );
 });
 
 QUnit.test( 'Main text for filename', 8, function ( assert ) {
@@ -116,7 +117,7 @@ QUnit.test( 'Namespace detection and conversion', 6, function ( assert ) {
 
 QUnit.test( 'Throw error on invalid title', 1, function ( assert ) {
        assert.throws(function () {
-               var title = new mw.Title( '' );
+               return new mw.Title( '' );
        }, 'Throw error on empty string' );
 });
 
@@ -197,4 +198,4 @@ QUnit.test( 'getUrl', 2, function ( assert ) {
        assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
 });
 
-}() );
\ No newline at end of file
+}( mediaWiki ) );
\ No newline at end of file
index b2026c1..9eb2efc 100644 (file)
-QUnit.module( 'mediawiki.Uri', QUnit.newMwEnvironment({
-       setup: function () {
-               this.mwUriOrg = mw.Uri;
-               mw.Uri = mw.UriRelative( 'http://example.org/w/index.php' );
-       },
-       teardown: function () {
-               mw.Uri = this.mwUriOrg;
-               delete this.mwUriOrg;
-       }
-}) );
-
-$.each( [true, false], function ( i, strictMode ) {
-       QUnit.test( 'Basic mw.Uri object test in ' + ( strictMode ? '' : 'non-' ) + 'strict mode for a simple HTTP URI', 2, function ( assert ) {
-               var uriString, uri;
-               uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
-               uri = new mw.Uri( uriString, {
-                       strictMode: strictMode
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.Uri', QUnit.newMwEnvironment({
+               setup: function () {
+                       this.mwUriOrg = mw.Uri;
+                       mw.Uri = mw.UriRelative( 'http://example.org/w/index.php' );
+               },
+               teardown: function () {
+                       mw.Uri = this.mwUriOrg;
+                       delete this.mwUriOrg;
+               }
+       }) );
+
+       $.each( [true, false], function ( i, strictMode ) {
+               QUnit.test( 'Basic construction and properties (' + ( strictMode ? '' : 'non-' ) + 'strict mode)', 2, function ( assert ) {
+                       var uriString, uri;
+                       uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
+                       uri = new mw.Uri( uriString, {
+                               strictMode: strictMode
+                       });
+
+                       assert.deepEqual(
+                               {
+                                       protocol: uri.protocol,
+                                       host: uri.host,
+                                       port: uri.port,
+                                       path: uri.path,
+                                       query: uri.query,
+                                       fragment: uri.fragment
+                               }, {
+                                       protocol: 'http',
+                                       host: 'www.ietf.org',
+                                       port: undefined,
+                                       path: '/rfc/rfc2396.txt',
+                                       query: {},
+                                       fragment: undefined
+                               },
+                               'basic object properties'
+                       );
+
+                       assert.deepEqual(
+                               {
+                                       userInfo: uri.getUserInfo(),
+                                       authority: uri.getAuthority(),
+                                       hostPort: uri.getHostPort(),
+                                       queryString: uri.getQueryString(),
+                                       relativePath: uri.getRelativePath(),
+                                       toString: uri.toString()
+                               },
+                               {
+                                       userInfo: '',
+                                       authority: 'www.ietf.org',
+                                       hostPort: 'www.ietf.org',
+                                       queryString: '',
+                                       relativePath: '/rfc/rfc2396.txt',
+                                       toString: uriString
+                               },
+                               'construct composite components of URI on request'
+                       );
+
+               });
+       });
+
+       QUnit.test( 'Constructor( String[, Object ] )', 10, function ( assert ) {
+               var uri;
+
+               uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+                       overrideKeys: true
+               });
+
+               // Strict comparison to assert that numerical values stay strings
+               assert.strictEqual( uri.query.n, '1', 'Simple parameter with overrideKeys:true' );
+               assert.strictEqual( uri.query.m, 'bar', 'Last key overrides earlier keys with overrideKeys:true' );
+
+               uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+                       overrideKeys: false
                });
 
+               assert.strictEqual( uri.query.n, '1', 'Simple parameter with overrideKeys:false' );
+               assert.strictEqual( uri.query.m[0], 'foo', 'Order of multi-value parameters with overrideKeys:true' );
+               assert.strictEqual( uri.query.m[1], 'bar', 'Order of multi-value parameters with overrideKeys:true' );
+               assert.strictEqual( uri.query.m.length, 2, 'Number of mult-value field is correct' );
+
+               uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
+
                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
-                       }, {
-                               protocol: 'http',
-                               host: 'www.ietf.org',
+                       },
+                       {
+                               protocol: 'ftp',
+                               user: 'usr',
+                               password: 'pwd',
+                               host: '192.0.2.16',
                                port: undefined,
-                               path: '/rfc/rfc2396.txt',
+                               path: '/',
                                query: {},
                                fragment: undefined
                        },
-                       'basic object properties'
+                       'Parse an ftp URI correctly with user and password'
                );
 
-               assert.deepEqual(
-                       {
-                               userInfo: uri.getUserInfo(),
-                               authority: uri.getAuthority(),
-                               hostPort: uri.getHostPort(),
-                               queryString: uri.getQueryString(),
-                               relativePath: uri.getRelativePath(),
-                               toString: uri.toString()
+               assert.throws(
+                       function () {
+                               return new mw.Uri( 'glaswegian penguins' );
                        },
-                       {
-                               userInfo: '',
-                               authority: 'www.ietf.org',
-                               hostPort: 'www.ietf.org',
-                               queryString: '',
-                               relativePath: '/rfc/rfc2396.txt',
-                               toString: uriString
+                       function ( e ) {
+                               return e.message === 'Bad constructor arguments';
+                       },
+                       'throw error on non-URI as argument to constructor'
+               );
+
+               assert.throws(
+                       function () {
+                               return new mw.Uri( 'foo.com/bar/baz', {
+                                       strictMode: true
+                               });
                        },
-                       'construct composite components of URI on request'
+                       function ( e ) {
+                               return e.message === 'Bad constructor arguments';
+                       },
+                       'throw error on URI without protocol or // or leading / in strict mode'
                );
 
+               uri = new mw.Uri( 'foo.com/bar/baz', {
+                       strictMode: false
+               });
+               assert.equal( uri.toString(), 'http://foo.com/bar/baz', 'normalize URI without protocol or // in loose mode' );
        });
-});
-
-QUnit.test( 'Parse an ftp URI correctly with user and password', 1, function ( assert ) {
-       var uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
-
-       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
-               },
-               {
-                       protocol: 'ftp',
-                       user: 'usr',
-                       password: 'pwd',
-                       host: '192.0.2.16',
-                       port: undefined,
-                       path: '/',
-                       query: {},
-                       fragment: undefined
-               },
-               'basic object properties'
-       );
-} );
-
-QUnit.test( 'Parse a uri with simple querystring', 1, function ( assert ) {
-       var uri = new mw.Uri( 'http://www.google.com/?q=uri' );
-
-       assert.deepEqual(
-               {
-                       protocol: uri.protocol,
-                       host: uri.host,
-                       port: uri.port,
-                       path: uri.path,
-                       query: uri.query,
-                       fragment: uri.fragment,
-                       queryString: uri.getQueryString()
-               },
-               {
+
+       QUnit.test( 'Constructor( Object )', 3, function ( assert ) {
+               var uri = new mw.Uri({
                        protocol: 'http',
-                       host: 'www.google.com',
-                       port: undefined,
-                       path: '/',
-                       query: { q: 'uri' },
-                       fragment: undefined,
-                       queryString: 'q=uri'
-               },
-               'basic object properties'
-       );
-} );
+                       host: 'www.foo.local',
+                       path: '/this'
+               });
+               assert.equal( uri.toString(), 'http://www.foo.local/this', 'Basic properties' );
 
-QUnit.test( 'Handle multiple query parameter (overrideKeys on)', 5, function ( assert ) {
-       var uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
-               overrideKeys: true
-       });
+               uri = new mw.Uri({
+                       protocol: 'http',
+                       host: 'www.foo.local',
+                       path: '/this',
+                       query: { hi: 'there' },
+                       fragment: 'blah'
+               });
+               assert.equal( uri.toString(), 'http://www.foo.local/this?hi=there#blah', 'More complex properties' );
+
+               assert.throws(
+                       function () {
+                               return new mw.Uri({
+                                       protocol: 'http',
+                                       host: 'www.foo.local'
+                               });
+                       },
+                       function ( e ) {
+                               return e.message === 'Bad constructor arguments';
+                       },
+                       'Construction failed when missing required properties'
+               );
+       } );
 
-       assert.equal( uri.query.n, '1', 'multiple parameters are parsed' );
-       assert.equal( uri.query.m, 'bar', 'last key overrides earlier keys' );
+       QUnit.test( 'Constructor( empty )', 4, function ( assert ) {
+               var testuri, MyUri, uri;
 
-       uri.query.n = [ 'x', 'y', 'z' ];
+               testuri = 'http://example.org/w/index.php';
+               MyUri = mw.UriRelative( testuri );
 
-       // Verify parts and total length instead of entire string because order
-       // of iteration can vary.
-       assert.ok( uri.toString().indexOf( 'm=bar' ), 'toString preserves other values' );
-       assert.ok( uri.toString().indexOf( 'n=x&n=y&n=z' ), 'toString parameter includes all values of an array query parameter' );
-       assert.equal( uri.toString().length, 'http://www.example.com/dir/?m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
-} );
+               uri = new MyUri();
+               assert.equal( uri.toString(), testuri, 'no arguments' );
 
-QUnit.test( 'Handle multiple query parameter (overrideKeys off)', 9, function ( assert ) {
-       var uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
-               overrideKeys: false
-       });
+               uri = new MyUri( undefined );
+               assert.equal( uri.toString(), testuri, 'undefined' );
 
-       // Strict comparison so that types are also verified (n should be string '1')
-       assert.strictEqual( uri.query.m.length, 2, 'multi-value query should be an array with 2 items' );
-       assert.strictEqual( uri.query.m[0], 'foo', 'order and value is correct' );
-       assert.strictEqual( uri.query.m[1], 'bar', 'order and value is correct' );
-       assert.strictEqual( uri.query.n, '1', 'n=1 is parsed with the correct value of the expected type' );
-
-       // Change query values
-       uri.query.n = [ 'x', 'y', 'z' ];
-
-       // Verify parts and total length instead of entire string because order
-       // of iteration can vary.
-       assert.ok( uri.toString().indexOf( 'm=foo&m=bar' ) >= 0, 'toString preserves other values' );
-       assert.ok( uri.toString().indexOf( 'n=x&n=y&n=z' ) >= 0, 'toString parameter includes all values of an array query parameter' );
-       assert.equal( uri.toString().length, 'http://www.example.com/dir/?m=foo&m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
-
-       // Remove query values
-       uri.query.m.splice( 0, 1 );
-       delete uri.query.n;
-
-       assert.equal( uri.toString(), 'http://www.example.com/dir/?m=bar', 'deletion properties' );
-
-       // Remove more query values, leaving an empty array
-       uri.query.m.splice( 0, 1 );
-       assert.equal( uri.toString(), 'http://www.example.com/dir/', 'empty array value is ommitted' );
-} );
-
-QUnit.test( 'All-dressed URI with everything', 11, function ( assert ) {
-       var uri, queryString, relativePath;
-
-       uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top' );
-
-       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
-               },
-               {
-                       protocol: 'http',
-                       user: 'auth',
-                       password: undefined,
-                       host: 'www.example.com',
-                       port: '81',
-                       path: '/dir/dir.2/index.htm',
-                       query: { q1: '0', test1: null, test2: 'value (escaped)' },
-                       fragment: 'top'
-               },
-               'basic object properties'
-       );
+               uri = new MyUri( null );
+               assert.equal( uri.toString(), testuri, 'null' );
+
+               uri = new MyUri( '' );
+               assert.equal( uri.toString(), testuri, 'empty string' );
+       } );
 
-       assert.equal( uri.getUserInfo(), 'auth', 'user info' );
+       QUnit.test( 'Properties', 8, function ( assert ) {
+               var uriBase, uri;
 
-       assert.equal( uri.getAuthority(), 'auth@www.example.com:81', 'authority equal to auth@hostport' );
+               uriBase = new mw.Uri( 'http://en.wiki.local/w/api.php' );
+
+               uri = uriBase.clone();
+               uri.fragment = 'frag';
+               assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php#frag', 'add a fragment' );
+
+               uri = uriBase.clone();
+               uri.host = 'fr.wiki.local';
+               uri.port = '8080';
+               assert.equal( uri.toString(), 'http://fr.wiki.local:8080/w/api.php', 'change host and port' );
+
+               uri = uriBase.clone();
+               uri.query.foo = 'bar';
+               assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'add query arguments' );
+
+               delete uri.query.foo;
+               assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php', 'delete query arguments' );
+
+               uri = uriBase.clone();
+               uri.query.foo = 'bar';
+               assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'extend query arguments' );
+               uri.extend({
+                       foo: 'quux',
+                       pif: 'paf'
+               });
+               assert.ok( uri.toString().indexOf( 'foo=quux' ) >= 0, 'extend query arguments' );
+               assert.ok( uri.toString().indexOf( 'foo=bar' ) === -1, 'extend query arguments' );
+               assert.ok( uri.toString().indexOf( 'pif=paf' ) >= 0 , 'extend query arguments' );
+       } );
+
+       QUnit.test( '.getQueryString()', 2, function ( assert ) {
+               var uri = new mw.Uri( 'http://www.google.com/?q=uri' );
+
+               assert.deepEqual(
+                       {
+                               protocol: uri.protocol,
+                               host: uri.host,
+                               port: uri.port,
+                               path: uri.path,
+                               query: uri.query,
+                               fragment: uri.fragment,
+                               queryString: uri.getQueryString()
+                       },
+                       {
+                               protocol: 'http',
+                               host: 'www.google.com',
+                               port: undefined,
+                               path: '/',
+                               query: { q: 'uri' },
+                               fragment: undefined,
+                               queryString: 'q=uri'
+                       },
+                       'basic object properties'
+               );
 
-       assert.equal( uri.getHostPort(), 'www.example.com:81', 'hostport equal to host:port' );
+               uri = new mw.Uri( 'https://example.org/mw/index.php?title=Sandbox/7&other=Sandbox/7&foo' );
+               assert.equal(
+                       uri.getQueryString(),
+                       'title=Sandbox/7&other=Sandbox%2F7&foo',
+                       'title parameter is escaped the wiki-way'
+               );
 
-       queryString = uri.getQueryString();
-       assert.ok( queryString.indexOf( 'q1=0' ) >= 0, 'query param with numbers' );
-       assert.ok( queryString.indexOf( 'test1' ) >= 0, 'query param with null value is included' );
-       assert.ok( queryString.indexOf( 'test1=' ) === -1, 'query param with null value does not generate equals sign' );
-       assert.ok( queryString.indexOf( 'test2=value+%28escaped%29' ) >= 0, 'query param is url escaped' );
+       } );
 
-       relativePath = uri.getRelativePath();
-       assert.ok( relativePath.indexOf( uri.path ) >= 0, 'path in relative path' );
-       assert.ok( relativePath.indexOf( uri.getQueryString() ) >= 0, 'query string in relative path' );
-       assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragement in relative path' );
-} );
+       QUnit.test( '.clone()', 6, function ( assert ) {
+               var original, clone;
 
-QUnit.test( 'Cloning', 6, function ( assert ) {
-       var original, clone;
+               original = new mw.Uri( 'http://foo.example.org/index.php?one=1&two=2' );
+               clone = original.clone();
 
-       original = new mw.Uri( 'http://foo.example.org/index.php?one=1&two=2' );
-       clone = original.clone();
+               assert.deepEqual( clone, original, 'clone has equivalent properties' );
+               assert.equal( original.toString(), clone.toString(), 'toString matches original' );
 
-       assert.deepEqual( clone, original, 'clone has equivalent properties' );
-       assert.equal( original.toString(), clone.toString(), 'toString matches original' );
+               assert.notStrictEqual( clone, original, 'clone is a different object when compared by reference' );
 
-       assert.notStrictEqual( clone, original, 'clone is a different object when compared by reference' );
+               clone.host = 'bar.example.org';
+               assert.notEqual( original.host, clone.host, 'manipulating clone did not effect original' );
+               assert.notEqual( original.toString(), clone.toString(), 'Stringified url no longer matches original' );
 
-       clone.host = 'bar.example.org';
-       assert.notEqual( original.host, clone.host, 'manipulating clone did not effect original' );
-       assert.notEqual( original.toString(), clone.toString(), 'Stringified url no longer matches original' );
+               clone.query.three = 3;
 
-       clone.query.three = 3;
+               assert.deepEqual(
+                       original.query,
+                       { 'one': '1', 'two': '2' },
+                       'Properties is deep cloned (bug 37708)'
+               );
+       } );
 
-       assert.deepEqual(
-               original.query,
-               { 'one': '1', 'two': '2' },
-               'Properties is deep cloned (bug 37708)'
-       );
-} );
+       QUnit.test( '.toString() after query manipulation', 8, function ( assert ) {
+               var uri;
 
-QUnit.test( 'Constructing mw.Uri from plain object', 3, function ( assert ) {
-       var uri = new mw.Uri({
-               protocol: 'http',
-               host: 'www.foo.local',
-               path: '/this'
-       });
-       assert.equal( uri.toString(), 'http://www.foo.local/this', 'Basic properties' );
-
-       uri = new mw.Uri({
-               protocol: 'http',
-               host: 'www.foo.local',
-               path: '/this',
-               query: { hi: 'there' },
-               fragment: 'blah'
-       });
-       assert.equal( uri.toString(), 'http://www.foo.local/this?hi=there#blah', 'More complex properties' );
+               uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+                       overrideKeys: true
+               });
 
-       assert.throws(
-               function () {
-                       var uri = new mw.Uri({
-                               protocol: 'http',
-                               host: 'www.foo.local'
-                       });
-               },
-               function ( e ) {
-                       return e.message === 'Bad constructor arguments';
-               },
-               'Construction failed when missing required properties'
-       );
-} );
+               uri.query.n = [ 'x', 'y', 'z' ];
 
-QUnit.test( 'Manipulate properties', 8, function ( assert ) {
-       var uriBase, uri;
+               // Verify parts and total length instead of entire string because order
+               // of iteration can vary.
+               assert.ok( uri.toString().indexOf( 'm=bar' ), 'toString preserves other values' );
+               assert.ok( uri.toString().indexOf( 'n=x&n=y&n=z' ), 'toString parameter includes all values of an array query parameter' );
+               assert.equal( uri.toString().length, 'http://www.example.com/dir/?m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
 
-       uriBase = new mw.Uri( 'http://en.wiki.local/w/api.php' );
+               uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+                       overrideKeys: false
+               });
 
-       uri = uriBase.clone();
-       uri.fragment = 'frag';
-       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php#frag', 'add a fragment' );
+               // Change query values
+               uri.query.n = [ 'x', 'y', 'z' ];
 
-       uri = uriBase.clone();
-       uri.host = 'fr.wiki.local';
-       uri.port = '8080';
-       assert.equal( uri.toString(), 'http://fr.wiki.local:8080/w/api.php', 'change host and port' );
+               // Verify parts and total length instead of entire string because order
+               // of iteration can vary.
+               assert.ok( uri.toString().indexOf( 'm=foo&m=bar' ) >= 0, 'toString preserves other values' );
+               assert.ok( uri.toString().indexOf( 'n=x&n=y&n=z' ) >= 0, 'toString parameter includes all values of an array query parameter' );
+               assert.equal( uri.toString().length, 'http://www.example.com/dir/?m=foo&m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
 
-       uri = uriBase.clone();
-       uri.query.foo = 'bar';
-       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'add query arguments' );
+               // Remove query values
+               uri.query.m.splice( 0, 1 );
+               delete uri.query.n;
 
-       delete uri.query.foo;
-       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php', 'delete query arguments' );
+               assert.equal( uri.toString(), 'http://www.example.com/dir/?m=bar', 'deletion properties' );
 
-       uri = uriBase.clone();
-       uri.query.foo = 'bar';
-       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'extend query arguments' );
-       uri.extend({
-               foo: 'quux',
-               pif: 'paf'
-       });
-       assert.ok( uri.toString().indexOf( 'foo=quux' ) >= 0, 'extend query arguments' );
-       assert.ok( uri.toString().indexOf( 'foo=bar' ) === -1, 'extend query arguments' );
-       assert.ok( uri.toString().indexOf( 'pif=paf' ) >= 0 , 'extend query arguments' );
-} );
+               // Remove more query values, leaving an empty array
+               uri.query.m.splice( 0, 1 );
+               assert.equal( uri.toString(), 'http://www.example.com/dir/', 'empty array value is ommitted' );
+       } );
 
-QUnit.test( 'Handle protocol-relative URLs', 5, function ( assert ) {
-       var UriRel, uri;
+       QUnit.test( 'Advanced URL', 11, function ( assert ) {
+               var uri, queryString, relativePath;
 
-       UriRel = mw.UriRelative( 'glork://en.wiki.local/foo.php' );
+               uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top' );
 
-       uri = new UriRel( '//en.wiki.local/w/api.php' );
-       assert.equal( uri.protocol, 'glork', 'create protocol-relative URLs with same protocol as document' );
+               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
+                       },
+                       {
+                               protocol: 'http',
+                               user: 'auth',
+                               password: undefined,
+                               host: 'www.example.com',
+                               port: '81',
+                               path: '/dir/dir.2/index.htm',
+                               query: { q1: '0', test1: null, test2: 'value (escaped)' },
+                               fragment: 'top'
+                       },
+                       'basic object properties'
+               );
 
-       uri = new UriRel( '/foo.com' );
-       assert.equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in loose mode' );
+               assert.equal( uri.getUserInfo(), 'auth', 'user info' );
 
-       uri = new UriRel( 'http:/foo.com' );
-       assert.equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in loose mode' );
+               assert.equal( uri.getAuthority(), 'auth@www.example.com:81', 'authority equal to auth@hostport' );
 
-       uri = new UriRel( '/foo.com', true );
-       assert.equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in strict mode' );
+               assert.equal( uri.getHostPort(), 'www.example.com:81', 'hostport equal to host:port' );
 
-       uri = new UriRel( 'http:/foo.com', true );
-       assert.equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in strict mode' );
-} );
+               queryString = uri.getQueryString();
+               assert.ok( queryString.indexOf( 'q1=0' ) >= 0, 'query param with numbers' );
+               assert.ok( queryString.indexOf( 'test1' ) >= 0, 'query param with null value is included' );
+               assert.ok( queryString.indexOf( 'test1=' ) === -1, 'query param with null value does not generate equals sign' );
+               assert.ok( queryString.indexOf( 'test2=value+%28escaped%29' ) >= 0, 'query param is url escaped' );
 
-QUnit.test( 'Bad calls', 3, function ( assert ) {
-       var uri;
+               relativePath = uri.getRelativePath();
+               assert.ok( relativePath.indexOf( uri.path ) >= 0, 'path in relative path' );
+               assert.ok( relativePath.indexOf( uri.getQueryString() ) >= 0, 'query string in relative path' );
+               assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragement in relative path' );
+       } );
 
-       assert.throws(
-               function () {
-                       new mw.Uri( 'glaswegian penguins' );
-               },
-               function ( e ) {
-                       return e.message === 'Bad constructor arguments';
-               },
-               'throw error on non-URI as argument to constructor'
-       );
+       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.throws(
-               function () {
-                       new mw.Uri( 'foo.com/bar/baz', {
-                               strictMode: true
-                       });
-               },
-               function ( e ) {
-                       return e.message === 'Bad constructor arguments';
-               },
-               'throw error on URI without protocol or // or leading / in strict mode'
-       );
+               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'
+               );
+       } );
 
-       uri = new mw.Uri( 'foo.com/bar/baz', {
-               strictMode: false
-       });
-       assert.equal( uri.toString(), 'http://foo.com/bar/baz', 'normalize URI without protocol or // in loose mode' );
-});
+       QUnit.test( 'Handle protocol-relative URLs', 5, function ( assert ) {
+               var UriRel, uri;
 
-QUnit.test( 'bug 35658', 2, function ( assert ) {
-       var testProtocol, testServer, testPort, testPath, UriClass, uri, href;
+               UriRel = mw.UriRelative( 'glork://en.wiki.local/foo.php' );
 
-       testProtocol = 'https://';
-       testServer = 'foo.example.org';
-       testPort = '3004';
-       testPath = '/!1qy';
+               uri = new UriRel( '//en.wiki.local/w/api.php' );
+               assert.equal( uri.protocol, 'glork', 'create protocol-relative URLs with same protocol as document' );
 
-       UriClass = mw.UriRelative( testProtocol + testServer + '/some/path/index.html' );
-       uri = new UriClass( testPath );
-       href = uri.toString();
-       assert.equal( href, testProtocol + testServer + testPath, 'Root-relative URL gets host & protocol supplied' );
+               uri = new UriRel( '/foo.com' );
+               assert.equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in loose mode' );
 
-       UriClass = mw.UriRelative( testProtocol + testServer + ':' + testPort + '/some/path.php' );
-       uri = new UriClass( testPath );
-       href = uri.toString();
-       assert.equal( href, testProtocol + testServer + ':' + testPort + testPath, 'Root-relative URL gets host, protocol, and port supplied' );
+               uri = new UriRel( 'http:/foo.com' );
+               assert.equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in loose mode' );
 
-} );
+               uri = new UriRel( '/foo.com', true );
+               assert.equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in strict mode' );
 
-QUnit.test( 'Constructor falls back to default location', 4, function ( assert ) {
-       var testuri, MyUri, uri;
+               uri = new UriRel( 'http:/foo.com', true );
+               assert.equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in strict mode' );
+       } );
 
-       testuri = 'http://example.org/w/index.php';
-       MyUri = mw.UriRelative( testuri );
+       QUnit.test( 'bug 35658', 2, function ( assert ) {
+               var testProtocol, testServer, testPort, testPath, UriClass, uri, href;
 
-       uri = new MyUri();
-       assert.equal( uri.toString(), testuri, 'no arguments' );
+               testProtocol = 'https://';
+               testServer = 'foo.example.org';
+               testPort = '3004';
+               testPath = '/!1qy';
 
-       uri = new MyUri( undefined );
-       assert.equal( uri.toString(), testuri, 'undefined' );
+               UriClass = mw.UriRelative( testProtocol + testServer + '/some/path/index.html' );
+               uri = new UriClass( testPath );
+               href = uri.toString();
+               assert.equal( href, testProtocol + testServer + testPath, 'Root-relative URL gets host & protocol supplied' );
 
-       uri = new MyUri( null );
-       assert.equal( uri.toString(), testuri, 'null' );
+               UriClass = mw.UriRelative( testProtocol + testServer + ':' + testPort + '/some/path.php' );
+               uri = new UriClass( testPath );
+               href = uri.toString();
+               assert.equal( href, testProtocol + testServer + ':' + testPort + testPath, 'Root-relative URL gets host, protocol, and port supplied' );
 
-       uri = new MyUri( '' );
-       assert.equal( uri.toString(), testuri, 'empty string' );
-} );
+       } );
+}( mediaWiki, jQuery ) );
index e2c6668..b745fb4 100644 (file)
@@ -1,74 +1,76 @@
-QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() );
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() );
 
-var pluralTestcases = {
-       /*
-        * Sample:
-        * "languagecode" : [
-        *   [ number, [ "form1", "form2", ... ],  "expected", "description" ]
-        * ];
-        */
-       "en": [
-               [ 0, [ "one", "other" ], "other", "English plural test- 0 is other" ],
-               [ 1, [ "one", "other" ], "one", "English plural test- 1 is one" ]
-       ],
-       "fa": [
-               [ 0, [ "one", "other" ], "other", "Persian plural test- 0 is other" ],
-               [ 1, [ "one", "other" ], "one", "Persian plural test- 1 is one" ],
-               [ 2, [ "one", "other" ], "other", "Persian plural test- 2 is other" ]
-       ],
-       "fr": [
-               [ 0, [ "one", "other" ], "other", "French plural test- 0 is other" ],
-               [ 1, [ "one", "other" ], "one", "French plural test- 1 is one" ]
-       ],
-       "hi": [
-               [ 0, [ "one", "other" ], "one", "Hindi plural test- 0 is one" ],
-               [ 1, [ "one", "other" ], "one", "Hindi plural test- 1 is one" ],
-               [ 2, [ "one", "other" ], "other", "Hindi plural test- 2 is other" ]
-       ],
-       "he": [
-               [ 0, [ "one", "other" ], "other", "Hebrew plural test- 0 is other" ],
-               [ 1, [ "one", "other" ], "one", "Hebrew plural test- 1 is one" ],
-               [ 2, [ "one", "other" ], "other", "Hebrew plural test- 2 is other with 2 forms" ],
-               [ 2, [ "one", "dual", "other" ], "dual", "Hebrew plural test- 2 is dual with 3 forms" ]
-       ],
-       "hu": [
-               [ 0, [ "one", "other" ], "other", "Hungarian plural test- 0 is other" ],
-               [ 1, [ "one", "other" ], "one", "Hungarian plural test- 1 is one" ],
-               [ 2, [ "one", "other" ], "other", "Hungarian plural test- 2 is other" ]
-       ],
-       "ar": [
-               [ 0, [ "zero", "one", "two", "few", "many", "other" ], "zero", "Arabic plural test - 0 is zero" ],
-               [ 1, [ "zero", "one", "two", "few", "many", "other" ], "one", "Arabic plural test - 1 is one" ],
-               [ 2, [ "zero", "one", "two", "few", "many", "other" ], "two", "Arabic plural test - 2 is two" ],
-               [ 3, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 3 is few" ],
-               [ 9, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 9 is few" ],
-               [ "9", [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 9 is few" ],
-               [ 110, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 110 is few" ],
-               [ 11, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 11 is many" ],
-               [ 15, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 15 is many" ],
-               [ 99, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 99 is many" ],
-               [ 9999, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 9999 is many" ],
-               [ 100, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 100 is other" ],
-               [ 102, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 102 is other" ],
-               [ 1000, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1000 is other" ],
-               [ 1.7, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1.7 is other" ]
-       ]
-};
+       var pluralTestcases = {
+               /*
+                * Sample:
+                * languagecode : [
+                *   [ number, [ 'form1', 'form2', ... ],  'expected', 'description' ]
+                * ];
+                */
+               en: [
+                       [ 0, [ 'one', 'other' ], 'other', 'English plural test- 0 is other' ],
+                       [ 1, [ 'one', 'other' ], 'one', 'English plural test- 1 is one' ]
+               ],
+               fa: [
+                       [ 0, [ 'one', 'other' ], 'other', 'Persian plural test- 0 is other' ],
+                       [ 1, [ 'one', 'other' ], 'one', 'Persian plural test- 1 is one' ],
+                       [ 2, [ 'one', 'other' ], 'other', 'Persian plural test- 2 is other' ]
+               ],
+               fr: [
+                       [ 0, [ 'one', 'other' ], 'other', 'French plural test- 0 is other' ],
+                       [ 1, [ 'one', 'other' ], 'one', 'French plural test- 1 is one' ]
+               ],
+               hi: [
+                       [ 0, [ 'one', 'other' ], 'one', 'Hindi plural test- 0 is one' ],
+                       [ 1, [ 'one', 'other' ], 'one', 'Hindi plural test- 1 is one' ],
+                       [ 2, [ 'one', 'other' ], 'other', 'Hindi plural test- 2 is other' ]
+               ],
+               he: [
+                       [ 0, [ 'one', 'other' ], 'other', 'Hebrew plural test- 0 is other' ],
+                       [ 1, [ 'one', 'other' ], 'one', 'Hebrew plural test- 1 is one' ],
+                       [ 2, [ 'one', 'other' ], 'other', 'Hebrew plural test- 2 is other with 2 forms' ],
+                       [ 2, [ 'one', 'dual', 'other' ], 'dual', 'Hebrew plural test- 2 is dual with 3 forms' ]
+               ],
+               hu: [
+                       [ 0, [ 'one', 'other' ], 'other', 'Hungarian plural test- 0 is other' ],
+                       [ 1, [ 'one', 'other' ], 'one', 'Hungarian plural test- 1 is one' ],
+                       [ 2, [ 'one', 'other' ], 'other', 'Hungarian plural test- 2 is other' ]
+               ],
+               ar: [
+                       [ 0, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'zero', 'Arabic plural test - 0 is zero' ],
+                       [ 1, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'one', 'Arabic plural test - 1 is one' ],
+                       [ 2, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'two', 'Arabic plural test - 2 is two' ],
+                       [ 3, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'few', 'Arabic plural test - 3 is few' ],
+                       [ 9, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'few', 'Arabic plural test - 9 is few' ],
+                       [ '9', [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'few', 'Arabic plural test - 9 is few' ],
+                       [ 110, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'few', 'Arabic plural test - 110 is few' ],
+                       [ 11, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'many', 'Arabic plural test - 11 is many' ],
+                       [ 15, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'many', 'Arabic plural test - 15 is many' ],
+                       [ 99, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'many', 'Arabic plural test - 99 is many' ],
+                       [ 9999, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'many', 'Arabic plural test - 9999 is many' ],
+                       [ 100, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'other', 'Arabic plural test - 100 is other' ],
+                       [ 102, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'other', 'Arabic plural test - 102 is other' ],
+                       [ 1000, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'other', 'Arabic plural test - 1000 is other' ],
+                       [ 1.7, [ 'zero', 'one', 'two', 'few', 'many', 'other' ], 'other', 'Arabic plural test - 1.7 is other' ]
+               ]
+       };
 
-function pluralTest( langCode, tests ) {
-       QUnit.test( 'Plural Test for ' + langCode, tests.length, function ( assert ) {
-               for ( var i = 0; i < tests.length; i++ ) {
-                       assert.equal(
-                               mw.language.convertPlural( tests[i][0], tests[i][1] ),
-                               tests[i][2],
-                               tests[i][3]
-                       );
+       function pluralTest( langCode, tests ) {
+               QUnit.test( 'Plural Test for ' + langCode, tests.length, function ( assert ) {
+                       for ( var i = 0; i < tests.length; i++ ) {
+                               assert.equal(
+                                       mw.language.convertPlural( tests[i][0], tests[i][1] ),
+                                       tests[i][2],
+                                       tests[i][3]
+                               );
+                       }
+               } );
+       }
+
+       $.each( pluralTestcases, function ( langCode, tests ) {
+               if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
+                       pluralTest( langCode, tests );
                }
        } );
-}
-
-$.each( pluralTestcases, function ( langCode, tests ) {
-       if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
-               pluralTest( langCode, tests );
-       }
-} );
+}( mediaWiki, jQuery ) );
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 2baa4f3..bc6fafe 100644 (file)
@@ -1,62 +1,70 @@
-/* Some misc JavaScript compatibility tests, just to make sure the environments we run in are consistent */
-
-QUnit.module( 'mediawiki.jscompat', QUnit.newMwEnvironment() );
-
-QUnit.test( 'Variable with Unicode letter in name', 3, function ( assert ) {
-       var orig = "some token";
-       var ŝablono = orig;
-
-       assert.deepEqual( ŝablono, orig, 'ŝablono' );
-       assert.deepEqual( \u015dablono, orig, '\\u015dablono' );
-       assert.deepEqual( \u015Dablono, orig, '\\u015Dablono' );
-});
-
-/*
-// Not that we need this. ;)
-// This fails on IE 6-8
-// Works on IE 9, Firefox 6, Chrome 14
-QUnit.test( 'Keyword workaround: "if" as variable name using Unicode escapes', function ( assert ) {
-       var orig = "another token";
-       \u0069\u0066 = orig;
-       assert.deepEqual( \u0069\u0066, orig, '\\u0069\\u0066' );
-});
-*/
-
-/*
-// Not that we need this. ;)
-// This fails on IE 6-9
-// Works on Firefox 6, Chrome 14
-QUnit.test( 'Keyword workaround: "if" as member variable name using Unicode escapes', function ( assert ) {
-       var orig = "another token";
-       var foo = {};
-       foo.\u0069\u0066 = orig;
-       assert.deepEqual( foo.\u0069\u0066, orig, 'foo.\\u0069\\u0066' );
-});
-*/
-
-QUnit.test( 'Stripping of single initial newline from textarea\'s literal contents (bug 12130)', function ( assert ) {
-       var maxn = 4;
-       QUnit.expect( maxn * 2 );
-
-       function repeat( str, n ) {
-               if ( n <= 0 ) {
-                       return '';
-               } else {
-                       var out = new Array(n);
-                       for ( var i = 0; i < n; i++ ) {
-                               out[i] = str;
+/**
+ * Some misc JavaScript compatibility tests,
+ * just to make sure the environments we run in are consistent.
+ */
+( function ( $ ) {
+       QUnit.module( 'mediawiki.jscompat', QUnit.newMwEnvironment() );
+
+       QUnit.test( 'Variable with Unicode letter in name', 3, function ( assert ) {
+               var orig, ŝablono;
+
+               orig = 'some token';
+               ŝablono = orig;
+
+               assert.deepEqual( ŝablono, orig, 'ŝablono' );
+               assert.deepEqual( \u015dablono, orig, '\\u015dablono' );
+               assert.deepEqual( \u015Dablono, orig, '\\u015Dablono' );
+       });
+
+       /*
+       // Not that we need this. ;)
+       // This fails on IE 6-8
+       // Works on IE 9, Firefox 6, Chrome 14
+       QUnit.test( 'Keyword workaround: "if" as variable name using Unicode escapes', function ( assert ) {
+               var orig = "another token";
+               \u0069\u0066 = orig;
+               assert.deepEqual( \u0069\u0066, orig, '\\u0069\\u0066' );
+       });
+       */
+
+       /*
+       // Not that we need this. ;)
+       // This fails on IE 6-9
+       // Works on Firefox 6, Chrome 14
+       QUnit.test( 'Keyword workaround: "if" as member variable name using Unicode escapes', function ( assert ) {
+               var orig = "another token";
+               var foo = {};
+               foo.\u0069\u0066 = orig;
+               assert.deepEqual( foo.\u0069\u0066, orig, 'foo.\\u0069\\u0066' );
+       });
+       */
+
+       QUnit.test( 'Stripping of single initial newline from textarea\'s literal contents (bug 12130)', function ( assert ) {
+               var maxn, n,
+                       expected, $textarea;
+
+               maxn = 4;
+               QUnit.expect( maxn * 2 );
+
+               function repeat( str, n ) {
+                       var out;
+                       if ( n <= 0 ) {
+                               return '';
+                       } else {
+                               out = [];
+                               out.length = n + 1;
+                               return out.join( str );
                        }
-                       return out.join('');
                }
-       }
 
-       for ( var n = 0; n < maxn; n++ ) {
-               var expected = repeat('\n', n) + 'some text';
+               for ( n = 0; n < maxn; n++ ) {
+                       expected = repeat('\n', n) + 'some text';
 
-               var $textarea = $('<textarea>\n' + expected + '</textarea>');
-               assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + (n + 1) + ')' );
+                       $textarea = $('<textarea>\n' + expected + '</textarea>');
+                       assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + (n + 1) + ')' );
 
-               var $textarea2 = $('<textarea>').val(expected);
-               assert.equal( $textarea2.val(), expected, 'Expecting ' + n + ' newlines (from DOM set with ' + n + ')' );
-       }
-});
+                       $textarea = $('<textarea>').val( expected );
+                       assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (from DOM set with ' + n + ')' );
+               }
+       });
+}( jQuery ) );
index 3fa2b09..869ebe4 100644 (file)
-QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment({
-       setup: function () {
-               this.liveLangData = mw.language.data.values;
-               mw.language.data.values = $.extend( true, {}, this.liveLangData );
-       },
-       teardown: function () {
-               // Restore
-               mw.language.data.values = this.liveLangData;
-       }
-}) );
+( function ( mw, $ ) {
 
-QUnit.test( 'mw.language getData and setData', function ( assert ) {
-       QUnit.expect( 2 );
+       QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment({
+               setup: function () {
+                       this.liveLangData = mw.language.data.values;
+                       mw.language.data.values = $.extend( true, {}, this.liveLangData );
+               },
+               teardown: function () {
+                       mw.language.data.values = this.liveLangData;
+               }
+       }) );
 
-       mw.language.setData( 'en', 'testkey', 'testvalue' );
-       assert.equal(  mw.language.getData( 'en', 'testkey' ), 'testvalue', 'Getter setter test for mw.language' );
-       assert.equal(  mw.language.getData( 'en', 'invalidkey' ), undefined, 'Getter setter test for mw.language with invalid key' );
-} );
+       QUnit.test( 'mw.language getData and setData', 2, function ( assert ) {
+               mw.language.setData( 'en', 'testkey', 'testvalue' );
+               assert.equal(  mw.language.getData( 'en', 'testkey' ), 'testvalue', 'Getter setter test for mw.language' );
+               assert.equal(  mw.language.getData( 'en', 'invalidkey' ), undefined, 'Getter setter test for mw.language with invalid key' );
+       } );
 
-function grammarTest( langCode, test ) {
-       // The test works only if the content language is opt.language
-       // because it requires [lang].js to be loaded.
-       QUnit.test( 'Grammar test for lang=' + langCode, function ( assert ) {
-               QUnit.expect( test.length );
+       function grammarTest( langCode, test ) {
+               // The test works only if the content language is opt.language
+               // because it requires [lang].js to be loaded.
+               QUnit.test( 'Grammar test for lang=' + langCode, function ( assert ) {
+                       QUnit.expect( test.length );
 
-               for ( var i = 0 ; i < test.length; i++ ) {
-                       assert.equal(
-                               mw.language.convertGrammar( test[i].word, test[i].grammarForm ),
-                               test[i].expected,
-                               test[i].description
-                       );
-               }
-       });
-}
+                       for ( var i = 0 ; i < test.length; i++ ) {
+                               assert.equal(
+                                       mw.language.convertGrammar( test[i].word, test[i].grammarForm ),
+                                       test[i].expected,
+                                       test[i].description
+                               );
+                       }
+               });
+       }
 
-var grammarTests = {
-       bs: [
-               {
-                       word: 'word',
-                       grammarForm: 'instrumental',
-                       expected: 's word',
-                       description: 'Grammar test for instrumental case'
-               },
-               {
-                       word: 'word',
-                       grammarForm: 'lokativ',
-                       expected: 'o word',
-                       description: 'Grammar test for lokativ case'
-               }
-       ],
+       var grammarTests = {
+               bs: [
+                       {
+                               word: 'word',
+                               grammarForm: 'instrumental',
+                               expected: 's word',
+                               description: 'Grammar test for instrumental case'
+                       },
+                       {
+                               word: 'word',
+                               grammarForm: 'lokativ',
+                               expected: 'o word',
+                               description: 'Grammar test for lokativ case'
+                       }
+               ],
 
-       he: [
-               {
-                       word: "ויקיפדיה",
-                       grammarForm: 'prefixed',
-                       expected: "וויקיפדיה",
-                       description: 'Duplicate the "Waw" if prefixed'
-               },
-               {
-                       word: "וולפגנג",
-                       grammarForm: 'prefixed',
-                       expected: "וולפגנג",
-                       description: 'Duplicate the "Waw" if prefixed, but not if it is already duplicated.'
-               },
-               {
-                       word: "הקובץ",
-                       grammarForm: 'prefixed',
-                       expected: "קובץ",
-                       description: 'Remove the "He" if prefixed'
-               },
-               {
-                       word: 'Wikipedia',
-                       grammarForm: 'תחילית',
-                       expected: '־Wikipedia',
-                       description: 'GAdd a hyphen (maqaf) before non-Hebrew letters'
-               },
-               {
-                       word: '1995',
-                       grammarForm: 'תחילית',
-                       expected: '־1995',
-                       description: 'Add a hyphen (maqaf) before numbers'
-               }
-       ],
+               he: [
+                       {
+                               word: 'ויקיפדיה',
+                               grammarForm: 'prefixed',
+                               expected: 'וויקיפדיה',
+                               description: 'Duplicate the "Waw" if prefixed'
+                       },
+                       {
+                               word: 'וולפגנג',
+                               grammarForm: 'prefixed',
+                               expected: 'וולפגנג',
+                               description: 'Duplicate the "Waw" if prefixed, but not if it is already duplicated.'
+                       },
+                       {
+                               word: 'הקובץ',
+                               grammarForm: 'prefixed',
+                               expected: 'קובץ',
+                               description: 'Remove the "He" if prefixed'
+                       },
+                       {
+                               word: 'Wikipedia',
+                               grammarForm: 'תחילית',
+                               expected: '־Wikipedia',
+                               description: 'GAdd a hyphen (maqaf) before non-Hebrew letters'
+                       },
+                       {
+                               word: '1995',
+                               grammarForm: 'תחילית',
+                               expected: '־1995',
+                               description: 'Add a hyphen (maqaf) before numbers'
+                       }
+               ],
 
-       hsb: [
-               {
-                       word: 'word',
-                       grammarForm: 'instrumental',
-                       expected: 'z word',
-                       description: 'Grammar test for instrumental case'
-               },
-               {
-                       word: 'word',
-                       grammarForm: 'lokatiw',
-                       expected: 'wo word',
-                       description: 'Grammar test for lokatiw case'
-               }
-       ],
+               hsb: [
+                       {
+                               word: 'word',
+                               grammarForm: 'instrumental',
+                               expected: 'z word',
+                               description: 'Grammar test for instrumental case'
+                       },
+                       {
+                               word: 'word',
+                               grammarForm: 'lokatiw',
+                               expected: 'wo word',
+                               description: 'Grammar test for lokatiw case'
+                       }
+               ],
 
-       dsb: [
-               {
-                       word: 'word',
-                       grammarForm: 'instrumental',
-                       expected: 'z word',
-                       description: 'Grammar test for instrumental case'
-               },
-               {
-                       word: 'word',
-                       grammarForm: 'lokatiw',
-                       expected: 'wo word',
-                       description: 'Grammar test for lokatiw case'
-               }
-       ],
+               dsb: [
+                       {
+                               word: 'word',
+                               grammarForm: 'instrumental',
+                               expected: 'z word',
+                               description: 'Grammar test for instrumental case'
+                       },
+                       {
+                               word: 'word',
+                               grammarForm: 'lokatiw',
+                               expected: 'wo word',
+                               description: 'Grammar test for lokatiw case'
+                       }
+               ],
 
-       hy: [
-               {
-                       word: 'Մաունա',
-                       grammarForm: 'genitive',
-                       expected: 'Մաունայի',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'հետո',
-                       grammarForm: 'genitive',
-                       expected: 'հետոյի',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'գիրք',
-                       grammarForm: 'genitive',
-                       expected: 'գրքի',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'ժամանակի',
-                       grammarForm: 'genitive',
-                       expected: 'ժամանակիի',
-                       description: 'Grammar test for genitive case'
-               }
-       ],
+               hy: [
+                       {
+                               word: 'Մաունա',
+                               grammarForm: 'genitive',
+                               expected: 'Մաունայի',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'հետո',
+                               grammarForm: 'genitive',
+                               expected: 'հետոյի',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'գիրք',
+                               grammarForm: 'genitive',
+                               expected: 'գրքի',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'ժամանակի',
+                               grammarForm: 'genitive',
+                               expected: 'ժամանակիի',
+                               description: 'Grammar test for genitive case'
+                       }
+               ],
 
-       fi: [
-               {
-                       word: 'talo',
-                       grammarForm: 'genitive',
-                       expected: 'talon',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'linux',
-                       grammarForm: 'genitive',
-                       expected: 'linuxin',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'talo',
-                       grammarForm: 'elative',
-                       expected: 'talosta',
-                       description: 'Grammar test for elative case'
-               },
-               {
-                       word: 'pastöroitu',
-                       grammarForm: 'partitive',
-                       expected: 'pastöroitua',
-                       description: 'Grammar test for partitive case'
-               },
-               {
-                       word: 'talo',
-                       grammarForm: 'partitive',
-                       expected: 'taloa',
-                       description: 'Grammar test for partitive case'
-               },
-               {
-                       word: 'talo',
-                       grammarForm: 'illative',
-                       expected: 'taloon',
-                       description: 'Grammar test for illative case'
-               },
-               {
-                       word: 'linux',
-                       grammarForm: 'inessive',
-                       expected: 'linuxissa',
-                       description: 'Grammar test for inessive case'
-               }
-       ],
+               fi: [
+                       {
+                               word: 'talo',
+                               grammarForm: 'genitive',
+                               expected: 'talon',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'linux',
+                               grammarForm: 'genitive',
+                               expected: 'linuxin',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'talo',
+                               grammarForm: 'elative',
+                               expected: 'talosta',
+                               description: 'Grammar test for elative case'
+                       },
+                       {
+                               word: 'pastöroitu',
+                               grammarForm: 'partitive',
+                               expected: 'pastöroitua',
+                               description: 'Grammar test for partitive case'
+                       },
+                       {
+                               word: 'talo',
+                               grammarForm: 'partitive',
+                               expected: 'taloa',
+                               description: 'Grammar test for partitive case'
+                       },
+                       {
+                               word: 'talo',
+                               grammarForm: 'illative',
+                               expected: 'taloon',
+                               description: 'Grammar test for illative case'
+                       },
+                       {
+                               word: 'linux',
+                               grammarForm: 'inessive',
+                               expected: 'linuxissa',
+                               description: 'Grammar test for inessive case'
+                       }
+               ],
 
-       ru: [
-               {
-                       word: 'тесть',
-                       grammarForm: 'genitive',
-                       expected: 'тестя',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'привилегия',
-                       grammarForm: 'genitive',
-                       expected: 'привилегии',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'установка',
-                       grammarForm: 'genitive',
-                       expected: 'установки',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'похоти',
-                       grammarForm: 'genitive',
-                       expected: 'похотей',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'доводы',
-                       grammarForm: 'genitive',
-                       expected: 'доводов',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'песчаник',
-                       grammarForm: 'genitive',
-                       expected: 'песчаника',
-                       description: 'Grammar test for genitive case'
-               }
-       ],
+               ru: [
+                       {
+                               word: 'тесть',
+                               grammarForm: 'genitive',
+                               expected: 'тестя',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'привилегия',
+                               grammarForm: 'genitive',
+                               expected: 'привилегии',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'установка',
+                               grammarForm: 'genitive',
+                               expected: 'установки',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'похоти',
+                               grammarForm: 'genitive',
+                               expected: 'похотей',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'доводы',
+                               grammarForm: 'genitive',
+                               expected: 'доводов',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'песчаник',
+                               grammarForm: 'genitive',
+                               expected: 'песчаника',
+                               description: 'Grammar test for genitive case'
+                       }
+               ],
 
 
-       hu: [
-               {
-                       word: 'Wikipédiá',
-                       grammarForm: 'rol',
-                       expected: 'Wikipédiáról',
-                       description: 'Grammar test for rol case'
-               },
-               {
-                       word: 'Wikipédiá',
-                       grammarForm: 'ba',
-                       expected: 'Wikipédiába',
-                       description: 'Grammar test for ba case'
-               },
-               {
-                       word: 'Wikipédiá',
-                       grammarForm: 'k',
-                       expected: 'Wikipédiák',
-                       description: 'Grammar test for k case'
-               }
-       ],
+               hu: [
+                       {
+                               word: 'Wikipédiá',
+                               grammarForm: 'rol',
+                               expected: 'Wikipédiáról',
+                               description: 'Grammar test for rol case'
+                       },
+                       {
+                               word: 'Wikipédiá',
+                               grammarForm: 'ba',
+                               expected: 'Wikipédiába',
+                               description: 'Grammar test for ba case'
+                       },
+                       {
+                               word: 'Wikipédiá',
+                               grammarForm: 'k',
+                               expected: 'Wikipédiák',
+                               description: 'Grammar test for k case'
+                       }
+               ],
 
-       ga: [
-               {
-                       word: 'an Domhnach',
-                       grammarForm: 'ainmlae',
-                       expected: 'Dé Domhnaigh',
-                       description: 'Grammar test for ainmlae case'
-               },
-               {
-                       word: 'an Luan',
-                       grammarForm: 'ainmlae',
-                       expected: 'Dé Luain',
-                       description: 'Grammar test for ainmlae case'
-               },
-               {
-                       word: 'an Satharn',
-                       grammarForm: 'ainmlae',
-                       expected: 'Dé Sathairn',
-                       description: 'Grammar test for ainmlae case'
-               }
-       ],
+               ga: [
+                       {
+                               word: 'an Domhnach',
+                               grammarForm: 'ainmlae',
+                               expected: 'Dé Domhnaigh',
+                               description: 'Grammar test for ainmlae case'
+                       },
+                       {
+                               word: 'an Luan',
+                               grammarForm: 'ainmlae',
+                               expected: 'Dé Luain',
+                               description: 'Grammar test for ainmlae case'
+                       },
+                       {
+                               word: 'an Satharn',
+                               grammarForm: 'ainmlae',
+                               expected: 'Dé Sathairn',
+                               description: 'Grammar test for ainmlae case'
+                       }
+               ],
 
-       uk: [
-               {
-                       word: 'тесть',
-                       grammarForm: 'genitive',
-                       expected: 'тестя',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'Вікіпедія',
-                       grammarForm: 'genitive',
-                       expected: 'Вікіпедії',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'установка',
-                       grammarForm: 'genitive',
-                       expected: 'установки',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'похоти',
-                       grammarForm: 'genitive',
-                       expected: 'похотей',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'доводы',
-                       grammarForm: 'genitive',
-                       expected: 'доводов',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'песчаник',
-                       grammarForm: 'genitive',
-                       expected: 'песчаника',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'Вікіпедія',
-                       grammarForm: 'accusative',
-                       expected: 'Вікіпедію',
-                       description: 'Grammar test for accusative case'
-               }
-       ],
+               uk: [
+                       {
+                               word: 'тесть',
+                               grammarForm: 'genitive',
+                               expected: 'тестя',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'Вікіпедія',
+                               grammarForm: 'genitive',
+                               expected: 'Вікіпедії',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'установка',
+                               grammarForm: 'genitive',
+                               expected: 'установки',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'похоти',
+                               grammarForm: 'genitive',
+                               expected: 'похотей',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'доводы',
+                               grammarForm: 'genitive',
+                               expected: 'доводов',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'песчаник',
+                               grammarForm: 'genitive',
+                               expected: 'песчаника',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'Вікіпедія',
+                               grammarForm: 'accusative',
+                               expected: 'Вікіпедію',
+                               description: 'Grammar test for accusative case'
+                       }
+               ],
 
-       sl: [
-               {
-                       word: 'word',
-                       grammarForm: 'orodnik',
-                       expected: 'z word',
-                       description: 'Grammar test for orodnik case'
-               },
-               {
-                       word: 'word',
-                       grammarForm: 'mestnik',
-                       expected: 'o word',
-                       description: 'Grammar test for mestnik case'
-               }
-       ],
+               sl: [
+                       {
+                               word: 'word',
+                               grammarForm: 'orodnik',
+                               expected: 'z word',
+                               description: 'Grammar test for orodnik case'
+                       },
+                       {
+                               word: 'word',
+                               grammarForm: 'mestnik',
+                               expected: 'o word',
+                               description: 'Grammar test for mestnik case'
+                       }
+               ],
 
-       os: [
-               {
-                       word: 'бæстæ',
-                       grammarForm: 'genitive',
-                       expected: 'бæсты',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'бæстæ',
-                       grammarForm: 'allative',
-                       expected: 'бæстæм',
-                       description: 'Grammar test for allative case'
-               },
-               {
-                       word: 'Тигр',
-                       grammarForm: 'dative',
-                       expected: 'Тигрæн',
-                       description: 'Grammar test for dative case'
-               },
-               {
-                       word: 'цъити',
-                       grammarForm: 'dative',
-                       expected: 'цъитийæн',
-                       description: 'Grammar test for dative case'
-               },
-               {
-                       word: 'лæппу',
-                       grammarForm: 'genitive',
-                       expected: 'лæппуйы',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: '2011',
-                       grammarForm: 'equative',
-                       expected: '2011-ау',
-                       description: 'Grammar test for equative case'
-               }
-       ],
+               os: [
+                       {
+                               word: 'бæстæ',
+                               grammarForm: 'genitive',
+                               expected: 'бæсты',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'бæстæ',
+                               grammarForm: 'allative',
+                               expected: 'бæстæм',
+                               description: 'Grammar test for allative case'
+                       },
+                       {
+                               word: 'Тигр',
+                               grammarForm: 'dative',
+                               expected: 'Тигрæн',
+                               description: 'Grammar test for dative case'
+                       },
+                       {
+                               word: 'цъити',
+                               grammarForm: 'dative',
+                               expected: 'цъитийæн',
+                               description: 'Grammar test for dative case'
+                       },
+                       {
+                               word: 'лæппу',
+                               grammarForm: 'genitive',
+                               expected: 'лæппуйы',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: '2011',
+                               grammarForm: 'equative',
+                               expected: '2011-ау',
+                               description: 'Grammar test for equative case'
+                       }
+               ],
 
-       la: [
-               {
-                       word: 'Translatio',
-                       grammarForm: 'genitive',
-                       expected: 'Translationis',
-                       description: 'Grammar test for genitive case'
-               },
-               {
-                       word: 'Translatio',
-                       grammarForm: 'accusative',
-                       expected: 'Translationem',
-                       description: 'Grammar test for accusative case'
-               },
-               {
-                       word: 'Translatio',
-                       grammarForm: 'ablative',
-                       expected: 'Translatione',
-                       description: 'Grammar test for ablative case'
-               }
-       ]
-};
+               la: [
+                       {
+                               word: 'Translatio',
+                               grammarForm: 'genitive',
+                               expected: 'Translationis',
+                               description: 'Grammar test for genitive case'
+                       },
+                       {
+                               word: 'Translatio',
+                               grammarForm: 'accusative',
+                               expected: 'Translationem',
+                               description: 'Grammar test for accusative case'
+                       },
+                       {
+                               word: 'Translatio',
+                               grammarForm: 'ablative',
+                               expected: 'Translatione',
+                               description: 'Grammar test for ablative case'
+                       }
+               ]
+       };
 
-$.each( grammarTests, function ( langCode, test ) {
-       if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
-               grammarTest( langCode, test );
-       }
-});
+       $.each( grammarTests, function ( langCode, test ) {
+               if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
+                       grammarTest( langCode, test );
+               }
+       });
+}( mediaWiki, jQuery ) );
index be59f1a..dc7bd0a 100644 (file)
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function ( mw, $ ) {
 
 QUnit.module( 'mediawiki', QUnit.newMwEnvironment() );
 
@@ -215,7 +215,7 @@ QUnit.asyncTest( 'mw.loader', 2, function ( assert ) {
 
                // /sample/awesome.js declares the "mw.loader.testCallback" function
                // which contains a call to start() and ok()
-               assert.strictEqual( isAwesomeDone, true, "test.callback module should've caused isAwesomeDone to be true" );
+               assert.strictEqual( isAwesomeDone, true, 'test.callback module should\'ve caused isAwesomeDone to be true' );
                delete mw.loader.testCallback;
 
        }, function () {
@@ -277,15 +277,25 @@ QUnit.asyncTest( 'mw.loader.implement( styles={ "url": { <media>: [url, ..] } }
        mw.loader.implement(
                'test.implement.b',
                function () {
+                       // Note: QUnit.start() must only be called when the entire test is
+                       // complete. So, make sure that we don't start until *both*
+                       // assertStyleAsync calls have completed.
+                       var pending = 2;
                        assertStyleAsync( assert, $element2, 'float', 'left', function () {
                                assert.notEqual( $element1.css( 'text-align' ), 'center', 'print style is not applied' );
 
-                               QUnit.start();
+                               pending--;
+                               if ( pending === 0 ) {
+                                       QUnit.start();
+                               }
                        } );
                        assertStyleAsync( assert, $element3, 'float', 'right', function () {
                                assert.notEqual( $element1.css( 'text-align' ), 'center', 'print style is not applied' );
 
-                               QUnit.start();
+                               pending--;
+                               if ( pending === 0 ) {
+                                       QUnit.start();
+                               }
                        } );
                },
                {
@@ -481,8 +491,8 @@ QUnit.test( 'mw.loader missing dependency', 13, function ( assert ) {
        mw.loader.using(
                ['test.module7'],
                function () {
-                       assert.ok( false, "Success fired despite missing dependency" );
-                       assert.ok( true , "QUnit expected() count dummy" );
+                       assert.ok( false, 'Success fired despite missing dependency' );
+                       assert.ok( true , 'QUnit expected() count dummy' );
                },
                function ( e, dependencies ) {
                        assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
@@ -492,8 +502,8 @@ QUnit.test( 'mw.loader missing dependency', 13, function ( assert ) {
        mw.loader.using(
                ['test.module9'],
                function () {
-                       assert.ok( false, "Success fired despite missing dependency" );
-                       assert.ok( true , "QUnit expected() count dummy" );
+                       assert.ok( false, 'Success fired despite missing dependency' );
+                       assert.ok( true , 'QUnit expected() count dummy' );
                },
                function ( e, dependencies ) {
                        assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
@@ -646,4 +656,4 @@ QUnit.test( 'mw.html', 13, function ( assert ) {
 
 });
 
-}( mediaWiki ) );
+}( mediaWiki, jQuery ) );
index 16c97df..a9bbbf7 100644 (file)
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function ( mw, $ ) {
 
 QUnit.module( 'mediawiki.user', QUnit.newMwEnvironment() );
 
@@ -47,10 +47,9 @@ QUnit.asyncTest( 'getGroups', 3, function ( assert ) {
 
 QUnit.asyncTest( 'getRights', 1, function ( assert ) {
        mw.user.getRights( function ( rights ) {
-               // First group should always be '*'
                assert.equal( $.type( rights ), 'array', 'Callback gets an array' );
                QUnit.start();
        });
 });
 
-}( mediaWiki ) );
+}( mediaWiki, jQuery ) );
index ababa8d..c4212df 100644 (file)
-QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment() );
-
-QUnit.test( 'rawurlencode', 1, function ( assert ) {
-       assert.equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
-});
-
-QUnit.test( 'wikiUrlencode', 1, function ( assert ) {
-       assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
-});
-
-QUnit.test( 'wikiGetlink', 3, function ( assert ) {
-       // Not part of startUp module
-       mw.config.set( 'wgArticlePath', '/wiki/$1' );
-       mw.config.set( 'wgPageName', 'Foobar' );
-
-       var hrefA = mw.util.wikiGetlink( 'Sandbox' );
-       assert.equal( hrefA, '/wiki/Sandbox', 'Simple title; Get link for "Sandbox"' );
-
-       var hrefB = mw.util.wikiGetlink( 'Foo:Sandbox ? 5+5=10 ! (test)/subpage' );
-       assert.equal( hrefB, '/wiki/Foo:Sandbox_%3F_5%2B5%3D10_%21_%28test%29/subpage',
-               'Advanced title; Get link for "Foo:Sandbox ? 5+5=10 ! (test)/subpage"' );
-
-       var hrefC = mw.util.wikiGetlink();
-       assert.equal( hrefC, '/wiki/Foobar', 'Default title; Get link for current page ("Foobar")' );
-});
-
-QUnit.test( 'wikiScript', 4, function ( assert ) {
-       mw.config.set({
-               'wgScript': '/w/i.php', // customized wgScript for bug 39103
-               'wgLoadScript': '/w/l.php', // customized wgLoadScript for bug 39103
-               'wgScriptPath': '/w',
-               'wgScriptExtension': '.php'
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment() );
+
+       QUnit.test( 'rawurlencode', 1, function ( assert ) {
+               assert.equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
+       });
+
+       QUnit.test( 'wikiUrlencode', 1, function ( assert ) {
+               assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
        });
 
-       assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ), 'wikiScript() returns wgScript' );
-       assert.equal( mw.util.wikiScript( 'index' ), mw.config.get( 'wgScript' ), "wikiScript( 'index' ) returns wgScript" );
-       assert.equal( mw.util.wikiScript( 'load' ), mw.config.get( 'wgLoadScript' ), "wikiScript( 'load' ) returns wgLoadScript" );
-       assert.equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' );
-});
-
-QUnit.test( 'addCSS', 3, function ( assert ) {
-       var $testEl = $( '<div>' ).attr( 'id', 'mw-addcsstest' ).appendTo( '#qunit-fixture' );
-
-       var style = mw.util.addCSS( '#mw-addcsstest { visibility: hidden; }' );
-       assert.equal( typeof style, 'object', 'addCSS returned an object' );
-       assert.strictEqual( style.disabled, false, 'property "disabled" is available and set to false' );
-
-       assert.equal( $testEl.css( 'visibility' ), 'hidden', 'Added style properties are in effect' );
-
-       // Clean up
-       $( style.ownerNode ).remove();
-});
-
-QUnit.asyncTest( 'toggleToc', 4, function ( assert ) {
-       assert.strictEqual( mw.util.toggleToc(), null, 'Return null if there is no table of contents on the page.' );
-
-       var     tocHtml =
-       '<table id="toc" class="toc"><tr><td>' +
-               '<div id="toctitle">' +
-                       '<h2>Contents</h2>' +
-                       '<span class="toctoggle">&nbsp;[<a href="#" class="internal" id="togglelink">Hide</a>&nbsp;]</span>' +
-               '</div>' +
-               '<ul><li></li></ul>' +
-       '</td></tr></table>',
-               $toc = $(tocHtml).appendTo( '#qunit-fixture' ),
+       QUnit.test( 'wikiGetlink', 3, function ( assert ) {
+               // Not part of startUp module
+               mw.config.set( 'wgArticlePath', '/wiki/$1' );
+               mw.config.set( 'wgPageName', 'Foobar' );
+
+               var href = mw.util.wikiGetlink( 'Sandbox' );
+               assert.equal( href, '/wiki/Sandbox', 'Simple title; Get link for "Sandbox"' );
+
+               href = mw.util.wikiGetlink( 'Foo:Sandbox ? 5+5=10 ! (test)/subpage' );
+               assert.equal( href, '/wiki/Foo:Sandbox_%3F_5%2B5%3D10_%21_%28test%29/subpage',
+                       'Advanced title; Get link for "Foo:Sandbox ? 5+5=10 ! (test)/subpage"' );
+
+               href = mw.util.wikiGetlink();
+               assert.equal( href, '/wiki/Foobar', 'Default title; Get link for current page ("Foobar")' );
+       });
+
+       QUnit.test( 'wikiScript', 4, function ( assert ) {
+               mw.config.set({
+                       'wgScript': '/w/i.php', // customized wgScript for bug 39103
+                       'wgLoadScript': '/w/l.php', // customized wgLoadScript for bug 39103
+                       'wgScriptPath': '/w',
+                       'wgScriptExtension': '.php'
+               });
+
+               assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ),
+                       'wikiScript() returns wgScript'
+               );
+               assert.equal( mw.util.wikiScript( 'index' ), mw.config.get( 'wgScript' ),
+                       'wikiScript( index ) returns wgScript'
+               );
+               assert.equal( mw.util.wikiScript( 'load' ), mw.config.get( 'wgLoadScript' ),
+                       'wikiScript( load ) returns wgLoadScript'
+               );
+               assert.equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' );
+       });
+
+       QUnit.test( 'addCSS', 3, function ( assert ) {
+               var $el, style;
+               $el = $( '<div>' ).attr( 'id', 'mw-addcsstest' ).appendTo( '#qunit-fixture' );
+
+               style = mw.util.addCSS( '#mw-addcsstest { visibility: hidden; }' );
+               assert.equal( typeof style, 'object', 'addCSS returned an object' );
+               assert.strictEqual( style.disabled, false, 'property "disabled" is available and set to false' );
+
+               assert.equal( $el.css( 'visibility' ), 'hidden', 'Added style properties are in effect' );
+
+               // Clean up
+               $( style.ownerNode ).remove();
+       });
+
+       QUnit.asyncTest( 'toggleToc', 4, function ( assert ) {
+               var tocHtml, $toggleLink;
+
+               function actionC() {
+                       QUnit.start();
+               }
+
+               function actionB() {
+                       assert.strictEqual( mw.util.toggleToc( $toggleLink, actionC ), true, 'Return boolean true if the TOC is now visible.' );
+               }
+
+               function actionA() {
+                       assert.strictEqual( mw.util.toggleToc( $toggleLink, actionB ), false, 'Return boolean false if the TOC is now hidden.' );
+               }
+
+               assert.strictEqual( mw.util.toggleToc(), null, 'Return null if there is no table of contents on the page.' );
+
+               tocHtml =
+                       '<table id="toc" class="toc"><tr><td>' +
+                               '<div id="toctitle">' +
+                                       '<h2>Contents</h2>' +
+                                       '<span class="toctoggle">&nbsp;[<a href="#" class="internal" id="togglelink">Hide</a>&nbsp;]</span>' +
+                               '</div>' +
+                               '<ul><li></li></ul>' +
+                       '</td></tr></table>';
+               $(tocHtml).appendTo( '#qunit-fixture' ),
                $toggleLink = $( '#togglelink' );
 
-       assert.strictEqual( $toggleLink.length, 1, 'Toggle link is appended to the page.' );
-
-       var actionC = function() {
-               QUnit.start();
-       };
-       var actionB = function() {
-               assert.strictEqual( mw.util.toggleToc( $toggleLink, actionC ), true, 'Return boolean true if the TOC is now visible.' );
-       };
-       var actionA = function() {
-               assert.strictEqual( mw.util.toggleToc( $toggleLink, actionB ), false, 'Return boolean false if the TOC is now hidden.' );
-       };
-
-       actionA();
-});
-
-QUnit.test( 'getParamValue', 5, function ( assert ) {
-       var     url1 = 'http://example.org/?foo=wrong&foo=right#&foo=bad';
-
-       assert.equal( mw.util.getParamValue( 'foo', url1 ), 'right', 'Use latest one, ignore hash' );
-       assert.strictEqual( mw.util.getParamValue( 'bar', url1 ), null, 'Return null when not found' );
-
-       var url2 = 'http://example.org/#&foo=bad';
-       assert.strictEqual( mw.util.getParamValue( 'foo', url2 ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' );
-
-       var url3 = 'example.org?' + $.param({ 'TEST': 'a b+c' });
-       assert.strictEqual( mw.util.getParamValue( 'TEST', url3 ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' );
-
-       var url4 = 'example.org?' + $.param({ 'TEST': 'a b+c d' }); // check for sloppy code from r95332 :)
-       assert.strictEqual( mw.util.getParamValue( 'TEST', url4 ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' );
-});
-
-QUnit.test( 'tooltipAccessKey', 3, function ( assert ) {
-       assert.equal( typeof mw.util.tooltipAccessKeyPrefix, 'string', 'mw.util.tooltipAccessKeyPrefix must be a string' );
-       assert.ok( mw.util.tooltipAccessKeyRegexp instanceof RegExp, 'mw.util.tooltipAccessKeyRegexp instance of RegExp' );
-       assert.ok( mw.util.updateTooltipAccessKeys, 'mw.util.updateTooltipAccessKeys' );
-});
-
-QUnit.test( '$content', 2, function ( assert ) {
-       assert.ok( mw.util.$content instanceof jQuery, 'mw.util.$content instance of jQuery' );
-       assert.strictEqual( mw.util.$content.length, 1, 'mw.util.$content must have length of 1' );
-});
-
-
-/**
- * Portlet names are prefixed with 'p-test' to avoid conflict with core
- * when running the test suite under a wiki page.
- * Previously, test elements where invisible to the selector since only
- * one element can have a given id.
- */
-QUnit.test( 'addPortletLink', 8, function ( assert ) {
-       var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo;
-       pTestTb = '\
-       <div class="portlet" id="p-test-tb">\
-               <h5>Toolbox</h5>\
-               <ul class="body"></ul>\
-       </div>';
-       pCustom = '\
-       <div class="portlet" id="p-test-custom">\
-               <h5>Views</h5>\
-               <ul class="body">\
-                       <li id="c-foo"><a href="#">Foo</a></li>\
-                       <li id="c-barmenu">\
-                               <ul>\
-                                       <li id="c-bar-baz"><a href="#">Baz</a></a>\
-                               </ul>\
-                       </li>\
-               </ul>\
-       </div>';
-       vectorTabs = '\
-       <div id="p-test-views" class="vectorTabs">\
-               <h5>Views</h5>\
-               <ul></ul>\
-       </div>';
-
-       $( '#qunit-fixture' ).append( pTestTb, pCustom, vectorTabs );
-
-       tbRL = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/ResourceLoader',
-               'ResourceLoader', 't-rl', 'More info about ResourceLoader on MediaWiki.org ', 'l' );
-
-       assert.ok( $.isDomElement( tbRL ), 'addPortletLink returns a valid DOM Element according to $.isDomElement' );
-
-       tbMW = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/',
-               'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org ', 'm', tbRL );
-       $tbMW = $( tbMW );
-
-
-       assert.equal( $tbMW.attr( 'id' ), 't-mworg', 'Link has correct ID set' );
-       assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
-       assert.equal( $tbMW.next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing nextnode)' );
-
-       cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux' );
-       $cuQuux = $(cuQuux);
-
-       assert.equal(
-               $( '#p-test-custom #c-barmenu ul li' ).length,
-               1,
-               'addPortletLink did not add the item to all <ul> elements in the portlet (bug 35082)'
-       );
-
-       tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
-               'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
-
-       assert.equal( $( tbRLDM ).next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing CSS selector)' );
-
-       caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
-
-       assert.strictEqual( $tbMW.find( 'span').length, 0, 'No <span> element should be added for porlets without vectorTabs class.' );
-       assert.strictEqual( $( caFoo ).find( 'span').length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
-});
-
-QUnit.test( 'jsMessage', 1, function ( assert ) {
-       var a = mw.util.jsMessage( "MediaWiki is <b>Awesome</b>." );
-       assert.ok( a, 'Basic checking of return value' );
-
-       // Clean up
-       $( '#mw-js-message' ).remove();
-});
-
-QUnit.test( 'validateEmail', 6, function ( assert ) {
-       assert.strictEqual( mw.util.validateEmail( "" ), null, 'Should return null for empty string ' );
-       assert.strictEqual( mw.util.validateEmail( "user@localhost" ), true, 'Return true for a valid e-mail address' );
-
-       // testEmailWithCommasAreInvalids
-       assert.strictEqual( mw.util.validateEmail( "user,foo@example.org" ), false, 'Emails with commas are invalid' );
-       assert.strictEqual( mw.util.validateEmail( "userfoo@ex,ample.org" ), false, 'Emails with commas are invalid' );
-
-       // testEmailWithHyphens
-       assert.strictEqual( mw.util.validateEmail( "user-foo@example.org" ), true, 'Emails may contain a hyphen' );
-       assert.strictEqual( mw.util.validateEmail( "userfoo@ex-ample.org" ), true, 'Emails may contain a hyphen' );
-});
-
-QUnit.test( 'isIPv6Address', 40, function ( assert ) {
-       // Shortcuts
-       function assertFalseIPv6( addy, summary ) {
-               return assert.strictEqual( mw.util.isIPv6Address( addy ), false, summary );
-       }
-       function assertTrueIPv6( addy, summary ) {
-               return assert.strictEqual( mw.util.isIPv6Address( addy ), true, summary );
-       }
-
-       // Based on IPTest.php > testisIPv6
-       assertFalseIPv6( ':fc:100::', 'IPv6 starting with lone ":"' );
-       assertFalseIPv6( 'fc:100:::', 'IPv6 ending with a ":::"' );
-       assertFalseIPv6( 'fc:300', 'IPv6 with only 2 words' );
-       assertFalseIPv6( 'fc:100:300', 'IPv6 with only 3 words' );
-
-       $.each(
-       ['fc:100::',
-       'fc:100:a::',
-       'fc:100:a:d::',
-       'fc:100:a:d:1::',
-       'fc:100:a:d:1:e::',
-       'fc:100:a:d:1:e:ac::'], function ( i, addy ){
-               assertTrueIPv6( addy, addy + ' is a valid IP' );
+               assert.strictEqual( $toggleLink.length, 1, 'Toggle link is appended to the page.' );
+
+               actionA();
        });
 
-       assertFalseIPv6( 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"' );
-       assertFalseIPv6( 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"' );
-
-       assertFalseIPv6( ':::' );
-       assertFalseIPv6( '::0:', 'IPv6 ending in a lone ":"' );
-
-       assertTrueIPv6( '::', 'IPv6 zero address' );
-       $.each(
-       ['::0',
-       '::fc',
-       '::fc:100',
-       '::fc:100:a',
-       '::fc:100:a:d',
-       '::fc:100:a:d:1',
-       '::fc:100:a:d:1:e',
-       '::fc:100:a:d:1:e:ac',
-
-       'fc:100:a:d:1:e:ac:0'], function ( i, addy ){
-               assertTrueIPv6( addy, addy + ' is a valid IP' );
+       QUnit.test( 'getParamValue', 5, function ( assert ) {
+               var     url;
+
+               url = 'http://example.org/?foo=wrong&foo=right#&foo=bad';
+               assert.equal( mw.util.getParamValue( 'foo', url ), 'right', 'Use latest one, ignore hash' );
+               assert.strictEqual( mw.util.getParamValue( 'bar', url ), null, 'Return null when not found' );
+
+               url = 'http://example.org/#&foo=bad';
+               assert.strictEqual( mw.util.getParamValue( 'foo', url ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' );
+
+               url = 'example.org?' + $.param({ 'TEST': 'a b+c' });
+               assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' );
+
+               url = 'example.org?' + $.param({ 'TEST': 'a b+c d' }); // check for sloppy code from r95332 :)
+               assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' );
+       });
+
+       QUnit.test( 'tooltipAccessKey', 3, function ( assert ) {
+               assert.equal( typeof mw.util.tooltipAccessKeyPrefix, 'string', 'mw.util.tooltipAccessKeyPrefix must be a string' );
+               assert.ok( mw.util.tooltipAccessKeyRegexp instanceof RegExp, 'mw.util.tooltipAccessKeyRegexp instance of RegExp' );
+               assert.ok( mw.util.updateTooltipAccessKeys, 'mw.util.updateTooltipAccessKeys' );
+       });
+
+       QUnit.test( '$content', 2, function ( assert ) {
+               assert.ok( mw.util.$content instanceof jQuery, 'mw.util.$content instance of jQuery' );
+               assert.strictEqual( mw.util.$content.length, 1, 'mw.util.$content must have length of 1' );
+       });
+
+
+       /**
+        * Portlet names are prefixed with 'p-test' to avoid conflict with core
+        * when running the test suite under a wiki page.
+        * Previously, test elements where invisible to the selector since only
+        * one element can have a given id.
+        */
+       QUnit.test( 'addPortletLink', 8, function ( assert ) {
+               var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo;
+
+               pTestTb = '\
+               <div class="portlet" id="p-test-tb">\
+                       <h5>Toolbox</h5>\
+                       <ul class="body"></ul>\
+               </div>';
+               pCustom = '\
+               <div class="portlet" id="p-test-custom">\
+                       <h5>Views</h5>\
+                       <ul class="body">\
+                               <li id="c-foo"><a href="#">Foo</a></li>\
+                               <li id="c-barmenu">\
+                                       <ul>\
+                                               <li id="c-bar-baz"><a href="#">Baz</a></a>\
+                                       </ul>\
+                               </li>\
+                       </ul>\
+               </div>';
+               vectorTabs = '\
+               <div id="p-test-views" class="vectorTabs">\
+                       <h5>Views</h5>\
+                       <ul></ul>\
+               </div>';
+
+               $( '#qunit-fixture' ).append( pTestTb, pCustom, vectorTabs );
+
+               tbRL = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/ResourceLoader',
+                       'ResourceLoader', 't-rl', 'More info about ResourceLoader on MediaWiki.org ', 'l' );
+
+               assert.ok( $.isDomElement( tbRL ), 'addPortletLink returns a valid DOM Element according to $.isDomElement' );
+
+               tbMW = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/',
+                       'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org ', 'm', tbRL );
+               $tbMW = $( tbMW );
+
+
+               assert.equal( $tbMW.attr( 'id' ), 't-mworg', 'Link has correct ID set' );
+               assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
+               assert.equal( $tbMW.next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing nextnode)' );
+
+               cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux' );
+               $cuQuux = $(cuQuux);
+
+               assert.equal(
+                       $( '#p-test-custom #c-barmenu ul li' ).length,
+                       1,
+                       'addPortletLink did not add the item to all <ul> elements in the portlet (bug 35082)'
+               );
+
+               tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+                       'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
+
+               assert.equal( $( tbRLDM ).next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing CSS selector)' );
+
+               caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
+
+               assert.strictEqual( $tbMW.find( 'span').length, 0, 'No <span> element should be added for porlets without vectorTabs class.' );
+               assert.strictEqual( $( caFoo ).find( 'span').length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
        });
 
-       assertFalseIPv6( '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
-       assertFalseIPv6( '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
-
-       assertFalseIPv6( ':fc::100', 'IPv6 starting with lone ":"' );
-       assertFalseIPv6( 'fc::100:', 'IPv6 ending with lone ":"' );
-       assertFalseIPv6( 'fc:::100', 'IPv6 with ":::" in the middle' );
-
-       assertTrueIPv6( 'fc::100', 'IPv6 with "::" and 2 words' );
-       assertTrueIPv6( 'fc::100:a', 'IPv6 with "::" and 3 words' );
-       assertTrueIPv6( 'fc::100:a:d', 'IPv6 with "::" and 4 words' );
-       assertTrueIPv6( 'fc::100:a:d:1', 'IPv6 with "::" and 5 words' );
-       assertTrueIPv6( 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' );
-       assertTrueIPv6( 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' );
-       assertTrueIPv6( '2001::df', 'IPv6 with "::" and 2 words' );
-       assertTrueIPv6( '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' );
-       assertTrueIPv6( '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' );
-
-       assertFalseIPv6( 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
-       assertFalseIPv6( 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
-});
-
-QUnit.test( 'isIPv4Address', 11, function ( assert ) {
-       // Shortcuts
-       function assertFalseIPv4( addy, summary ) {
-               assert.strictEqual( mw.util.isIPv4Address( addy ), false, summary );
-       }
-       function assertTrueIPv4( addy, summary ) {
-               assert.strictEqual( mw.util.isIPv4Address( addy ), true, summary );
-       }
-
-       // Based on IPTest.php > testisIPv4
-       assertFalseIPv4( false, 'Boolean false is not an IP' );
-       assertFalseIPv4( true, 'Boolean true is not an IP' );
-       assertFalseIPv4( '', 'Empty string is not an IP' );
-       assertFalseIPv4( 'abc', '"abc" is not an IP' );
-       assertFalseIPv4( ':', 'Colon is not an IP' );
-       assertFalseIPv4( '124.24.52', 'IPv4 not enough quads' );
-       assertFalseIPv4( '24.324.52.13', 'IPv4 out of range' );
-       assertFalseIPv4( '.24.52.13', 'IPv4 starts with period' );
-
-       assertTrueIPv4( '124.24.52.13', '124.24.52.134 is a valid IP' );
-       assertTrueIPv4( '1.24.52.13', '1.24.52.13 is a valid IP' );
-       assertFalseIPv4( '74.24.52.13/20', 'IPv4 ranges are not recogzized as valid IPs' );
-});
+       QUnit.test( 'jsMessage', 1, function ( assert ) {
+               var a = mw.util.jsMessage( 'MediaWiki is <b>Awesome</b>.' );
+               assert.ok( a, 'Basic checking of return value' );
+
+               // Clean up
+               $( '#mw-js-message' ).remove();
+       });
+
+       QUnit.test( 'validateEmail', 6, function ( assert ) {
+               assert.strictEqual( mw.util.validateEmail( '' ), null, 'Should return null for empty string ' );
+               assert.strictEqual( mw.util.validateEmail( 'user@localhost' ), true, 'Return true for a valid e-mail address' );
+
+               // testEmailWithCommasAreInvalids
+               assert.strictEqual( mw.util.validateEmail( 'user,foo@example.org' ), false, 'Emails with commas are invalid' );
+               assert.strictEqual( mw.util.validateEmail( 'userfoo@ex,ample.org' ), false, 'Emails with commas are invalid' );
+
+               // testEmailWithHyphens
+               assert.strictEqual( mw.util.validateEmail( 'user-foo@example.org' ), true, 'Emails may contain a hyphen' );
+               assert.strictEqual( mw.util.validateEmail( 'userfoo@ex-ample.org' ), true, 'Emails may contain a hyphen' );
+       });
+
+       QUnit.test( 'isIPv6Address', 40, function ( assert ) {
+               // Shortcuts
+               function assertFalseIPv6( addy, summary ) {
+                       return assert.strictEqual( mw.util.isIPv6Address( addy ), false, summary );
+               }
+               function assertTrueIPv6( addy, summary ) {
+                       return assert.strictEqual( mw.util.isIPv6Address( addy ), true, summary );
+               }
+
+               // Based on IPTest.php > testisIPv6
+               assertFalseIPv6( ':fc:100::', 'IPv6 starting with lone ":"' );
+               assertFalseIPv6( 'fc:100:::', 'IPv6 ending with a ":::"' );
+               assertFalseIPv6( 'fc:300', 'IPv6 with only 2 words' );
+               assertFalseIPv6( 'fc:100:300', 'IPv6 with only 3 words' );
+
+               $.each(
+               ['fc:100::',
+               'fc:100:a::',
+               'fc:100:a:d::',
+               'fc:100:a:d:1::',
+               'fc:100:a:d:1:e::',
+               'fc:100:a:d:1:e:ac::'], function ( i, addy ){
+                       assertTrueIPv6( addy, addy + ' is a valid IP' );
+               });
+
+               assertFalseIPv6( 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"' );
+               assertFalseIPv6( 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"' );
+
+               assertFalseIPv6( ':::' );
+               assertFalseIPv6( '::0:', 'IPv6 ending in a lone ":"' );
+
+               assertTrueIPv6( '::', 'IPv6 zero address' );
+               $.each(
+               ['::0',
+               '::fc',
+               '::fc:100',
+               '::fc:100:a',
+               '::fc:100:a:d',
+               '::fc:100:a:d:1',
+               '::fc:100:a:d:1:e',
+               '::fc:100:a:d:1:e:ac',
+
+               'fc:100:a:d:1:e:ac:0'], function ( i, addy ){
+                       assertTrueIPv6( addy, addy + ' is a valid IP' );
+               });
+
+               assertFalseIPv6( '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
+               assertFalseIPv6( '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
+
+               assertFalseIPv6( ':fc::100', 'IPv6 starting with lone ":"' );
+               assertFalseIPv6( 'fc::100:', 'IPv6 ending with lone ":"' );
+               assertFalseIPv6( 'fc:::100', 'IPv6 with ":::" in the middle' );
+
+               assertTrueIPv6( 'fc::100', 'IPv6 with "::" and 2 words' );
+               assertTrueIPv6( 'fc::100:a', 'IPv6 with "::" and 3 words' );
+               assertTrueIPv6( 'fc::100:a:d', 'IPv6 with "::" and 4 words' );
+               assertTrueIPv6( 'fc::100:a:d:1', 'IPv6 with "::" and 5 words' );
+               assertTrueIPv6( 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' );
+               assertTrueIPv6( 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' );
+               assertTrueIPv6( '2001::df', 'IPv6 with "::" and 2 words' );
+               assertTrueIPv6( '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' );
+               assertTrueIPv6( '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' );
+
+               assertFalseIPv6( 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
+               assertFalseIPv6( 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
+       });
+
+       QUnit.test( 'isIPv4Address', 11, function ( assert ) {
+               // Shortcuts
+               function assertFalseIPv4( addy, summary ) {
+                       assert.strictEqual( mw.util.isIPv4Address( addy ), false, summary );
+               }
+               function assertTrueIPv4( addy, summary ) {
+                       assert.strictEqual( mw.util.isIPv4Address( addy ), true, summary );
+               }
+
+               // Based on IPTest.php > testisIPv4
+               assertFalseIPv4( false, 'Boolean false is not an IP' );
+               assertFalseIPv4( true, 'Boolean true is not an IP' );
+               assertFalseIPv4( '', 'Empty string is not an IP' );
+               assertFalseIPv4( 'abc', '"abc" is not an IP' );
+               assertFalseIPv4( ':', 'Colon is not an IP' );
+               assertFalseIPv4( '124.24.52', 'IPv4 not enough quads' );
+               assertFalseIPv4( '24.324.52.13', 'IPv4 out of range' );
+               assertFalseIPv4( '.24.52.13', 'IPv4 starts with period' );
+
+               assertTrueIPv4( '124.24.52.13', '124.24.52.134 is a valid IP' );
+               assertTrueIPv4( '1.24.52.13', '1.24.52.13 is a valid IP' );
+               assertFalseIPv4( '74.24.52.13/20', 'IPv4 ranges are not recogzized as valid IPs' );
+       });
+}( mediaWiki, jQuery ) );
index 4b2e923..f1eb833 100644 (file)
@@ -275,7 +275,7 @@ class DbTestRecorder extends DbTestPreviewer  {
         * and all that fun stuff
         */
        function start() {
-               $this->db->begin();
+               $this->db->begin( __METHOD__ );
 
                if ( ! $this->db->tableExists( 'testrun' )
                        || ! $this->db->tableExists( 'testitem' ) )
index b0d72f3..f59ee0f 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -35,9 +35,10 @@ if ( defined( 'THUMB_HANDLER' ) ) {
        // Called from thumb_handler.php via 404; extract params from the URI...
        wfThumbHandle404();
 } else {
-       // Called directly, use $_REQUEST params
+       // Called directly, use $_GET params
        wfThumbHandleRequest();
 }
+
 wfLogProfilingData();
 
 //--------------------------------------------------------------------------
@@ -49,8 +50,8 @@ wfLogProfilingData();
  */
 function wfThumbHandleRequest() {
        $params = get_magic_quotes_gpc()
-               ? array_map( 'stripslashes', $_REQUEST )
-               : $_REQUEST;
+               ? array_map( 'stripslashes', $_GET )
+               : $_GET;
 
        wfStreamThumb( $params ); // stream the thumbnail
 }
@@ -61,28 +62,21 @@ function wfThumbHandleRequest() {
  * @return void
  */
 function wfThumbHandle404() {
-       # lighttpd puts the original request in REQUEST_URI, while sjs sets
-       # that to the 404 handler, and puts the original request in REDIRECT_URL.
-       if ( isset( $_SERVER['REDIRECT_URL'] ) ) {
-               # The URL is un-encoded, so put it back how it was
-               $uriPath = str_replace( "%2F", "/", urlencode( $_SERVER['REDIRECT_URL'] ) );
-       } else {
-               $uriPath = $_SERVER['REQUEST_URI'];
-       }
-       # Just get the URI path (REDIRECT_URL/REQUEST_URI is either a full URL or a path)
-       if ( substr( $uriPath, 0, 1 ) !== '/' ) {
-               $bits = wfParseUrl( $uriPath );
-               if ( $bits && isset( $bits['path'] ) ) {
-                       $uriPath = $bits['path'];
-               } else {
-                       wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
-                       return;
-               }
+       global $wgArticlePath;
+
+       # Set action base paths so that WebRequest::getPathInfo()
+       # recognizes the "X" as the 'title' in ../thumb_handler.php/X urls.
+       $wgArticlePath = false; # Don't let a "/*" article path clober our action path
+
+       $matches = WebRequest::getPathInfo();
+       if ( !isset( $matches['title'] ) ) {
+               wfThumbError( 404, 'Could not determine the name of the requested thumbnail.' );
+               return;
        }
 
-       $params = wfExtractThumbParams( $uriPath ); // basic wiki URL param extracting
+       $params = wfExtractThumbParams( $matches['title'] ); // basic wiki URL param extracting
        if ( $params == null ) {
-               wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
+               wfThumbError( 400, 'The specified thumbnail parameters are not recognized.' );
                return;
        }
 
@@ -97,6 +91,7 @@ function wfThumbHandle404() {
  */
 function wfStreamThumb( array $params ) {
        global $wgVaryOnXFP;
+
        wfProfileIn( __METHOD__ );
 
        $headers = array(); // HTTP headers to send
@@ -178,9 +173,7 @@ function wfStreamThumb( array $params ) {
                wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
                wfProfileOut( __METHOD__ );
                return;
-       }
-       $sourcePath = $img->getPath();
-       if ( $sourcePath === false ) {
+       } elseif ( $img->getPath() === false ) {
                wfThumbError( 500, 'The source file is not locally accessible.' );
                wfProfileOut( __METHOD__ );
                return;
@@ -195,74 +188,75 @@ function wfStreamThumb( array $params ) {
                wfSuppressWarnings();
                $imsUnix = strtotime( $imsString );
                wfRestoreWarnings();
-               $sourceTsUnix = wfTimestamp( TS_UNIX, $img->getTimestamp() );
-               if ( $sourceTsUnix <= $imsUnix ) {
+               if ( wfTimestamp( TS_UNIX, $img->getTimestamp() ) <= $imsUnix ) {
                        header( 'HTTP/1.1 304 Not Modified' );
                        wfProfileOut( __METHOD__ );
                        return;
                }
        }
 
-       $thumbName = $img->thumbName( $params );
-       if ( !strlen( $thumbName ) ) { // invalid params?
-               wfThumbError( 400, 'The specified thumbnail parameters are not valid.' );
+       // Get the normalized thumbnail name from the parameters...
+       try {
+               $thumbName = $img->thumbName( $params );
+               if ( !strlen( $thumbName ) ) { // invalid params?
+                       wfThumbError( 400, 'The specified thumbnail parameters are not valid.' );
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+               $thumbName2 = $img->thumbName( $params, File::THUMB_FULL_NAME ); // b/c; "long" style
+       } catch ( MWException $e ) {
+               wfThumbError( 500, $e->getHTML() );
                wfProfileOut( __METHOD__ );
                return;
        }
 
-       $disposition = $img->getThumbDisposition( $thumbName );
-       $headers[] = "Content-Disposition: $disposition";
-
-       // Stream the file if it exists already...
-       try {
-               $thumbName2 = $img->thumbName( $params, File::THUMB_FULL_NAME ); // b/c; "long" style
-               // For 404 handled thumbnails, we only use the the base name of the URI
-               // for the thumb params and the parent directory for the source file name.
-               // Check that the zone relative path matches up so squid caches won't pick
-               // up thumbs that would not be purged on source file deletion (bug 34231).
-               if ( isset( $params['rel404'] ) ) { // thumbnail was handled via 404
-                       if ( urldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName ) ) {
-                               // Request for the canonical thumbnail name
-                       } elseif ( urldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName2 ) ) {
-                               // Request for the "long" thumbnail name; redirect to canonical name
-                               $response = RequestContext::getMain()->getRequest()->response();
-                               $response->header( "HTTP/1.1 301 " . HttpStatus::getMessage( 301 ) );
-                               $response->header( 'Location: ' . wfExpandUrl( $img->getThumbUrl( $thumbName ), PROTO_CURRENT ) );
-                               $response->header( 'Expires: ' .
-                                       gmdate( 'D, d M Y H:i:s', time() + 7*86400 ) . ' GMT' );
-                               if ( $wgVaryOnXFP ) {
-                                       $varyHeader[] = 'X-Forwarded-Proto';
-                               }
-                               if ( count( $varyHeader ) ) {
-                                       $response->header( 'Vary: ' . implode( ', ', $varyHeader ) );
-                               }
-                               wfProfileOut( __METHOD__ );
-                               return;
-                       } else {
-                               wfThumbError( 404, 'The given path of the specified thumbnail is incorrect.' );
-                               wfProfileOut( __METHOD__ );
-                               return;
+       // For 404 handled thumbnails, we only use the the base name of the URI
+       // for the thumb params and the parent directory for the source file name.
+       // Check that the zone relative path matches up so squid caches won't pick
+       // up thumbs that would not be purged on source file deletion (bug 34231).
+       if ( isset( $params['rel404'] ) ) { // thumbnail was handled via 404
+               if ( rawurldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName ) ) {
+                       // Request for the canonical thumbnail name
+               } elseif ( rawurldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName2 ) ) {
+                       // Request for the "long" thumbnail name; redirect to canonical name
+                       $response = RequestContext::getMain()->getRequest()->response();
+                       $response->header( "HTTP/1.1 301 " . HttpStatus::getMessage( 301 ) );
+                       $response->header( 'Location: ' .
+                               wfExpandUrl( $img->getThumbUrl( $thumbName ), PROTO_CURRENT ) );
+                       $response->header( 'Expires: ' .
+                               gmdate( 'D, d M Y H:i:s', time() + 7*86400 ) . ' GMT' );
+                       if ( $wgVaryOnXFP ) {
+                               $varyHeader[] = 'X-Forwarded-Proto';
                        }
-               }
-               $thumbPath = $img->getThumbPath( $thumbName );
-               if ( $img->getRepo()->fileExists( $thumbPath ) ) {
                        if ( count( $varyHeader ) ) {
-                               $headers[] = 'Vary: ' . implode( ', ', $varyHeader );
+                               $response->header( 'Vary: ' . implode( ', ', $varyHeader ) );
                        }
-                       $img->getRepo()->streamFile( $thumbPath, $headers );
+                       wfProfileOut( __METHOD__ );
+                       return;
+               } else {
+                       wfThumbError( 404, "The given path of the specified thumbnail is incorrect;
+                               expected '" . $img->getThumbRel( $thumbName ) . "' but got '" .
+                               rawurldecode( $params['rel404'] ) . "'." );
                        wfProfileOut( __METHOD__ );
                        return;
                }
-       } catch ( MWException $e ) {
-               wfThumbError( 500, $e->getHTML() );
-               wfProfileOut( __METHOD__ );
-               return;
        }
 
+       // Suggest a good name for users downloading this thumbnail
+       $headers[] = "Content-Disposition: {$img->getThumbDisposition( $thumbName )}";
+
        if ( count( $varyHeader ) ) {
                $headers[] = 'Vary: ' . implode( ', ', $varyHeader );
        }
 
+       // Stream the file if it exists already...
+       $thumbPath = $img->getThumbPath( $thumbName );
+       if ( $img->getRepo()->fileExists( $thumbPath ) ) {
+               $img->getRepo()->streamFile( $thumbPath, $headers );
+               wfProfileOut( __METHOD__ );
+               return;
+       }
+
        // Thumbnail isn't already there, so create the new thumbnail...
        try {
                $thumb = $img->transform( $params, File::RENDER_NOW );
@@ -299,43 +293,28 @@ function wfStreamThumb( array $params ) {
  * Extract the required params for thumb.php from the thumbnail request URI.
  * At least 'width' and 'f' should be set if the result is an array.
  *
- * @param $uriPath String Thumbnail request URI path
+ * @param $thumbRel String Thumbnail path relative to the thumb zone
  * @return Array|null associative params array or null
  */
-function wfExtractThumbParams( $uriPath ) {
+function wfExtractThumbParams( $thumbRel ) {
        $repo = RepoGroup::singleton()->getLocalRepo();
 
-       // Zone URL might be relative ("/images") or protocol-relative ("//lang.site/image")
-       $zoneUriPath = $repo->getZoneHandlerUrl( 'thumb' )
-               ? $repo->getZoneHandlerUrl( 'thumb' ) // custom URL
-               : $repo->getZoneUrl( 'thumb' ); // default to main URL
-       $bits = wfParseUrl( wfExpandUrl( $zoneUriPath, PROTO_INTERNAL ) );
-       if ( $bits && isset( $bits['path'] ) ) {
-               $zoneUriPath = $bits['path'];
-       } else {
-               return null; // not a valid thumbnail URL
-       }
-
        $hashDirReg = $subdirReg = '';
        for ( $i = 0; $i < $repo->getHashLevels(); $i++ ) {
                $subdirReg .= '[0-9a-f]';
                $hashDirReg .= "$subdirReg/";
        }
-       $zoneReg = preg_quote( $zoneUriPath ); // regex for thumb zone URI
 
        // Check if this is a thumbnail of an original in the local file repo
-       if ( preg_match( "!^$zoneReg/((archive/)?$hashDirReg([^/]*)/([^/]*))$!", $uriPath, $m ) ) {
+       if ( preg_match( "!^((archive/)?$hashDirReg([^/]*)/([^/]*))$!", $thumbRel, $m ) ) {
                list( /*all*/, $rel, $archOrTemp, $filename, $thumbname ) = $m;
        // Check if this is a thumbnail of an temp file in the local file repo
-       } elseif ( preg_match( "!^$zoneReg/(temp/)($hashDirReg([^/]*)/([^/]*))$!", $uriPath, $m ) ) {
+       } elseif ( preg_match( "!^(temp/)($hashDirReg([^/]*)/([^/]*))$!", $thumbRel, $m ) ) {
                list( /*all*/, $archOrTemp, $rel, $filename, $thumbname ) = $m;
        } else {
                return null; // not a valid looking thumbnail request
        }
 
-       $filename = urldecode( $filename );
-       $thumbname = urldecode( $thumbname );
-
        $params = array( 'f' => $filename, 'rel404' => $rel );
        if ( $archOrTemp === 'archive/' ) {
                $params['archived'] = 1;